@wcstack/autoloader 1.9.0 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/vanilla.ts","../src/config.ts","../src/importmap.ts","../src/resolveLoader.ts","../src/tags.ts","../src/eagerload.ts","../src/lazyLoad.ts","../src/components/Autoloader.ts","../src/registerComponents.ts","../src/bootstrapAutoloader.ts"],"sourcesContent":["\nexport async function load(path: string): Promise<CustomElementConstructor> {\n const module = await import(`${path}`);\n return module.default as CustomElementConstructor;\n}\n","\nimport { IConfig, ILoader, IWritableConfig } from \"./types.js\"\nimport { load } from \"./vanilla.js\"\n\ninterface IInternalConfig extends IConfig {\n scanImportmap: boolean;\n loaders: Record<string, ILoader | string>;\n observable: boolean;\n tagNames: {\n autoloader: string;\n };\n}\n\nexport const DEFAULT_KEY = \"*\";\n\nexport const VANILLA_KEY = \"vanilla\";\n\nexport const VANILLA_LOADER = {\n postfix: \".js\",\n loader: load\n}\n\nconst _config: IInternalConfig = {\n scanImportmap: true,\n loaders: {\n [VANILLA_KEY]: VANILLA_LOADER,\n [DEFAULT_KEY]: VANILLA_KEY\n },\n observable: true,\n tagNames: {\n autoloader: \"wcs-autoloader\"\n }\n}\n\nfunction deepFreeze<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n Object.freeze(obj);\n for (const key of Object.keys(obj)) {\n deepFreeze((obj as Record<string, unknown>)[key]);\n }\n return obj;\n}\n\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n const clone: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\n }\n return clone as T;\n}\n\nlet frozenConfig: IConfig | null = null;\n\n// 後方互換のため config もエクスポート(読み取り専用として使用)\nexport const config: IConfig = _config as IConfig;\n\nexport function getConfig(): IConfig {\n if (!frozenConfig) {\n frozenConfig = deepFreeze(deepClone(_config));\n }\n return frozenConfig;\n}\n\nexport function setConfig(partialConfig: IWritableConfig): void {\n if (typeof partialConfig.scanImportmap === \"boolean\") {\n _config.scanImportmap = partialConfig.scanImportmap;\n }\n if (partialConfig.loaders) {\n Object.assign(_config.loaders, partialConfig.loaders);\n }\n if (typeof partialConfig.observable === \"boolean\") {\n _config.observable = partialConfig.observable;\n }\n if (partialConfig.tagNames) {\n Object.assign(_config.tagNames, partialConfig.tagNames);\n }\n frozenConfig = null;\n}\n","import { IImportMap, IKeyInfo, ILoadMap, IPrefixMap } from \"./types.js\";\n\nconst COMPONENT_KEYWORD = \"@components/\";\n\nexport function loadImportmap(): IImportMap | null {\n const importmap: IImportMap = { imports: {} };\n document.querySelectorAll('script[type=\"importmap\"]').forEach((script) => {\n try {\n const json = JSON.parse(script.innerHTML);\n if (json.imports) {\n importmap.imports = Object.assign(importmap.imports, json.imports);\n }\n } catch (e) {\n throw new Error(\"Failed to parse importmap JSON: \" + e);\n }\n });\n return Object.keys(importmap.imports).length > 0\n ? importmap\n : null;\n}\n\nfunction getKeyInfoFromImportmapKey(key: string): IKeyInfo | null {\n if (key.startsWith(COMPONENT_KEYWORD)) {\n if (key.endsWith(\"/\")) {\n const prefixWithLoader = key.slice(COMPONENT_KEYWORD.length, key.length - 1);\n const [ prefix, loaderKey ] = prefixWithLoader.split(\"|\", 2);\n if (prefix === \"\") {\n throw new Error(\"Invalid importmap key: \" + key);\n }\n return {\n key,\n prefix: prefix.replaceAll(\"/\", \"-\").toLowerCase(),\n loaderKey: loaderKey ?? null,\n isNameSpaced: true\n };\n } else {\n const tagNamePart = key.slice(COMPONENT_KEYWORD.length);\n const [ tagName, loaderKeyPart ] = tagNamePart.split(\"|\", 2);\n const [ loaderKey, extendsText ] = (loaderKeyPart ?? \"\").split(\",\", 2);\n if (tagName === \"\") {\n throw new Error(\"Invalid importmap key: \" + key);\n }\n return {\n key,\n tagName: tagName.replaceAll(\"/\", \"-\").toLowerCase(),\n loaderKey: loaderKey || null,\n extends: extendsText || null,\n isNameSpaced: false\n };\n }\n }\n return null;\n}\n\nexport function buildMap(importmap: IImportMap): {\n prefixMap: IPrefixMap, loadMap: ILoadMap\n} {\n const prefixMap: IPrefixMap = {};\n const loadMap: ILoadMap = {};\n for (const [key, _value] of Object.entries(importmap.imports)) {\n const keyInfo = getKeyInfoFromImportmapKey(key);\n if (keyInfo === null) {\n continue;\n }\n if (keyInfo.isNameSpaced) {\n prefixMap[keyInfo.prefix] = keyInfo;\n } else {\n loadMap[keyInfo.tagName] = keyInfo;\n }\n }\n return { prefixMap, loadMap };\n}","import { DEFAULT_KEY } from \"./config.js\";\nimport { ILoader } from \"./types.js\";\n\nexport function resolveLoader(\n path: string,\n loaderKey: string | null,\n loaders: Record<string, ILoader | string>\n): ILoader {\n let loader: ILoader | string;\n\n if (loaderKey === null || loaderKey === DEFAULT_KEY || loaderKey === \"\") {\n // Try to resolve by postfix\n let resolvedLoader: ILoader | null = null;\n \n const candidates: ILoader[] = [];\n for (const [key, l] of Object.entries(loaders)) {\n if (key === DEFAULT_KEY) continue;\n const currentLoader = typeof l === \"string\" ? loaders[l] : l;\n if (typeof currentLoader === \"string\") continue; // Should not happen if config is correct\n candidates.push(currentLoader);\n }\n\n // Sort by postfix length descending to match longest extension first\n candidates.sort((a, b) => b.postfix.length - a.postfix.length);\n\n for (const currentLoader of candidates) {\n if (path.endsWith(currentLoader.postfix)) {\n resolvedLoader = currentLoader;\n break;\n }\n }\n\n if (resolvedLoader) {\n loader = resolvedLoader;\n } else {\n loader = loaders[DEFAULT_KEY];\n if (typeof loader === \"string\") {\n loader = loaders[loader];\n }\n }\n } else {\n loader = loaders[loaderKey];\n if (!loader) {\n throw new Error(\"Loader not found: \" + loaderKey);\n }\n }\n\n if (typeof loader === \"string\") {\n throw new Error(\"Loader redirection is not supported here\");\n }\n return loader;\n}\n","\nexport const failedTags = new Set<string>();\nexport const loadingTags = new Set<string>();\n\nexport function resetState() {\n failedTags.clear();\n loadingTags.clear();\n}\n\n","import { resolveLoader } from \"./resolveLoader.js\";\nimport { failedTags } from \"./tags.js\";\nimport { IEagerLoadInfo, ILoader } from \"./types.js\";\n\nconst EXTENDS_MAP = new Map<any, string>();\n\nif (typeof window !== \"undefined\") {\n const map = [\n [HTMLButtonElement, \"button\"],\n [HTMLInputElement, \"input\"],\n [HTMLAnchorElement, \"a\"],\n [HTMLImageElement, \"img\"],\n [HTMLDivElement, \"div\"],\n [HTMLSpanElement, \"span\"],\n [HTMLParagraphElement, \"p\"],\n [HTMLUListElement, \"ul\"],\n [HTMLOListElement, \"ol\"],\n [HTMLLIElement, \"li\"],\n [HTMLTableElement, \"table\"],\n [HTMLFormElement, \"form\"],\n [HTMLLabelElement, \"label\"],\n [HTMLSelectElement, \"select\"],\n [HTMLTextAreaElement, \"textarea\"],\n [HTMLHeadingElement, \"h1\"],\n [HTMLQuoteElement, \"blockquote\"],\n [HTMLPreElement, \"pre\"],\n [HTMLBRElement, \"br\"],\n [HTMLHRElement, \"hr\"],\n [HTMLModElement, \"ins\"],\n [HTMLTableCaptionElement, \"caption\"],\n [HTMLTableColElement, \"col\"],\n [HTMLTableSectionElement, \"tbody\"],\n [HTMLTableRowElement, \"tr\"],\n [HTMLTableCellElement, \"td\"],\n [HTMLFieldSetElement, \"fieldset\"],\n [HTMLLegendElement, \"legend\"],\n [HTMLDListElement, \"dl\"],\n [HTMLOptGroupElement, \"optgroup\"],\n [HTMLOptionElement, \"option\"],\n [HTMLStyleElement, \"style\"],\n [HTMLScriptElement, \"script\"],\n [HTMLTemplateElement, \"template\"],\n [HTMLCanvasElement, \"canvas\"],\n [HTMLIFrameElement, \"iframe\"],\n [HTMLObjectElement, \"object\"],\n [HTMLEmbedElement, \"embed\"],\n [HTMLVideoElement, \"video\"],\n [HTMLAudioElement, \"audio\"],\n [HTMLTrackElement, \"track\"],\n [HTMLMapElement, \"map\"],\n [HTMLAreaElement, \"area\"],\n [HTMLSourceElement, \"source\"],\n [HTMLParamElement, \"param\"],\n [HTMLMeterElement, \"meter\"],\n [HTMLProgressElement, \"progress\"],\n [HTMLOutputElement, \"output\"],\n [HTMLDetailsElement, \"details\"],\n [HTMLDialogElement, \"dialog\"],\n [HTMLMenuElement, \"menu\"],\n [HTMLSlotElement, \"slot\"],\n [HTMLTimeElement, \"time\"],\n [HTMLDataElement, \"data\"],\n [HTMLPictureElement, \"picture\"],\n ] as const;\n\n map.forEach(([cls, tag]) => {\n /* istanbul ignore next */\n if (typeof cls !== \"undefined\") {\n EXTENDS_MAP.set(cls, tag);\n }\n });\n}\n\nfunction resolveExtends(componentConstructor: CustomElementConstructor): string | null {\n for (const [cls, tag] of EXTENDS_MAP) {\n if (componentConstructor.prototype instanceof cls) {\n return tag;\n }\n }\n return null;\n}\n\nasync function eagerLoadItem(info: IEagerLoadInfo, tagName:string, loader: ILoader): Promise<void> {\n try {\n if (customElements.get(tagName)) {\n // すでに定義済み\n return;\n }\n const componentConstructor = await loader.loader(info.key);\n if (componentConstructor !== null) {\n let extendsName = info.extends;\n if (extendsName === null) {\n extendsName = resolveExtends(componentConstructor);\n }\n\n if (customElements.get(tagName)) {\n // すでに定義済み\n return;\n }\n if (extendsName === null) {\n customElements.define(tagName, componentConstructor);\n } else {\n customElements.define(tagName, componentConstructor, { extends: extendsName });\n }\n }\n } catch(e) {\n if (!failedTags.has(tagName)) {\n console.error(`Failed to eager load component '${tagName}':`, e);\n failedTags.add(tagName);\n }\n }\n\n}\n\nexport async function eagerLoad(\n loadMap: Record<string, IEagerLoadInfo>, \n loaders: Record<string, ILoader | string>\n): Promise<void> {\n const promises: Promise<void>[] = [];\n for(const [tagName, info] of Object.entries(loadMap)) {\n let loader: ILoader;\n try {\n loader = resolveLoader(info.key, info.loaderKey, loaders);\n } catch (_e) {\n throw new Error(\"Loader redirection is not supported for eager loaded components: \" + tagName);\n }\n promises.push(eagerLoadItem(info, tagName, loader));\n }\n await Promise.all(promises);\n}\n","import { resolveLoader } from \"./resolveLoader.js\";\nimport { failedTags, loadingTags } from \"./tags.js\";\nimport { IConfig, ILoader, INameSpaceInfo, IPrefixMap, ITagInfo } from \"./types.js\";\n\nconst isCustomElement = (node: Node): boolean => {\n return (node instanceof Element && (node.tagName.includes(\"-\") || node.getAttribute(\"is\")?.includes(\"-\"))) ?? false;\n}\n\nexport function getCustomTagInfo(e: Element): ITagInfo {\n const elementTagName = e.tagName.toLowerCase();\n let name;\n let extendsName;\n if (elementTagName.includes(\"-\")) {\n name = elementTagName;\n extendsName = null;\n } else {\n const tagName = e.getAttribute(\"is\");\n if (tagName === null) {\n throw new Error(\"Custom element without a dash or 'is' attribute found: \" + elementTagName);\n }\n if (!tagName.includes(\"-\")) {\n throw new Error(\"Custom element 'is' attribute without a dash found: \" + elementTagName);\n }\n name = tagName;\n extendsName = elementTagName;\n }\n return { name, extends: extendsName };\n}\n\nconst observedCustomElements: WeakSet<Element> = new WeakSet<Element>();\n\nasync function observeShadowRoot(element: Element, config: IConfig, prefixMap: IPrefixMap) {\n observedCustomElements.add(element);\n await handlerForLazyLoad(element.shadowRoot!, config, prefixMap);\n}\n\nasync function checkObserveShadowRoot(element: Element, config: IConfig, prefixMap: IPrefixMap) {\n if (element.shadowRoot) {\n if (!observedCustomElements.has(element)) {\n await observeShadowRoot(element, config, prefixMap);\n }\n }\n}\n\nfunction matchNameSpace(tagName: string, prefixMap: IPrefixMap): INameSpaceInfo | null {\n for (const [prefix, info] of Object.entries(prefixMap)) {\n if (tagName.startsWith(prefix + \"-\")) {\n return info;\n }\n }\n return null;\n}\n\nasync function tagLoad(tagInfo: ITagInfo, config: IConfig, prefixMap: IPrefixMap): Promise<void> {\n const info: INameSpaceInfo | null = matchNameSpace(tagInfo.name, prefixMap);\n if (info === null) {\n throw new Error(\"No matching namespace found for lazy loaded component: \" + tagInfo.name);\n }\n \n if (loadingTags.has(tagInfo.name)) {\n await customElements.whenDefined(tagInfo.name);\n return;\n } \n loadingTags.add(tagInfo.name);\n try {\n let loader: ILoader;\n try {\n loader = resolveLoader(\"\", info.loaderKey, config.loaders);\n } catch (_e) {\n throw new Error(\"Loader redirection is not supported for lazy loaded components: \" + tagInfo.name);\n }\n\n const file: string = tagInfo.name.slice(info.prefix.length + 1);\n if (file === \"\") {\n throw new Error(\"Invalid component name for lazy loaded component: \" + tagInfo.name);\n }\n const path = info.key + file + loader.postfix;\n\n if (customElements.get(tagInfo.name)) {\n // すでに定義済み\n return;\n }\n const componentConstructor = await loader.loader(path);\n if (componentConstructor !== null) {\n if (customElements.get(tagInfo.name)) {\n // すでに定義済み\n return;\n }\n if (tagInfo.extends === null) {\n customElements.define(tagInfo.name, componentConstructor);\n } else {\n customElements.define(tagInfo.name, componentConstructor, { extends: tagInfo.extends });\n }\n } else {\n throw new Error(\"Loader returned null for component: \" + tagInfo.name);\n }\n } catch(e) {\n console.error(`Failed to lazy load component '${tagInfo.name}':`, e);\n failedTags.add(tagInfo.name);\n } finally {\n loadingTags.delete(tagInfo.name);\n }\n}\n\n//\nasync function lazyLoad(root: Node, config: IConfig, prefixMap: IPrefixMap): Promise<number> {\n const elements: Element[] = [];\n\n // Create TreeWalker (target element and comment nodes)\n const walker = document.createTreeWalker(\n root, \n NodeFilter.SHOW_ELEMENT,\n (node: Node): number => {\n return isCustomElement(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n } \n );\n \n // Move to next node with TreeWalker and add matching nodes to array\n while (walker.nextNode()) {\n elements.push(walker.currentNode as Element);\n }\n\n const tagInfos: ITagInfo[] = [];\n const tagNames = new Set<string>();\n for(const element of elements) {\n const tagInfo = getCustomTagInfo(element);\n const customClass = customElements.get(tagInfo.name);\n if (customClass === undefined) {\n // undefined\n customElements.whenDefined(tagInfo.name).then(async () => {\n // upgraded\n await checkObserveShadowRoot(element, config, prefixMap);\n });\n if (!tagNames.has(tagInfo.name) && !failedTags.has(tagInfo.name)) {\n tagNames.add(tagInfo.name);\n tagInfos.push(tagInfo);\n }\n } else {\n // upgraded\n await checkObserveShadowRoot(element, config, prefixMap);\n }\n }\n let tagCount = 0;\n for(const tagInfo of tagInfos) {\n await tagLoad(tagInfo, config, prefixMap);\n tagCount++;\n }\n return tagCount;\n\n}\n\nasync function lazyLoads(\n root: Document | ShadowRoot, \n config: IConfig, \n prefixMap: IPrefixMap\n): Promise<void> {\n while(await lazyLoad(root, config, prefixMap) > 0) {\n // Repeat until no more tags to load\n }\n}\n\nexport async function handlerForLazyLoad(\n root: Document | ShadowRoot,\n config: IConfig,\n prefixMap: IPrefixMap\n): Promise<MutationObserver | null> {\n if (Object.keys(prefixMap).length === 0) {\n return null;\n }\n try {\n await lazyLoads(root, config, prefixMap);\n } catch(e) {\n throw new Error(\"Failed to lazy load components: \" + e);\n }\n\n if (!config.observable) {\n return null;\n }\n const mo = new MutationObserver(async (): Promise<void> => {\n try {\n await lazyLoads(root, config, prefixMap);\n } catch(e) {\n console.error(\"Failed to lazy load components: \" + e);\n }\n });\n mo.observe(root, { childList: true, subtree: true });\n return mo;\n}\n","import { config } from \"../config.js\";\nimport { buildMap, loadImportmap } from \"../importmap.js\";\nimport { eagerLoad } from \"../eagerload.js\";\nimport { handlerForLazyLoad } from \"../lazyLoad.js\";\nimport { IPrefixMap } from \"../types.js\";\n\nexport class Autoloader extends HTMLElement {\n private static _instance: Autoloader | null = null;\n private _initialized = false;\n private _prefixMap: IPrefixMap | null = null;\n private _observer: MutationObserver | null = null;\n\n constructor() {\n super();\n if (Autoloader._instance) {\n throw new Error(\n `${config.tagNames.autoloader} can only be instantiated once.`\n );\n }\n Autoloader._instance = this;\n\n const importmap = loadImportmap();\n if (importmap) {\n const { prefixMap, loadMap } = buildMap(importmap);\n this._prefixMap = prefixMap;\n eagerLoad(loadMap, config.loaders).catch((e) => {\n console.error(\"Failed to eager load components:\", e);\n });\n }\n }\n\n async connectedCallback() {\n if (!this._initialized) {\n this._initialized = true;\n if (this._prefixMap) {\n if (document.readyState === \"loading\") {\n await new Promise<void>((r) =>\n document.addEventListener(\"DOMContentLoaded\", () => r(), {\n once: true,\n })\n );\n }\n this._observer = await handlerForLazyLoad(\n document,\n config,\n this._prefixMap\n );\n }\n }\n }\n\n disconnectedCallback() {\n this._observer?.disconnect();\n this._observer = null;\n if (Autoloader._instance === this) {\n Autoloader._instance = null;\n }\n }\n}\n","import { Autoloader } from \"./components/Autoloader.js\";\nimport { config } from \"./config.js\";\n\nexport function registerComponents() {\n if (!customElements.get(config.tagNames.autoloader)) {\n customElements.define(config.tagNames.autoloader, Autoloader);\n }\n}\n","import { setConfig } from \"./config.js\";\nimport { registerComponents } from \"./registerComponents.js\";\nimport { IWritableConfig } from \"./types.js\";\n\nexport function bootstrapAutoloader(config?: IWritableConfig): void {\n if (config) {\n setConfig(config);\n }\n registerComponents();\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/vanilla.ts","../src/config.ts","../src/importmap.ts","../src/resolveLoader.ts","../src/tags.ts","../src/eagerload.ts","../src/lazyLoad.ts","../src/components/Autoloader.ts","../src/registerComponents.ts","../src/bootstrapAutoloader.ts"],"sourcesContent":["\r\nexport async function load(path: string): Promise<CustomElementConstructor> {\r\n const module = await import(`${path}`);\r\n return module.default as CustomElementConstructor;\r\n}\r\n","\r\nimport { IConfig, ILoader, IWritableConfig } from \"./types.js\"\r\nimport { load } from \"./vanilla.js\"\r\n\r\ninterface IInternalConfig extends IConfig {\r\n scanImportmap: boolean;\r\n loaders: Record<string, ILoader | string>;\r\n observable: boolean;\r\n tagNames: {\r\n autoloader: string;\r\n };\r\n}\r\n\r\nexport const DEFAULT_KEY = \"*\";\r\n\r\nexport const VANILLA_KEY = \"vanilla\";\r\n\r\nexport const VANILLA_LOADER = {\r\n postfix: \".js\",\r\n loader: load\r\n}\r\n\r\nconst _config: IInternalConfig = {\r\n scanImportmap: true,\r\n loaders: {\r\n [VANILLA_KEY]: VANILLA_LOADER,\r\n [DEFAULT_KEY]: VANILLA_KEY\r\n },\r\n observable: true,\r\n tagNames: {\r\n autoloader: \"wcs-autoloader\"\r\n }\r\n}\r\n\r\nfunction deepFreeze<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n Object.freeze(obj);\r\n for (const key of Object.keys(obj)) {\r\n deepFreeze((obj as Record<string, unknown>)[key]);\r\n }\r\n return obj;\r\n}\r\n\r\nfunction deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n const clone: Record<string, unknown> = {};\r\n for (const key of Object.keys(obj)) {\r\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n return clone as T;\r\n}\r\n\r\nlet frozenConfig: IConfig | null = null;\r\n\r\n// 後方互換のため config もエクスポート(読み取り専用として使用)\r\nexport const config: IConfig = _config as IConfig;\r\n\r\nexport function getConfig(): IConfig {\r\n if (!frozenConfig) {\r\n frozenConfig = deepFreeze(deepClone(_config));\r\n }\r\n return frozenConfig;\r\n}\r\n\r\nexport function setConfig(partialConfig: IWritableConfig): void {\r\n if (typeof partialConfig.scanImportmap === \"boolean\") {\r\n _config.scanImportmap = partialConfig.scanImportmap;\r\n }\r\n if (partialConfig.loaders) {\r\n Object.assign(_config.loaders, partialConfig.loaders);\r\n }\r\n if (typeof partialConfig.observable === \"boolean\") {\r\n _config.observable = partialConfig.observable;\r\n }\r\n if (partialConfig.tagNames) {\r\n Object.assign(_config.tagNames, partialConfig.tagNames);\r\n }\r\n frozenConfig = null;\r\n}\r\n","import { IImportMap, IKeyInfo, ILoadMap, IPrefixMap } from \"./types.js\";\r\n\r\nconst COMPONENT_KEYWORD = \"@components/\";\r\n\r\nexport function loadImportmap(): IImportMap | null {\r\n const importmap: IImportMap = { imports: {} };\r\n document.querySelectorAll('script[type=\"importmap\"]').forEach((script) => {\r\n try {\r\n const json = JSON.parse(script.innerHTML);\r\n if (json.imports) {\r\n importmap.imports = Object.assign(importmap.imports, json.imports);\r\n }\r\n } catch (e) {\r\n throw new Error(\"Failed to parse importmap JSON: \" + e);\r\n }\r\n });\r\n return Object.keys(importmap.imports).length > 0\r\n ? importmap\r\n : null;\r\n}\r\n\r\nfunction getKeyInfoFromImportmapKey(key: string): IKeyInfo | null {\r\n if (key.startsWith(COMPONENT_KEYWORD)) {\r\n if (key.endsWith(\"/\")) {\r\n const prefixWithLoader = key.slice(COMPONENT_KEYWORD.length, key.length - 1);\r\n const [ prefix, loaderKey ] = prefixWithLoader.split(\"|\", 2);\r\n if (prefix === \"\") {\r\n throw new Error(\"Invalid importmap key: \" + key);\r\n }\r\n return {\r\n key,\r\n prefix: prefix.replaceAll(\"/\", \"-\").toLowerCase(),\r\n loaderKey: loaderKey ?? null,\r\n isNameSpaced: true\r\n };\r\n } else {\r\n const tagNamePart = key.slice(COMPONENT_KEYWORD.length);\r\n const [ tagName, loaderKeyPart ] = tagNamePart.split(\"|\", 2);\r\n const [ loaderKey, extendsText ] = (loaderKeyPart ?? \"\").split(\",\", 2);\r\n if (tagName === \"\") {\r\n throw new Error(\"Invalid importmap key: \" + key);\r\n }\r\n return {\r\n key,\r\n tagName: tagName.replaceAll(\"/\", \"-\").toLowerCase(),\r\n loaderKey: loaderKey || null,\r\n extends: extendsText || null,\r\n isNameSpaced: false\r\n };\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport function buildMap(importmap: IImportMap): {\r\n prefixMap: IPrefixMap, loadMap: ILoadMap\r\n} {\r\n const prefixMap: IPrefixMap = {};\r\n const loadMap: ILoadMap = {};\r\n for (const [key, _value] of Object.entries(importmap.imports)) {\r\n const keyInfo = getKeyInfoFromImportmapKey(key);\r\n if (keyInfo === null) {\r\n continue;\r\n }\r\n if (keyInfo.isNameSpaced) {\r\n prefixMap[keyInfo.prefix] = keyInfo;\r\n } else {\r\n loadMap[keyInfo.tagName] = keyInfo;\r\n }\r\n }\r\n return { prefixMap, loadMap };\r\n}","import { DEFAULT_KEY } from \"./config.js\";\r\nimport { ILoader } from \"./types.js\";\r\n\r\nexport function resolveLoader(\r\n path: string,\r\n loaderKey: string | null,\r\n loaders: Record<string, ILoader | string>\r\n): ILoader {\r\n let loader: ILoader | string;\r\n\r\n if (loaderKey === null || loaderKey === DEFAULT_KEY || loaderKey === \"\") {\r\n // Try to resolve by postfix\r\n let resolvedLoader: ILoader | null = null;\r\n \r\n const candidates: ILoader[] = [];\r\n for (const [key, l] of Object.entries(loaders)) {\r\n if (key === DEFAULT_KEY) continue;\r\n const currentLoader = typeof l === \"string\" ? loaders[l] : l;\r\n if (typeof currentLoader === \"string\") continue; // Should not happen if config is correct\r\n candidates.push(currentLoader);\r\n }\r\n\r\n // Sort by postfix length descending to match longest extension first\r\n candidates.sort((a, b) => b.postfix.length - a.postfix.length);\r\n\r\n for (const currentLoader of candidates) {\r\n if (path.endsWith(currentLoader.postfix)) {\r\n resolvedLoader = currentLoader;\r\n break;\r\n }\r\n }\r\n\r\n if (resolvedLoader) {\r\n loader = resolvedLoader;\r\n } else {\r\n loader = loaders[DEFAULT_KEY];\r\n if (typeof loader === \"string\") {\r\n loader = loaders[loader];\r\n }\r\n }\r\n } else {\r\n loader = loaders[loaderKey];\r\n if (!loader) {\r\n throw new Error(\"Loader not found: \" + loaderKey);\r\n }\r\n }\r\n\r\n if (typeof loader === \"string\") {\r\n throw new Error(\"Loader redirection is not supported here\");\r\n }\r\n return loader;\r\n}\r\n","\r\nexport const failedTags = new Set<string>();\r\nexport const loadingTags = new Set<string>();\r\n\r\nexport function resetState() {\r\n failedTags.clear();\r\n loadingTags.clear();\r\n}\r\n\r\n","import { resolveLoader } from \"./resolveLoader.js\";\r\nimport { failedTags } from \"./tags.js\";\r\nimport { IEagerLoadInfo, ILoader } from \"./types.js\";\r\n\r\nconst EXTENDS_MAP = new Map<any, string>();\r\n\r\nif (typeof window !== \"undefined\") {\r\n const map = [\r\n [HTMLButtonElement, \"button\"],\r\n [HTMLInputElement, \"input\"],\r\n [HTMLAnchorElement, \"a\"],\r\n [HTMLImageElement, \"img\"],\r\n [HTMLDivElement, \"div\"],\r\n [HTMLSpanElement, \"span\"],\r\n [HTMLParagraphElement, \"p\"],\r\n [HTMLUListElement, \"ul\"],\r\n [HTMLOListElement, \"ol\"],\r\n [HTMLLIElement, \"li\"],\r\n [HTMLTableElement, \"table\"],\r\n [HTMLFormElement, \"form\"],\r\n [HTMLLabelElement, \"label\"],\r\n [HTMLSelectElement, \"select\"],\r\n [HTMLTextAreaElement, \"textarea\"],\r\n [HTMLHeadingElement, \"h1\"],\r\n [HTMLQuoteElement, \"blockquote\"],\r\n [HTMLPreElement, \"pre\"],\r\n [HTMLBRElement, \"br\"],\r\n [HTMLHRElement, \"hr\"],\r\n [HTMLModElement, \"ins\"],\r\n [HTMLTableCaptionElement, \"caption\"],\r\n [HTMLTableColElement, \"col\"],\r\n [HTMLTableSectionElement, \"tbody\"],\r\n [HTMLTableRowElement, \"tr\"],\r\n [HTMLTableCellElement, \"td\"],\r\n [HTMLFieldSetElement, \"fieldset\"],\r\n [HTMLLegendElement, \"legend\"],\r\n [HTMLDListElement, \"dl\"],\r\n [HTMLOptGroupElement, \"optgroup\"],\r\n [HTMLOptionElement, \"option\"],\r\n [HTMLStyleElement, \"style\"],\r\n [HTMLScriptElement, \"script\"],\r\n [HTMLTemplateElement, \"template\"],\r\n [HTMLCanvasElement, \"canvas\"],\r\n [HTMLIFrameElement, \"iframe\"],\r\n [HTMLObjectElement, \"object\"],\r\n [HTMLEmbedElement, \"embed\"],\r\n [HTMLVideoElement, \"video\"],\r\n [HTMLAudioElement, \"audio\"],\r\n [HTMLTrackElement, \"track\"],\r\n [HTMLMapElement, \"map\"],\r\n [HTMLAreaElement, \"area\"],\r\n [HTMLSourceElement, \"source\"],\r\n [HTMLParamElement, \"param\"],\r\n [HTMLMeterElement, \"meter\"],\r\n [HTMLProgressElement, \"progress\"],\r\n [HTMLOutputElement, \"output\"],\r\n [HTMLDetailsElement, \"details\"],\r\n [HTMLDialogElement, \"dialog\"],\r\n [HTMLMenuElement, \"menu\"],\r\n [HTMLSlotElement, \"slot\"],\r\n [HTMLTimeElement, \"time\"],\r\n [HTMLDataElement, \"data\"],\r\n [HTMLPictureElement, \"picture\"],\r\n ] as const;\r\n\r\n map.forEach(([cls, tag]) => {\r\n /* istanbul ignore next */\r\n if (typeof cls !== \"undefined\") {\r\n EXTENDS_MAP.set(cls, tag);\r\n }\r\n });\r\n}\r\n\r\nfunction resolveExtends(componentConstructor: CustomElementConstructor): string | null {\r\n for (const [cls, tag] of EXTENDS_MAP) {\r\n if (componentConstructor.prototype instanceof cls) {\r\n return tag;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nasync function eagerLoadItem(info: IEagerLoadInfo, tagName:string, loader: ILoader): Promise<void> {\r\n try {\r\n if (customElements.get(tagName)) {\r\n // すでに定義済み\r\n return;\r\n }\r\n const componentConstructor = await loader.loader(info.key);\r\n if (componentConstructor !== null) {\r\n let extendsName = info.extends;\r\n if (extendsName === null) {\r\n extendsName = resolveExtends(componentConstructor);\r\n }\r\n\r\n if (customElements.get(tagName)) {\r\n // すでに定義済み\r\n return;\r\n }\r\n if (extendsName === null) {\r\n customElements.define(tagName, componentConstructor);\r\n } else {\r\n customElements.define(tagName, componentConstructor, { extends: extendsName });\r\n }\r\n }\r\n } catch(e) {\r\n if (!failedTags.has(tagName)) {\r\n console.error(`Failed to eager load component '${tagName}':`, e);\r\n failedTags.add(tagName);\r\n }\r\n }\r\n\r\n}\r\n\r\nexport async function eagerLoad(\r\n loadMap: Record<string, IEagerLoadInfo>, \r\n loaders: Record<string, ILoader | string>\r\n): Promise<void> {\r\n const promises: Promise<void>[] = [];\r\n for(const [tagName, info] of Object.entries(loadMap)) {\r\n let loader: ILoader;\r\n try {\r\n loader = resolveLoader(info.key, info.loaderKey, loaders);\r\n } catch (_e) {\r\n throw new Error(\"Loader redirection is not supported for eager loaded components: \" + tagName);\r\n }\r\n promises.push(eagerLoadItem(info, tagName, loader));\r\n }\r\n await Promise.all(promises);\r\n}\r\n","import { resolveLoader } from \"./resolveLoader.js\";\r\nimport { failedTags, loadingTags } from \"./tags.js\";\r\nimport { IConfig, ILoader, INameSpaceInfo, IPrefixMap, ITagInfo } from \"./types.js\";\r\n\r\nconst isCustomElement = (node: Node): boolean => {\r\n return (node instanceof Element && (node.tagName.includes(\"-\") || node.getAttribute(\"is\")?.includes(\"-\"))) ?? false;\r\n}\r\n\r\nexport function getCustomTagInfo(e: Element): ITagInfo {\r\n const elementTagName = e.tagName.toLowerCase();\r\n let name;\r\n let extendsName;\r\n if (elementTagName.includes(\"-\")) {\r\n name = elementTagName;\r\n extendsName = null;\r\n } else {\r\n const tagName = e.getAttribute(\"is\");\r\n if (tagName === null) {\r\n throw new Error(\"Custom element without a dash or 'is' attribute found: \" + elementTagName);\r\n }\r\n if (!tagName.includes(\"-\")) {\r\n throw new Error(\"Custom element 'is' attribute without a dash found: \" + elementTagName);\r\n }\r\n name = tagName;\r\n extendsName = elementTagName;\r\n }\r\n return { name, extends: extendsName };\r\n}\r\n\r\nconst observedCustomElements: WeakSet<Element> = new WeakSet<Element>();\r\n\r\nasync function observeShadowRoot(element: Element, config: IConfig, prefixMap: IPrefixMap) {\r\n observedCustomElements.add(element);\r\n await handlerForLazyLoad(element.shadowRoot!, config, prefixMap);\r\n}\r\n\r\nasync function checkObserveShadowRoot(element: Element, config: IConfig, prefixMap: IPrefixMap) {\r\n if (element.shadowRoot) {\r\n if (!observedCustomElements.has(element)) {\r\n await observeShadowRoot(element, config, prefixMap);\r\n }\r\n }\r\n}\r\n\r\nfunction matchNameSpace(tagName: string, prefixMap: IPrefixMap): INameSpaceInfo | null {\r\n for (const [prefix, info] of Object.entries(prefixMap)) {\r\n if (tagName.startsWith(prefix + \"-\")) {\r\n return info;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nasync function tagLoad(tagInfo: ITagInfo, config: IConfig, prefixMap: IPrefixMap): Promise<void> {\r\n const info: INameSpaceInfo | null = matchNameSpace(tagInfo.name, prefixMap);\r\n if (info === null) {\r\n throw new Error(\"No matching namespace found for lazy loaded component: \" + tagInfo.name);\r\n }\r\n \r\n if (loadingTags.has(tagInfo.name)) {\r\n await customElements.whenDefined(tagInfo.name);\r\n return;\r\n } \r\n loadingTags.add(tagInfo.name);\r\n try {\r\n let loader: ILoader;\r\n try {\r\n loader = resolveLoader(\"\", info.loaderKey, config.loaders);\r\n } catch (_e) {\r\n throw new Error(\"Loader redirection is not supported for lazy loaded components: \" + tagInfo.name);\r\n }\r\n\r\n const file: string = tagInfo.name.slice(info.prefix.length + 1);\r\n if (file === \"\") {\r\n throw new Error(\"Invalid component name for lazy loaded component: \" + tagInfo.name);\r\n }\r\n const path = info.key + file + loader.postfix;\r\n\r\n if (customElements.get(tagInfo.name)) {\r\n // すでに定義済み\r\n return;\r\n }\r\n const componentConstructor = await loader.loader(path);\r\n if (componentConstructor !== null) {\r\n if (customElements.get(tagInfo.name)) {\r\n // すでに定義済み\r\n return;\r\n }\r\n if (tagInfo.extends === null) {\r\n customElements.define(tagInfo.name, componentConstructor);\r\n } else {\r\n customElements.define(tagInfo.name, componentConstructor, { extends: tagInfo.extends });\r\n }\r\n } else {\r\n throw new Error(\"Loader returned null for component: \" + tagInfo.name);\r\n }\r\n } catch(e) {\r\n console.error(`Failed to lazy load component '${tagInfo.name}':`, e);\r\n failedTags.add(tagInfo.name);\r\n } finally {\r\n loadingTags.delete(tagInfo.name);\r\n }\r\n}\r\n\r\n//\r\nasync function lazyLoad(root: Node, config: IConfig, prefixMap: IPrefixMap): Promise<number> {\r\n const elements: Element[] = [];\r\n\r\n // Create TreeWalker (target element and comment nodes)\r\n const walker = document.createTreeWalker(\r\n root, \r\n NodeFilter.SHOW_ELEMENT,\r\n (node: Node): number => {\r\n return isCustomElement(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\r\n } \r\n );\r\n \r\n // Move to next node with TreeWalker and add matching nodes to array\r\n while (walker.nextNode()) {\r\n elements.push(walker.currentNode as Element);\r\n }\r\n\r\n const tagInfos: ITagInfo[] = [];\r\n const tagNames = new Set<string>();\r\n for(const element of elements) {\r\n const tagInfo = getCustomTagInfo(element);\r\n const customClass = customElements.get(tagInfo.name);\r\n if (customClass === undefined) {\r\n // undefined\r\n customElements.whenDefined(tagInfo.name).then(async () => {\r\n // upgraded\r\n await checkObserveShadowRoot(element, config, prefixMap);\r\n });\r\n if (!tagNames.has(tagInfo.name) && !failedTags.has(tagInfo.name)) {\r\n tagNames.add(tagInfo.name);\r\n tagInfos.push(tagInfo);\r\n }\r\n } else {\r\n // upgraded\r\n await checkObserveShadowRoot(element, config, prefixMap);\r\n }\r\n }\r\n let tagCount = 0;\r\n for(const tagInfo of tagInfos) {\r\n await tagLoad(tagInfo, config, prefixMap);\r\n tagCount++;\r\n }\r\n return tagCount;\r\n\r\n}\r\n\r\nasync function lazyLoads(\r\n root: Document | ShadowRoot, \r\n config: IConfig, \r\n prefixMap: IPrefixMap\r\n): Promise<void> {\r\n while(await lazyLoad(root, config, prefixMap) > 0) {\r\n // Repeat until no more tags to load\r\n }\r\n}\r\n\r\nexport async function handlerForLazyLoad(\r\n root: Document | ShadowRoot,\r\n config: IConfig,\r\n prefixMap: IPrefixMap\r\n): Promise<MutationObserver | null> {\r\n if (Object.keys(prefixMap).length === 0) {\r\n return null;\r\n }\r\n try {\r\n await lazyLoads(root, config, prefixMap);\r\n } catch(e) {\r\n throw new Error(\"Failed to lazy load components: \" + e);\r\n }\r\n\r\n if (!config.observable) {\r\n return null;\r\n }\r\n const mo = new MutationObserver(async (): Promise<void> => {\r\n try {\r\n await lazyLoads(root, config, prefixMap);\r\n } catch(e) {\r\n console.error(\"Failed to lazy load components: \" + e);\r\n }\r\n });\r\n mo.observe(root, { childList: true, subtree: true });\r\n return mo;\r\n}\r\n","import { config } from \"../config.js\";\r\nimport { buildMap, loadImportmap } from \"../importmap.js\";\r\nimport { eagerLoad } from \"../eagerload.js\";\r\nimport { handlerForLazyLoad } from \"../lazyLoad.js\";\r\nimport { IPrefixMap } from \"../types.js\";\r\n\r\nexport class Autoloader extends HTMLElement {\r\n private static _instance: Autoloader | null = null;\r\n private _initialized = false;\r\n private _prefixMap: IPrefixMap | null = null;\r\n private _observer: MutationObserver | null = null;\r\n\r\n constructor() {\r\n super();\r\n if (Autoloader._instance) {\r\n throw new Error(\r\n `${config.tagNames.autoloader} can only be instantiated once.`\r\n );\r\n }\r\n Autoloader._instance = this;\r\n\r\n const importmap = loadImportmap();\r\n if (importmap) {\r\n const { prefixMap, loadMap } = buildMap(importmap);\r\n this._prefixMap = prefixMap;\r\n eagerLoad(loadMap, config.loaders).catch((e) => {\r\n console.error(\"Failed to eager load components:\", e);\r\n });\r\n }\r\n }\r\n\r\n async connectedCallback() {\r\n if (!this._initialized) {\r\n this._initialized = true;\r\n if (this._prefixMap) {\r\n if (document.readyState === \"loading\") {\r\n await new Promise<void>((r) =>\r\n document.addEventListener(\"DOMContentLoaded\", () => r(), {\r\n once: true,\r\n })\r\n );\r\n }\r\n this._observer = await handlerForLazyLoad(\r\n document,\r\n config,\r\n this._prefixMap\r\n );\r\n }\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n this._observer?.disconnect();\r\n this._observer = null;\r\n if (Autoloader._instance === this) {\r\n Autoloader._instance = null;\r\n }\r\n }\r\n}\r\n","import { Autoloader } from \"./components/Autoloader.js\";\r\nimport { config } from \"./config.js\";\r\n\r\nexport function registerComponents() {\r\n if (!customElements.get(config.tagNames.autoloader)) {\r\n customElements.define(config.tagNames.autoloader, Autoloader);\r\n }\r\n}\r\n","import { setConfig } from \"./config.js\";\r\nimport { registerComponents } from \"./registerComponents.js\";\r\nimport { IWritableConfig } from \"./types.js\";\r\n\r\nexport function bootstrapAutoloader(config?: IWritableConfig): void {\r\n if (config) {\r\n setConfig(config);\r\n }\r\n registerComponents();\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.min.js","sources":["../src/config.ts","../src/vanilla.ts","../src/importmap.ts","../src/resolveLoader.ts","../src/tags.ts","../src/eagerload.ts","../src/lazyLoad.ts","../src/components/Autoloader.ts","../src/registerComponents.ts","../src/bootstrapAutoloader.ts"],"sourcesContent":["\nimport { IConfig, ILoader, IWritableConfig } from \"./types.js\"\nimport { load } from \"./vanilla.js\"\n\ninterface IInternalConfig extends IConfig {\n scanImportmap: boolean;\n loaders: Record<string, ILoader | string>;\n observable: boolean;\n tagNames: {\n autoloader: string;\n };\n}\n\nexport const DEFAULT_KEY = \"*\";\n\nexport const VANILLA_KEY = \"vanilla\";\n\nexport const VANILLA_LOADER = {\n postfix: \".js\",\n loader: load\n}\n\nconst _config: IInternalConfig = {\n scanImportmap: true,\n loaders: {\n [VANILLA_KEY]: VANILLA_LOADER,\n [DEFAULT_KEY]: VANILLA_KEY\n },\n observable: true,\n tagNames: {\n autoloader: \"wcs-autoloader\"\n }\n}\n\nfunction deepFreeze<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n Object.freeze(obj);\n for (const key of Object.keys(obj)) {\n deepFreeze((obj as Record<string, unknown>)[key]);\n }\n return obj;\n}\n\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n const clone: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\n }\n return clone as T;\n}\n\nlet frozenConfig: IConfig | null = null;\n\n// 後方互換のため config もエクスポート(読み取り専用として使用)\nexport const config: IConfig = _config as IConfig;\n\nexport function getConfig(): IConfig {\n if (!frozenConfig) {\n frozenConfig = deepFreeze(deepClone(_config));\n }\n return frozenConfig;\n}\n\nexport function setConfig(partialConfig: IWritableConfig): void {\n if (typeof partialConfig.scanImportmap === \"boolean\") {\n _config.scanImportmap = partialConfig.scanImportmap;\n }\n if (partialConfig.loaders) {\n Object.assign(_config.loaders, partialConfig.loaders);\n }\n if (typeof partialConfig.observable === \"boolean\") {\n _config.observable = partialConfig.observable;\n }\n if (partialConfig.tagNames) {\n Object.assign(_config.tagNames, partialConfig.tagNames);\n }\n frozenConfig = null;\n}\n","\nexport async function load(path: string): Promise<CustomElementConstructor> {\n const module = await import(`${path}`);\n return module.default as CustomElementConstructor;\n}\n","import { IImportMap, IKeyInfo, ILoadMap, IPrefixMap } from \"./types.js\";\n\nconst COMPONENT_KEYWORD = \"@components/\";\n\nexport function loadImportmap(): IImportMap | null {\n const importmap: IImportMap = { imports: {} };\n document.querySelectorAll('script[type=\"importmap\"]').forEach((script) => {\n try {\n const json = JSON.parse(script.innerHTML);\n if (json.imports) {\n importmap.imports = Object.assign(importmap.imports, json.imports);\n }\n } catch (e) {\n throw new Error(\"Failed to parse importmap JSON: \" + e);\n }\n });\n return Object.keys(importmap.imports).length > 0\n ? importmap\n : null;\n}\n\nfunction getKeyInfoFromImportmapKey(key: string): IKeyInfo | null {\n if (key.startsWith(COMPONENT_KEYWORD)) {\n if (key.endsWith(\"/\")) {\n const prefixWithLoader = key.slice(COMPONENT_KEYWORD.length, key.length - 1);\n const [ prefix, loaderKey ] = prefixWithLoader.split(\"|\", 2);\n if (prefix === \"\") {\n throw new Error(\"Invalid importmap key: \" + key);\n }\n return {\n key,\n prefix: prefix.replaceAll(\"/\", \"-\").toLowerCase(),\n loaderKey: loaderKey ?? null,\n isNameSpaced: true\n };\n } else {\n const tagNamePart = key.slice(COMPONENT_KEYWORD.length);\n const [ tagName, loaderKeyPart ] = tagNamePart.split(\"|\", 2);\n const [ loaderKey, extendsText ] = (loaderKeyPart ?? \"\").split(\",\", 2);\n if (tagName === \"\") {\n throw new Error(\"Invalid importmap key: \" + key);\n }\n return {\n key,\n tagName: tagName.replaceAll(\"/\", \"-\").toLowerCase(),\n loaderKey: loaderKey || null,\n extends: extendsText || null,\n isNameSpaced: false\n };\n }\n }\n return null;\n}\n\nexport function buildMap(importmap: IImportMap): {\n prefixMap: IPrefixMap, loadMap: ILoadMap\n} {\n const prefixMap: IPrefixMap = {};\n const loadMap: ILoadMap = {};\n for (const [key, _value] of Object.entries(importmap.imports)) {\n const keyInfo = getKeyInfoFromImportmapKey(key);\n if (keyInfo === null) {\n continue;\n }\n if (keyInfo.isNameSpaced) {\n prefixMap[keyInfo.prefix] = keyInfo;\n } else {\n loadMap[keyInfo.tagName] = keyInfo;\n }\n }\n return { prefixMap, loadMap };\n}","import { DEFAULT_KEY } from \"./config.js\";\nimport { ILoader } from \"./types.js\";\n\nexport function resolveLoader(\n path: string,\n loaderKey: string | null,\n loaders: Record<string, ILoader | string>\n): ILoader {\n let loader: ILoader | string;\n\n if (loaderKey === null || loaderKey === DEFAULT_KEY || loaderKey === \"\") {\n // Try to resolve by postfix\n let resolvedLoader: ILoader | null = null;\n \n const candidates: ILoader[] = [];\n for (const [key, l] of Object.entries(loaders)) {\n if (key === DEFAULT_KEY) continue;\n const currentLoader = typeof l === \"string\" ? loaders[l] : l;\n if (typeof currentLoader === \"string\") continue; // Should not happen if config is correct\n candidates.push(currentLoader);\n }\n\n // Sort by postfix length descending to match longest extension first\n candidates.sort((a, b) => b.postfix.length - a.postfix.length);\n\n for (const currentLoader of candidates) {\n if (path.endsWith(currentLoader.postfix)) {\n resolvedLoader = currentLoader;\n break;\n }\n }\n\n if (resolvedLoader) {\n loader = resolvedLoader;\n } else {\n loader = loaders[DEFAULT_KEY];\n if (typeof loader === \"string\") {\n loader = loaders[loader];\n }\n }\n } else {\n loader = loaders[loaderKey];\n if (!loader) {\n throw new Error(\"Loader not found: \" + loaderKey);\n }\n }\n\n if (typeof loader === \"string\") {\n throw new Error(\"Loader redirection is not supported here\");\n }\n return loader;\n}\n","\nexport const failedTags = new Set<string>();\nexport const loadingTags = new Set<string>();\n\nexport function resetState() {\n failedTags.clear();\n loadingTags.clear();\n}\n\n","import { resolveLoader } from \"./resolveLoader.js\";\nimport { failedTags } from \"./tags.js\";\nimport { IEagerLoadInfo, ILoader } from \"./types.js\";\n\nconst EXTENDS_MAP = new Map<any, string>();\n\nif (typeof window !== \"undefined\") {\n const map = [\n [HTMLButtonElement, \"button\"],\n [HTMLInputElement, \"input\"],\n [HTMLAnchorElement, \"a\"],\n [HTMLImageElement, \"img\"],\n [HTMLDivElement, \"div\"],\n [HTMLSpanElement, \"span\"],\n [HTMLParagraphElement, \"p\"],\n [HTMLUListElement, \"ul\"],\n [HTMLOListElement, \"ol\"],\n [HTMLLIElement, \"li\"],\n [HTMLTableElement, \"table\"],\n [HTMLFormElement, \"form\"],\n [HTMLLabelElement, \"label\"],\n [HTMLSelectElement, \"select\"],\n [HTMLTextAreaElement, \"textarea\"],\n [HTMLHeadingElement, \"h1\"],\n [HTMLQuoteElement, \"blockquote\"],\n [HTMLPreElement, \"pre\"],\n [HTMLBRElement, \"br\"],\n [HTMLHRElement, \"hr\"],\n [HTMLModElement, \"ins\"],\n [HTMLTableCaptionElement, \"caption\"],\n [HTMLTableColElement, \"col\"],\n [HTMLTableSectionElement, \"tbody\"],\n [HTMLTableRowElement, \"tr\"],\n [HTMLTableCellElement, \"td\"],\n [HTMLFieldSetElement, \"fieldset\"],\n [HTMLLegendElement, \"legend\"],\n [HTMLDListElement, \"dl\"],\n [HTMLOptGroupElement, \"optgroup\"],\n [HTMLOptionElement, \"option\"],\n [HTMLStyleElement, \"style\"],\n [HTMLScriptElement, \"script\"],\n [HTMLTemplateElement, \"template\"],\n [HTMLCanvasElement, \"canvas\"],\n [HTMLIFrameElement, \"iframe\"],\n [HTMLObjectElement, \"object\"],\n [HTMLEmbedElement, \"embed\"],\n [HTMLVideoElement, \"video\"],\n [HTMLAudioElement, \"audio\"],\n [HTMLTrackElement, \"track\"],\n [HTMLMapElement, \"map\"],\n [HTMLAreaElement, \"area\"],\n [HTMLSourceElement, \"source\"],\n [HTMLParamElement, \"param\"],\n [HTMLMeterElement, \"meter\"],\n [HTMLProgressElement, \"progress\"],\n [HTMLOutputElement, \"output\"],\n [HTMLDetailsElement, \"details\"],\n [HTMLDialogElement, \"dialog\"],\n [HTMLMenuElement, \"menu\"],\n [HTMLSlotElement, \"slot\"],\n [HTMLTimeElement, \"time\"],\n [HTMLDataElement, \"data\"],\n [HTMLPictureElement, \"picture\"],\n ] as const;\n\n map.forEach(([cls, tag]) => {\n /* istanbul ignore next */\n if (typeof cls !== \"undefined\") {\n EXTENDS_MAP.set(cls, tag);\n }\n });\n}\n\nfunction resolveExtends(componentConstructor: CustomElementConstructor): string | null {\n for (const [cls, tag] of EXTENDS_MAP) {\n if (componentConstructor.prototype instanceof cls) {\n return tag;\n }\n }\n return null;\n}\n\nasync function eagerLoadItem(info: IEagerLoadInfo, tagName:string, loader: ILoader): Promise<void> {\n try {\n if (customElements.get(tagName)) {\n // すでに定義済み\n return;\n }\n const componentConstructor = await loader.loader(info.key);\n if (componentConstructor !== null) {\n let extendsName = info.extends;\n if (extendsName === null) {\n extendsName = resolveExtends(componentConstructor);\n }\n\n if (customElements.get(tagName)) {\n // すでに定義済み\n return;\n }\n if (extendsName === null) {\n customElements.define(tagName, componentConstructor);\n } else {\n customElements.define(tagName, componentConstructor, { extends: extendsName });\n }\n }\n } catch(e) {\n if (!failedTags.has(tagName)) {\n console.error(`Failed to eager load component '${tagName}':`, e);\n failedTags.add(tagName);\n }\n }\n\n}\n\nexport async function eagerLoad(\n loadMap: Record<string, IEagerLoadInfo>, \n loaders: Record<string, ILoader | string>\n): Promise<void> {\n const promises: Promise<void>[] = [];\n for(const [tagName, info] of Object.entries(loadMap)) {\n let loader: ILoader;\n try {\n loader = resolveLoader(info.key, info.loaderKey, loaders);\n } catch (_e) {\n throw new Error(\"Loader redirection is not supported for eager loaded components: \" + tagName);\n }\n promises.push(eagerLoadItem(info, tagName, loader));\n }\n await Promise.all(promises);\n}\n","import { resolveLoader } from \"./resolveLoader.js\";\nimport { failedTags, loadingTags } from \"./tags.js\";\nimport { IConfig, ILoader, INameSpaceInfo, IPrefixMap, ITagInfo } from \"./types.js\";\n\nconst isCustomElement = (node: Node): boolean => {\n return (node instanceof Element && (node.tagName.includes(\"-\") || node.getAttribute(\"is\")?.includes(\"-\"))) ?? false;\n}\n\nexport function getCustomTagInfo(e: Element): ITagInfo {\n const elementTagName = e.tagName.toLowerCase();\n let name;\n let extendsName;\n if (elementTagName.includes(\"-\")) {\n name = elementTagName;\n extendsName = null;\n } else {\n const tagName = e.getAttribute(\"is\");\n if (tagName === null) {\n throw new Error(\"Custom element without a dash or 'is' attribute found: \" + elementTagName);\n }\n if (!tagName.includes(\"-\")) {\n throw new Error(\"Custom element 'is' attribute without a dash found: \" + elementTagName);\n }\n name = tagName;\n extendsName = elementTagName;\n }\n return { name, extends: extendsName };\n}\n\nconst observedCustomElements: WeakSet<Element> = new WeakSet<Element>();\n\nasync function observeShadowRoot(element: Element, config: IConfig, prefixMap: IPrefixMap) {\n observedCustomElements.add(element);\n await handlerForLazyLoad(element.shadowRoot!, config, prefixMap);\n}\n\nasync function checkObserveShadowRoot(element: Element, config: IConfig, prefixMap: IPrefixMap) {\n if (element.shadowRoot) {\n if (!observedCustomElements.has(element)) {\n await observeShadowRoot(element, config, prefixMap);\n }\n }\n}\n\nfunction matchNameSpace(tagName: string, prefixMap: IPrefixMap): INameSpaceInfo | null {\n for (const [prefix, info] of Object.entries(prefixMap)) {\n if (tagName.startsWith(prefix + \"-\")) {\n return info;\n }\n }\n return null;\n}\n\nasync function tagLoad(tagInfo: ITagInfo, config: IConfig, prefixMap: IPrefixMap): Promise<void> {\n const info: INameSpaceInfo | null = matchNameSpace(tagInfo.name, prefixMap);\n if (info === null) {\n throw new Error(\"No matching namespace found for lazy loaded component: \" + tagInfo.name);\n }\n \n if (loadingTags.has(tagInfo.name)) {\n await customElements.whenDefined(tagInfo.name);\n return;\n } \n loadingTags.add(tagInfo.name);\n try {\n let loader: ILoader;\n try {\n loader = resolveLoader(\"\", info.loaderKey, config.loaders);\n } catch (_e) {\n throw new Error(\"Loader redirection is not supported for lazy loaded components: \" + tagInfo.name);\n }\n\n const file: string = tagInfo.name.slice(info.prefix.length + 1);\n if (file === \"\") {\n throw new Error(\"Invalid component name for lazy loaded component: \" + tagInfo.name);\n }\n const path = info.key + file + loader.postfix;\n\n if (customElements.get(tagInfo.name)) {\n // すでに定義済み\n return;\n }\n const componentConstructor = await loader.loader(path);\n if (componentConstructor !== null) {\n if (customElements.get(tagInfo.name)) {\n // すでに定義済み\n return;\n }\n if (tagInfo.extends === null) {\n customElements.define(tagInfo.name, componentConstructor);\n } else {\n customElements.define(tagInfo.name, componentConstructor, { extends: tagInfo.extends });\n }\n } else {\n throw new Error(\"Loader returned null for component: \" + tagInfo.name);\n }\n } catch(e) {\n console.error(`Failed to lazy load component '${tagInfo.name}':`, e);\n failedTags.add(tagInfo.name);\n } finally {\n loadingTags.delete(tagInfo.name);\n }\n}\n\n//\nasync function lazyLoad(root: Node, config: IConfig, prefixMap: IPrefixMap): Promise<number> {\n const elements: Element[] = [];\n\n // Create TreeWalker (target element and comment nodes)\n const walker = document.createTreeWalker(\n root, \n NodeFilter.SHOW_ELEMENT,\n (node: Node): number => {\n return isCustomElement(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n } \n );\n \n // Move to next node with TreeWalker and add matching nodes to array\n while (walker.nextNode()) {\n elements.push(walker.currentNode as Element);\n }\n\n const tagInfos: ITagInfo[] = [];\n const tagNames = new Set<string>();\n for(const element of elements) {\n const tagInfo = getCustomTagInfo(element);\n const customClass = customElements.get(tagInfo.name);\n if (customClass === undefined) {\n // undefined\n customElements.whenDefined(tagInfo.name).then(async () => {\n // upgraded\n await checkObserveShadowRoot(element, config, prefixMap);\n });\n if (!tagNames.has(tagInfo.name) && !failedTags.has(tagInfo.name)) {\n tagNames.add(tagInfo.name);\n tagInfos.push(tagInfo);\n }\n } else {\n // upgraded\n await checkObserveShadowRoot(element, config, prefixMap);\n }\n }\n let tagCount = 0;\n for(const tagInfo of tagInfos) {\n await tagLoad(tagInfo, config, prefixMap);\n tagCount++;\n }\n return tagCount;\n\n}\n\nasync function lazyLoads(\n root: Document | ShadowRoot, \n config: IConfig, \n prefixMap: IPrefixMap\n): Promise<void> {\n while(await lazyLoad(root, config, prefixMap) > 0) {\n // Repeat until no more tags to load\n }\n}\n\nexport async function handlerForLazyLoad(\n root: Document | ShadowRoot,\n config: IConfig,\n prefixMap: IPrefixMap\n): Promise<MutationObserver | null> {\n if (Object.keys(prefixMap).length === 0) {\n return null;\n }\n try {\n await lazyLoads(root, config, prefixMap);\n } catch(e) {\n throw new Error(\"Failed to lazy load components: \" + e);\n }\n\n if (!config.observable) {\n return null;\n }\n const mo = new MutationObserver(async (): Promise<void> => {\n try {\n await lazyLoads(root, config, prefixMap);\n } catch(e) {\n console.error(\"Failed to lazy load components: \" + e);\n }\n });\n mo.observe(root, { childList: true, subtree: true });\n return mo;\n}\n","import { config } from \"../config.js\";\nimport { buildMap, loadImportmap } from \"../importmap.js\";\nimport { eagerLoad } from \"../eagerload.js\";\nimport { handlerForLazyLoad } from \"../lazyLoad.js\";\nimport { IPrefixMap } from \"../types.js\";\n\nexport class Autoloader extends HTMLElement {\n private static _instance: Autoloader | null = null;\n private _initialized = false;\n private _prefixMap: IPrefixMap | null = null;\n private _observer: MutationObserver | null = null;\n\n constructor() {\n super();\n if (Autoloader._instance) {\n throw new Error(\n `${config.tagNames.autoloader} can only be instantiated once.`\n );\n }\n Autoloader._instance = this;\n\n const importmap = loadImportmap();\n if (importmap) {\n const { prefixMap, loadMap } = buildMap(importmap);\n this._prefixMap = prefixMap;\n eagerLoad(loadMap, config.loaders).catch((e) => {\n console.error(\"Failed to eager load components:\", e);\n });\n }\n }\n\n async connectedCallback() {\n if (!this._initialized) {\n this._initialized = true;\n if (this._prefixMap) {\n if (document.readyState === \"loading\") {\n await new Promise<void>((r) =>\n document.addEventListener(\"DOMContentLoaded\", () => r(), {\n once: true,\n })\n );\n }\n this._observer = await handlerForLazyLoad(\n document,\n config,\n this._prefixMap\n );\n }\n }\n }\n\n disconnectedCallback() {\n this._observer?.disconnect();\n this._observer = null;\n if (Autoloader._instance === this) {\n Autoloader._instance = null;\n }\n }\n}\n","import { Autoloader } from \"./components/Autoloader.js\";\nimport { config } from \"./config.js\";\n\nexport function registerComponents() {\n if (!customElements.get(config.tagNames.autoloader)) {\n customElements.define(config.tagNames.autoloader, Autoloader);\n }\n}\n","import { setConfig } from \"./config.js\";\nimport { registerComponents } from \"./registerComponents.js\";\nimport { IWritableConfig } from \"./types.js\";\n\nexport function bootstrapAutoloader(config?: IWritableConfig): void {\n if (config) {\n setConfig(config);\n }\n registerComponents();\n}\n"],"names":["DEFAULT_KEY","VANILLA_KEY","VANILLA_LOADER","postfix","loader","async","path","import","default","_config","scanImportmap","loaders","observable","tagNames","autoloader","deepFreeze","obj","Object","freeze","key","keys","deepClone","clone","frozenConfig","config","getConfig","COMPONENT_KEYWORD","getKeyInfoFromImportmapKey","startsWith","endsWith","prefixWithLoader","slice","length","prefix","loaderKey","split","Error","replaceAll","toLowerCase","isNameSpaced","tagNamePart","tagName","loaderKeyPart","extendsText","extends","resolveLoader","resolvedLoader","candidates","l","entries","currentLoader","push","sort","a","b","failedTags","Set","loadingTags","EXTENDS_MAP","Map","window","HTMLButtonElement","HTMLInputElement","HTMLAnchorElement","HTMLImageElement","HTMLDivElement","HTMLSpanElement","HTMLParagraphElement","HTMLUListElement","HTMLOListElement","HTMLLIElement","HTMLTableElement","HTMLFormElement","HTMLLabelElement","HTMLSelectElement","HTMLTextAreaElement","HTMLHeadingElement","HTMLQuoteElement","HTMLPreElement","HTMLBRElement","HTMLHRElement","HTMLModElement","HTMLTableCaptionElement","HTMLTableColElement","HTMLTableSectionElement","HTMLTableRowElement","HTMLTableCellElement","HTMLFieldSetElement","HTMLLegendElement","HTMLDListElement","HTMLOptGroupElement","HTMLOptionElement","HTMLStyleElement","HTMLScriptElement","HTMLTemplateElement","HTMLCanvasElement","HTMLIFrameElement","HTMLObjectElement","HTMLEmbedElement","HTMLVideoElement","HTMLAudioElement","HTMLTrackElement","HTMLMapElement","HTMLAreaElement","HTMLSourceElement","HTMLParamElement","HTMLMeterElement","HTMLProgressElement","HTMLOutputElement","HTMLDetailsElement","HTMLDialogElement","HTMLMenuElement","HTMLSlotElement","HTMLTimeElement","HTMLDataElement","HTMLPictureElement","forEach","cls","tag","set","eagerLoadItem","info","customElements","get","componentConstructor","extendsName","prototype","resolveExtends","define","e","has","console","error","add","getCustomTagInfo","elementTagName","name","includes","getAttribute","observedCustomElements","WeakSet","checkObserveShadowRoot","element","prefixMap","shadowRoot","handlerForLazyLoad","observeShadowRoot","tagLoad","tagInfo","matchNameSpace","whenDefined","_e","file","delete","lazyLoad","root","elements","walker","document","createTreeWalker","NodeFilter","SHOW_ELEMENT","node","Element","isCustomElement","FILTER_ACCEPT","FILTER_SKIP","nextNode","currentNode","tagInfos","undefined","then","tagCount","lazyLoads","mo","MutationObserver","observe","childList","subtree","Autoloader","HTMLElement","static","_initialized","_prefixMap","_observer","constructor","super","_instance","this","importmap","imports","querySelectorAll","script","json","JSON","parse","innerHTML","assign","loadImportmap","loadMap","_value","keyInfo","buildMap","promises","Promise","all","eagerLoad","catch","connectedCallback","readyState","r","addEventListener","once","disconnectedCallback","disconnect","registerComponents","bootstrapAutoloader","partialConfig"],"mappings":"AAaO,MAAMA,EAAc,IAEdC,EAAc,UAEdC,EAAiB,CAC5BC,QAAS,MACTC,OClBKC,eAAoBC,GAEzB,aADqBC,OAAO,GAAGD,MACjBE,OAChB,GDkBMC,EAA2B,CAC/BC,eAAe,EACfC,QAAS,CACPV,CAACA,GAAcC,EACfF,CAACA,GAAcC,GAEjBW,YAAY,EACZC,SAAU,CACRC,WAAY,mBAIhB,SAASC,EAAcC,GACrB,GAAY,OAARA,GAA+B,iBAARA,EAAkB,OAAOA,EACpDC,OAAOC,OAAOF,GACd,IAAK,MAAMG,KAAOF,OAAOG,KAAKJ,GAC5BD,EAAYC,EAAgCG,IAE9C,OAAOH,CACT,CAEA,SAASK,EAAaL,GACpB,GAAY,OAARA,GAA+B,iBAARA,EAAkB,OAAOA,EACpD,MAAMM,EAAiC,CAAA,EACvC,IAAK,MAAMH,KAAOF,OAAOG,KAAKJ,GAC5BM,EAAMH,GAAOE,EAAWL,EAAgCG,IAE1D,OAAOG,CACT,CAEA,IAAIC,EAA+B,KAG5B,MAAMC,EAAkBf,WAEfgB,IAId,OAHKF,IACHA,EAAeR,EAAWM,EAAUZ,KAE/Bc,CACT,CE5DA,MAAMG,EAAoB,eAmB1B,SAASC,EAA2BR,GAClC,GAAIA,EAAIS,WAAWF,GAAoB,CACrC,GAAIP,EAAIU,SAAS,KAAM,CACrB,MAAMC,EAAmBX,EAAIY,MAAML,GAA0BP,EAAIa,OAAS,IAClEC,EAAQC,GAAcJ,EAAiBK,MAAM,IAAK,GAC1D,GAAe,KAAXF,EACF,MAAM,IAAIG,MAAM,0BAA4BjB,GAE9C,MAAO,CACLA,MACAc,OAAQA,EAAOI,WAAW,IAAK,KAAKC,cACpCJ,UAAWA,GAAa,KACxBK,cAAc,EAElB,CAAO,CACL,MAAMC,EAAcrB,EAAIY,MAAML,KACtBe,EAASC,GAAkBF,EAAYL,MAAM,IAAK,IAClDD,EAAWS,IAAiBD,GAAiB,IAAIP,MAAM,IAAK,GACpE,GAAgB,KAAZM,EACF,MAAM,IAAIL,MAAM,0BAA4BjB,GAE9C,MAAO,CACLA,MACAsB,QAASA,EAAQJ,WAAW,IAAK,KAAKC,cACtCJ,UAAWA,GAAa,KACxBU,QAASD,GAAe,KACxBJ,cAAc,EAElB,CACF,CACA,OAAO,IACT,UCjDgBM,EACdvC,EACA4B,EACAvB,GAEA,IAAIP,EAEJ,GAAkB,OAAd8B,GAAsBA,IAAclC,GAA6B,KAAdkC,EAAkB,CAEvE,IAAIY,EAAiC,KAErC,MAAMC,EAAwB,GAC9B,IAAK,MAAO5B,EAAK6B,KAAM/B,OAAOgC,QAAQtC,GAAU,CAC9C,GAAIQ,IAAQnB,EAAa,SACzB,MAAMkD,EAA6B,iBAANF,EAAiBrC,EAAQqC,GAAKA,EAC9B,iBAAlBE,GACXH,EAAWI,KAAKD,EAClB,CAGAH,EAAWK,KAAK,CAACC,EAAGC,IAAMA,EAAEnD,QAAQ6B,OAASqB,EAAElD,QAAQ6B,QAEvD,IAAK,MAAMkB,KAAiBH,EAC1B,GAAIzC,EAAKuB,SAASqB,EAAc/C,SAAU,CACxC2C,EAAiBI,EACjB,KACF,CAGEJ,EACF1C,EAAS0C,GAET1C,EAASO,EAAQX,GACK,iBAAXI,IACTA,EAASO,EAAQP,IAGvB,MAEE,GADAA,EAASO,EAAQuB,IACZ9B,EACH,MAAM,IAAIgC,MAAM,qBAAuBF,GAI3C,GAAsB,iBAAX9B,EACT,MAAM,IAAIgC,MAAM,4CAElB,OAAOhC,CACT,CClDO,MAAMmD,EAAa,IAAIC,IACjBC,EAAc,IAAID,ICEzBE,EAAc,IAAIC,IAExB,GAAsB,oBAAXC,OAAwB,CACrB,CACV,CAACC,kBAAmB,UACpB,CAACC,iBAAkB,SACnB,CAACC,kBAAmB,KACpB,CAACC,iBAAkB,OACnB,CAACC,eAAgB,OACjB,CAACC,gBAAiB,QAClB,CAACC,qBAAsB,KACvB,CAACC,iBAAkB,MACnB,CAACC,iBAAkB,MACnB,CAACC,cAAe,MAChB,CAACC,iBAAkB,SACnB,CAACC,gBAAiB,QAClB,CAACC,iBAAkB,SACnB,CAACC,kBAAmB,UACpB,CAACC,oBAAqB,YACtB,CAACC,mBAAoB,MACrB,CAACC,iBAAkB,cACnB,CAACC,eAAgB,OACjB,CAACC,cAAe,MAChB,CAACC,cAAe,MAChB,CAACC,eAAgB,OACjB,CAACC,wBAAyB,WAC1B,CAACC,oBAAqB,OACtB,CAACC,wBAAyB,SAC1B,CAACC,oBAAqB,MACtB,CAACC,qBAAsB,MACvB,CAACC,oBAAqB,YACtB,CAACC,kBAAmB,UACpB,CAACC,iBAAkB,MACnB,CAACC,oBAAqB,YACtB,CAACC,kBAAmB,UACpB,CAACC,iBAAkB,SACnB,CAACC,kBAAmB,UACpB,CAACC,oBAAqB,YACtB,CAACC,kBAAmB,UACpB,CAACC,kBAAmB,UACpB,CAACC,kBAAmB,UACpB,CAACC,iBAAkB,SACnB,CAACC,iBAAkB,SACnB,CAACC,iBAAkB,SACnB,CAACC,iBAAkB,SACnB,CAACC,eAAgB,OACjB,CAACC,gBAAiB,QAClB,CAACC,kBAAmB,UACpB,CAACC,iBAAkB,SACnB,CAACC,iBAAkB,SACnB,CAACC,oBAAqB,YACtB,CAACC,kBAAmB,UACpB,CAACC,mBAAoB,WACrB,CAACC,kBAAmB,UACpB,CAACC,gBAAiB,QAClB,CAACC,gBAAiB,QAClB,CAACC,gBAAiB,QAClB,CAACC,gBAAiB,QAClB,CAACC,mBAAoB,YAGnBC,QAAQ,EAAEC,EAAKC,WAEE,IAARD,GACT3D,EAAY6D,IAAIF,EAAKC,IAG3B,CAWAjH,eAAemH,EAAcC,EAAsBhF,EAAgBrC,GACjE,IACE,GAAIsH,eAAeC,IAAIlF,GAErB,OAEF,MAAMmF,QAA6BxH,EAAOA,OAAOqH,EAAKtG,KACtD,GAA6B,OAAzByG,EAA+B,CACjC,IAAIC,EAAcJ,EAAK7E,QAKvB,GAJoB,OAAhBiF,IACFA,EAnBR,SAAwBD,GACtB,IAAK,MAAOP,EAAKC,KAAQ5D,EACvB,GAAIkE,EAAqBE,qBAAqBT,EAC5C,OAAOC,EAGX,OAAO,IACT,CAYsBS,CAAeH,IAG3BF,eAAeC,IAAIlF,GAErB,OAEkB,OAAhBoF,EACFH,eAAeM,OAAOvF,EAASmF,GAE/BF,eAAeM,OAAOvF,EAASmF,EAAsB,CAAEhF,QAASiF,GAEpE,CACF,CAAE,MAAMI,GACD1E,EAAW2E,IAAIzF,KAClB0F,QAAQC,MAAM,mCAAmC3F,MAAawF,GAC9D1E,EAAW8E,IAAI5F,GAEnB,CAEF,CCxGM,SAAU6F,EAAiBL,GAC/B,MAAMM,EAAiBN,EAAExF,QAAQH,cACjC,IAAIkG,EACAX,EACJ,GAAIU,EAAeE,SAAS,KAC1BD,EAAOD,EACPV,EAAc,SACT,CACL,MAAMpF,EAAUwF,EAAES,aAAa,MAC/B,GAAgB,OAAZjG,EACF,MAAM,IAAIL,MAAM,0DAA4DmG,GAE9E,IAAK9F,EAAQgG,SAAS,KACpB,MAAM,IAAIrG,MAAM,uDAAyDmG,GAE3EC,EAAO/F,EACPoF,EAAcU,CAChB,CACA,MAAO,CAAEC,OAAM5F,QAASiF,EAC1B,CAEA,MAAMc,EAA2C,IAAIC,QAOrDvI,eAAewI,EAAuBC,EAAkBtH,EAAiBuH,GACnED,EAAQE,aACLL,EAAuBT,IAAIY,UAPpCzI,eAAiCyI,EAAkBtH,EAAiBuH,GAClEJ,EAAuBN,IAAIS,SACrBG,EAAmBH,EAAQE,WAAaxH,EAAQuH,EACxD,CAKYG,CAAkBJ,EAAStH,EAAQuH,GAG/C,CAWA1I,eAAe8I,EAAQC,EAAmB5H,EAAiBuH,GACzD,MAAMtB,EAVR,SAAwBhF,EAAiBsG,GACvC,IAAK,MAAO9G,EAAQwF,KAASxG,OAAOgC,QAAQ8F,GAC1C,GAAItG,EAAQb,WAAWK,EAAS,KAC9B,OAAOwF,EAGX,OAAO,IACT,CAGsC4B,CAAeD,EAAQZ,KAAMO,GACjE,GAAa,OAATtB,EACF,MAAM,IAAIrF,MAAM,0DAA4DgH,EAAQZ,MAGtF,GAAI/E,EAAYyE,IAAIkB,EAAQZ,YACpBd,eAAe4B,YAAYF,EAAQZ,UAD3C,CAIA/E,EAAY4E,IAAIe,EAAQZ,MACxB,IACE,IAAIpI,EACJ,IACEA,EAASyC,EAAc,GAAI4E,EAAKvF,UAAWV,EAAOb,QACpD,CAAE,MAAO4I,GACP,MAAM,IAAInH,MAAM,mEAAqEgH,EAAQZ,KAC/F,CAEA,MAAMgB,EAAeJ,EAAQZ,KAAKzG,MAAM0F,EAAKxF,OAAOD,OAAS,GAC7D,GAAa,KAATwH,EACF,MAAM,IAAIpH,MAAM,qDAAuDgH,EAAQZ,MAEjF,MAAMlI,EAAOmH,EAAKtG,IAAMqI,EAAOpJ,EAAOD,QAEtC,GAAIuH,eAAeC,IAAIyB,EAAQZ,MAE7B,OAEF,MAAMZ,QAA6BxH,EAAOA,OAAOE,GACjD,GAA6B,OAAzBsH,EAWF,MAAM,IAAIxF,MAAM,uCAAyCgH,EAAQZ,MAVjE,GAAId,eAAeC,IAAIyB,EAAQZ,MAE7B,OAEsB,OAApBY,EAAQxG,QACV8E,eAAeM,OAAOoB,EAAQZ,KAAMZ,GAEpCF,eAAeM,OAAOoB,EAAQZ,KAAMZ,EAAsB,CAAEhF,QAASwG,EAAQxG,SAKnF,CAAE,MAAMqF,GACNE,QAAQC,MAAM,kCAAkCgB,EAAQZ,SAAUP,GAClE1E,EAAW8E,IAAIe,EAAQZ,KACzB,SACE/E,EAAYgG,OAAOL,EAAQZ,KAC7B,CAvCA,CAwCF,CAGAnI,eAAeqJ,EAASC,EAAYnI,EAAiBuH,GACnD,MAAMa,EAAsB,GAGtBC,EAASC,SAASC,iBACtBJ,EACAK,WAAWC,aACVC,GA5GmB,CAACA,IACfA,aAAgBC,UAAYD,EAAKzH,QAAQgG,SAAS,MAAQyB,EAAKxB,aAAa,OAAOD,SAAS,SAAU,EA4GnG2B,CAAgBF,GAAQF,WAAWK,cAAgBL,WAAWM,aAKzE,KAAOT,EAAOU,YACZX,EAASzG,KAAK0G,EAAOW,aAGvB,MAAMC,EAAuB,GACvB5J,EAAW,IAAI2C,IACrB,IAAI,MAAMsF,KAAWc,EAAU,CAC7B,MAAMR,EAAUd,EAAiBQ,QAEb4B,IADAhD,eAAeC,IAAIyB,EAAQZ,OAG7Cd,eAAe4B,YAAYF,EAAQZ,MAAMmC,KAAKtK,gBAEtCwI,EAAuBC,EAAStH,EAAQuH,KAE3ClI,EAASqH,IAAIkB,EAAQZ,OAAUjF,EAAW2E,IAAIkB,EAAQZ,QACzD3H,EAASwH,IAAIe,EAAQZ,MACrBiC,EAAStH,KAAKiG,WAIVP,EAAuBC,EAAStH,EAAQuH,EAElD,CACA,IAAI6B,EAAW,EACf,IAAI,MAAMxB,KAAWqB,QACbtB,EAAQC,EAAS5H,EAAQuH,GAC/B6B,IAEF,OAAOA,CAET,CAEAvK,eAAewK,EACblB,EACAnI,EACAuH,GAEA,WAAYW,EAASC,EAAMnI,EAAQuH,GAAa,IAGlD,CAEO1I,eAAe4I,EACpBU,EACAnI,EACAuH,GAEA,GAAsC,IAAlC9H,OAAOG,KAAK2H,GAAW/G,OACzB,OAAO,KAET,UACQ6I,EAAUlB,EAAMnI,EAAQuH,EAChC,CAAE,MAAMd,GACN,MAAM,IAAI7F,MAAM,mCAAqC6F,EACvD,CAEA,IAAKzG,EAAOZ,WACV,OAAO,KAET,MAAMkK,EAAK,IAAIC,iBAAiB1K,UAC9B,UACQwK,EAAUlB,EAAMnI,EAAQuH,EAChC,CAAE,MAAMd,GACNE,QAAQC,MAAM,mCAAqCH,EACrD,IAGF,OADA6C,EAAGE,QAAQrB,EAAM,CAAEsB,WAAW,EAAMC,SAAS,IACtCJ,CACT,CCrLM,MAAOK,UAAmBC,YACtBC,iBAAsC,KACtCC,cAAe,EACfC,WAAgC,KAChCC,UAAqC,KAE7C,WAAAC,GAEE,GADAC,QACIP,EAAWQ,UACb,MAAM,IAAIvJ,MACR,GAAGZ,EAAOX,SAASC,6CAGvBqK,EAAWQ,UAAYC,KAEvB,MAAMC,aLhBR,MAAMA,EAAwB,CAAEC,QAAS,IAWzC,OAVAhC,SAASiC,iBAAiB,4BAA4B3E,QAAS4E,IAC7D,IACE,MAAMC,EAAOC,KAAKC,MAAMH,EAAOI,WAC3BH,EAAKH,UACPD,EAAUC,QAAU7K,OAAOoL,OAAOR,EAAUC,QAASG,EAAKH,SAE9D,CAAE,MAAO7D,GACP,MAAM,IAAI7F,MAAM,mCAAqC6F,EACvD,IAEKhH,OAAOG,KAAKyK,EAAUC,SAAS9J,OAAS,EAC3C6J,EACA,IACN,CKEsBS,GAClB,GAAIT,EAAW,CACb,MAAM9C,UAAEA,EAASwD,QAAEA,GL+BnB,SAAmBV,GAGvB,MAAM9C,EAAwB,CAAA,EACxBwD,EAAoB,CAAA,EAC1B,IAAK,MAAOpL,EAAKqL,KAAWvL,OAAOgC,QAAQ4I,EAAUC,SAAU,CAC7D,MAAMW,EAAU9K,EAA2BR,GAC3B,OAAZsL,IAGAA,EAAQlK,aACVwG,EAAU0D,EAAQxK,QAAUwK,EAE5BF,EAAQE,EAAQhK,SAAWgK,EAE/B,CACA,MAAO,CAAE1D,YAAWwD,UACtB,CKhDqCG,CAASb,GACxCD,KAAKL,WAAaxC,EF0FjB1I,eACLkM,EACA5L,GAEA,MAAMgM,EAA4B,GAClC,IAAI,MAAOlK,EAASgF,KAASxG,OAAOgC,QAAQsJ,GAAU,CACpD,IAAInM,EACJ,IACEA,EAASyC,EAAc4E,EAAKtG,IAAKsG,EAAKvF,UAAWvB,EACnD,CAAE,MAAO4I,GACP,MAAM,IAAInH,MAAM,oEAAsEK,EACxF,CACAkK,EAASxJ,KAAKqE,EAAcC,EAAMhF,EAASrC,GAC7C,OACMwM,QAAQC,IAAIF,EACpB,CExGMG,CAAUP,EAAS/K,EAAOb,SAASoM,MAAO9E,IACxCE,QAAQC,MAAM,mCAAoCH,IAEtD,CACF,CAEA,uBAAM+E,GACCpB,KAAKN,eACRM,KAAKN,cAAe,EAChBM,KAAKL,aACqB,YAAxBzB,SAASmD,kBACL,IAAIL,QAAeM,GACvBpD,SAASqD,iBAAiB,mBAAoB,IAAMD,IAAK,CACvDE,MAAM,KAIZxB,KAAKJ,gBAAkBvC,EACrBa,SACAtI,EACAoK,KAAKL,aAIb,CAEA,oBAAA8B,GACEzB,KAAKJ,WAAW8B,aAChB1B,KAAKJ,UAAY,KACbL,EAAWQ,YAAcC,OAC3BT,EAAWQ,UAAY,KAE3B,WCtDc4B,IACT7F,eAAeC,IAAInG,EAAOX,SAASC,aACtC4G,eAAeM,OAAOxG,EAAOX,SAASC,WAAYqK,EAEtD,CCHM,SAAUqC,EAAoBhM,GT4D9B,IAAoBiM,ES3DpBjM,IT4DuC,kBADnBiM,ES1DZjM,GT2Dad,gBACvBD,EAAQC,cAAgB+M,EAAc/M,eAEpC+M,EAAc9M,SAChBM,OAAOoL,OAAO5L,EAAQE,QAAS8M,EAAc9M,SAEP,kBAA7B8M,EAAc7M,aACvBH,EAAQG,WAAa6M,EAAc7M,YAEjC6M,EAAc5M,UAChBI,OAAOoL,OAAO5L,EAAQI,SAAU4M,EAAc5M,UAEhDU,EAAe,MSrEfgM,GACF"}
1
+ {"version":3,"file":"index.esm.min.js","sources":["../src/config.ts","../src/vanilla.ts","../src/importmap.ts","../src/resolveLoader.ts","../src/tags.ts","../src/eagerload.ts","../src/lazyLoad.ts","../src/components/Autoloader.ts","../src/registerComponents.ts","../src/bootstrapAutoloader.ts"],"sourcesContent":["\r\nimport { IConfig, ILoader, IWritableConfig } from \"./types.js\"\r\nimport { load } from \"./vanilla.js\"\r\n\r\ninterface IInternalConfig extends IConfig {\r\n scanImportmap: boolean;\r\n loaders: Record<string, ILoader | string>;\r\n observable: boolean;\r\n tagNames: {\r\n autoloader: string;\r\n };\r\n}\r\n\r\nexport const DEFAULT_KEY = \"*\";\r\n\r\nexport const VANILLA_KEY = \"vanilla\";\r\n\r\nexport const VANILLA_LOADER = {\r\n postfix: \".js\",\r\n loader: load\r\n}\r\n\r\nconst _config: IInternalConfig = {\r\n scanImportmap: true,\r\n loaders: {\r\n [VANILLA_KEY]: VANILLA_LOADER,\r\n [DEFAULT_KEY]: VANILLA_KEY\r\n },\r\n observable: true,\r\n tagNames: {\r\n autoloader: \"wcs-autoloader\"\r\n }\r\n}\r\n\r\nfunction deepFreeze<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n Object.freeze(obj);\r\n for (const key of Object.keys(obj)) {\r\n deepFreeze((obj as Record<string, unknown>)[key]);\r\n }\r\n return obj;\r\n}\r\n\r\nfunction deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n const clone: Record<string, unknown> = {};\r\n for (const key of Object.keys(obj)) {\r\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n return clone as T;\r\n}\r\n\r\nlet frozenConfig: IConfig | null = null;\r\n\r\n// 後方互換のため config もエクスポート(読み取り専用として使用)\r\nexport const config: IConfig = _config as IConfig;\r\n\r\nexport function getConfig(): IConfig {\r\n if (!frozenConfig) {\r\n frozenConfig = deepFreeze(deepClone(_config));\r\n }\r\n return frozenConfig;\r\n}\r\n\r\nexport function setConfig(partialConfig: IWritableConfig): void {\r\n if (typeof partialConfig.scanImportmap === \"boolean\") {\r\n _config.scanImportmap = partialConfig.scanImportmap;\r\n }\r\n if (partialConfig.loaders) {\r\n Object.assign(_config.loaders, partialConfig.loaders);\r\n }\r\n if (typeof partialConfig.observable === \"boolean\") {\r\n _config.observable = partialConfig.observable;\r\n }\r\n if (partialConfig.tagNames) {\r\n Object.assign(_config.tagNames, partialConfig.tagNames);\r\n }\r\n frozenConfig = null;\r\n}\r\n","\r\nexport async function load(path: string): Promise<CustomElementConstructor> {\r\n const module = await import(`${path}`);\r\n return module.default as CustomElementConstructor;\r\n}\r\n","import { IImportMap, IKeyInfo, ILoadMap, IPrefixMap } from \"./types.js\";\r\n\r\nconst COMPONENT_KEYWORD = \"@components/\";\r\n\r\nexport function loadImportmap(): IImportMap | null {\r\n const importmap: IImportMap = { imports: {} };\r\n document.querySelectorAll('script[type=\"importmap\"]').forEach((script) => {\r\n try {\r\n const json = JSON.parse(script.innerHTML);\r\n if (json.imports) {\r\n importmap.imports = Object.assign(importmap.imports, json.imports);\r\n }\r\n } catch (e) {\r\n throw new Error(\"Failed to parse importmap JSON: \" + e);\r\n }\r\n });\r\n return Object.keys(importmap.imports).length > 0\r\n ? importmap\r\n : null;\r\n}\r\n\r\nfunction getKeyInfoFromImportmapKey(key: string): IKeyInfo | null {\r\n if (key.startsWith(COMPONENT_KEYWORD)) {\r\n if (key.endsWith(\"/\")) {\r\n const prefixWithLoader = key.slice(COMPONENT_KEYWORD.length, key.length - 1);\r\n const [ prefix, loaderKey ] = prefixWithLoader.split(\"|\", 2);\r\n if (prefix === \"\") {\r\n throw new Error(\"Invalid importmap key: \" + key);\r\n }\r\n return {\r\n key,\r\n prefix: prefix.replaceAll(\"/\", \"-\").toLowerCase(),\r\n loaderKey: loaderKey ?? null,\r\n isNameSpaced: true\r\n };\r\n } else {\r\n const tagNamePart = key.slice(COMPONENT_KEYWORD.length);\r\n const [ tagName, loaderKeyPart ] = tagNamePart.split(\"|\", 2);\r\n const [ loaderKey, extendsText ] = (loaderKeyPart ?? \"\").split(\",\", 2);\r\n if (tagName === \"\") {\r\n throw new Error(\"Invalid importmap key: \" + key);\r\n }\r\n return {\r\n key,\r\n tagName: tagName.replaceAll(\"/\", \"-\").toLowerCase(),\r\n loaderKey: loaderKey || null,\r\n extends: extendsText || null,\r\n isNameSpaced: false\r\n };\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport function buildMap(importmap: IImportMap): {\r\n prefixMap: IPrefixMap, loadMap: ILoadMap\r\n} {\r\n const prefixMap: IPrefixMap = {};\r\n const loadMap: ILoadMap = {};\r\n for (const [key, _value] of Object.entries(importmap.imports)) {\r\n const keyInfo = getKeyInfoFromImportmapKey(key);\r\n if (keyInfo === null) {\r\n continue;\r\n }\r\n if (keyInfo.isNameSpaced) {\r\n prefixMap[keyInfo.prefix] = keyInfo;\r\n } else {\r\n loadMap[keyInfo.tagName] = keyInfo;\r\n }\r\n }\r\n return { prefixMap, loadMap };\r\n}","import { DEFAULT_KEY } from \"./config.js\";\r\nimport { ILoader } from \"./types.js\";\r\n\r\nexport function resolveLoader(\r\n path: string,\r\n loaderKey: string | null,\r\n loaders: Record<string, ILoader | string>\r\n): ILoader {\r\n let loader: ILoader | string;\r\n\r\n if (loaderKey === null || loaderKey === DEFAULT_KEY || loaderKey === \"\") {\r\n // Try to resolve by postfix\r\n let resolvedLoader: ILoader | null = null;\r\n \r\n const candidates: ILoader[] = [];\r\n for (const [key, l] of Object.entries(loaders)) {\r\n if (key === DEFAULT_KEY) continue;\r\n const currentLoader = typeof l === \"string\" ? loaders[l] : l;\r\n if (typeof currentLoader === \"string\") continue; // Should not happen if config is correct\r\n candidates.push(currentLoader);\r\n }\r\n\r\n // Sort by postfix length descending to match longest extension first\r\n candidates.sort((a, b) => b.postfix.length - a.postfix.length);\r\n\r\n for (const currentLoader of candidates) {\r\n if (path.endsWith(currentLoader.postfix)) {\r\n resolvedLoader = currentLoader;\r\n break;\r\n }\r\n }\r\n\r\n if (resolvedLoader) {\r\n loader = resolvedLoader;\r\n } else {\r\n loader = loaders[DEFAULT_KEY];\r\n if (typeof loader === \"string\") {\r\n loader = loaders[loader];\r\n }\r\n }\r\n } else {\r\n loader = loaders[loaderKey];\r\n if (!loader) {\r\n throw new Error(\"Loader not found: \" + loaderKey);\r\n }\r\n }\r\n\r\n if (typeof loader === \"string\") {\r\n throw new Error(\"Loader redirection is not supported here\");\r\n }\r\n return loader;\r\n}\r\n","\r\nexport const failedTags = new Set<string>();\r\nexport const loadingTags = new Set<string>();\r\n\r\nexport function resetState() {\r\n failedTags.clear();\r\n loadingTags.clear();\r\n}\r\n\r\n","import { resolveLoader } from \"./resolveLoader.js\";\r\nimport { failedTags } from \"./tags.js\";\r\nimport { IEagerLoadInfo, ILoader } from \"./types.js\";\r\n\r\nconst EXTENDS_MAP = new Map<any, string>();\r\n\r\nif (typeof window !== \"undefined\") {\r\n const map = [\r\n [HTMLButtonElement, \"button\"],\r\n [HTMLInputElement, \"input\"],\r\n [HTMLAnchorElement, \"a\"],\r\n [HTMLImageElement, \"img\"],\r\n [HTMLDivElement, \"div\"],\r\n [HTMLSpanElement, \"span\"],\r\n [HTMLParagraphElement, \"p\"],\r\n [HTMLUListElement, \"ul\"],\r\n [HTMLOListElement, \"ol\"],\r\n [HTMLLIElement, \"li\"],\r\n [HTMLTableElement, \"table\"],\r\n [HTMLFormElement, \"form\"],\r\n [HTMLLabelElement, \"label\"],\r\n [HTMLSelectElement, \"select\"],\r\n [HTMLTextAreaElement, \"textarea\"],\r\n [HTMLHeadingElement, \"h1\"],\r\n [HTMLQuoteElement, \"blockquote\"],\r\n [HTMLPreElement, \"pre\"],\r\n [HTMLBRElement, \"br\"],\r\n [HTMLHRElement, \"hr\"],\r\n [HTMLModElement, \"ins\"],\r\n [HTMLTableCaptionElement, \"caption\"],\r\n [HTMLTableColElement, \"col\"],\r\n [HTMLTableSectionElement, \"tbody\"],\r\n [HTMLTableRowElement, \"tr\"],\r\n [HTMLTableCellElement, \"td\"],\r\n [HTMLFieldSetElement, \"fieldset\"],\r\n [HTMLLegendElement, \"legend\"],\r\n [HTMLDListElement, \"dl\"],\r\n [HTMLOptGroupElement, \"optgroup\"],\r\n [HTMLOptionElement, \"option\"],\r\n [HTMLStyleElement, \"style\"],\r\n [HTMLScriptElement, \"script\"],\r\n [HTMLTemplateElement, \"template\"],\r\n [HTMLCanvasElement, \"canvas\"],\r\n [HTMLIFrameElement, \"iframe\"],\r\n [HTMLObjectElement, \"object\"],\r\n [HTMLEmbedElement, \"embed\"],\r\n [HTMLVideoElement, \"video\"],\r\n [HTMLAudioElement, \"audio\"],\r\n [HTMLTrackElement, \"track\"],\r\n [HTMLMapElement, \"map\"],\r\n [HTMLAreaElement, \"area\"],\r\n [HTMLSourceElement, \"source\"],\r\n [HTMLParamElement, \"param\"],\r\n [HTMLMeterElement, \"meter\"],\r\n [HTMLProgressElement, \"progress\"],\r\n [HTMLOutputElement, \"output\"],\r\n [HTMLDetailsElement, \"details\"],\r\n [HTMLDialogElement, \"dialog\"],\r\n [HTMLMenuElement, \"menu\"],\r\n [HTMLSlotElement, \"slot\"],\r\n [HTMLTimeElement, \"time\"],\r\n [HTMLDataElement, \"data\"],\r\n [HTMLPictureElement, \"picture\"],\r\n ] as const;\r\n\r\n map.forEach(([cls, tag]) => {\r\n /* istanbul ignore next */\r\n if (typeof cls !== \"undefined\") {\r\n EXTENDS_MAP.set(cls, tag);\r\n }\r\n });\r\n}\r\n\r\nfunction resolveExtends(componentConstructor: CustomElementConstructor): string | null {\r\n for (const [cls, tag] of EXTENDS_MAP) {\r\n if (componentConstructor.prototype instanceof cls) {\r\n return tag;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nasync function eagerLoadItem(info: IEagerLoadInfo, tagName:string, loader: ILoader): Promise<void> {\r\n try {\r\n if (customElements.get(tagName)) {\r\n // すでに定義済み\r\n return;\r\n }\r\n const componentConstructor = await loader.loader(info.key);\r\n if (componentConstructor !== null) {\r\n let extendsName = info.extends;\r\n if (extendsName === null) {\r\n extendsName = resolveExtends(componentConstructor);\r\n }\r\n\r\n if (customElements.get(tagName)) {\r\n // すでに定義済み\r\n return;\r\n }\r\n if (extendsName === null) {\r\n customElements.define(tagName, componentConstructor);\r\n } else {\r\n customElements.define(tagName, componentConstructor, { extends: extendsName });\r\n }\r\n }\r\n } catch(e) {\r\n if (!failedTags.has(tagName)) {\r\n console.error(`Failed to eager load component '${tagName}':`, e);\r\n failedTags.add(tagName);\r\n }\r\n }\r\n\r\n}\r\n\r\nexport async function eagerLoad(\r\n loadMap: Record<string, IEagerLoadInfo>, \r\n loaders: Record<string, ILoader | string>\r\n): Promise<void> {\r\n const promises: Promise<void>[] = [];\r\n for(const [tagName, info] of Object.entries(loadMap)) {\r\n let loader: ILoader;\r\n try {\r\n loader = resolveLoader(info.key, info.loaderKey, loaders);\r\n } catch (_e) {\r\n throw new Error(\"Loader redirection is not supported for eager loaded components: \" + tagName);\r\n }\r\n promises.push(eagerLoadItem(info, tagName, loader));\r\n }\r\n await Promise.all(promises);\r\n}\r\n","import { resolveLoader } from \"./resolveLoader.js\";\r\nimport { failedTags, loadingTags } from \"./tags.js\";\r\nimport { IConfig, ILoader, INameSpaceInfo, IPrefixMap, ITagInfo } from \"./types.js\";\r\n\r\nconst isCustomElement = (node: Node): boolean => {\r\n return (node instanceof Element && (node.tagName.includes(\"-\") || node.getAttribute(\"is\")?.includes(\"-\"))) ?? false;\r\n}\r\n\r\nexport function getCustomTagInfo(e: Element): ITagInfo {\r\n const elementTagName = e.tagName.toLowerCase();\r\n let name;\r\n let extendsName;\r\n if (elementTagName.includes(\"-\")) {\r\n name = elementTagName;\r\n extendsName = null;\r\n } else {\r\n const tagName = e.getAttribute(\"is\");\r\n if (tagName === null) {\r\n throw new Error(\"Custom element without a dash or 'is' attribute found: \" + elementTagName);\r\n }\r\n if (!tagName.includes(\"-\")) {\r\n throw new Error(\"Custom element 'is' attribute without a dash found: \" + elementTagName);\r\n }\r\n name = tagName;\r\n extendsName = elementTagName;\r\n }\r\n return { name, extends: extendsName };\r\n}\r\n\r\nconst observedCustomElements: WeakSet<Element> = new WeakSet<Element>();\r\n\r\nasync function observeShadowRoot(element: Element, config: IConfig, prefixMap: IPrefixMap) {\r\n observedCustomElements.add(element);\r\n await handlerForLazyLoad(element.shadowRoot!, config, prefixMap);\r\n}\r\n\r\nasync function checkObserveShadowRoot(element: Element, config: IConfig, prefixMap: IPrefixMap) {\r\n if (element.shadowRoot) {\r\n if (!observedCustomElements.has(element)) {\r\n await observeShadowRoot(element, config, prefixMap);\r\n }\r\n }\r\n}\r\n\r\nfunction matchNameSpace(tagName: string, prefixMap: IPrefixMap): INameSpaceInfo | null {\r\n for (const [prefix, info] of Object.entries(prefixMap)) {\r\n if (tagName.startsWith(prefix + \"-\")) {\r\n return info;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nasync function tagLoad(tagInfo: ITagInfo, config: IConfig, prefixMap: IPrefixMap): Promise<void> {\r\n const info: INameSpaceInfo | null = matchNameSpace(tagInfo.name, prefixMap);\r\n if (info === null) {\r\n throw new Error(\"No matching namespace found for lazy loaded component: \" + tagInfo.name);\r\n }\r\n \r\n if (loadingTags.has(tagInfo.name)) {\r\n await customElements.whenDefined(tagInfo.name);\r\n return;\r\n } \r\n loadingTags.add(tagInfo.name);\r\n try {\r\n let loader: ILoader;\r\n try {\r\n loader = resolveLoader(\"\", info.loaderKey, config.loaders);\r\n } catch (_e) {\r\n throw new Error(\"Loader redirection is not supported for lazy loaded components: \" + tagInfo.name);\r\n }\r\n\r\n const file: string = tagInfo.name.slice(info.prefix.length + 1);\r\n if (file === \"\") {\r\n throw new Error(\"Invalid component name for lazy loaded component: \" + tagInfo.name);\r\n }\r\n const path = info.key + file + loader.postfix;\r\n\r\n if (customElements.get(tagInfo.name)) {\r\n // すでに定義済み\r\n return;\r\n }\r\n const componentConstructor = await loader.loader(path);\r\n if (componentConstructor !== null) {\r\n if (customElements.get(tagInfo.name)) {\r\n // すでに定義済み\r\n return;\r\n }\r\n if (tagInfo.extends === null) {\r\n customElements.define(tagInfo.name, componentConstructor);\r\n } else {\r\n customElements.define(tagInfo.name, componentConstructor, { extends: tagInfo.extends });\r\n }\r\n } else {\r\n throw new Error(\"Loader returned null for component: \" + tagInfo.name);\r\n }\r\n } catch(e) {\r\n console.error(`Failed to lazy load component '${tagInfo.name}':`, e);\r\n failedTags.add(tagInfo.name);\r\n } finally {\r\n loadingTags.delete(tagInfo.name);\r\n }\r\n}\r\n\r\n//\r\nasync function lazyLoad(root: Node, config: IConfig, prefixMap: IPrefixMap): Promise<number> {\r\n const elements: Element[] = [];\r\n\r\n // Create TreeWalker (target element and comment nodes)\r\n const walker = document.createTreeWalker(\r\n root, \r\n NodeFilter.SHOW_ELEMENT,\r\n (node: Node): number => {\r\n return isCustomElement(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\r\n } \r\n );\r\n \r\n // Move to next node with TreeWalker and add matching nodes to array\r\n while (walker.nextNode()) {\r\n elements.push(walker.currentNode as Element);\r\n }\r\n\r\n const tagInfos: ITagInfo[] = [];\r\n const tagNames = new Set<string>();\r\n for(const element of elements) {\r\n const tagInfo = getCustomTagInfo(element);\r\n const customClass = customElements.get(tagInfo.name);\r\n if (customClass === undefined) {\r\n // undefined\r\n customElements.whenDefined(tagInfo.name).then(async () => {\r\n // upgraded\r\n await checkObserveShadowRoot(element, config, prefixMap);\r\n });\r\n if (!tagNames.has(tagInfo.name) && !failedTags.has(tagInfo.name)) {\r\n tagNames.add(tagInfo.name);\r\n tagInfos.push(tagInfo);\r\n }\r\n } else {\r\n // upgraded\r\n await checkObserveShadowRoot(element, config, prefixMap);\r\n }\r\n }\r\n let tagCount = 0;\r\n for(const tagInfo of tagInfos) {\r\n await tagLoad(tagInfo, config, prefixMap);\r\n tagCount++;\r\n }\r\n return tagCount;\r\n\r\n}\r\n\r\nasync function lazyLoads(\r\n root: Document | ShadowRoot, \r\n config: IConfig, \r\n prefixMap: IPrefixMap\r\n): Promise<void> {\r\n while(await lazyLoad(root, config, prefixMap) > 0) {\r\n // Repeat until no more tags to load\r\n }\r\n}\r\n\r\nexport async function handlerForLazyLoad(\r\n root: Document | ShadowRoot,\r\n config: IConfig,\r\n prefixMap: IPrefixMap\r\n): Promise<MutationObserver | null> {\r\n if (Object.keys(prefixMap).length === 0) {\r\n return null;\r\n }\r\n try {\r\n await lazyLoads(root, config, prefixMap);\r\n } catch(e) {\r\n throw new Error(\"Failed to lazy load components: \" + e);\r\n }\r\n\r\n if (!config.observable) {\r\n return null;\r\n }\r\n const mo = new MutationObserver(async (): Promise<void> => {\r\n try {\r\n await lazyLoads(root, config, prefixMap);\r\n } catch(e) {\r\n console.error(\"Failed to lazy load components: \" + e);\r\n }\r\n });\r\n mo.observe(root, { childList: true, subtree: true });\r\n return mo;\r\n}\r\n","import { config } from \"../config.js\";\r\nimport { buildMap, loadImportmap } from \"../importmap.js\";\r\nimport { eagerLoad } from \"../eagerload.js\";\r\nimport { handlerForLazyLoad } from \"../lazyLoad.js\";\r\nimport { IPrefixMap } from \"../types.js\";\r\n\r\nexport class Autoloader extends HTMLElement {\r\n private static _instance: Autoloader | null = null;\r\n private _initialized = false;\r\n private _prefixMap: IPrefixMap | null = null;\r\n private _observer: MutationObserver | null = null;\r\n\r\n constructor() {\r\n super();\r\n if (Autoloader._instance) {\r\n throw new Error(\r\n `${config.tagNames.autoloader} can only be instantiated once.`\r\n );\r\n }\r\n Autoloader._instance = this;\r\n\r\n const importmap = loadImportmap();\r\n if (importmap) {\r\n const { prefixMap, loadMap } = buildMap(importmap);\r\n this._prefixMap = prefixMap;\r\n eagerLoad(loadMap, config.loaders).catch((e) => {\r\n console.error(\"Failed to eager load components:\", e);\r\n });\r\n }\r\n }\r\n\r\n async connectedCallback() {\r\n if (!this._initialized) {\r\n this._initialized = true;\r\n if (this._prefixMap) {\r\n if (document.readyState === \"loading\") {\r\n await new Promise<void>((r) =>\r\n document.addEventListener(\"DOMContentLoaded\", () => r(), {\r\n once: true,\r\n })\r\n );\r\n }\r\n this._observer = await handlerForLazyLoad(\r\n document,\r\n config,\r\n this._prefixMap\r\n );\r\n }\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n this._observer?.disconnect();\r\n this._observer = null;\r\n if (Autoloader._instance === this) {\r\n Autoloader._instance = null;\r\n }\r\n }\r\n}\r\n","import { Autoloader } from \"./components/Autoloader.js\";\r\nimport { config } from \"./config.js\";\r\n\r\nexport function registerComponents() {\r\n if (!customElements.get(config.tagNames.autoloader)) {\r\n customElements.define(config.tagNames.autoloader, Autoloader);\r\n }\r\n}\r\n","import { setConfig } from \"./config.js\";\r\nimport { registerComponents } from \"./registerComponents.js\";\r\nimport { IWritableConfig } from \"./types.js\";\r\n\r\nexport function bootstrapAutoloader(config?: IWritableConfig): void {\r\n if (config) {\r\n setConfig(config);\r\n }\r\n registerComponents();\r\n}\r\n"],"names":["DEFAULT_KEY","VANILLA_KEY","VANILLA_LOADER","postfix","loader","async","path","import","default","_config","scanImportmap","loaders","observable","tagNames","autoloader","deepFreeze","obj","Object","freeze","key","keys","deepClone","clone","frozenConfig","config","getConfig","COMPONENT_KEYWORD","getKeyInfoFromImportmapKey","startsWith","endsWith","prefixWithLoader","slice","length","prefix","loaderKey","split","Error","replaceAll","toLowerCase","isNameSpaced","tagNamePart","tagName","loaderKeyPart","extendsText","extends","resolveLoader","resolvedLoader","candidates","l","entries","currentLoader","push","sort","a","b","failedTags","Set","loadingTags","EXTENDS_MAP","Map","window","HTMLButtonElement","HTMLInputElement","HTMLAnchorElement","HTMLImageElement","HTMLDivElement","HTMLSpanElement","HTMLParagraphElement","HTMLUListElement","HTMLOListElement","HTMLLIElement","HTMLTableElement","HTMLFormElement","HTMLLabelElement","HTMLSelectElement","HTMLTextAreaElement","HTMLHeadingElement","HTMLQuoteElement","HTMLPreElement","HTMLBRElement","HTMLHRElement","HTMLModElement","HTMLTableCaptionElement","HTMLTableColElement","HTMLTableSectionElement","HTMLTableRowElement","HTMLTableCellElement","HTMLFieldSetElement","HTMLLegendElement","HTMLDListElement","HTMLOptGroupElement","HTMLOptionElement","HTMLStyleElement","HTMLScriptElement","HTMLTemplateElement","HTMLCanvasElement","HTMLIFrameElement","HTMLObjectElement","HTMLEmbedElement","HTMLVideoElement","HTMLAudioElement","HTMLTrackElement","HTMLMapElement","HTMLAreaElement","HTMLSourceElement","HTMLParamElement","HTMLMeterElement","HTMLProgressElement","HTMLOutputElement","HTMLDetailsElement","HTMLDialogElement","HTMLMenuElement","HTMLSlotElement","HTMLTimeElement","HTMLDataElement","HTMLPictureElement","forEach","cls","tag","set","eagerLoadItem","info","customElements","get","componentConstructor","extendsName","prototype","resolveExtends","define","e","has","console","error","add","getCustomTagInfo","elementTagName","name","includes","getAttribute","observedCustomElements","WeakSet","checkObserveShadowRoot","element","prefixMap","shadowRoot","handlerForLazyLoad","observeShadowRoot","tagLoad","tagInfo","matchNameSpace","whenDefined","_e","file","delete","lazyLoad","root","elements","walker","document","createTreeWalker","NodeFilter","SHOW_ELEMENT","node","Element","isCustomElement","FILTER_ACCEPT","FILTER_SKIP","nextNode","currentNode","tagInfos","undefined","then","tagCount","lazyLoads","mo","MutationObserver","observe","childList","subtree","Autoloader","HTMLElement","static","_initialized","_prefixMap","_observer","constructor","super","_instance","this","importmap","imports","querySelectorAll","script","json","JSON","parse","innerHTML","assign","loadImportmap","loadMap","_value","keyInfo","buildMap","promises","Promise","all","eagerLoad","catch","connectedCallback","readyState","r","addEventListener","once","disconnectedCallback","disconnect","registerComponents","bootstrapAutoloader","partialConfig"],"mappings":"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"}
package/package.json CHANGED
@@ -1,74 +1,74 @@
1
- {
2
- "name": "@wcstack/autoloader",
3
- "version": "1.9.0",
4
- "description": "Auto-detect and dynamically import undefined custom elements via Import Maps. Zero dependencies, buildless.",
5
- "type": "module",
6
- "main": "./dist/index.esm.js",
7
- "module": "./dist/index.esm.js",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.esm.js"
13
- },
14
- "./auto": "./dist/auto.min.js"
15
- },
16
- "files": [
17
- "dist"
18
- ],
19
- "directories": {
20
- "example": "__e2e__"
21
- },
22
- "scripts": {
23
- "clean": "rimraf dist .tsc-out",
24
- "build": "rimraf dist .tsc-out && tsc && rollup -c",
25
- "test": "vitest run",
26
- "test:watch": "vitest",
27
- "test:coverage": "vitest run --coverage",
28
- "lint": "eslint src",
29
- "version:patch": "npm version patch",
30
- "version:minor": "npm version minor",
31
- "version:major": "npm version major",
32
- "prepublishOnly": "npm run build && npm run test:coverage"
33
- },
34
- "keywords": [
35
- "web-components",
36
- "autoloader",
37
- "custom-elements",
38
- "import-maps",
39
- "dynamic-import",
40
- "mutation-observer",
41
- "buildless",
42
- "zero-dependencies",
43
- "lazy-loading"
44
- ],
45
- "author": "mogera551",
46
- "homepage": "https://wcstack.github.io",
47
- "repository": {
48
- "type": "git",
49
- "url": "https://github.com/wcstack/wcstack.git",
50
- "directory": "packages/autoloader"
51
- },
52
- "bugs": {
53
- "url": "https://github.com/wcstack/wcstack/issues"
54
- },
55
- "license": "MIT",
56
- "devDependencies": {
57
- "@eslint/js": "^9.39.1",
58
- "@rollup/plugin-terser": "^0.4.4",
59
- "@rollup/plugin-typescript": "^11.1.6",
60
- "@vitest/coverage-v8": "^4.0.15",
61
- "@vitest/ui": "^4.0.15",
62
- "eslint": "^9.39.1",
63
- "globals": "^16.5.0",
64
- "happy-dom": "^20.0.11",
65
- "rimraf": "^6.0.1",
66
- "rollup": "^4.22.4",
67
- "rollup-plugin-dts": "^6.1.1",
68
- "rollup-plugin-copy": "^3.5.0",
69
- "tslib": "^2.8.1",
70
- "typescript": "^5.9.3",
71
- "typescript-eslint": "^8.49.0",
72
- "vitest": "^4.0.15"
73
- }
74
- }
1
+ {
2
+ "name": "@wcstack/autoloader",
3
+ "version": "1.9.1",
4
+ "description": "Auto-detect and dynamically import undefined custom elements via Import Maps. Zero dependencies, buildless.",
5
+ "type": "module",
6
+ "main": "./dist/index.esm.js",
7
+ "module": "./dist/index.esm.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.esm.js"
13
+ },
14
+ "./auto": "./dist/auto.min.js"
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "directories": {
20
+ "example": "__e2e__"
21
+ },
22
+ "scripts": {
23
+ "clean": "rimraf dist .tsc-out",
24
+ "build": "rimraf dist .tsc-out && tsc && rollup -c",
25
+ "test": "vitest run",
26
+ "test:watch": "vitest",
27
+ "test:coverage": "vitest run --coverage",
28
+ "lint": "eslint src",
29
+ "version:patch": "npm version patch",
30
+ "version:minor": "npm version minor",
31
+ "version:major": "npm version major",
32
+ "prepublishOnly": "npm run build && npm run test:coverage"
33
+ },
34
+ "keywords": [
35
+ "web-components",
36
+ "autoloader",
37
+ "custom-elements",
38
+ "import-maps",
39
+ "dynamic-import",
40
+ "mutation-observer",
41
+ "buildless",
42
+ "zero-dependencies",
43
+ "lazy-loading"
44
+ ],
45
+ "author": "mogera551",
46
+ "homepage": "https://wcstack.github.io",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/wcstack/wcstack.git",
50
+ "directory": "packages/autoloader"
51
+ },
52
+ "bugs": {
53
+ "url": "https://github.com/wcstack/wcstack/issues"
54
+ },
55
+ "license": "MIT",
56
+ "devDependencies": {
57
+ "@eslint/js": "^9.39.1",
58
+ "@rollup/plugin-terser": "^0.4.4",
59
+ "@rollup/plugin-typescript": "^11.1.6",
60
+ "@vitest/coverage-v8": "^4.0.15",
61
+ "@vitest/ui": "^4.0.15",
62
+ "eslint": "^9.39.1",
63
+ "globals": "^16.5.0",
64
+ "happy-dom": "^20.0.11",
65
+ "rimraf": "^6.0.1",
66
+ "rollup": "^4.22.4",
67
+ "rollup-plugin-dts": "^6.1.1",
68
+ "rollup-plugin-copy": "^3.5.0",
69
+ "tslib": "^2.8.1",
70
+ "typescript": "^5.9.3",
71
+ "typescript-eslint": "^8.49.0",
72
+ "vitest": "^4.0.15"
73
+ }
74
+ }