UNPKG

@ark7/router

Version:
76 lines (74 loc) 2.52 kB
"use strict"; 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