From 45d16413b936ccefed3c6a626fabda659d312427 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 18 Apr 2024 15:00:13 +0200 Subject: [PATCH] save module instances to a map --- .../app-entry-point-extension-initializer.ts | 25 +++++++++++++------ .../entry-point-extension-initializer.ts | 25 +++++++++++++------ 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/app-entry-point-extension-initializer.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/app-entry-point-extension-initializer.ts index 6a3cdee09c..570dafe356 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/app-entry-point-extension-initializer.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/app-entry-point-extension-initializer.ts @@ -12,7 +12,7 @@ export class UmbAppEntryPointExtensionInitializer extends UmbExtensionInitialize 'appEntryPoint', ManifestAppEntryPoint > { - #jsInstance?: UmbEntryPointModule; + #instanceMap = new Map(); constructor(host: UmbElement, extensionRegistry: UmbExtensionRegistry) { super(host, extensionRegistry, 'appEntryPoint'); @@ -20,19 +20,28 @@ export class UmbAppEntryPointExtensionInitializer extends UmbExtensionInitialize async instantiateExtension(manifest: ManifestAppEntryPoint) { if (manifest.js) { - const js = await loadManifestPlainJs(manifest.js); + const moduleInstance = await loadManifestPlainJs(manifest.js); + + if (!moduleInstance) return; + + this.#instanceMap.set(manifest.alias, moduleInstance); // If the extension has known exports, be sure to run those - if (hasInitExport(js)) { - js.onInit(this.host, this.extensionRegistry); + if (hasInitExport(moduleInstance)) { + moduleInstance.onInit(this.host, this.extensionRegistry); } } } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - async unloadExtension(_manifest: ManifestAppEntryPoint): Promise { - if (this.#jsInstance && hasOnUnloadExport(this.#jsInstance)) { - this.#jsInstance.onUnload(this.host, this.extensionRegistry); + async unloadExtension(manifest: ManifestAppEntryPoint): Promise { + const moduleInstance = this.#instanceMap.get(manifest.alias); + + if (!moduleInstance) return; + + if (hasOnUnloadExport(moduleInstance)) { + moduleInstance.onUnload(this.host, this.extensionRegistry); } + + this.#instanceMap.delete(manifest.alias); } } diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/entry-point-extension-initializer.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/entry-point-extension-initializer.ts index d3f4898f35..b5cd9d678b 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/entry-point-extension-initializer.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/entry-point-extension-initializer.ts @@ -9,7 +9,7 @@ import type { UmbElement } from '@umbraco-cms/backoffice/element-api'; * Extension initializer for the `entryPoint` extension type */ export class UmbEntryPointExtensionInitializer extends UmbExtensionInitializerBase<'entryPoint', ManifestEntryPoint> { - #jsInstance?: UmbEntryPointModule; + #instanceMap = new Map(); constructor(host: UmbElement, extensionRegistry: UmbExtensionRegistry) { super(host, extensionRegistry, 'entryPoint'); @@ -17,19 +17,28 @@ export class UmbEntryPointExtensionInitializer extends UmbExtensionInitializerBa async instantiateExtension(manifest: ManifestEntryPoint) { if (manifest.js) { - this.#jsInstance = await loadManifestPlainJs(manifest.js); + const moduleInstance = await loadManifestPlainJs(manifest.js); + + if (!moduleInstance) return; + + this.#instanceMap.set(manifest.alias, moduleInstance); // If the extension has known exports, be sure to run those - if (hasInitExport(this.#jsInstance)) { - this.#jsInstance.onInit(this.host, this.extensionRegistry); + if (hasInitExport(moduleInstance)) { + moduleInstance.onInit(this.host, this.extensionRegistry); } } } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - async unloadExtension(_manifest: ManifestEntryPoint): Promise { - if (this.#jsInstance && hasOnUnloadExport(this.#jsInstance)) { - this.#jsInstance.onUnload(this.host, this.extensionRegistry); + async unloadExtension(manifest: ManifestEntryPoint): Promise { + const moduleInstance = this.#instanceMap.get(manifest.alias); + + if (!moduleInstance) return; + + if (hasOnUnloadExport(moduleInstance)) { + moduleInstance.onUnload(this.host, this.extensionRegistry); } + + this.#instanceMap.delete(manifest.alias); } }