express-inject-middleware
Version:
Inject stack of middlewares into given routes or middlewares.
39 lines • 1.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var layer = require("express/lib/router/layer");
function distinctMiddlewaresByReference(middlewares) {
var distinct = [];
middlewares.forEach(function (middleware) {
if (!distinct.some(function (dm) { return dm === middleware; })) {
distinct.push(middleware);
}
});
return distinct;
}
function injectMiddlewaresRecursive(middleware, injectLayers, appCount) {
var stack = middleware.stack || (middleware._router && middleware._router.stack);
stack.forEach(function (layer, index) {
var _a;
if (layer.route) {
if (!(middleware.name === 'app' && index < stack.length - appCount)) {
(_a = layer.route.stack).unshift.apply(_a, injectLayers);
}
}
else if (layer.name === 'router' || layer.name === 'bound dispatch') {
injectMiddlewaresRecursive(layer.handle, injectLayers, appCount);
}
});
}
function injectMiddleware(injectedMiddlewares, groupingMiddlewares) {
var distinctMiddlewares = distinctMiddlewaresByReference(groupingMiddlewares);
var injectLayers = injectedMiddlewares.map(function (i) { return new layer('', {}, i); });
var appCount = groupingMiddlewares.filter(function (m) { return m.name === 'app'; }).length;
distinctMiddlewares.forEach(function (middleware) {
injectMiddlewaresRecursive(middleware, injectLayers, appCount);
});
return (function (req, res, next) {
return next();
});
}
exports.injectMiddleware = injectMiddleware;
//# sourceMappingURL=index.js.map