save module instances to a map

This commit is contained in:
Jacob Overgaard
2024-04-18 15:00:13 +02:00
parent b8260d8a17
commit 45d16413b9
2 changed files with 34 additions and 16 deletions

View File

@@ -12,7 +12,7 @@ export class UmbAppEntryPointExtensionInitializer extends UmbExtensionInitialize
'appEntryPoint',
ManifestAppEntryPoint
> {
#jsInstance?: UmbEntryPointModule;
#instanceMap = new Map<string, UmbEntryPointModule>();
constructor(host: UmbElement, extensionRegistry: UmbExtensionRegistry<ManifestAppEntryPoint>) {
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<void> {
if (this.#jsInstance && hasOnUnloadExport(this.#jsInstance)) {
this.#jsInstance.onUnload(this.host, this.extensionRegistry);
async unloadExtension(manifest: ManifestAppEntryPoint): Promise<void> {
const moduleInstance = this.#instanceMap.get(manifest.alias);
if (!moduleInstance) return;
if (hasOnUnloadExport(moduleInstance)) {
moduleInstance.onUnload(this.host, this.extensionRegistry);
}
this.#instanceMap.delete(manifest.alias);
}
}

View File

@@ -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<string, UmbEntryPointModule>();
constructor(host: UmbElement, extensionRegistry: UmbExtensionRegistry<ManifestEntryPoint>) {
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<void> {
if (this.#jsInstance && hasOnUnloadExport(this.#jsInstance)) {
this.#jsInstance.onUnload(this.host, this.extensionRegistry);
async unloadExtension(manifest: ManifestEntryPoint): Promise<void> {
const moduleInstance = this.#instanceMap.get(manifest.alias);
if (!moduleInstance) return;
if (hasOnUnloadExport(moduleInstance)) {
moduleInstance.onUnload(this.host, this.extensionRegistry);
}
this.#instanceMap.delete(manifest.alias);
}
}