UNPKG

@slowvoid.dev/express

Version:

node decorators - decorators for express library

69 lines 8.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.errorMiddlewareHandler = exports.ERROR_MIDDLEWARE = exports.middlewareHandler = void 0; const di_1 = require("@slowvoid.dev/di"); const container_1 = require("./container"); /** * Create request middleware handler that uses class or function provided as middleware */ function middlewareHandler(middleware) { return (req, res, next) => { invokeMiddleware(middleware, [req, res, next]).catch(next); }; } exports.middlewareHandler = middlewareHandler; /** * Error Middleware class registration DI token */ exports.ERROR_MIDDLEWARE = new di_1.InjectionToken('ERROR_MIDDLEWARE'); /** * Add error middleware to the app */ function errorMiddlewareHandler() { return (error, req, res, next) => { invokeMiddleware(exports.ERROR_MIDDLEWARE, [error, req, res, next]).catch(next); }; } exports.errorMiddlewareHandler = errorMiddlewareHandler; /** * Instantiate middleware and invoke it with arguments */ async function invokeMiddleware(middleware, args) { var _a; const next = args[args.length - 1]; try { const instance = await getMiddlewareInstance(middleware); if (!instance) { return next(); } const handler = (_a = instance === null || instance === void 0 ? void 0 : instance.use) !== null && _a !== void 0 ? _a : instance; const result = typeof handler === 'function' ? handler.apply(instance, args) : instance; if (result instanceof Promise) { result.catch(next); } } catch (err) { next(err); } } async function getMiddlewareInstance(middleware) { var _a, _b; try { if (!container_1.Container.has(middleware) && ((_a = middleware.prototype) === null || _a === void 0 ? void 0 : _a.use)) { container_1.Container.provide([{ provide: middleware, useClass: middleware, }]); } return await container_1.Container.get(middleware); } catch (e) { if (typeof middleware === 'function') { return ((_b = middleware.prototype) === null || _b === void 0 ? void 0 : _b.use) ? new middleware() : middleware; } return null; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlDQUFrRDtBQUVsRCwyQ0FBd0M7QUFleEM7O0dBRUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxVQUFzQjtJQUN0RCxPQUFPLENBQUMsR0FBWSxFQUFFLEdBQWEsRUFBRSxJQUFrQixFQUFFLEVBQUU7UUFDekQsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBSkQsOENBSUM7QUFFRDs7R0FFRztBQUNVLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxtQkFBYyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFdkU7O0dBRUc7QUFDSCxTQUFnQixzQkFBc0I7SUFDcEMsT0FBTyxDQUFDLEtBQVksRUFBRSxHQUFZLEVBQUUsR0FBYSxFQUFFLElBQWtCLEVBQUUsRUFBRTtRQUN2RSxnQkFBZ0IsQ0FBQyx3QkFBZ0IsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFFLENBQUMsQ0FBQztBQUNKLENBQUM7QUFKRCx3REFJQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLGdCQUFnQixDQUM3QixVQUF5RCxFQUN6RCxJQUEwRTs7SUFFMUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFpQixDQUFDO0lBRW5ELElBQUk7UUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPLElBQUksRUFBRSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFDLFFBQW1ELGFBQW5ELFFBQVEsdUJBQVIsUUFBUSxDQUE2QyxHQUFHLG1DQUFJLFFBQVEsQ0FBQztRQUN0RixNQUFNLE1BQU0sR0FBRyxPQUFPLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFeEYsSUFBSSxNQUFNLFlBQVksT0FBTyxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEI7S0FDRjtJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1g7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLHFCQUFxQixDQUFDLFVBQXlEOztJQUM1RixJQUFJO1FBQ0YsSUFBSSxDQUFDLHFCQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFJLE1BQUMsVUFBbUIsQ0FBQyxTQUFTLDBDQUFFLEdBQUcsQ0FBQSxFQUFFO1lBQ3JFLHFCQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ2pCLE9BQU8sRUFBRSxVQUFVO29CQUNuQixRQUFRLEVBQUUsVUFBa0I7aUJBQzdCLENBQUMsQ0FBQyxDQUFDO1NBQ0w7UUFFRCxPQUFPLE1BQU0scUJBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDeEM7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLElBQUksT0FBTyxVQUFVLEtBQUssVUFBVSxFQUFFO1lBQ3BDLE9BQU8sQ0FBQSxNQUFBLFVBQVUsQ0FBQyxTQUFTLDBDQUFFLEdBQUc7Z0JBQzlCLENBQUMsQ0FBQyxJQUFLLFVBQTJELEVBQUU7Z0JBQ3BFLENBQUMsQ0FBQyxVQUFVLENBQUM7U0FDaEI7UUFFRCxPQUFPLElBQUksQ0FBQztLQUNiO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24sIFJlcXVlc3RIYW5kbGVyLCBFcnJvclJlcXVlc3RIYW5kbGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCJAc2xvd3ZvaWQuZGV2L2RpXCI7XG5cbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gJy4vY29udGFpbmVyJztcbmltcG9ydCB7IFR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZUZ1bmN0aW9uID0gKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB2b2lkO1xuZXhwb3J0IGludGVyZmFjZSBNaWRkbGV3YXJlQ2xhc3Mge1xuICB1c2U6IE1pZGRsZXdhcmVGdW5jdGlvbjtcbn1cbmV4cG9ydCB0eXBlIE1pZGRsZXdhcmUgPSBNaWRkbGV3YXJlRnVuY3Rpb24gfCBUeXBlPE1pZGRsZXdhcmVDbGFzcz47XG5cbmV4cG9ydCB0eXBlIEVycm9yTWlkZGxld2FyZUZ1bmN0aW9uID0gKGVycm9yOiBFcnJvciwgcmVxdWVzdDogUmVxdWVzdCwgcmVzcG9uc2U6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHZvaWQ7XG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTWlkZGxld2FyZUNsYXNzIHtcbiAgdXNlOiBFcnJvck1pZGRsZXdhcmVGdW5jdGlvbjtcbn1cbmV4cG9ydCB0eXBlIEVycm9yTWlkZGxld2FyZSA9IEVycm9yTWlkZGxld2FyZUZ1bmN0aW9uIHwgVHlwZTxFcnJvck1pZGRsZXdhcmVDbGFzcz47XG5cbi8qKlxuICogQ3JlYXRlIHJlcXVlc3QgbWlkZGxld2FyZSBoYW5kbGVyIHRoYXQgdXNlcyBjbGFzcyBvciBmdW5jdGlvbiBwcm92aWRlZCBhcyBtaWRkbGV3YXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlSGFuZGxlcihtaWRkbGV3YXJlOiBNaWRkbGV3YXJlKTogUmVxdWVzdEhhbmRsZXIge1xuICByZXR1cm4gKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgaW52b2tlTWlkZGxld2FyZShtaWRkbGV3YXJlLCBbcmVxLCByZXMsIG5leHRdKS5jYXRjaChuZXh0KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBFcnJvciBNaWRkbGV3YXJlIGNsYXNzIHJlZ2lzdHJhdGlvbiBESSB0b2tlblxuICovXG5leHBvcnQgY29uc3QgRVJST1JfTUlERExFV0FSRSA9IG5ldyBJbmplY3Rpb25Ub2tlbignRVJST1JfTUlERExFV0FSRScpO1xuXG4vKipcbiAqIEFkZCBlcnJvciBtaWRkbGV3YXJlIHRvIHRoZSBhcHBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yTWlkZGxld2FyZUhhbmRsZXIoKTogRXJyb3JSZXF1ZXN0SGFuZGxlciB7XG4gIHJldHVybiAoZXJyb3I6IEVycm9yLCByZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgIGludm9rZU1pZGRsZXdhcmUoRVJST1JfTUlERExFV0FSRSwgW2Vycm9yLCByZXEsIHJlcywgbmV4dF0pLmNhdGNoKG5leHQpO1xuICB9O1xufVxuXG4vKipcbiAqIEluc3RhbnRpYXRlIG1pZGRsZXdhcmUgYW5kIGludm9rZSBpdCB3aXRoIGFyZ3VtZW50c1xuICovXG5hc3luYyBmdW5jdGlvbiBpbnZva2VNaWRkbGV3YXJlKFxuICBtaWRkbGV3YXJlOiBJbmplY3Rpb25Ub2tlbiB8IE1pZGRsZXdhcmUgfCBFcnJvck1pZGRsZXdhcmUsXG4gIGFyZ3M6IFBhcmFtZXRlcnM8TWlkZGxld2FyZUZ1bmN0aW9uPiB8IFBhcmFtZXRlcnM8RXJyb3JNaWRkbGV3YXJlRnVuY3Rpb24+LFxuKSB7XG4gIGNvbnN0IG5leHQgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gYXMgTmV4dEZ1bmN0aW9uO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCBnZXRNaWRkbGV3YXJlSW5zdGFuY2UobWlkZGxld2FyZSk7XG5cbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICByZXR1cm4gbmV4dCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoaW5zdGFuY2UgYXMgTWlkZGxld2FyZUNsYXNzIHwgRXJyb3JNaWRkbGV3YXJlQ2xhc3MpPy51c2UgPz8gaW5zdGFuY2U7XG4gICAgY29uc3QgcmVzdWx0ID0gdHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicgPyBoYW5kbGVyLmFwcGx5KGluc3RhbmNlLCBhcmdzKSA6IGluc3RhbmNlO1xuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIHJlc3VsdC5jYXRjaChuZXh0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG5leHQoZXJyKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNaWRkbGV3YXJlSW5zdGFuY2UobWlkZGxld2FyZTogSW5qZWN0aW9uVG9rZW4gfCBNaWRkbGV3YXJlIHwgRXJyb3JNaWRkbGV3YXJlKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFDb250YWluZXIuaGFzKG1pZGRsZXdhcmUpICYmIChtaWRkbGV3YXJlIGFzIFR5cGUpLnByb3RvdHlwZT8udXNlKSB7XG4gICAgICBDb250YWluZXIucHJvdmlkZShbe1xuICAgICAgICBwcm92aWRlOiBtaWRkbGV3YXJlLFxuICAgICAgICB1c2VDbGFzczogbWlkZGxld2FyZSBhcyBUeXBlLFxuICAgICAgfV0pO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBDb250YWluZXIuZ2V0KG1pZGRsZXdhcmUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHR5cGVvZiBtaWRkbGV3YXJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gbWlkZGxld2FyZS5wcm90b3R5cGU/LnVzZVxuICAgICAgICA/IG5ldyAobWlkZGxld2FyZSBhcyBUeXBlPE1pZGRsZXdhcmVDbGFzcyB8IEVycm9yTWlkZGxld2FyZUNsYXNzPikoKVxuICAgICAgICA6IG1pZGRsZXdhcmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==