removable-middleware
Version:
A middleware wrapper allowing you to remove and replace the wrapped middleware while the server is running.
40 lines (26 loc) • 817 B
JavaScript
'use const';
module.exports = initialMiddleware => {
if (typeof initialMiddleware !== 'function') {
throw new Error('`replacableMiddleware(initialMiddleware)`: `initialMiddleware` must be a middleware function.');
}
let currentMiddleware = initialMiddleware;
const middleware = (...args) => {
if (currentMiddleware) {
//call the wrapped middleware
currentMiddleware(...args);
} else {
//call the next middleware
args[args.length - 1]();
}
};
middleware.replace = nextMiddleware => {
if (typeof nextMiddleware !== 'function') {
throw new Error('`replacableMiddleware.replace(nextMiddleware)`: `nextMiddleware` must be a middleware function.');
}
currentMiddleware = nextMiddleware;
};
middleware.remove = () => {
currentMiddleware = null;
};
return middleware;
};