UNPKG

@gabliam/express

Version:
70 lines (69 loc) 2.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UseExpressInterceptors = exports.toInterceptor = exports.isValidInterceptor = void 0; const core_1 = require("@gabliam/core"); const web_core_1 = require("@gabliam/web-core"); /** * Test if target is an express interceptor * @param target any */ const isValidInterceptor = (target) => { const meta = Reflect.getOwnMetadata(web_core_1.METADATA_KEY.specialInterceptor, target.constructor || target); return meta === undefined || meta === 'express'; }; exports.isValidInterceptor = isValidInterceptor; /** * ExpressInterceptor decorator * class is an express interceptor. * Must return express middleware */ const ExpressInterceptor = () => (target) => { Reflect.defineMetadata(web_core_1.METADATA_KEY.specialInterceptor, 'express', target); }; /** * Convert a Express middleware to an express interceptor */ const toInterceptor = (mid) => { const clazz = class { async intercept(context, next) { const req = context.request.originalRequest; const res = context.response.originalResponse; switch (mid.length) { // with callback case 3: return new Promise((resolve, reject) => { mid(req, res, (err) => { if (err) { reject(err); } else { resolve(next()); } }); }); // with error case 2: default: mid(req, res); await next(); return Promise.resolve(); } } }; (0, web_core_1.Context)()(clazz.prototype, 'intercept', 0); (0, web_core_1.Next)()(clazz.prototype, 'intercept', 1); (0, core_1.Service)()(clazz); ExpressInterceptor()(clazz); // metadata Reflect.defineMetadata('design:type', Function, clazz.prototype, 'intercept'); Reflect.defineMetadata('design:paramtypes', [Function, Function], clazz.prototype, 'intercept'); Reflect.defineMetadata('design:returntype', Promise, clazz.prototype, 'intercept'); return clazz; }; exports.toInterceptor = toInterceptor; /** * Alias for evict to use: UseInterceptors(toInterceptor(expressMid)) * /!\ Use it for RequestHandler */ const UseExpressInterceptors = (...mids) => (0, web_core_1.UseInterceptors)(...mids.map((m) => (0, exports.toInterceptor)(m))); exports.UseExpressInterceptors = UseExpressInterceptors;