@wcstack/autoloader 1.29.0 → 1.31.0

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.
package/dist/auto.min.js CHANGED
@@ -1,2 +1,2 @@
1
- const e="*",t="vanilla",n={postfix:".js",loader:async function(e){return(await import(`${e}`)).default}},o={scanImportmap:!0,loaders:{[t]:n,[e]:t},observable:!0,tagNames:{autoloader:"wcs-autoloader"}},a="@components/";function r(e){if(e.startsWith(a)){if(e.endsWith("/")){const t=e.slice(12,e.length-1),[n,o]=t.split("|",2);if(""===n)throw new Error("Invalid importmap key: "+e);return{key:e,prefix:n.replaceAll("/","-").toLowerCase(),loaderKey:o??null,isNameSpaced:!0}}{const t=e.slice(12),[n,o]=t.split("|",2),[a,r]=(o??"").split(",",2);if(""===n)throw new Error("Invalid importmap key: "+e);return{key:e,tagName:n.replaceAll("/","-").toLowerCase(),loaderKey:a||null,extends:r||null,isNameSpaced:!1}}}return null}function l(t,n,o){let a;if(null===n||n===e||""===n){let n=null;const r=[];for(const[t,n]of Object.entries(o)){if(t===e)continue;const a="string"==typeof n?o[n]:n;"string"!=typeof a&&r.push(a)}r.sort((e,t)=>t.postfix.length-e.postfix.length);for(const e of r)if(t.endsWith(e.postfix)){n=e;break}n?a=n:(a=o[e],"string"==typeof a&&(a=o[a]))}else if(a=o[n],!a)throw new Error("Loader not found: "+n);if("string"==typeof a)throw new Error("Loader redirection is not supported here");return a}const s=new Set,i=new Set,c=new Map;if("undefined"!=typeof window){[[HTMLButtonElement,"button"],[HTMLInputElement,"input"],[HTMLAnchorElement,"a"],[HTMLImageElement,"img"],[HTMLDivElement,"div"],[HTMLSpanElement,"span"],[HTMLParagraphElement,"p"],[HTMLUListElement,"ul"],[HTMLOListElement,"ol"],[HTMLLIElement,"li"],[HTMLTableElement,"table"],[HTMLFormElement,"form"],[HTMLLabelElement,"label"],[HTMLSelectElement,"select"],[HTMLTextAreaElement,"textarea"],[HTMLHeadingElement,"h1"],[HTMLQuoteElement,"blockquote"],[HTMLPreElement,"pre"],[HTMLBRElement,"br"],[HTMLHRElement,"hr"],[HTMLModElement,"ins"],[HTMLTableCaptionElement,"caption"],[HTMLTableColElement,"col"],[HTMLTableSectionElement,"tbody"],[HTMLTableRowElement,"tr"],[HTMLTableCellElement,"td"],[HTMLFieldSetElement,"fieldset"],[HTMLLegendElement,"legend"],[HTMLDListElement,"dl"],[HTMLOptGroupElement,"optgroup"],[HTMLOptionElement,"option"],[HTMLStyleElement,"style"],[HTMLScriptElement,"script"],[HTMLTemplateElement,"template"],[HTMLCanvasElement,"canvas"],[HTMLIFrameElement,"iframe"],[HTMLObjectElement,"object"],[HTMLEmbedElement,"embed"],[HTMLVideoElement,"video"],[HTMLAudioElement,"audio"],[HTMLTrackElement,"track"],[HTMLMapElement,"map"],[HTMLAreaElement,"area"],[HTMLSourceElement,"source"],[HTMLParamElement,"param"],[HTMLMeterElement,"meter"],[HTMLProgressElement,"progress"],[HTMLOutputElement,"output"],[HTMLDetailsElement,"details"],[HTMLDialogElement,"dialog"],[HTMLMenuElement,"menu"],[HTMLSlotElement,"slot"],[HTMLTimeElement,"time"],[HTMLDataElement,"data"],[HTMLPictureElement,"picture"]].forEach(([e,t])=>{void 0!==e&&c.set(e,t)})}async function m(e,t,n){try{if(customElements.get(t))return;const o=await n.loader(e.key);if(null!==o){let n=e.extends;if(null===n&&(n=function(e){for(const[t,n]of c)if(e.prototype instanceof t)return n;return null}(o)),customElements.get(t))return;null===n?customElements.define(t,o):customElements.define(t,o,{extends:n})}}catch(e){s.has(t)||(console.error(`Failed to eager load component '${t}':`,e),s.add(t))}}function d(e){const t=e.tagName.toLowerCase();let n,o;if(t.includes("-"))n=t,o=null;else{const a=e.getAttribute("is");if(null===a)throw new Error("Custom element without a dash or 'is' attribute found: "+t);if(!a.includes("-"))throw new Error("Custom element 'is' attribute without a dash found: "+t);n=a,o=t}return{name:n,extends:o}}const u=new WeakSet;async function p(e,t,n){e.shadowRoot&&(u.has(e)||await async function(e,t,n){u.add(e),await M(e.shadowRoot,t,n)}(e,t,n))}async function f(e,t,n){const o=function(e,t){for(const[n,o]of Object.entries(t))if(e.startsWith(n+"-"))return o;return null}(e.name,n);if(null===o)throw new Error("No matching namespace found for lazy loaded component: "+e.name);if(i.has(e.name))await customElements.whenDefined(e.name);else{i.add(e.name);try{let n;try{n=l("",o.loaderKey,t.loaders)}catch(t){throw new Error("Loader redirection is not supported for lazy loaded components: "+e.name)}const a=e.name.slice(o.prefix.length+1);if(""===a)throw new Error("Invalid component name for lazy loaded component: "+e.name);const r=o.key+a+n.postfix;if(customElements.get(e.name))return;const s=await n.loader(r);if(null===s)throw new Error("Loader returned null for component: "+e.name);if(customElements.get(e.name))return;null===e.extends?customElements.define(e.name,s):customElements.define(e.name,s,{extends:e.extends})}catch(t){console.error(`Failed to lazy load component '${e.name}':`,t),s.add(e.name)}finally{i.delete(e.name)}}}async function E(e,t,n){const o=[],a=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,e=>(e=>(e instanceof Element&&(e.tagName.includes("-")||e.getAttribute("is")?.includes("-")))??!1)(e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP);for(;a.nextNode();)o.push(a.currentNode);const r=[],l=new Set;for(const e of o){const o=d(e);void 0===customElements.get(o.name)?(customElements.whenDefined(o.name).then(async()=>{await p(e,t,n)}),l.has(o.name)||s.has(o.name)||(l.add(o.name),r.push(o))):await p(e,t,n)}let i=0;for(const e of r)await f(e,t,n),i++;return i}async function L(e,t,n){for(;await E(e,t,n)>0;);}async function M(e,t,n){if(0===Object.keys(n).length)return null;try{await L(e,t,n)}catch(e){throw new Error("Failed to lazy load components: "+e)}if(!t.observable)return null;const o=new MutationObserver(async()=>{try{await L(e,t,n)}catch(e){console.error("Failed to lazy load components: "+e)}});return o.observe(e,{childList:!0,subtree:!0}),o}class T extends HTMLElement{static _instance=null;_initialized=!1;_prefixMap=null;_observer=null;constructor(){if(super(),T._instance)throw new Error(`${o.tagNames.autoloader} can only be instantiated once.`);T._instance=this;const e=function(){const e={imports:{}};return document.querySelectorAll('script[type="importmap"]').forEach(t=>{try{const n=JSON.parse(t.innerHTML);n.imports&&(e.imports=Object.assign(e.imports,n.imports))}catch(e){throw new Error("Failed to parse importmap JSON: "+e)}}),Object.keys(e.imports).length>0?e:null}();if(e){const{prefixMap:t,loadMap:n}=function(e){const t={},n={};for(const[o,a]of Object.entries(e.imports)){const e=r(o);null!==e&&(e.isNameSpaced?t[e.prefix]=e:n[e.tagName]=e)}return{prefixMap:t,loadMap:n}}(e);this._prefixMap=t,async function(e,t){const n=[];for(const[o,a]of Object.entries(e)){let e;try{e=l(a.key,a.loaderKey,t)}catch(e){throw new Error("Loader redirection is not supported for eager loaded components: "+o)}n.push(m(a,o,e))}await Promise.all(n)}(n,o.loaders).catch(e=>{console.error("Failed to eager load components:",e)})}}async connectedCallback(){this._initialized||(this._initialized=!0,this._prefixMap&&("loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",()=>e(),{once:!0})),this._observer=await M(document,o,this._prefixMap)))}disconnectedCallback(){this._observer?.disconnect(),this._observer=null,T._instance===this&&(T._instance=null)}}function h(){customElements.get(o.tagNames.autoloader)||customElements.define(o.tagNames.autoloader,T)}h();
1
+ const e="*",t="vanilla",n={postfix:".js",loader:async function(e){return(await import(`${e}`)).default}},o={scanImportmap:!0,loaders:{[t]:n,[e]:t},observable:!0,tagNames:{autoloader:"wcs-autoloader"}},r="@components/";function a(e){if(e.startsWith(r)){if(e.endsWith("/")){const t=e.slice(12,e.length-1),[n,o]=t.split("|",2);if(""===n)throw new Error("Invalid importmap key: "+e);return{key:e,prefix:n.replaceAll("/","-").toLowerCase(),loaderKey:o??null,isNameSpaced:!0}}{const t=e.slice(12),[n,o]=t.split("|",2),[r,a]=(o??"").split(",",2);if(""===n)throw new Error("Invalid importmap key: "+e);return{key:e,tagName:n.replaceAll("/","-").toLowerCase(),loaderKey:r||null,extends:a||null,isNameSpaced:!1}}}return null}function l(t,n,o){let r;if(null===n||n===e||""===n){let n=null;const a=[];for(const[t,n]of Object.entries(o)){if(t===e)continue;const r="string"==typeof n?o[n]:n;"string"!=typeof r&&a.push(r)}a.sort((e,t)=>t.postfix.length-e.postfix.length);for(const e of a)if(t.endsWith(e.postfix)){n=e;break}n?r=n:(r=o[e],"string"==typeof r&&(r=o[r]))}else if(r=o[n],!r)throw new Error("Loader not found: "+n);if("string"==typeof r)throw new Error("Loader redirection is not supported here");return r}const i=new Set,s=new Map;let c=new WeakMap;function m(e){if(e===globalThis.customElements)return s;let t=c.get(e);return void 0===t&&(t=new Map,c.set(e,t)),t}const u=new Map;if("undefined"!=typeof window){[[HTMLButtonElement,"button"],[HTMLInputElement,"input"],[HTMLAnchorElement,"a"],[HTMLImageElement,"img"],[HTMLDivElement,"div"],[HTMLSpanElement,"span"],[HTMLParagraphElement,"p"],[HTMLUListElement,"ul"],[HTMLOListElement,"ol"],[HTMLLIElement,"li"],[HTMLTableElement,"table"],[HTMLFormElement,"form"],[HTMLLabelElement,"label"],[HTMLSelectElement,"select"],[HTMLTextAreaElement,"textarea"],[HTMLHeadingElement,"h1"],[HTMLQuoteElement,"blockquote"],[HTMLPreElement,"pre"],[HTMLBRElement,"br"],[HTMLHRElement,"hr"],[HTMLModElement,"ins"],[HTMLTableCaptionElement,"caption"],[HTMLTableColElement,"col"],[HTMLTableSectionElement,"tbody"],[HTMLTableRowElement,"tr"],[HTMLTableCellElement,"td"],[HTMLFieldSetElement,"fieldset"],[HTMLLegendElement,"legend"],[HTMLDListElement,"dl"],[HTMLOptGroupElement,"optgroup"],[HTMLOptionElement,"option"],[HTMLStyleElement,"style"],[HTMLScriptElement,"script"],[HTMLTemplateElement,"template"],[HTMLCanvasElement,"canvas"],[HTMLIFrameElement,"iframe"],[HTMLObjectElement,"object"],[HTMLEmbedElement,"embed"],[HTMLVideoElement,"video"],[HTMLAudioElement,"audio"],[HTMLTrackElement,"track"],[HTMLMapElement,"map"],[HTMLAreaElement,"area"],[HTMLSourceElement,"source"],[HTMLParamElement,"param"],[HTMLMeterElement,"meter"],[HTMLProgressElement,"progress"],[HTMLOutputElement,"output"],[HTMLDetailsElement,"details"],[HTMLDialogElement,"dialog"],[HTMLMenuElement,"menu"],[HTMLSlotElement,"slot"],[HTMLTimeElement,"time"],[HTMLDataElement,"data"],[HTMLPictureElement,"picture"]].forEach(([e,t])=>{void 0!==e&&u.set(e,t)})}async function d(e,t,n){try{if(customElements.get(t))return;const o=await n.loader(e.key);if(null!==o){let n=e.extends;if(null===n&&(n=function(e){for(const[t,n]of u)if(e.prototype instanceof t)return n;return null}(o)),customElements.get(t))return;null===n?customElements.define(t,o):customElements.define(t,o,{extends:n})}}catch(e){i.has(t)||(console.error(`Failed to eager load component '${t}':`,e),i.add(t))}}function f(e){if("object"!=typeof e||null===e)return null;const t=e;return"function"!=typeof t.get||"function"!=typeof t.whenDefined||"function"!=typeof t.define?null:t}function p(e){const t=e.tagName.toLowerCase();let n,o;if(t.includes("-"))n=t,o=null;else{const r=e.getAttribute("is");if(null===r)throw new Error("Custom element without a dash or 'is' attribute found: "+t);if(!r.includes("-"))throw new Error("Custom element 'is' attribute without a dash found: "+t);n=r,o=t}return{name:n,extends:o}}const E=new WeakSet,L=new WeakSet;async function M(e,t,n){e.shadowRoot&&(E.has(e)||await async function(e,t,n){E.add(e),await y(e.shadowRoot,t,n)}(e,t,n))}async function T(e,t,n,o){const r=function(e,t){for(const[n,o]of Object.entries(t))if(e.startsWith(n+"-"))return o;return null}(e.name,n);if(null===r)throw new Error("No matching namespace found for lazy loaded component: "+e.name);const a=m(o),s=a.get(e.name);if(void 0!==s)return void await s;const c=async function(e,t,n,o){try{let r;try{r=l("",n.loaderKey,t.loaders)}catch(t){throw new Error("Loader redirection is not supported for lazy loaded components: "+e.name)}const a=e.name.slice(n.prefix.length+1);if(""===a)throw new Error("Invalid component name for lazy loaded component: "+e.name);const i=n.key+a+r.postfix;if(o.get(e.name))return;const s=await r.loader(i);if(null===s)throw new Error("Loader returned null for component: "+e.name);if(o.get(e.name))return;null===e.extends?o.define(e.name,s):o.define(e.name,s,{extends:e.extends})}catch(t){console.error(`Failed to lazy load component '${e.name}':`,t),i.add(e.name)}}(e,t,r,o);a.set(e.name,c);try{await c}finally{a.delete(e.name)}}async function h(e,t,n,o){const r=[],a=(e.ownerDocument??e).createTreeWalker(e,NodeFilter.SHOW_ELEMENT,e=>(e=>(e instanceof Element&&(e.tagName.includes("-")||e.getAttribute("is")?.includes("-")))??!1)(e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP);for(;a.nextNode();)r.push(a.currentNode);const l=[],s=new Set;for(const e of r){const r=p(e);void 0===o.get(r.name)?(L.has(e)||(L.add(e),o.whenDefined(r.name).then(async()=>{await M(e,t,n)})),s.has(r.name)||i.has(r.name)||(s.add(r.name),l.push(r))):await M(e,t,n)}let c=0;for(const e of l)await T(e,t,n,o),c++;return c}async function w(e,t,n,o){for(;await h(e,t,n,o)>0;);}async function y(e,t,n){if(0===Object.keys(n).length)return null;const o=function(e=null){if(null!=e){const t=e.customElementRegistry;if(null===t)return null;if(void 0!==t)return f(t)}return f(globalThis.customElements)}(e);if(null===o)return console.error("Cannot autoload components: the root has a null custom element registry."),null;try{await w(e,t,n,o)}catch(e){throw new Error("Failed to lazy load components: "+e)}if(!t.observable)return null;const r=new MutationObserver(async()=>{try{await w(e,t,n,o)}catch(e){console.error("Failed to lazy load components: "+e)}});return r.observe(e,{childList:!0,subtree:!0}),r}class H extends HTMLElement{static _instance=null;_initialized=!1;_prefixMap=null;_observer=null;constructor(){if(super(),H._instance)throw new Error(`${o.tagNames.autoloader} can only be instantiated once.`);H._instance=this;const e=function(){const e={imports:{}};return document.querySelectorAll('script[type="importmap"]').forEach(t=>{try{const n=JSON.parse(t.innerHTML);n.imports&&(e.imports=Object.assign(e.imports,n.imports))}catch(e){throw new Error("Failed to parse importmap JSON: "+e)}}),Object.keys(e.imports).length>0?e:null}();if(e){const{prefixMap:t,loadMap:n}=function(e){const t={},n={};for(const[o,r]of Object.entries(e.imports)){const e=a(o);null!==e&&(e.isNameSpaced?t[e.prefix]=e:n[e.tagName]=e)}return{prefixMap:t,loadMap:n}}(e);this._prefixMap=t,async function(e,t){const n=[];for(const[o,r]of Object.entries(e)){let e;try{e=l(r.key,r.loaderKey,t)}catch(e){throw new Error("Loader redirection is not supported for eager loaded components: "+o)}n.push(d(r,o,e))}await Promise.all(n)}(n,o.loaders).catch(e=>{console.error("Failed to eager load components:",e)})}}async connectedCallback(){this._initialized||(this._initialized=!0,this._prefixMap&&("loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",()=>e(),{once:!0})),this._observer=await y(document,o,this._prefixMap)))}disconnectedCallback(){this._observer?.disconnect(),this._observer=null,H._instance===this&&(H._instance=null)}}function g(e=customElements){e.get(o.tagNames.autoloader)||e.define(o.tagNames.autoloader,H)}var b;g(b);
2
2
  //# sourceMappingURL=auto.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto.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","COMPONENT_KEYWORD","getKeyInfoFromImportmapKey","key","startsWith","endsWith","prefixWithLoader","slice","length","prefix","loaderKey","split","Error","replaceAll","toLowerCase","isNameSpaced","tagNamePart","tagName","loaderKeyPart","extendsText","extends","resolveLoader","resolvedLoader","candidates","l","Object","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","keys","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"],"mappings":"AAaO,MAAMA,EAAc,IAEdC,EAAc,UAEdC,EAAiB,CAC5BC,QAAS,MACTC,OClBKC,eAAoBC,GAEzB,aADqBC,OAAO,GAAGD,MACjBE,OAChB,GDmDaC,EAjCoB,CAC/BC,eAAe,EACfC,QAAS,CACPV,CAACA,GAAcC,EACfF,CAACA,GAAcC,GAEjBW,YAAY,EACZC,SAAU,CACRC,WAAY,mBE5BVC,EAAoB,eAmB1B,SAASC,EAA2BC,GAClC,GAAIA,EAAIC,WAAWH,GAAoB,CACrC,GAAIE,EAAIE,SAAS,KAAM,CACrB,MAAMC,EAAmBH,EAAII,MAAMN,GAA0BE,EAAIK,OAAS,IAClEC,EAAQC,GAAcJ,EAAiBK,MAAM,IAAK,GAC1D,GAAe,KAAXF,EACF,MAAM,IAAIG,MAAM,0BAA4BT,GAE9C,MAAO,CACLA,MACAM,OAAQA,EAAOI,WAAW,IAAK,KAAKC,cACpCJ,UAAWA,GAAa,KACxBK,cAAc,EAElB,CAAO,CACL,MAAMC,EAAcb,EAAII,MAAMN,KACtBgB,EAASC,GAAkBF,EAAYL,MAAM,IAAK,IAClDD,EAAWS,IAAiBD,GAAiB,IAAIP,MAAM,IAAK,GACpE,GAAgB,KAAZM,EACF,MAAM,IAAIL,MAAM,0BAA4BT,GAE9C,MAAO,CACLA,MACAc,QAASA,EAAQJ,WAAW,IAAK,KAAKC,cACtCJ,UAAWA,GAAa,KACxBU,QAASD,GAAe,KACxBJ,cAAc,EAElB,CACF,CACA,OAAO,IACT,UCjDgBM,EACd7B,EACAkB,EACAb,GAEA,IAAIP,EAEJ,GAAkB,OAAdoB,GAAsBA,IAAcxB,GAA6B,KAAdwB,EAAkB,CAEvE,IAAIY,EAAiC,KAErC,MAAMC,EAAwB,GAC9B,IAAK,MAAOpB,EAAKqB,KAAMC,OAAOC,QAAQ7B,GAAU,CAC9C,GAAIM,IAAQjB,EAAa,SACzB,MAAMyC,EAA6B,iBAANH,EAAiB3B,EAAQ2B,GAAKA,EAC9B,iBAAlBG,GACXJ,EAAWK,KAAKD,EAClB,CAGAJ,EAAWM,KAAK,CAACC,EAAGC,IAAMA,EAAE1C,QAAQmB,OAASsB,EAAEzC,QAAQmB,QAEvD,IAAK,MAAMmB,KAAiBJ,EAC1B,GAAI/B,EAAKa,SAASsB,EAActC,SAAU,CACxCiC,EAAiBK,EACjB,KACF,CAGEL,EACFhC,EAASgC,GAEThC,EAASO,EAAQX,GACK,iBAAXI,IACTA,EAASO,EAAQP,IAGvB,MAEE,GADAA,EAASO,EAAQa,IACZpB,EACH,MAAM,IAAIsB,MAAM,qBAAuBF,GAI3C,GAAsB,iBAAXpB,EACT,MAAM,IAAIsB,MAAM,4CAElB,OAAOtB,CACT,CClDO,MAAM0C,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,iBAA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"}
