@ark7/router
Version:
Ark7 Router layer framework.
76 lines (74 loc) • 2.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Middleware = exports.Config = void 0;
require("reflect-metadata");
const _ = require("underscore");
const controller_1 = require("./controller");
const declarations_1 = require("./declarations");
const global_config_1 = require("./global-config");
/**
* A decorator to config a router class.
*/
function Config(options) {
return (cls) => {
const meta = declarations_1.A7ControllerMetadata.getMetadata(cls);
meta.extendOptions(options);
meta.defineMetadata(cls);
};
}
exports.Config = Config;
function Middleware(middlewares) {
middlewares = _.chain([middlewares])
.flatten()
.map(global_config_1.a7RouterConfig.middlewareMapper)
.value();
return (target, propertyKey, descriptor) => {
if (propertyKey == null) {
buildConstructorMiddleware(target, middlewares);
}
else {
return buildPropertyMiddleware(target, propertyKey, middlewares, descriptor);
}
};
}
exports.Middleware = Middleware;
function buildConstructorMiddleware(cls, middlewares) {
declarations_1.A7ControllerMetadata.getMetadata(cls)
.clone()
.pushMiddlewaresInFront(middlewares)
.defineMetadata(cls);
}
function getDescription(handler) {
return {
get: function () {
return handler.composedMiddleware;
},
set: function (fn) {
if (fn.prototype instanceof controller_1.A7Controller) {
handler.cls = fn;
handler.type = declarations_1.A7ControllerSubsidiaryType.SUB_CONTROLLER;
}
else {
handler.pushMiddlewaresBack(_.flatten([fn]));
handler.type = declarations_1.A7ControllerSubsidiaryType.HANDLER;
}
},
enumerable: false,
configurable: true,
_a7: true,
};
}
function buildPropertyMiddleware(target, propertyKey, middlewares, descriptor) {
const cls = target.constructor;
const meta = declarations_1.A7ControllerMetadata.getMetadata(cls).clone();
const subsidiary = meta.getOrCreateSubsidiary(propertyKey);
subsidiary.pushMiddlewaresInFront(middlewares);
if (descriptor != null && !descriptor._a7) {
subsidiary.pushMiddlewaresBack([descriptor.value]);
}
meta.defineMetadata(cls);
if (!descriptor?._a7) {
return getDescription(subsidiary);
}
}
//# sourceMappingURL=decorators.js.map