UNPKG

@nodeswork/kiws

Version:

Koa-based Injectable Web Service

69 lines (67 loc) 2.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("reflect-metadata"); const _ = require("underscore"); const injection_1 = require("./injection"); const middleware_1 = require("./middleware"); const handler_1 = require("./handler"); const input_1 = require("./input"); const MODULE_METADATA_KEY = Symbol('kiws:module'); const MODULE_TAGS = ['module']; function Module(moduleMetadata) { const injectable = injection_1.Injectable({ tags: MODULE_TAGS }); return (constructor) => { injectable(constructor); Reflect.defineMetadata(MODULE_METADATA_KEY, moduleMetadata, constructor.prototype); constructor.$getModuleMetadata = $getModuleMetadata; constructor.$constructors = $constructors; constructor.$register = $register; }; } exports.Module = Module; function $getModuleMetadata() { return Reflect.getMetadata(MODULE_METADATA_KEY, this.prototype); } function $constructors() { const moduleMetadata = this.$getModuleMetadata(); const results = [ moduleMetadata.providers || [], ]; if (moduleMetadata.middlewares != null) { results.push([{ provide: middleware_1.MIDDLEWARE, useClass: moduleMetadata.middlewares, multi: true, }]); } if (moduleMetadata.handlers != null) { results.push([{ provide: handler_1.HANDLER, useClass: moduleMetadata.handlers, multi: true, }]); results.push(moduleMetadata.handlers); } if (moduleMetadata.inputs != null) { results.push([{ provide: input_1.INPUT, useClass: moduleMetadata.inputs, multi: true, }]); } return _.flatten(results); } function $register() { const moduleMetadata = this.$getModuleMetadata(); if (moduleMetadata.depends != null) { for (let m of moduleMetadata.depends) { m.$register(); } } const constructors = this.$constructors(); for (const constructor of constructors) { injection_1.beanProvider.register(constructor); } injection_1.beanProvider.register(this); } //# sourceMappingURL=module.js.map