1
+ {"version":3,"file":"auto.min.js","sources":["../src/config.ts","../src/vanilla.ts","../src/importmap.ts","../src/resolveLoader.ts","../src/tags.ts","../src/eagerload.ts","../src/platform/customElementRegistry.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>();\n\n// The in-flight load per tag, so a second caller can await the load itself\n// rather than the definition. A load that fails never defines its tag, so\n// waiting on whenDefined() instead would wait forever.\nexport const loadingTags = new Map<string, Promise<void>>();\n\n// Scoped registries each need their own define() call for the same tag, so an\n// in-flight load in one registry must not make another registry skip its own.\n// The module import itself is shared by the loader's own cache. The global\n// registry keeps using the exported `loadingTags` so direct inspection works.\nlet loadingTagsByRegistry = new WeakMap<object, Map<string, Promise<void>>>();\n\nexport function getLoadingTags(registry: object): Map<string, Promise<void>> {\n if (registry === (globalThis as { readonly customElements?: unknown }).customElements) {\n return loadingTags;\n }\n let tags = loadingTagsByRegistry.get(registry);\n if (tags === undefined) {\n tags = new Map();\n loadingTagsByRegistry.set(registry, tags);\n }\n return tags;\n}\n\nexport function resetState() {\n failedTags.clear();\n loadingTags.clear();\n loadingTagsByRegistry = new WeakMap();\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","export interface ICustomElementRegistryAdapter {\n get(name: string): CustomElementConstructor | undefined;\n whenDefined(name: string): Promise<CustomElementConstructor>;\n define(\n name: string,\n constructor: CustomElementConstructor,\n options?: ElementDefinitionOptions,\n ): void;\n}\n\ninterface ICustomElementRegistryOwner {\n /**\n * Scoped registry hook, as exposed by `Element` / `Document` / `ShadowRoot`.\n * `undefined` on platforms without scoped custom element registries; `null`\n * when the node deliberately carries a null registry and has not been handed\n * to `registry.initialize()`.\n */\n readonly customElementRegistry?: unknown;\n}\n\nfunction toAdapter(registry: unknown): ICustomElementRegistryAdapter | null {\n if (typeof registry !== \"object\" || registry === null) return null;\n\n const candidate = registry as Partial<ICustomElementRegistryAdapter>;\n if (\n typeof candidate.get !== \"function\"\n || typeof candidate.whenDefined !== \"function\"\n || typeof candidate.define !== \"function\"\n ) {\n return null;\n }\n return candidate as ICustomElementRegistryAdapter;\n}\n\n/**\n * Resolve the registry that governs `root`.\n *\n * Scoped registries do not inherit from the global one, so defining a lazily\n * loaded tag globally leaves a scoped subtree's elements un-upgraded forever --\n * and the `whenDefined` used to chase their shadow content never resolves.\n * Autoloading therefore has to define into the registry the scanned root itself\n * resolves against. Roots on platforms without scoped registries report\n * `undefined` and fall back to the global registry.\n */\nexport function getCustomElementRegistry(\n root: Node | null = null,\n): ICustomElementRegistryAdapter | null {\n if (root !== null && typeof root !== \"undefined\") {\n const scoped = (root as ICustomElementRegistryOwner).customElementRegistry;\n if (scoped === null) return null;\n if (typeof scoped !== \"undefined\") return toAdapter(scoped);\n }\n return toAdapter((globalThis as { readonly customElements?: unknown }).customElements);\n}\n","import { resolveLoader } from \"./resolveLoader.js\";\nimport { failedTags, getLoadingTags } from \"./tags.js\";\nimport {\n ICustomElementRegistryAdapter,\n getCustomElementRegistry,\n} from \"./platform/customElementRegistry.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\n// Elements that already carry a whenDefined() follow-up. `lazyLoads` rescans\n// until nothing more loads, and the MutationObserver reruns it on every DOM\n// change, so without this an element whose tag never gets defined collects one\n// never-settling continuation per scan.\nconst upgradeWatchedElements: 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(\n tagInfo: ITagInfo,\n config: IConfig,\n prefixMap: IPrefixMap,\n registry: ICustomElementRegistryAdapter,\n): 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 const loadingTags = getLoadingTags(registry);\n const inFlight = loadingTags.get(tagInfo.name);\n if (inFlight !== undefined) {\n // Wait on the load itself, never on the definition: a load that fails never\n // defines the tag, so whenDefined() would stay pending forever and wedge\n // every caller above — including the one that installs the MutationObserver,\n // which stops all further lazy loading on the page.\n await inFlight;\n return;\n }\n\n const load = performTagLoad(tagInfo, config, info, registry);\n loadingTags.set(tagInfo.name, load);\n try {\n await load;\n } finally {\n loadingTags.delete(tagInfo.name);\n }\n}\n\n// Never rejects: a failure is reported and recorded in `failedTags`, which keeps\n// the tag out of later scans.\nasync function performTagLoad(\n tagInfo: ITagInfo,\n config: IConfig,\n info: INameSpaceInfo,\n registry: ICustomElementRegistryAdapter,\n): Promise<void> {\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 (registry.get(tagInfo.name)) {\n // すでに定義済み\n return;\n }\n const componentConstructor = await loader.loader(path);\n if (componentConstructor !== null) {\n if (registry.get(tagInfo.name)) {\n // すでに定義済み\n return;\n }\n if (tagInfo.extends === null) {\n registry.define(tagInfo.name, componentConstructor);\n } else {\n registry.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 }\n}\n\n//\nasync function lazyLoad(\n root: Node,\n config: IConfig,\n prefixMap: IPrefixMap,\n registry: ICustomElementRegistryAdapter,\n): Promise<number> {\n const elements: Element[] = [];\n\n // Create TreeWalker (target element and comment nodes)\n const walker = (root.ownerDocument ?? (root as 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 = registry.get(tagInfo.name);\n if (customClass === undefined) {\n // undefined\n if (!upgradeWatchedElements.has(element)) {\n upgradeWatchedElements.add(element);\n registry.whenDefined(tagInfo.name).then(async () => {\n // upgraded\n await checkObserveShadowRoot(element, config, prefixMap);\n });\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, registry);\n tagCount++;\n }\n return tagCount;\n\n}\n\nasync function lazyLoads(\n root: Document | ShadowRoot,\n config: IConfig,\n prefixMap: IPrefixMap,\n registry: ICustomElementRegistryAdapter,\n): Promise<void> {\n while(await lazyLoad(root, config, prefixMap, registry) > 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 // Definitions must land in the registry this root resolves against: a scoped\n // registry does not see global definitions, so defining globally would leave\n // these elements un-upgraded and the whenDefined below pending forever.\n const registry = getCustomElementRegistry(root);\n if (registry === null) {\n // A null-registry root cannot receive definitions at all until someone calls\n // registry.initialize() on it, so there is nothing autoloading can do here.\n console.error(\n \"Cannot autoload components: the root has a null custom element registry.\",\n );\n return null;\n }\n try {\n await lazyLoads(root, config, prefixMap, registry);\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, registry);\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\n/**\n * Register this package's tags. Pass a scoped `CustomElementRegistry` to define\n * them for a single shadow tree -- scoped registries do not inherit the global\n * one, so a tree using one needs its own definitions.\n */\nexport function registerComponents(registry: CustomElementRegistry = customElements) {\n if (!registry.get(config.tagNames.autoloader)) {\n registry.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, registry?: CustomElementRegistry): void {\n if (config) {\n setConfig(config);\n }\n registerComponents(registry);\n}\n"],"names":["DEFAULT_KEY","VANILLA_KEY","VANILLA_LOADER","postfix","loader","async","path","import","default","config","scanImportmap","loaders","observable","tagNames","autoloader","COMPONENT_KEYWORD","getKeyInfoFromImportmapKey","key","startsWith","endsWith","prefixWithLoader","slice","length","prefix","loaderKey","split","Error","replaceAll","toLowerCase","isNameSpaced","tagNamePart","tagName","loaderKeyPart","extendsText","extends","resolveLoader","resolvedLoader","candidates","l","Object","entries","currentLoader","push","sort","a","b","failedTags","Set","loadingTags","Map","loadingTagsByRegistry","WeakMap","getLoadingTags","registry","globalThis","customElements","tags","get","undefined","set","EXTENDS_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","eagerLoadItem","info","componentConstructor","extendsName","prototype","resolveExtends","define","e","has","console","error","add","toAdapter","candidate","whenDefined","getCustomTagInfo","elementTagName","name","includes","getAttribute","observedCustomElements","WeakSet","upgradeWatchedElements","checkObserveShadowRoot","element","prefixMap","shadowRoot","handlerForLazyLoad","observeShadowRoot","tagLoad","tagInfo","matchNameSpace","inFlight","load","_e","file","performTagLoad","delete","lazyLoad","root","elements","walker","ownerDocument","createTreeWalker","NodeFilter","SHOW_ELEMENT","node","Element","isCustomElement","FILTER_ACCEPT","FILTER_SKIP","nextNode","currentNode","tagInfos","then","tagCount","lazyLoads","keys","scoped","customElementRegistry","getCustomElementRegistry","mo","MutationObserver","observe","childList","subtree","Autoloader","HTMLElement","static","_initialized","_prefixMap","_observer","constructor","super","_instance","this","importmap","imports","document","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"],"mappings":"AAaO,MAAMA,EAAc,IAEdC,EAAc,UAEdC,EAAiB,CAC5BC,QAAS,MACTC,OClBKC,eAAoBC,GAEzB,aADqBC,OAAO,GAAGD,MACjBE,OAChB,GDmDaC,EAjCoB,CAC/BC,eAAe,EACfC,QAAS,CACPV,CAACA,GAAcC,EACfF,CAACA,GAAcC,GAEjBW,YAAY,EACZC,SAAU,CACRC,WAAY,mBE5BVC,EAAoB,eAmB1B,SAASC,EAA2BC,GAClC,GAAIA,EAAIC,WAAWH,GAAoB,CACrC,GAAIE,EAAIE,SAAS,KAAM,CACrB,MAAMC,EAAmBH,EAAII,MAAMN,GAA0BE,EAAIK,OAAS,IAClEC,EAAQC,GAAcJ,EAAiBK,MAAM,IAAK,GAC1D,GAAe,KAAXF,EACF,MAAM,IAAIG,MAAM,0BAA4BT,GAE9C,MAAO,CACLA,MACAM,OAAQA,EAAOI,WAAW,IAAK,KAAKC,cACpCJ,UAAWA,GAAa,KACxBK,cAAc,EAElB,CAAO,CACL,MAAMC,EAAcb,EAAII,MAAMN,KACtBgB,EAASC,GAAkBF,EAAYL,MAAM,IAAK,IAClDD,EAAWS,IAAiBD,GAAiB,IAAIP,MAAM,IAAK,GACpE,GAAgB,KAAZM,EACF,MAAM,IAAIL,MAAM,0BAA4BT,GAE9C,MAAO,CACLA,MACAc,QAASA,EAAQJ,WAAW,IAAK,KAAKC,cACtCJ,UAAWA,GAAa,KACxBU,QAASD,GAAe,KACxBJ,cAAc,EAElB,CACF,CACA,OAAO,IACT,UCjDgBM,EACd7B,EACAkB,EACAb,GAEA,IAAIP,EAEJ,GAAkB,OAAdoB,GAAsBA,IAAcxB,GAA6B,KAAdwB,EAAkB,CAEvE,IAAIY,EAAiC,KAErC,MAAMC,EAAwB,GAC9B,IAAK,MAAOpB,EAAKqB,KAAMC,OAAOC,QAAQ7B,GAAU,CAC9C,GAAIM,IAAQjB,EAAa,SACzB,MAAMyC,EAA6B,iBAANH,EAAiB3B,EAAQ2B,GAAKA,EAC9B,iBAAlBG,GACXJ,EAAWK,KAAKD,EAClB,CAGAJ,EAAWM,KAAK,CAACC,EAAGC,IAAMA,EAAE1C,QAAQmB,OAASsB,EAAEzC,QAAQmB,QAEvD,IAAK,MAAMmB,KAAiBJ,EAC1B,GAAI/B,EAAKa,SAASsB,EAActC,SAAU,CACxCiC,EAAiBK,EACjB,KACF,CAGEL,EACFhC,EAASgC,GAEThC,EAASO,EAAQX,GACK,iBAAXI,IACTA,EAASO,EAAQP,IAGvB,MAEE,GADAA,EAASO,EAAQa,IACZpB,EACH,MAAM,IAAIsB,MAAM,qBAAuBF,GAI3C,GAAsB,iBAAXpB,EACT,MAAM,IAAIsB,MAAM,4CAElB,OAAOtB,CACT,CClDO,MAAM0C,EAAa,IAAIC,IAKjBC,EAAc,IAAIC,IAM/B,IAAIC,EAAwB,IAAIC,QAE1B,SAAUC,EAAeC,GAC7B,GAAIA,IAAcC,WAAqDC,eACrE,OAAOP,EAET,IAAIQ,EAAON,EAAsBO,IAAIJ,GAKrC,YAJaK,IAATF,IACFA,EAAO,IAAIP,IACXC,EAAsBS,IAAIN,EAAUG,IAE/BA,CACT,CCpBA,MAAMI,EAAc,IAAIX,IAExB,GAAsB,oBAAXY,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,GACT1D,EAAYD,IAAI2D,EAAKC,IAG3B,CAWAlH,eAAemH,EAAcC,EAAsB1F,EAAgB3B,GACjE,IACE,GAAImD,eAAeE,IAAI1B,GAErB,OAEF,MAAM2F,QAA6BtH,EAAOA,OAAOqH,EAAKxG,KACtD,GAA6B,OAAzByG,EAA+B,CACjC,IAAIC,EAAcF,EAAKvF,QAKvB,GAJoB,OAAhByF,IACFA,EAnBR,SAAwBD,GACtB,IAAK,MAAOJ,EAAKC,KAAQ3D,EACvB,GAAI8D,EAAqBE,qBAAqBN,EAC5C,OAAOC,EAGX,OAAO,IACT,CAYsBM,CAAeH,IAG3BnE,eAAeE,IAAI1B,GAErB,OAEkB,OAAhB4F,EACFpE,eAAeuE,OAAO/F,EAAS2F,GAE/BnE,eAAeuE,OAAO/F,EAAS2F,EAAsB,CAAExF,QAASyF,GAEpE,CACF,CAAE,MAAMI,GACDjF,EAAWkF,IAAIjG,KAClBkG,QAAQC,MAAM,mCAAmCnG,MAAagG,GAC9DjF,EAAWqF,IAAIpG,GAEnB,CAEF,CC5FA,SAASqG,EAAU/E,GACjB,GAAwB,iBAAbA,GAAsC,OAAbA,EAAmB,OAAO,KAE9D,MAAMgF,EAAYhF,EAClB,MAC2B,mBAAlBgF,EAAU5E,KACmB,mBAA1B4E,EAAUC,aACW,mBAArBD,EAAUP,OAEb,KAEFO,CACT,CCpBM,SAAUE,EAAiBR,GAC/B,MAAMS,EAAiBT,EAAEhG,QAAQH,cACjC,IAAI6G,EACAd,EACJ,GAAIa,EAAeE,SAAS,KAC1BD,EAAOD,EACPb,EAAc,SACT,CACL,MAAM5F,EAAUgG,EAAEY,aAAa,MAC/B,GAAgB,OAAZ5G,EACF,MAAM,IAAIL,MAAM,0DAA4D8G,GAE9E,IAAKzG,EAAQ2G,SAAS,KACpB,MAAM,IAAIhH,MAAM,uDAAyD8G,GAE3EC,EAAO1G,EACP4F,EAAca,CAChB,CACA,MAAO,CAAEC,OAAMvG,QAASyF,EAC1B,CAEA,MAAMiB,EAA2C,IAAIC,QAM/CC,EAA2C,IAAID,QAOrDxI,eAAe0I,EAAuBC,EAAkBvI,EAAiBwI,GACnED,EAAQE,aACLN,EAAuBZ,IAAIgB,UAPpC3I,eAAiC2I,EAAkBvI,EAAiBwI,GAClEL,EAAuBT,IAAIa,SACrBG,EAAmBH,EAAQE,WAAazI,EAAQwI,EACxD,CAKYG,CAAkBJ,EAASvI,EAAQwI,GAG/C,CAWA5I,eAAegJ,EACbC,EACA7I,EACAwI,EACA5F,GAEA,MAAMoE,EAfR,SAAwB1F,EAAiBkH,GACvC,IAAK,MAAO1H,EAAQkG,KAASlF,OAAOC,QAAQyG,GAC1C,GAAIlH,EAAQb,WAAWK,EAAS,KAC9B,OAAOkG,EAGX,OAAO,IACT,CAQsC8B,CAAeD,EAAQb,KAAMQ,GACjE,GAAa,OAATxB,EACF,MAAM,IAAI/F,MAAM,0DAA4D4H,EAAQb,MAGtF,MAAMzF,EAAcI,EAAeC,GAC7BmG,EAAWxG,EAAYS,IAAI6F,EAAQb,MACzC,QAAiB/E,IAAb8F,EAMF,kBADMA,EAIR,MAAMC,EAWRpJ,eACEiJ,EACA7I,EACAgH,EACApE,GAEA,IACE,IAAIjD,EACJ,IACEA,EAAS+B,EAAc,GAAIsF,EAAKjG,UAAWf,EAAOE,QACpD,CAAE,MAAO+I,GACP,MAAM,IAAIhI,MAAM,mEAAqE4H,EAAQb,KAC/F,CAEA,MAAMkB,EAAeL,EAAQb,KAAKpH,MAAMoG,EAAKlG,OAAOD,OAAS,GAC7D,GAAa,KAATqI,EACF,MAAM,IAAIjI,MAAM,qDAAuD4H,EAAQb,MAEjF,MAAMnI,EAAOmH,EAAKxG,IAAM0I,EAAOvJ,EAAOD,QAEtC,GAAIkD,EAASI,IAAI6F,EAAQb,MAEvB,OAEF,MAAMf,QAA6BtH,EAAOA,OAAOE,GACjD,GAA6B,OAAzBoH,EAWF,MAAM,IAAIhG,MAAM,uCAAyC4H,EAAQb,MAVjE,GAAIpF,EAASI,IAAI6F,EAAQb,MAEvB,OAEsB,OAApBa,EAAQpH,QACVmB,EAASyE,OAAOwB,EAAQb,KAAMf,GAE9BrE,EAASyE,OAAOwB,EAAQb,KAAMf,EAAsB,CAAExF,QAASoH,EAAQpH,SAK7E,CAAE,MAAM6F,GACNE,QAAQC,MAAM,kCAAkCoB,EAAQb,SAAUV,GAClEjF,EAAWqF,IAAImB,EAAQb,KACzB,CACF,CArDemB,CAAeN,EAAS7I,EAAQgH,EAAMpE,GACnDL,EAAYW,IAAI2F,EAAQb,KAAMgB,GAC9B,UACQA,CACR,SACEzG,EAAY6G,OAAOP,EAAQb,KAC7B,CACF,CAiDApI,eAAeyJ,EACbC,EACAtJ,EACAwI,EACA5F,GAEA,MAAM2G,EAAsB,GAGtBC,GAAUF,EAAKG,eAAkBH,GAAmBI,iBACxDJ,EACAK,WAAWC,aACVC,GAjJmB,CAACA,IACfA,aAAgBC,UAAYD,EAAKvI,QAAQ2G,SAAS,MAAQ4B,EAAK3B,aAAa,OAAOD,SAAS,SAAU,EAiJnG8B,CAAgBF,GAAQF,WAAWK,cAAgBL,WAAWM,aAKzE,KAAOT,EAAOU,YACZX,EAAStH,KAAKuH,EAAOW,aAGvB,MAAMC,EAAuB,GACvBhK,EAAW,IAAIkC,IACrB,IAAI,MAAMiG,KAAWgB,EAAU,CAC7B,MAAMV,EAAUf,EAAiBS,QAEbtF,IADAL,EAASI,IAAI6F,EAAQb,OAGlCK,EAAuBd,IAAIgB,KAC9BF,EAAuBX,IAAIa,GAC3B3F,EAASiF,YAAYgB,EAAQb,MAAMqC,KAAKzK,gBAEhC0I,EAAuBC,EAASvI,EAAQwI,MAG7CpI,EAASmH,IAAIsB,EAAQb,OAAU3F,EAAWkF,IAAIsB,EAAQb,QACzD5H,EAASsH,IAAImB,EAAQb,MACrBoC,EAASnI,KAAK4G,WAIVP,EAAuBC,EAASvI,EAAQwI,EAElD,CACA,IAAI8B,EAAW,EACf,IAAI,MAAMzB,KAAWuB,QACbxB,EAAQC,EAAS7I,EAAQwI,EAAW5F,GAC1C0H,IAEF,OAAOA,CAET,CAEA1K,eAAe2K,EACbjB,EACAtJ,EACAwI,EACA5F,GAEA,WAAYyG,EAASC,EAAMtJ,EAAQwI,EAAW5F,GAAY,IAG5D,CAEOhD,eAAe8I,EACpBY,EACAtJ,EACAwI,GAEA,GAAsC,IAAlC1G,OAAO0I,KAAKhC,GAAW3H,OACzB,OAAO,KAKT,MAAM+B,ED7KF,SACJ0G,EAAoB,MAEpB,GAAIA,QAA8C,CAChD,MAAMmB,EAAUnB,EAAqCoB,sBACrD,GAAe,OAAXD,EAAiB,OAAO,KAC5B,QAAsB,IAAXA,EAAwB,OAAO9C,EAAU8C,EACtD,CACA,OAAO9C,EAAW9E,WAAqDC,eACzE,CCoKmB6H,CAAyBrB,GAC1C,GAAiB,OAAb1G,EAMF,OAHA4E,QAAQC,MACN,4EAEK,KAET,UACQ8C,EAAUjB,EAAMtJ,EAAQwI,EAAW5F,EAC3C,CAAE,MAAM0E,GACN,MAAM,IAAIrG,MAAM,mCAAqCqG,EACvD,CAEA,IAAKtH,EAAOG,WACV,OAAO,KAET,MAAMyK,EAAK,IAAIC,iBAAiBjL,UAC9B,UACQ2K,EAAUjB,EAAMtJ,EAAQwI,EAAW5F,EAC3C,CAAE,MAAM0E,GACNE,QAAQC,MAAM,mCAAqCH,EACrD,IAGF,OADAsD,EAAGE,QAAQxB,EAAM,CAAEyB,WAAW,EAAMC,SAAS,IACtCJ,CACT,CC9OM,MAAOK,UAAmBC,YACtBC,iBAAsC,KACtCC,cAAe,EACfC,WAAgC,KAChCC,UAAqC,KAE7C,WAAAC,GAEE,GADAC,QACIP,EAAWQ,UACb,MAAM,IAAIxK,MACR,GAAGjB,EAAOI,SAASC,6CAGvB4K,EAAWQ,UAAYC,KAEvB,MAAMC,aNhBR,MAAMA,EAAwB,CAAEC,QAAS,IAWzC,OAVAC,SAASC,iBAAiB,4BAA4BlF,QAASmF,IAC7D,IACE,MAAMC,EAAOC,KAAKC,MAAMH,EAAOI,WAC3BH,EAAKJ,UACPD,EAAUC,QAAU9J,OAAOsK,OAAOT,EAAUC,QAASI,EAAKJ,SAE9D,CAAE,MAAOtE,GACP,MAAM,IAAIrG,MAAM,mCAAqCqG,EACvD,IAEKxF,OAAO0I,KAAKmB,EAAUC,SAAS/K,OAAS,EAC3C8K,EACA,IACN,CMEsBU,GAClB,GAAIV,EAAW,CACb,MAAMnD,UAAEA,EAAS8D,QAAEA,GN+BnB,SAAmBX,GAGvB,MAAMnD,EAAwB,CAAA,EACxB8D,EAAoB,CAAA,EAC1B,IAAK,MAAO9L,EAAK+L,KAAWzK,OAAOC,QAAQ4J,EAAUC,SAAU,CAC7D,MAAMY,EAAUjM,EAA2BC,GAC3B,OAAZgM,IAGAA,EAAQpL,aACVoH,EAAUgE,EAAQ1L,QAAU0L,EAE5BF,EAAQE,EAAQlL,SAAWkL,EAE/B,CACA,MAAO,CAAEhE,YAAW8D,UACtB,CMhDqCG,CAASd,GACxCD,KAAKL,WAAa7C,EH0FjB5I,eACL0M,EACApM,GAEA,MAAMwM,EAA4B,GAClC,IAAI,MAAOpL,EAAS0F,KAASlF,OAAOC,QAAQuK,GAAU,CACpD,IAAI3M,EACJ,IACEA,EAAS+B,EAAcsF,EAAKxG,IAAKwG,EAAKjG,UAAWb,EACnD,CAAE,MAAO+I,GACP,MAAM,IAAIhI,MAAM,oEAAsEK,EACxF,CACAoL,EAASzK,KAAK8E,EAAcC,EAAM1F,EAAS3B,GAC7C,OACMgN,QAAQC,IAAIF,EACpB,CGxGMG,CAAUP,EAAStM,EAAOE,SAAS4M,MAAOxF,IACxCE,QAAQC,MAAM,mCAAoCH,IAEtD,CACF,CAEA,uBAAMyF,GACCrB,KAAKN,eACRM,KAAKN,cAAe,EAChBM,KAAKL,aACqB,YAAxBQ,SAASmB,kBACL,IAAIL,QAAeM,GACvBpB,SAASqB,iBAAiB,mBAAoB,IAAMD,IAAK,CACvDE,MAAM,KAIZzB,KAAKJ,gBAAkB5C,EACrBmD,SACA7L,EACA0L,KAAKL,aAIb,CAEA,oBAAA+B,GACE1B,KAAKJ,WAAW+B,aAChB3B,KAAKJ,UAAY,KACbL,EAAWQ,YAAcC,OAC3BT,EAAWQ,UAAY,KAE3B,ECjDI,SAAU6B,EAAmB1K,EAAkCE,gBAC9DF,EAASI,IAAIhD,EAAOI,SAASC,aAChCuC,EAASyE,OAAOrH,EAAOI,SAASC,WAAY4K,EAEhD,CCRM,IAAwDrI,EAI5D0K,EAAmB1K"}
package/dist/index.d.ts CHANGED
@@ -22,7 +22,7 @@ interface IWritableConfig {
22
22
  tagNames?: IWritableTagNames;
23
23
  }
