49 Zeilen
1.3 KiB
JavaScript
49 Zeilen
1.3 KiB
JavaScript
(function () {
|
|
const modules = new Map();
|
|
|
|
function validateModuleDefinition(moduleDefinition) {
|
|
if (!moduleDefinition || typeof moduleDefinition !== "object") {
|
|
throw new TypeError("moduleDefinition must be an object");
|
|
}
|
|
|
|
if (
|
|
typeof moduleDefinition.id !== "string" ||
|
|
moduleDefinition.id.trim() === ""
|
|
) {
|
|
throw new TypeError("moduleDefinition.id is required");
|
|
}
|
|
|
|
if (
|
|
typeof moduleDefinition.name !== "string" ||
|
|
moduleDefinition.name.trim() === ""
|
|
) {
|
|
throw new TypeError("moduleDefinition.name is required");
|
|
}
|
|
}
|
|
|
|
function cloneModuleDefinition(moduleDefinition) {
|
|
return { ...moduleDefinition };
|
|
}
|
|
|
|
globalThis.VGCoreModuleRegistry = {
|
|
registerModule(moduleDefinition) {
|
|
validateModuleDefinition(moduleDefinition);
|
|
|
|
const storedModuleDefinition = cloneModuleDefinition(moduleDefinition);
|
|
modules.set(storedModuleDefinition.id, storedModuleDefinition);
|
|
|
|
return cloneModuleDefinition(storedModuleDefinition);
|
|
},
|
|
|
|
getModules() {
|
|
return Array.from(modules.values(), cloneModuleDefinition);
|
|
},
|
|
|
|
getModuleById(moduleId) {
|
|
return modules.has(moduleId)
|
|
? cloneModuleDefinition(modules.get(moduleId))
|
|
: null;
|
|
},
|
|
};
|
|
})();
|