@intuitionrobotics/ts-common
Version:
68 lines • 2.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ModuleManager = void 0;
exports.moduleResolver = moduleResolver;
const dispatcher_1 = require("./dispatcher");
const exceptions_1 = require("./exceptions");
const Logger_1 = require("./logger/Logger");
const array_tools_1 = require("../utils/array-tools");
const _modules = [];
function moduleResolver() {
return _modules;
}
class ModuleManager extends Logger_1.Logger {
// noinspection JSUnusedLocalSymbols
constructor() {
super();
this.modules = _modules;
if (ModuleManager.instance)
throw new exceptions_1.BadImplementationException("Already have one instance of ModuleManager");
ModuleManager.instance = this;
dispatcher_1.Dispatcher.modulesResolver = moduleResolver;
}
filterModules(filter) {
return this.modules.filter(filter);
}
getModule(moduleName) {
return this.modules.find(module => module.getName() === moduleName);
}
setConfig(config) {
this.config = config || {};
return this;
}
addModules(...modules) {
modules.reduce((carry, module) => {
if (!carry.includes(module))
(0, array_tools_1.addItemToArray)(carry, module);
return carry;
}, this.modules);
return this;
}
setModules(...modules) {
this.modules = (0, array_tools_1.filterDuplicates)(modules);
return this;
}
init() {
this.logVerbose(`--------- initializing app ---------`);
this.modules.forEach((module) => {
module.setManager(this);
if (this.config)
module.setConfig(this.config[module.getName()]);
});
this.modules.forEach(module => {
this.logVerbose(`--------- ${module.getName()} ---------`);
// @ts-ignore
module.init();
// @ts-ignore
module.initiated = true;
});
this.modules.forEach(module => module.validate());
this.logVerbose(`--------- INITIALIZED ---------`);
return this;
}
build() {
this.init();
}
}
exports.ModuleManager = ModuleManager;
//# sourceMappingURL=module-manager.js.map