hekdi
Version:
Depedency injection framework for node integrated with koa.js
50 lines (43 loc) • 1.22 kB
JavaScript
;
const Injector = require('./injector');
/**
*
* @constructor
* @param config <{
* name: string,
* [declarations]: Array<Object>,
* [imports]: Array<Module>,
* [exports]: Array<string>|string>
* }>
* @return Module <{name: string, injector: Injector, [exports]: Map}>
*/
function Module(config) {
this.name = config.name;
this.injector = new Injector(this);
if (config.imports) {
config.imports.forEach(importedModule => {
if (importedModule.exports) {
this.injector.addImports(importedModule.exports);
}
});
}
this.injector.register(...(config.declarations || []));
if (config.exports) {
const dependencies = this.injector.dependencies;
if (config.exports === '*') {
this.exports = new Map(dependencies);
} else {
this.exports = new Map();
config.exports.forEach(dependencyName => {
const dependencyConfig = this.injector.getConfigOf(dependencyName);
if (dependencyConfig.belongTo.name === this.name) {
this.exports.set(dependencyName, dependencyConfig);
}
});
}
}
}
Module.createModule = function(config) {
return new Module(config);
};
module.exports = Module;