@sitesoft/ssp-support
Version:
Various tools, data-structures and utils
65 lines (52 loc) • 1.39 kB
JavaScript
export const EVENT_REGISTERED = 'modules-registered';
export default class ModuleCollection {
modules = {};
options = {
logInConsole: true
};
constructor(modules, eBus, options = {}) {
this.eBus = eBus;
this.options = { ...this.options,
...options
};
if (options?.onRegistered) {
this.onRegistered(options?.onRegistered);
}
this.initModules(modules);
}
initModules(modules = {}) {
for (const moduleName of Object.keys(modules)) {
this.registerModule(modules[moduleName]);
}
this.eBus?.$emit(EVENT_REGISTERED, this.modules, this);
}
registerModule(module) {
if (this.modules[module.ns]) {
if (this.options.logInConsole) {
console.warn(`модуль ${module.name} уже зарегистрирован`);
}
} else {
this.modules[module.ns] = { ...module
};
}
}
get(moduleName) {
if (!this.modules[moduleName]) {
if (this.options.logInConsole) {
console.error(`модуль ${moduleName} не зарегистрирован`);
}
return undefined;
}
return this.modules[moduleName];
}
count() {
return Object.keys(this.modules).length;
}
isEmpty() {
return this.count() === 0;
}
onRegistered(callback) {
this.eBus?.$on(EVENT_REGISTERED, callback);
}
}
//# sourceMappingURL=ModuleCollection.js.map