UNPKG

@nodeswork/kiws

Version:

Koa-based Injectable Web Service

55 lines (53 loc) 2.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("reflect-metadata"); const _ = require("underscore"); const injection_1 = require("./injection"); exports.MIDDLEWARE = 'MIDDLEWARE'; exports.MIDDLEWARE_TARGET_APP = 'app'; exports.MIDDLEWARE_TARGET_ROUTER = 'router'; const MIDDLEWARE_TAGS = ['middleware', 'provider']; /** * MiddlewareProvider class decorator will register the middlewares declared in * the provider to Koa and KoaRouter. */ function MiddlewareProvider(options = {}) { return (constructor) => { const injectionMetadata = injection_1.getInjectionMetadata(constructor); const injectable = injection_1.Injectable({ inputs: true, tags: _.union(MIDDLEWARE_TAGS, options.tags || []), meta: _.extend({}, options.meta, { middlewares: injectionMetadata.meta.middlewares || [], }), }); injectable(constructor); constructor.prototype.$getMiddlewares = $getMiddlewares; }; } exports.MiddlewareProvider = MiddlewareProvider; function AppMiddleware(options = {}) { return middleware(_.extend({}, options, { target: exports.MIDDLEWARE_TARGET_APP })); } exports.AppMiddleware = AppMiddleware; function RouterMiddleware(options = {}) { return middleware(_.extend({}, options, { target: exports.MIDDLEWARE_TARGET_ROUTER })); } exports.RouterMiddleware = RouterMiddleware; function middleware(metadata) { return (target, propertyName) => { metadata.name = propertyName; metadata.provider = target.constructor.name; const injectionMetadata = injection_1.getInjectionMetadata(target.constructor); _.defaults(injectionMetadata.meta, { middlewares: [] }); injectionMetadata.meta.middlewares.push(metadata); injection_1.defineInjectionMetadata(target.constructor, injectionMetadata); }; } function $getMiddlewares() { const injectionMetadata = injection_1.getInjectionMetadata(this.constructor); return _.map(injectionMetadata.meta.middlewares, (metadata) => { return _.extend(metadata, { fn: this[metadata.name] }); }); } //# sourceMappingURL=middleware.js.map