@gabliam/express
Version:
Gabliam plugin for add express
70 lines (69 loc) • 2.67 kB
JavaScript
;
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;