UNPKG

1.05 kBJavaScriptView Raw
1'use strict';
2
3const { Stream } = require('stream');
4
5const KellnerTransform = require('./KellnerTransform');
6
7class 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 // it is a stream alredy
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
38module.exports = KellnerMiddleware;