{"version":3,"file":"index.js","sources":["../../../../src/packages/core/extension-registry/initializers/app-entry-point-extension-initializer.ts","../../../../src/packages/core/extension-registry/initializers/backoffice-entry-point-extension-initializer.ts","../../../../src/packages/core/extension-registry/initializers/entry-point-extension-initializer.ts","../../../../src/packages/core/extension-registry/utils/create-extension-api-by-alias.function.ts","../../../../src/packages/core/extension-registry/extension-element-and-api-slot-element-base.ts"],"sourcesContent":["import type { ManifestAppEntryPoint } from '../extensions/app-entry-point.extension.js';\r\nimport type { UmbElement } from '@umbraco-cms/backoffice/element-api';\r\nimport {\r\n\ttype UmbEntryPointModule,\r\n\tUmbExtensionInitializerBase,\r\n\ttype UmbExtensionRegistry,\r\n\tloadManifestPlainJs,\r\n\thasInitExport,\r\n\thasOnUnloadExport,\r\n} from '@umbraco-cms/backoffice/extension-api';\r\n\r\n/**\r\n * Extension initializer for the `appEntryPoint` extension type\r\n */\r\nexport class UmbAppEntryPointExtensionInitializer extends UmbExtensionInitializerBase<\r\n\t'appEntryPoint',\r\n\tManifestAppEntryPoint\r\n> {\r\n\t#instanceMap = new Map();\r\n\r\n\tconstructor(host: UmbElement, extensionRegistry: UmbExtensionRegistry) {\r\n\t\tsuper(host, extensionRegistry, 'appEntryPoint' satisfies ManifestAppEntryPoint['type']);\r\n\t}\r\n\r\n\tasync instantiateExtension(manifest: ManifestAppEntryPoint) {\r\n\t\tif (manifest.js) {\r\n\t\t\tconst moduleInstance = await loadManifestPlainJs(manifest.js);\r\n\r\n\t\t\tif (!moduleInstance) return;\r\n\r\n\t\t\tthis.#instanceMap.set(manifest.alias, moduleInstance);\r\n\r\n\t\t\t// If the extension has known exports, be sure to run those\r\n\t\t\tif (hasInitExport(moduleInstance)) {\r\n\t\t\t\tawait moduleInstance.onInit(this.host, this.extensionRegistry);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tasync unloadExtension(manifest: ManifestAppEntryPoint): Promise {\r\n\t\tconst moduleInstance = this.#instanceMap.get(manifest.alias);\r\n\r\n\t\tif (!moduleInstance) return;\r\n\r\n\t\tif (hasOnUnloadExport(moduleInstance)) {\r\n\t\t\tmoduleInstance.onUnload(this.host, this.extensionRegistry);\r\n\t\t}\r\n\r\n\t\tthis.#instanceMap.delete(manifest.alias);\r\n\t}\r\n}\r\n","import type { ManifestBackofficeEntryPoint } from '../extensions/backoffice-entry-point.extension.js';\r\nimport type { UmbElement } from '@umbraco-cms/backoffice/element-api';\r\nimport {\r\n\ttype UmbEntryPointModule,\r\n\tUmbExtensionInitializerBase,\r\n\ttype UmbExtensionRegistry,\r\n\tloadManifestPlainJs,\r\n\thasInitExport,\r\n\thasOnUnloadExport,\r\n} from '@umbraco-cms/backoffice/extension-api';\r\n\r\n/**\r\n * Extension initializer for the `backofficeEntryPoint` extension type\r\n */\r\nexport class UmbBackofficeEntryPointExtensionInitializer extends UmbExtensionInitializerBase<\r\n\t'backofficeEntryPoint',\r\n\tManifestBackofficeEntryPoint\r\n> {\r\n\t#instanceMap = new Map();\r\n\r\n\tconstructor(host: UmbElement, extensionRegistry: UmbExtensionRegistry) {\r\n\t\tsuper(host, extensionRegistry, 'backofficeEntryPoint' satisfies ManifestBackofficeEntryPoint['type']);\r\n\t}\r\n\r\n\tasync instantiateExtension(manifest: ManifestBackofficeEntryPoint) {\r\n\t\tif (manifest.js) {\r\n\t\t\tconst moduleInstance = await loadManifestPlainJs(manifest.js);\r\n\r\n\t\t\tif (!moduleInstance) return;\r\n\r\n\t\t\tthis.#instanceMap.set(manifest.alias, moduleInstance);\r\n\r\n\t\t\t// If the extension has known exports, be sure to run those\r\n\t\t\tif (hasInitExport(moduleInstance)) {\r\n\t\t\t\tawait moduleInstance.onInit(this.host, this.extensionRegistry);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tasync unloadExtension(manifest: ManifestBackofficeEntryPoint): Promise {\r\n\t\tconst moduleInstance = this.#instanceMap.get(manifest.alias);\r\n\r\n\t\tif (!moduleInstance) return;\r\n\r\n\t\tif (hasOnUnloadExport(moduleInstance)) {\r\n\t\t\tmoduleInstance.onUnload(this.host, this.extensionRegistry);\r\n\t\t}\r\n\r\n\t\tthis.#instanceMap.delete(manifest.alias);\r\n\t}\r\n}\r\n","import type { ManifestEntryPoint } from '../extensions/entry-point.extension.js';\r\nimport type { UmbElement } from '@umbraco-cms/backoffice/element-api';\r\nimport {\r\n\ttype UmbEntryPointModule,\r\n\tUmbExtensionInitializerBase,\r\n\ttype UmbExtensionRegistry,\r\n\tloadManifestPlainJs,\r\n\thasInitExport,\r\n\thasOnUnloadExport,\r\n} from '@umbraco-cms/backoffice/extension-api';\r\n\r\n/**\r\n * Extension initializer for the `entryPoint` extension type\r\n */\r\nexport class UmbEntryPointExtensionInitializer extends UmbExtensionInitializerBase<'entryPoint', ManifestEntryPoint> {\r\n\t#instanceMap = new Map();\r\n\r\n\tconstructor(host: UmbElement, extensionRegistry: UmbExtensionRegistry) {\r\n\t\tsuper(host, extensionRegistry, 'entryPoint' satisfies ManifestEntryPoint['type']);\r\n\t}\r\n\r\n\tasync instantiateExtension(manifest: ManifestEntryPoint) {\r\n\t\tconsole.error('The `entryPoint` extension-type is deprecated, please use the `backofficeEntryPoint`.');\r\n\r\n\t\tif (manifest.js) {\r\n\t\t\tconst moduleInstance = await loadManifestPlainJs(manifest.js);\r\n\r\n\t\t\tif (!moduleInstance) return;\r\n\r\n\t\t\tthis.#instanceMap.set(manifest.alias, moduleInstance);\r\n\r\n\t\t\t// If the extension has known exports, be sure to run those\r\n\t\t\tif (hasInitExport(moduleInstance)) {\r\n\t\t\t\tmoduleInstance.onInit(this.host, this.extensionRegistry);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tasync unloadExtension(manifest: ManifestEntryPoint): Promise {\r\n\t\tconst moduleInstance = this.#instanceMap.get(manifest.alias);\r\n\r\n\t\tif (!moduleInstance) return;\r\n\r\n\t\tif (hasOnUnloadExport(moduleInstance)) {\r\n\t\t\tmoduleInstance.onUnload(this.host, this.extensionRegistry);\r\n\t\t}\r\n\r\n\t\tthis.#instanceMap.delete(manifest.alias);\r\n\t}\r\n}\r\n","import { umbExtensionsRegistry } from '../registry.js';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { createExtensionApi, type UmbApi } from '@umbraco-cms/backoffice/extension-api';\r\n\r\n/**\r\n *\r\n * @param {UmbControllerHost} host - The host to parse on as the host to the extension api.\r\n * @param {string} alias - The alias of the extension api to create.\r\n * @param {Array} constructorArgs - The constructor arguments to pass to the extension api, host will always be appended as the first argument, meaning these arguments will be second and so forth.\r\n * @returns {ApiType} a class instance of the api provided via the manifest that matches the given alias. You have to type this via the generic `ApiType` parameter.\r\n */\r\nexport async function createExtensionApiByAlias(\r\n\thost: UmbControllerHost,\r\n\talias: string,\r\n\tconstructorArgs?: Array,\r\n): Promise {\r\n\t// Get manifest:\r\n\tconst manifest = umbExtensionsRegistry.getByAlias(alias);\r\n\tif (!manifest) {\r\n\t\tthrow new Error(`Failed to get manifest by alias: ${alias}`);\r\n\t}\r\n\r\n\tconst api = await createExtensionApi(host, manifest, constructorArgs);\r\n\tif (!api) {\r\n\t\tthrow new Error(`Failed to create extension api from alias: ${alias}`);\r\n\t}\r\n\t// Create extension:\r\n\treturn api;\r\n}\r\n","import { umbExtensionsRegistry } from './registry.js';\r\nimport { property, state } from '@umbraco-cms/backoffice/external/lit';\r\nimport { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';\r\nimport type { ManifestElementAndApi } from '@umbraco-cms/backoffice/extension-api';\r\nimport { UmbExtensionElementAndApiInitializer } from '@umbraco-cms/backoffice/extension-api';\r\n\r\n// TODO: Eslint: allow abstract element class to end with \"ElementBase\" instead of \"Element\"\r\n\r\nexport abstract class UmbExtensionElementAndApiSlotElementBase<\r\n\tManifestType extends ManifestElementAndApi,\r\n> extends UmbLitElement {\r\n\t_alias?: string;\r\n\t@property({ type: String, reflect: true })\r\n\tget alias() {\r\n\t\treturn this._alias;\r\n\t}\r\n\tset alias(newVal) {\r\n\t\tthis._alias = newVal;\r\n\t\tthis.#observeManifest();\r\n\t}\r\n\r\n\t@property({ type: Object, attribute: false })\r\n\tset props(newVal: Record | undefined) {\r\n\t\t// TODO, compare changes since last time. only reset the ones that changed. This might be better done by the controller is self:\r\n\t\tthis.#props = newVal;\r\n\t\tif (this.#extensionController) {\r\n\t\t\tthis.#extensionController.elementProps = newVal;\r\n\t\t}\r\n\t}\r\n\tget props() {\r\n\t\treturn this.#props;\r\n\t}\r\n\r\n\t#props?: Record = {};\r\n\r\n\t#extensionController?: UmbExtensionElementAndApiInitializer;\r\n\r\n\t@state()\r\n\t_api: ManifestType['API_TYPE'] | undefined;\r\n\r\n\t@state()\r\n\t_element: ManifestType['ELEMENT_TYPE'] | undefined;\r\n\r\n\tabstract getExtensionType(): string;\r\n\tabstract getDefaultElementName(): string;\r\n\r\n\t#observeManifest() {\r\n\t\tif (!this._alias) return;\r\n\r\n\t\tthis.#extensionController = new UmbExtensionElementAndApiInitializer(\r\n\t\t\tthis,\r\n\t\t\tumbExtensionsRegistry,\r\n\t\t\tthis._alias,\r\n\t\t\t[this],\r\n\t\t\tthis.#extensionChanged,\r\n\t\t\tthis.getDefaultElementName(),\r\n\t\t);\r\n\t\tthis.#extensionController.elementProps = this.#props;\r\n\t}\r\n\r\n\t#extensionChanged = (isPermitted: boolean, controller: UmbExtensionElementAndApiInitializer) => {\r\n\t\tthis.apiChanged(isPermitted ? controller.api : undefined);\r\n\t\tthis.elementChanged(isPermitted ? controller.component : undefined);\r\n\t};\r\n\r\n\t/**\r\n\t * Called when the API is changed.\r\n\t * @protected\r\n\t * @param {(ManifestType['API_TYPE'] | undefined)} api\r\n\t * @memberof UmbExtensionElementAndApiSlotElementBase\r\n\t */\r\n\tprotected apiChanged(api: ManifestType['API_TYPE'] | undefined) {\r\n\t\tthis._api = api;\r\n\t}\r\n\r\n\t/**\r\n\t * Called when the element is changed.\r\n\t * @protected\r\n\t * @param {(ManifestType['ELEMENT_TYPE'] | undefined)} element\r\n\t * @memberof UmbExtensionElementAndApiSlotElementBase\r\n\t */\r\n\tprotected elementChanged(element: ManifestType['ELEMENT_TYPE'] | undefined) {\r\n\t\tthis._element = element;\r\n\t\tthis.requestUpdate('_element');\r\n\t}\r\n\r\n\t/**\r\n\t * Render the element.\r\n\t * @returns {*}\r\n\t * @memberof UmbExtensionElementAndApiSlotElementBase\r\n\t */\r\n\toverride render() {\r\n\t\treturn this._element;\r\n\t}\r\n\r\n\t/**\r\n\t * Disable the Shadow DOM for this element. This is needed because this is a wrapper element and should not stop the event propagation.\r\n\t */\r\n\tprotected override createRenderRoot() {\r\n\t\treturn this;\r\n\t}\r\n}\r\n"],"names":["UmbAppEntryPointExtensionInitializer","UmbExtensionInitializerBase","#instanceMap","host","extensionRegistry","manifest","moduleInstance","loadManifestPlainJs","hasInitExport","hasOnUnloadExport","UmbBackofficeEntryPointExtensionInitializer","UmbEntryPointExtensionInitializer","createExtensionApiByAlias","alias","constructorArgs","umbExtensionsRegistry","api","createExtensionApi","UmbExtensionElementAndApiSlotElementBase","UmbLitElement","newVal","#observeManifest","#props","#extensionController","UmbExtensionElementAndApiInitializer","#extensionChanged","isPermitted","controller","element","__decorateClass","property","state"],"mappings":"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"}