24
24
 
25
- declare function bootstrapAutoloader(config?: IWritableConfig): void;
25
+ declare function bootstrapAutoloader(config?: IWritableConfig, registry?: CustomElementRegistry): void;
26
26
 
27
27
  declare function getConfig(): IConfig;
28
28
 
package/dist/index.esm.js CHANGED
@@ -177,7 +177,26 @@ function resolveLoader(path, loaderKey, loaders) {
177
177
  }
178
178
 
179
179
  const failedTags = new Set();
180
- const loadingTags = new Set();
180
+ // The in-flight load per tag, so a second caller can await the load itself
181
+ // rather than the definition. A load that fails never defines its tag, so
182
+ // waiting on whenDefined() instead would wait forever.
183
+ const loadingTags = new Map();
184
+ // Scoped registries each need their own define() call for the same tag, so an
185
+ // in-flight load in one registry must not make another registry skip its own.
186
+ // The module import itself is shared by the loader's own cache. The global
187
+ // registry keeps using the exported `loadingTags` so direct inspection works.
188
+ let loadingTagsByRegistry = new WeakMap();
189
+ function getLoadingTags(registry) {
190
+ if (registry === globalThis.customElements) {
191
+ return loadingTags;
192
+ }
193
+ let tags = loadingTagsByRegistry.get(registry);
194
+ if (tags === undefined) {
195
+ tags = new Map();
196
+ loadingTagsByRegistry.set(registry, tags);
197
+ }
198
+ return tags;
199
+ }
181
200
 
