add a new type appEntryPoint and a corresponding initializer and load them up in the app element
This commit is contained in:
@@ -14,8 +14,8 @@ import { pathWithoutBasePath } from '@umbraco-cms/backoffice/router';
|
||||
import { OpenAPI, RuntimeLevelModel } from '@umbraco-cms/backoffice/external/backend-api';
|
||||
import { UmbContextDebugController } from '@umbraco-cms/backoffice/debug';
|
||||
import {
|
||||
UmbAppEntryPointExtensionInitializer,
|
||||
UmbBundleExtensionInitializer,
|
||||
UmbEntryPointExtensionInitializer,
|
||||
UmbServerExtensionRegistrator,
|
||||
} from '@umbraco-cms/backoffice/extension-api';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
|
||||
@@ -85,8 +85,7 @@ export class UmbAppElement extends UmbLitElement {
|
||||
|
||||
new UmbBundleExtensionInitializer(this, umbExtensionsRegistry);
|
||||
|
||||
// Initialise any entryPoints that export the 'beforeInit' function
|
||||
new UmbEntryPointExtensionInitializer(this, umbExtensionsRegistry, 'beforeInit');
|
||||
new UmbAppEntryPointExtensionInitializer(this, umbExtensionsRegistry);
|
||||
|
||||
new UmbIconRegistry().attach(this);
|
||||
new UUIIconRegistryEssential().attach(this);
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import type { ManifestAppEntryPoint } from '../types/index.js';
|
||||
import { hasInitExport, loadManifestPlainJs } from '../functions/index.js';
|
||||
import type { UmbExtensionRegistry } from '../registry/extension.registry.js';
|
||||
import { UmbExtensionInitializerBase } from './extension-initializer-base.js';
|
||||
import type { UmbElement } from '@umbraco-cms/backoffice/element-api';
|
||||
|
||||
/**
|
||||
* Extension initializer for the `appEntryPoint` extension type
|
||||
*/
|
||||
export class UmbAppEntryPointExtensionInitializer extends UmbExtensionInitializerBase<
|
||||
'appEntryPoint',
|
||||
ManifestAppEntryPoint
|
||||
> {
|
||||
constructor(host: UmbElement, extensionRegistry: UmbExtensionRegistry<ManifestAppEntryPoint>) {
|
||||
super(host, extensionRegistry, 'appEntryPoint');
|
||||
}
|
||||
|
||||
async instantiateExtension(manifest: ManifestAppEntryPoint) {
|
||||
if (manifest.js) {
|
||||
const js = await loadManifestPlainJs(manifest.js);
|
||||
|
||||
// If the extension has known exports, be sure to run those
|
||||
if (hasInitExport(js)) {
|
||||
js.onInit(this.host, this.extensionRegistry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
unloadExtension(_manifest: ManifestAppEntryPoint): void {
|
||||
// No-op
|
||||
// Entry points are not unloaded, but if they were, this is where you would do it.
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
export * from './app-entry-point-extension-initializer.js';
|
||||
export * from './bundle-extension-initializer.js';
|
||||
export * from './entry-point-extension-initializer.js';
|
||||
export * from './extension-initializer-base.js';
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
export * from './base.types.js';
|
||||
export * from './condition.types.js';
|
||||
export * from './manifest-app-entrypoint.interface.js';
|
||||
export * from './manifest-base.interface.js';
|
||||
export * from './manifest-bundle.interface.js';
|
||||
export * from './manifest-condition.interface.js';
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
import type { UmbEntryPointModule } from '../models/index.js';
|
||||
import type { ManifestPlainJs } from './base.types.js';
|
||||
|
||||
/**
|
||||
* This type of extension gives full control and will simply load the specified JS file
|
||||
* You could have custom logic to decide which extensions to load/register by using extensionRegistry
|
||||
*/
|
||||
export interface ManifestAppEntryPoint extends ManifestPlainJs<UmbEntryPointModule> {
|
||||
type: 'appEntryPoint';
|
||||
}
|
||||
Reference in New Issue
Block a user