UNPKG

@intuitionrobotics/ts-common

Version:
68 lines 2.27 kB
"use strict"; 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