182
201
  const EXTENDS_MAP = new Map();
183
202
  if (typeof window !== "undefined") {
@@ -299,6 +318,38 @@ async function eagerLoad(loadMap, loaders) {
299
318
  await Promise.all(promises);
300
319
  }
301
320
 
321
+ function toAdapter(registry) {
322
+ if (typeof registry !== "object" || registry === null)
323
+ return null;
324
+ const candidate = registry;
325
+ if (typeof candidate.get !== "function"
326
+ || typeof candidate.whenDefined !== "function"
327
+ || typeof candidate.define !== "function") {
328
+ return null;
329
+ }
330
+ return candidate;
331
+ }
332
+ /**
333
+ * Resolve the registry that governs `root`.
334
+ *
335
+ * Scoped registries do not inherit from the global one, so defining a lazily
336
+ * loaded tag globally leaves a scoped subtree's elements un-upgraded forever --
337
+ * and the `whenDefined` used to chase their shadow content never resolves.
338
+ * Autoloading therefore has to define into the registry the scanned root itself
339
+ * resolves against. Roots on platforms without scoped registries report
340
+ * `undefined` and fall back to the global registry.
341
+ */
342
+ function getCustomElementRegistry(root = null) {
343
+ if (root !== null && typeof root !== "undefined") {
344
+ const scoped = root.customElementRegistry;
345
+ if (scoped === null)
346
+ return null;
347
+ if (typeof scoped !== "undefined")
348
+ return toAdapter(scoped);
349
+ }
350
+ return toAdapter(globalThis.customElements);
351
+ }
352
+
302
353
  const isCustomElement = (node) => {
303
354
  return (node instanceof Element && (node.tagName.includes("-") || node.getAttribute("is")?.includes("-"))) ?? false;
304
355
  };
@@ -324,6 +375,11 @@ function getCustomTagInfo(e) {
324
375
  return { name, extends: extendsName };
325
376
  }
326
377
  const observedCustomElements = new WeakSet();
378
+ // Elements that already carry a whenDefined() follow-up. `lazyLoads` rescans
379
+ // until nothing more loads, and the MutationObserver reruns it on every DOM
380
+ // change, so without this an element whose tag never gets defined collects one
381
+ // never-settling continuation per scan.
382
+ const upgradeWatchedElements = new WeakSet();
327
383
  async function observeShadowRoot(element, config, prefixMap) {
328
384
  observedCustomElements.add(element);
329
385
  await handlerForLazyLoad(element.shadowRoot, config, prefixMap);
@@ -343,16 +399,33 @@ function matchNameSpace(tagName, prefixMap) {
343
399
  }
344
400
  return null;
345
401
  }
346
- async function tagLoad(tagInfo, config, prefixMap) {
402
+ async function tagLoad(tagInfo, config, prefixMap, registry) {
347
403
  const info = matchNameSpace(tagInfo.name, prefixMap);
348
404
  if (info === null) {
349
405
  throw new Error("No matching namespace found for lazy loaded component: " + tagInfo.name);
350
406
  }
351
- if (loadingTags.has(tagInfo.name)) {
352
- await customElements.whenDefined(tagInfo.name);
407
+ const loadingTags = getLoadingTags(registry);
408
+ const inFlight = loadingTags.get(tagInfo.name);
409
+ if (inFlight !== undefined) {
410
+ // Wait on the load itself, never on the definition: a load that fails never
411
+ // defines the tag, so whenDefined() would stay pending forever and wedge
412
+ // every caller above — including the one that installs the MutationObserver,
413
+ // which stops all further lazy loading on the page.
414
+ await inFlight;
353
415
  return;
354
416
  }
355
- loadingTags.add(tagInfo.name);
417
+ const load = performTagLoad(tagInfo, config, info, registry);
418
+ loadingTags.set(tagInfo.name, load);
419
+ try {
420
+ await load;
421
+ }
422
+ finally {
423
+ loadingTags.delete(tagInfo.name);
424
+ }
425
+ }
426
+ // Never rejects: a failure is reported and recorded in `failedTags`, which keeps
427
+ // the tag out of later scans.
428
+ async function performTagLoad(tagInfo, config, info, registry) {
356
429
  try {
357
430
  let loader;
358
431
  try {
@@ -366,21 +439,21 @@ async function tagLoad(tagInfo, config, prefixMap) {
366
439
  throw new Error("Invalid component name for lazy loaded component: " + tagInfo.name);
367
440
  }
368
441
  const path = info.key + file + loader.postfix;
369
- if (customElements.get(tagInfo.name)) {
442
+ if (registry.get(tagInfo.name)) {
370
443
  // すでに定義済み
371
444
  return;
372
445
  }
373
446
  const componentConstructor = await loader.loader(path);
374
447
  if (componentConstructor !== null) {
375
- if (customElements.get(tagInfo.name)) {
448
+ if (registry.get(tagInfo.name)) {
376
449
  // すでに定義済み
377
450
  return;
378
451
  }
379
452
  if (tagInfo.extends === null) {
380
- customElements.define(tagInfo.name, componentConstructor);
453
+ registry.define(tagInfo.name, componentConstructor);
381
454
  }
382
455
  else {
383
- customElements.define(tagInfo.name, componentConstructor, { extends: tagInfo.extends });
456
+ registry.define(tagInfo.name, componentConstructor, { extends: tagInfo.extends });
384
457
  }
385
458
  }
386
459
  else {
@@ -391,15 +464,12 @@ async function tagLoad(tagInfo, config, prefixMap) {
391
464
  console.error(`Failed to lazy load component '${tagInfo.name}':`, e);
392
465
  failedTags.add(tagInfo.name);
393
466
  }
394
- finally {
395
- loadingTags.delete(tagInfo.name);
396
- }
397
467
  }
398
468
  //
399
- async function lazyLoad(root, config, prefixMap) {
469
+ async function lazyLoad(root, config, prefixMap, registry) {
400
470
  const elements = [];
401
471
  // Create TreeWalker (target element and comment nodes)
402
- const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, (node) => {
472
+ const walker = (root.ownerDocument ?? root).createTreeWalker(root, NodeFilter.SHOW_ELEMENT, (node) => {
403
473
  return isCustomElement(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
404
474
  });
405
475
  // Move to next node with TreeWalker and add matching nodes to array
@@ -410,13 +480,16 @@ async function lazyLoad(root, config, prefixMap) {
410
480
  const tagNames = new Set();
411
481
  for (const element of elements) {
412
482
  const tagInfo = getCustomTagInfo(element);
413
- const customClass = customElements.get(tagInfo.name);
483
+ const customClass = registry.get(tagInfo.name);
414
484
  if (customClass === undefined) {
415
485
  // undefined
416
- customElements.whenDefined(tagInfo.name).then(async () => {
417
- // upgraded
418
- await checkObserveShadowRoot(element, config, prefixMap);
419
- });
486
+ if (!upgradeWatchedElements.has(element)) {
487
+ upgradeWatchedElements.add(element);
488
+ registry.whenDefined(tagInfo.name).then(async () => {
489
+ // upgraded
490
+ await checkObserveShadowRoot(element, config, prefixMap);
491
+ });
492
+ }
420
493
  if (!tagNames.has(tagInfo.name) && !failedTags.has(tagInfo.name)) {
421
494
  tagNames.add(tagInfo.name);
422
495
  tagInfos.push(tagInfo);
@@ -429,13 +502,13 @@ async function lazyLoad(root, config, prefixMap) {
429
502
  }
430
503
  let tagCount = 0;
431
504
  for (const tagInfo of tagInfos) {
432
- await tagLoad(tagInfo, config, prefixMap);
505
+ await tagLoad(tagInfo, config, prefixMap, registry);
433
506
  tagCount++;
434
507
  }
435
508
  return tagCount;
436
509
  }
437
- async function lazyLoads(root, config, prefixMap) {
438
- while (await lazyLoad(root, config, prefixMap) > 0) {
510
+ async function lazyLoads(root, config, prefixMap, registry) {
511
+ while (await lazyLoad(root, config, prefixMap, registry) > 0) {
439
512
  // Repeat until no more tags to load
440
513
  }
441
514
  }
@@ -443,8 +516,18 @@ async function handlerForLazyLoad(root, config, prefixMap) {
443
516
  if (Object.keys(prefixMap).length === 0) {
444
517
  return null;
445
518
  }
519
+ // Definitions must land in the registry this root resolves against: a scoped
520
+ // registry does not see global definitions, so defining globally would leave
521
+ // these elements un-upgraded and the whenDefined below pending forever.
522
+ const registry = getCustomElementRegistry(root);
523
+ if (registry === null) {
524
+ // A null-registry root cannot receive definitions at all until someone calls
525
+ // registry.initialize() on it, so there is nothing autoloading can do here.
526
+ console.error("Cannot autoload components: the root has a null custom element registry.");
527
+ return null;
528
+ }
446
529
  try {
447
- await lazyLoads(root, config, prefixMap);
530
+ await lazyLoads(root, config, prefixMap, registry);
448
531
  }
449
532
  catch (e) {
450
533
  throw new Error("Failed to lazy load components: " + e);
@@ -454,7 +537,7 @@ async function handlerForLazyLoad(root, config, prefixMap) {
454
537
  }
455
538
  const mo = new MutationObserver(async () => {
456
539
  try {
457
- await lazyLoads(root, config, prefixMap);
540
+ await lazyLoads(root, config, prefixMap, registry);
458
541
  }
459
542
  catch (e) {
460
543
  console.error("Failed to lazy load components: " + e);
@@ -506,17 +589,22 @@ class Autoloader extends HTMLElement {
506
589
  }
507
590
  }
508
591
 
509
- function registerComponents() {
510
- if (!customElements.get(config.tagNames.autoloader)) {
511
- customElements.define(config.tagNames.autoloader, Autoloader);
592
+ /**
593
+ * Register this package's tags. Pass a scoped `CustomElementRegistry` to define
594
+ * them for a single shadow tree -- scoped registries do not inherit the global
595
+ * one, so a tree using one needs its own definitions.
596
+ */
597
+ function registerComponents(registry = customElements) {
598
+ if (!registry.get(config.tagNames.autoloader)) {
599
+ registry.define(config.tagNames.autoloader, Autoloader);
512
600
  }
513
601
  }
514
602
 
515
- function bootstrapAutoloader(config) {
603
+ function bootstrapAutoloader(config, registry) {
516
604
  if (config) {
517
605
  setConfig(config);
518
606
  }
519
- registerComponents();
607
+ registerComponents(registry);
520
608
  }
521
609
 
522
610
  export { bootstrapAutoloader, getConfig };
@@ -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/platform/customElementRegistry.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>();\n\n// The in-flight load per tag, so a second caller can await the load itself\n// rather than the definition. A load that fails never defines its tag, so\n// waiting on whenDefined() instead would wait forever.\nexport const loadingTags = new Map<string, Promise<void>>();\n\n// Scoped registries each need their own define() call for the same tag, so an\n// in-flight load in one registry must not make another registry skip its own.\n// The module import itself is shared by the loader's own cache. The global\n// registry keeps using the exported `loadingTags` so direct inspection works.\nlet loadingTagsByRegistry = new WeakMap<object, Map<string, Promise<void>>>();\n\nexport function getLoadingTags(registry: object): Map<string, Promise<void>> {\n if (registry === (globalThis as { readonly customElements?: unknown }).customElements) {\n return loadingTags;\n }\n let tags = loadingTagsByRegistry.get(registry);\n if (tags === undefined) {\n tags = new Map();\n loadingTagsByRegistry.set(registry, tags);\n }\n return tags;\n}\n\nexport function resetState() {\n failedTags.clear();\n loadingTags.clear();\n loadingTagsByRegistry = new WeakMap();\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","export interface ICustomElementRegistryAdapter {\n get(name: string): CustomElementConstructor | undefined;\n whenDefined(name: string): Promise<CustomElementConstructor>;\n define(\n name: string,\n constructor: CustomElementConstructor,\n options?: ElementDefinitionOptions,\n ): void;\n}\n\ninterface ICustomElementRegistryOwner {\n /**\n * Scoped registry hook, as exposed by `Element` / `Document` / `ShadowRoot`.\n * `undefined` on platforms without scoped custom element registries; `null`\n * when the node deliberately carries a null registry and has not been handed\n * to `registry.initialize()`.\n */\n readonly customElementRegistry?: unknown;\n}\n\nfunction toAdapter(registry: unknown): ICustomElementRegistryAdapter | null {\n if (typeof registry !== \"object\" || registry === null) return null;\n\n const candidate = registry as Partial<ICustomElementRegistryAdapter>;\n if (\n typeof candidate.get !== \"function\"\n || typeof candidate.whenDefined !== \"function\"\n || typeof candidate.define !== \"function\"\n ) {\n return null;\n }\n return candidate as ICustomElementRegistryAdapter;\n}\n\n/**\n * Resolve the registry that governs `root`.\n *\n * Scoped registries do not inherit from the global one, so defining a lazily\n * loaded tag globally leaves a scoped subtree's elements un-upgraded forever --\n * and the `whenDefined` used to chase their shadow content never resolves.\n * Autoloading therefore has to define into the registry the scanned root itself\n * resolves against. Roots on platforms without scoped registries report\n * `undefined` and fall back to the global registry.\n */\nexport function getCustomElementRegistry(\n root: Node | null = null,\n): ICustomElementRegistryAdapter | null {\n if (root !== null && typeof root !== \"undefined\") {\n const scoped = (root as ICustomElementRegistryOwner).customElementRegistry;\n if (scoped === null) return null;\n if (typeof scoped !== \"undefined\") return toAdapter(scoped);\n }\n return toAdapter((globalThis as { readonly customElements?: unknown }).customElements);\n}\n","import { resolveLoader } from \"./resolveLoader.js\";\nimport { failedTags, getLoadingTags } from \"./tags.js\";\nimport {\n ICustomElementRegistryAdapter,\n getCustomElementRegistry,\n} from \"./platform/customElementRegistry.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\n// Elements that already carry a whenDefined() follow-up. `lazyLoads` rescans\n// until nothing more loads, and the MutationObserver reruns it on every DOM\n// change, so without this an element whose tag never gets defined collects one\n// never-settling continuation per scan.\nconst upgradeWatchedElements: 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(\n tagInfo: ITagInfo,\n config: IConfig,\n prefixMap: IPrefixMap,\n registry: ICustomElementRegistryAdapter,\n): 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 const loadingTags = getLoadingTags(registry);\n const inFlight = loadingTags.get(tagInfo.name);\n if (inFlight !== undefined) {\n // Wait on the load itself, never on the definition: a load that fails never\n // defines the tag, so whenDefined() would stay pending forever and wedge\n // every caller above — including the one that installs the MutationObserver,\n // which stops all further lazy loading on the page.\n await inFlight;\n return;\n }\n\n const load = performTagLoad(tagInfo, config, info, registry);\n loadingTags.set(tagInfo.name, load);\n try {\n await load;\n } finally {\n loadingTags.delete(tagInfo.name);\n }\n}\n\n// Never rejects: a failure is reported and recorded in `failedTags`, which keeps\n// the tag out of later scans.\nasync function performTagLoad(\n tagInfo: ITagInfo,\n config: IConfig,\n info: INameSpaceInfo,\n registry: ICustomElementRegistryAdapter,\n): Promise<void> {\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 (registry.get(tagInfo.name)) {\n // すでに定義済み\n return;\n }\n const componentConstructor = await loader.loader(path);\n if (componentConstructor !== null) {\n if (registry.get(tagInfo.name)) {\n // すでに定義済み\n return;\n }\n if (tagInfo.extends === null) {\n registry.define(tagInfo.name, componentConstructor);\n } else {\n registry.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 }\n}\n\n//\nasync function lazyLoad(\n root: Node,\n config: IConfig,\n prefixMap: IPrefixMap,\n registry: ICustomElementRegistryAdapter,\n): Promise<number> {\n const elements: Element[] = [];\n\n // Create TreeWalker (target element and comment nodes)\n const walker = (root.ownerDocument ?? (root as 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 = registry.get(tagInfo.name);\n if (customClass === undefined) {\n // undefined\n if (!upgradeWatchedElements.has(element)) {\n upgradeWatchedElements.add(element);\n registry.whenDefined(tagInfo.name).then(async () => {\n // upgraded\n await checkObserveShadowRoot(element, config, prefixMap);\n });\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, registry);\n tagCount++;\n }\n return tagCount;\n\n}\n\nasync function lazyLoads(\n root: Document | ShadowRoot,\n config: IConfig,\n prefixMap: IPrefixMap,\n registry: ICustomElementRegistryAdapter,\n): Promise<void> {\n while(await lazyLoad(root, config, prefixMap, registry) > 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 // Definitions must land in the registry this root resolves against: a scoped\n // registry does not see global definitions, so defining globally would leave\n // these elements un-upgraded and the whenDefined below pending forever.\n const registry = getCustomElementRegistry(root);\n if (registry === null) {\n // A null-registry root cannot receive definitions at all until someone calls\n // registry.initialize() on it, so there is nothing autoloading can do here.\n console.error(\n \"Cannot autoload components: the root has a null custom element registry.\",\n );\n return null;\n }\n try {\n await lazyLoads(root, config, prefixMap, registry);\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, registry);\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\n/**\n * Register this package's tags. Pass a scoped `CustomElementRegistry` to define\n * them for a single shadow tree -- scoped registries do not inherit the global\n * one, so a tree using one needs its own definitions.\n */\nexport function registerComponents(registry: CustomElementRegistry = customElements) {\n if (!registry.get(config.tagNames.autoloader)) {\n registry.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, registry?: CustomElementRegistry): void {\n if (config) {\n setConfig(config);\n }\n registerComponents(registry);\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wcstack/autoloader",
3
- "version": "1.29.0",
3
+ "version": "1.31.0",
4
4
  "description": "Auto-detect and dynamically import undefined custom elements via Import Maps. Zero dependencies, buildless.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.esm.js",