UNPKG

@decorators/express

Version:

node decorators - decorators for express library

69 lines 8.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.errorMiddlewareHandler = exports.ERROR_MIDDLEWARE = exports.middlewareHandler = void 0; const di_1 = require("@decorators/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; try { if (!container_1.Container.has(middleware) && middleware.prototype.use) { container_1.Container.provide([{ provide: middleware, useClass: middleware, }]); } return await container_1.Container.get(middleware); } catch (e) { if (typeof middleware === 'function') { return ((_a = middleware.prototype) === null || _a === void 0 ? void 0 : _a.use) ? new middleware() : middleware; } return null; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHVDQUFnRDtBQUVoRCwyQ0FBd0M7QUFleEM7O0dBRUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxVQUFzQjtJQUN0RCxPQUFPLENBQUMsR0FBWSxFQUFFLEdBQWEsRUFBRSxJQUFrQixFQUFFLEVBQUU7UUFDekQsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBSkQsOENBSUM7QUFFRDs7R0FFRztBQUNVLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxtQkFBYyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFdkU7O0dBRUc7QUFDSCxTQUFnQixzQkFBc0I7SUFDcEMsT0FBTyxDQUFDLEtBQVksRUFBRSxHQUFZLEVBQUUsR0FBYSxFQUFFLElBQWtCLEVBQUUsRUFBRTtRQUN2RSxnQkFBZ0IsQ0FBQyx3QkFBZ0IsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFFLENBQUMsQ0FBQztBQUNKLENBQUM7QUFKRCx3REFJQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLGdCQUFnQixDQUM3QixVQUF5RCxFQUN6RCxJQUEwRTs7SUFFMUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFpQixDQUFDO0lBRW5ELElBQUk7UUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPLElBQUksRUFBRSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFDLFFBQW1ELGFBQW5ELFFBQVEsdUJBQVIsUUFBUSxDQUE2QyxHQUFHLG1DQUFJLFFBQVEsQ0FBQztRQUN0RixNQUFNLE1BQU0sR0FBRyxPQUFPLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFeEYsSUFBSSxNQUFNLFlBQVksT0FBTyxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEI7S0FDRjtJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1g7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLHFCQUFxQixDQUFDLFVBQXlEOztJQUM1RixJQUFJO1FBQ0YsSUFBSSxDQUFDLHFCQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFLLFVBQW1CLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNwRSxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNqQixPQUFPLEVBQUUsVUFBVTtvQkFDbkIsUUFBUSxFQUFFLFVBQWtCO2lCQUM3QixDQUFDLENBQUMsQ0FBQztTQUNMO1FBRUQsT0FBTyxNQUFNLHFCQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3hDO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixJQUFJLE9BQU8sVUFBVSxLQUFLLFVBQVUsRUFBRTtZQUNwQyxPQUFPLENBQUEsTUFBQSxVQUFVLENBQUMsU0FBUywwQ0FBRSxHQUFHO2dCQUM5QixDQUFDLENBQUMsSUFBSyxVQUEyRCxFQUFFO2dCQUNwRSxDQUFDLENBQUMsVUFBVSxDQUFDO1NBQ2hCO1FBRUQsT0FBTyxJQUFJLENBQUM7S0FDYjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uLCBSZXF1ZXN0SGFuZGxlciwgRXJyb3JSZXF1ZXN0SGFuZGxlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAZGVjb3JhdG9ycy9kaSc7XG5cbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gJy4vY29udGFpbmVyJztcbmltcG9ydCB7IFR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZUZ1bmN0aW9uID0gKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB2b2lkO1xuZXhwb3J0IGludGVyZmFjZSBNaWRkbGV3YXJlQ2xhc3Mge1xuICB1c2U6IE1pZGRsZXdhcmVGdW5jdGlvbjtcbn1cbmV4cG9ydCB0eXBlIE1pZGRsZXdhcmUgPSBNaWRkbGV3YXJlRnVuY3Rpb24gfCBUeXBlPE1pZGRsZXdhcmVDbGFzcz47XG5cbmV4cG9ydCB0eXBlIEVycm9yTWlkZGxld2FyZUZ1bmN0aW9uID0gKGVycm9yOiBFcnJvciwgcmVxdWVzdDogUmVxdWVzdCwgcmVzcG9uc2U6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHZvaWQ7XG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTWlkZGxld2FyZUNsYXNzIHtcbiAgdXNlOiBFcnJvck1pZGRsZXdhcmVGdW5jdGlvbjtcbn1cbmV4cG9ydCB0eXBlIEVycm9yTWlkZGxld2FyZSA9IEVycm9yTWlkZGxld2FyZUZ1bmN0aW9uIHwgVHlwZTxFcnJvck1pZGRsZXdhcmVDbGFzcz47XG5cbi8qKlxuICogQ3JlYXRlIHJlcXVlc3QgbWlkZGxld2FyZSBoYW5kbGVyIHRoYXQgdXNlcyBjbGFzcyBvciBmdW5jdGlvbiBwcm92aWRlZCBhcyBtaWRkbGV3YXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlSGFuZGxlcihtaWRkbGV3YXJlOiBNaWRkbGV3YXJlKTogUmVxdWVzdEhhbmRsZXIge1xuICByZXR1cm4gKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgaW52b2tlTWlkZGxld2FyZShtaWRkbGV3YXJlLCBbcmVxLCByZXMsIG5leHRdKS5jYXRjaChuZXh0KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBFcnJvciBNaWRkbGV3YXJlIGNsYXNzIHJlZ2lzdHJhdGlvbiBESSB0b2tlblxuICovXG5leHBvcnQgY29uc3QgRVJST1JfTUlERExFV0FSRSA9IG5ldyBJbmplY3Rpb25Ub2tlbignRVJST1JfTUlERExFV0FSRScpO1xuXG4vKipcbiAqIEFkZCBlcnJvciBtaWRkbGV3YXJlIHRvIHRoZSBhcHBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yTWlkZGxld2FyZUhhbmRsZXIoKTogRXJyb3JSZXF1ZXN0SGFuZGxlciB7XG4gIHJldHVybiAoZXJyb3I6IEVycm9yLCByZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgIGludm9rZU1pZGRsZXdhcmUoRVJST1JfTUlERExFV0FSRSwgW2Vycm9yLCByZXEsIHJlcywgbmV4dF0pLmNhdGNoKG5leHQpO1xuICB9O1xufVxuXG4vKipcbiAqIEluc3RhbnRpYXRlIG1pZGRsZXdhcmUgYW5kIGludm9rZSBpdCB3aXRoIGFyZ3VtZW50c1xuICovXG5hc3luYyBmdW5jdGlvbiBpbnZva2VNaWRkbGV3YXJlKFxuICBtaWRkbGV3YXJlOiBJbmplY3Rpb25Ub2tlbiB8IE1pZGRsZXdhcmUgfCBFcnJvck1pZGRsZXdhcmUsXG4gIGFyZ3M6IFBhcmFtZXRlcnM8TWlkZGxld2FyZUZ1bmN0aW9uPiB8IFBhcmFtZXRlcnM8RXJyb3JNaWRkbGV3YXJlRnVuY3Rpb24+LFxuKSB7XG4gIGNvbnN0IG5leHQgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gYXMgTmV4dEZ1bmN0aW9uO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCBnZXRNaWRkbGV3YXJlSW5zdGFuY2UobWlkZGxld2FyZSk7XG5cbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICByZXR1cm4gbmV4dCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoaW5zdGFuY2UgYXMgTWlkZGxld2FyZUNsYXNzIHwgRXJyb3JNaWRkbGV3YXJlQ2xhc3MpPy51c2UgPz8gaW5zdGFuY2U7XG4gICAgY29uc3QgcmVzdWx0ID0gdHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicgPyBoYW5kbGVyLmFwcGx5KGluc3RhbmNlLCBhcmdzKSA6IGluc3RhbmNlO1xuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIHJlc3VsdC5jYXRjaChuZXh0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG5leHQoZXJyKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNaWRkbGV3YXJlSW5zdGFuY2UobWlkZGxld2FyZTogSW5qZWN0aW9uVG9rZW4gfCBNaWRkbGV3YXJlIHwgRXJyb3JNaWRkbGV3YXJlKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFDb250YWluZXIuaGFzKG1pZGRsZXdhcmUpICYmIChtaWRkbGV3YXJlIGFzIFR5cGUpLnByb3RvdHlwZS51c2UpIHtcbiAgICAgIENvbnRhaW5lci5wcm92aWRlKFt7XG4gICAgICAgIHByb3ZpZGU6IG1pZGRsZXdhcmUsXG4gICAgICAgIHVzZUNsYXNzOiBtaWRkbGV3YXJlIGFzIFR5cGUsXG4gICAgICB9XSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IENvbnRhaW5lci5nZXQobWlkZGxld2FyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAodHlwZW9mIG1pZGRsZXdhcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBtaWRkbGV3YXJlLnByb3RvdHlwZT8udXNlXG4gICAgICAgID8gbmV3IChtaWRkbGV3YXJlIGFzIFR5cGU8TWlkZGxld2FyZUNsYXNzIHwgRXJyb3JNaWRkbGV3YXJlQ2xhc3M+KSgpXG4gICAgICAgIDogbWlkZGxld2FyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19