@namecheap/express-inversify
Version:
Some utilities for the development of express applications with Inversify
107 lines • 4.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.params = exports.principal = exports.next = exports.cookies = exports.requestHeaders = exports.requestBody = exports.queryParam = exports.requestParam = exports.response = exports.request = exports.httpMethod = exports.httpDelete = exports.httpHead = exports.httpPatch = exports.httpPut = exports.httpPost = exports.httpGet = exports.all = exports.controller = exports.injectHttpContext = void 0;
const inversify_1 = require("inversify");
const constants_1 = require("./constants");
exports.injectHttpContext = (0, inversify_1.inject)(constants_1.TYPE.HttpContext);
function controller(path, ...middleware) {
return (target) => {
const currentMetadata = {
middleware,
path,
target,
};
(0, inversify_1.decorate)((0, inversify_1.injectable)(), target);
Reflect.defineMetadata(constants_1.METADATA_KEY.controller, currentMetadata, target);
const previousMetadata = Reflect.getMetadata(constants_1.METADATA_KEY.controller, Reflect) || [];
const newMetadata = [currentMetadata, ...previousMetadata];
Reflect.defineMetadata(constants_1.METADATA_KEY.controller, newMetadata, Reflect);
};
}
exports.controller = controller;
function all(path, ...middleware) {
return httpMethod('all', path, ...middleware);
}
exports.all = all;
function httpGet(path, ...middleware) {
return httpMethod('get', path, ...middleware);
}
exports.httpGet = httpGet;
function httpPost(path, ...middleware) {
return httpMethod('post', path, ...middleware);
}
exports.httpPost = httpPost;
function httpPut(path, ...middleware) {
return httpMethod('put', path, ...middleware);
}
exports.httpPut = httpPut;
function httpPatch(path, ...middleware) {
return httpMethod('patch', path, ...middleware);
}
exports.httpPatch = httpPatch;
function httpHead(path, ...middleware) {
return httpMethod('head', path, ...middleware);
}
exports.httpHead = httpHead;
function httpDelete(path, ...middleware) {
return httpMethod('delete', path, ...middleware);
}
exports.httpDelete = httpDelete;
function httpMethod(method, path, ...middleware) {
return (target, key) => {
const metadata = {
key,
method,
middleware,
path,
target,
};
let metadataList = [];
if (!Reflect.hasMetadata(constants_1.METADATA_KEY.controllerMethod, target.constructor)) {
Reflect.defineMetadata(constants_1.METADATA_KEY.controllerMethod, metadataList, target.constructor);
}
else {
metadataList = Reflect.getMetadata(constants_1.METADATA_KEY.controllerMethod, target.constructor);
}
metadataList.push(metadata);
};
}
exports.httpMethod = httpMethod;
exports.request = paramDecoratorFactory(constants_1.PARAMETER_TYPE.REQUEST);
exports.response = paramDecoratorFactory(constants_1.PARAMETER_TYPE.RESPONSE);
exports.requestParam = paramDecoratorFactory(constants_1.PARAMETER_TYPE.PARAMS);
exports.queryParam = paramDecoratorFactory(constants_1.PARAMETER_TYPE.QUERY);
exports.requestBody = paramDecoratorFactory(constants_1.PARAMETER_TYPE.BODY);
exports.requestHeaders = paramDecoratorFactory(constants_1.PARAMETER_TYPE.HEADERS);
exports.cookies = paramDecoratorFactory(constants_1.PARAMETER_TYPE.COOKIES);
exports.next = paramDecoratorFactory(constants_1.PARAMETER_TYPE.NEXT);
exports.principal = paramDecoratorFactory(constants_1.PARAMETER_TYPE.PRINCIPAL);
function paramDecoratorFactory(parameterType) {
return (name) => params(parameterType, name);
}
function params(type, parameterName) {
return (target, methodName, index) => {
let metadataList = {};
let parameterMetadataList = [];
const parameterMetadata = {
index,
injectRoot: parameterName === undefined,
parameterName,
type,
};
if (!Reflect.hasMetadata(constants_1.METADATA_KEY.controllerParameter, target.constructor)) {
parameterMetadataList.unshift(parameterMetadata);
}
else {
metadataList = Reflect.getMetadata(constants_1.METADATA_KEY.controllerParameter, target.constructor);
if (metadataList[methodName]) {
parameterMetadataList = metadataList[methodName] || [];
}
parameterMetadataList.unshift(parameterMetadata);
}
metadataList[methodName] = parameterMetadataList;
Reflect.defineMetadata(constants_1.METADATA_KEY.controllerParameter, metadataList, target.constructor);
};
}
exports.params = params;
//# sourceMappingURL=decorators.js.map