1 | 'use strict';
|
2 |
|
3 | const { Stream } = require('stream');
|
4 |
|
5 | const KellnerTransform = require('./KellnerTransform');
|
6 |
|
7 | class KellnerMiddleware extends KellnerTransform {
|
8 | constructor(app, middleware) {
|
9 | super(app);
|
10 | this.middleware = middleware;
|
11 | }
|
12 |
|
13 | _transform(message, encoding, next) {
|
14 | this.middleware(message, (err, msg) => next(err, msg || message));
|
15 | }
|
16 |
|
17 | static wrap(app, middleware) {
|
18 | if (Array.isArray(middleware))
|
19 | return middleware.reduce((concatedMiddleware, md) => {
|
20 | const wrappedMiddleware = KellnerMiddleware.wrap(app, md);
|
21 | return concatedMiddleware ? concatedMiddleware.pipe(wrappedMiddleware) : wrappedMiddleware;
|
22 | }, null);
|
23 |
|
24 | if (KellnerMiddleware.isValid(middleware))
|
25 | throw new TypeError('middleware must to be a function or a stream');
|
26 |
|
27 |
|
28 | if (middleware instanceof Stream)
|
29 | return middleware;
|
30 | return new KellnerMiddleware(app, middleware);
|
31 | }
|
32 |
|
33 | static isValid(middleware) {
|
34 | return typeof middleware === 'function' || middleware instanceof Stream;
|
35 | }
|
36 | }
|
37 |
|
38 | module.exports = KellnerMiddleware;
|