@knyt/luthier
Version:
A library for building standardized, type-safe native web components with full SSR and hydration support.
33 lines (32 loc) • 904 B
JavaScript
import { createDOMBuilder, createHTMLBuilder, } from "@knyt/weaver";
/**
*
* @param tagName
* @param importer
* @returns
*/
export function lazy(tagName, importer) {
const domBuilder = createDOMBuilder(tagName);
const htmlBuilder = createHTMLBuilder(tagName);
let importerCalled = false;
function importElement() {
if (!importerCalled) {
importerCalled = true;
importer();
}
}
const lazyElementDefinition = () => {
importElement();
return domBuilder;
};
lazyElementDefinition.html = () => {
importElement();
return htmlBuilder;
};
lazyElementDefinition.tagName = tagName;
lazyElementDefinition.Element = () => {
return importer().then((module) => module.default.Element);
};
lazyElementDefinition.__isKnytElementDefinition = true;
return lazyElementDefinition;
}