@nodeswork/kiws
Version:
Koa-based Injectable Web Service
69 lines (67 loc) • 2.26 kB
JavaScript
;
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