* new api models * use new PackageResource * do not error out on missing default exports (esmodules auto-execute) * do not check for js extensions (they might have been registered on the client without a js file) * prepend the api baseurl to any relataive server JS dependencies * ignore tsbuildinfo * create base file for tsconfig * extend from base config and optimise include/exclude paths * install rollup plugin to handle json files * use plugin to bundle json files * call script for cms builds that builds libs * add rollup config to utils lib * add a context token to the extension registry instance itself and provide it through BackofficeElement * add rollup node resolve * add node resolve * only include element mixin in element library * add error description to module load error * add types to UmbExtensionRegistry token * set UmbNotificationService as string in its token to avoid minification * correct comment * reverse order of checks * add host to server extensions and support life-cycle check * add imports * use lit rather than lit-html * correct comment * add PackageManifestModel * add import * run libs build for cms * revert reorder * use string name for NotificationContext token * make alias public readonly of UmbContextToken * remove TODO * use UmbContextToken::toString() for all stores * use string alias for contexts * move default data so we avoid importing a big lit library just to get default data interface * add rollup to two extra libraries * make sure we build uui and lit into our libraries for the few cases we import something * add lockfile * add separate options for .js files * add function to install types of module * add types output * remove unused tsconfig-base file for now
32 lines
1.3 KiB
TypeScript
32 lines
1.3 KiB
TypeScript
import type { HTMLElementConstructor, ManifestElement } from '../models';
|
|
import { hasDefaultExport } from './has-default-export.function';
|
|
import { isManifestElementNameType } from './is-manifest-element-name-type.function';
|
|
import { loadExtension } from './load-extension.function';
|
|
|
|
export async function createExtensionElement(manifest: ManifestElement): Promise<HTMLElement | undefined> {
|
|
|
|
//TODO: Write tests for these extension options:
|
|
const js = await loadExtension(manifest);
|
|
|
|
if (isManifestElementNameType(manifest)) {
|
|
// created by manifest method providing HTMLElement
|
|
return document.createElement(manifest.elementName);
|
|
}
|
|
|
|
// TODO: Do we need this except for the default() loader?
|
|
if (js) {
|
|
if (hasDefaultExport<HTMLElementConstructor>(js)) {
|
|
// created by default class
|
|
return new js.default();
|
|
}
|
|
|
|
console.error('-- Extension did not succeed creating an element, missing a default export of the served JavaScript file', manifest);
|
|
|
|
// If some JS was loaded and it did not at least contain a default export, then we are safe to assume that it executed its side effects and does not need to be returned
|
|
return undefined;
|
|
}
|
|
|
|
console.error('-- Extension did not succeed creating an element, missing a default export or `elementName` in the manifest.', manifest);
|
|
return undefined;
|
|
}
|