diff --git a/src/libs/extension-api/registry/extension.registry.ts b/src/libs/extension-api/registry/extension.registry.ts index be5109d2e5..435bc85ed5 100644 --- a/src/libs/extension-api/registry/extension.registry.ts +++ b/src/libs/extension-api/registry/extension.registry.ts @@ -111,34 +111,17 @@ export class UmbExtensionRegistry< } register(manifest: ManifestTypes | ManifestKind): void { - if (!manifest.type) { - console.error(`Extension is missing type`, manifest); + const isValid = this.checkExtension(manifest); + if (!isValid) { return; } - if (!manifest.alias) { - console.error(`Extension is missing alias`, manifest); - return; - } - - if (manifest.type === 'kind') { - this.defineKind(manifest as ManifestKind); - return; - } - - const extensionsValues = this._extensions.getValue(); - const extension = extensionsValues.find((extension) => extension.alias === (manifest as ManifestTypes).alias); - - if (extension) { - console.error(`Extension with alias ${(manifest as ManifestTypes).alias} is already registered`); - return; - } - - this._extensions.next([...extensionsValues, manifest as ManifestTypes]); + this._extensions.next([...this._extensions.getValue(), manifest as ManifestTypes]); } registerMany(manifests: Array>): void { - manifests.forEach((manifest) => this.register(manifest)); + const validManifests = manifests.filter(this.checkExtension.bind(this)); + this._extensions.next([...this._extensions.getValue(), ...(validManifests as Array)]); } unregisterMany(aliases: Array): void { @@ -172,6 +155,33 @@ export class UmbExtensionRegistry< } */ + private checkExtension(manifest: ManifestTypes | ManifestKind): boolean { + if (!manifest.type) { + console.error(`Extension is missing type`, manifest); + return false; + } + + if (!manifest.alias) { + console.error(`Extension is missing alias`, manifest); + return false; + } + + if (manifest.type === 'kind') { + this.defineKind(manifest as ManifestKind); + return false; + } + + const extensionsValues = this._extensions.getValue(); + const extension = extensionsValues.find((extension) => extension.alias === (manifest as ManifestTypes).alias); + + if (extension) { + console.error(`Extension with alias ${(manifest as ManifestTypes).alias} is already registered`); + return false; + } + + return true; + } + private _kindsOfType | string>(type: Key) { return this.kinds.pipe( map((kinds) => kinds.filter((kind) => kind.matchType === type)),