(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; }, }; })();