@wcstack/autoloader 1.3.11
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/README.ja.md +250 -0
- package/README.md +250 -0
- package/dist/auto.js +3 -0
- package/dist/auto.min.js +3 -0
- package/dist/bootstrapAutoloader.d.ts +3 -0
- package/dist/bootstrapAutoloader.d.ts.map +1 -0
- package/dist/bootstrapAutoloader.js +9 -0
- package/dist/bootstrapAutoloader.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +55 -0
- package/dist/config.js.map +1 -0
- package/dist/eagerload.d.ts +3 -0
- package/dist/eagerload.d.ts.map +1 -0
- package/dist/eagerload.js +122 -0
- package/dist/eagerload.js.map +1 -0
- package/dist/exports.d.ts +3 -0
- package/dist/exports.d.ts.map +1 -0
- package/dist/exports.js +2 -0
- package/dist/exports.js.map +1 -0
- package/dist/importmap.d.ts +7 -0
- package/dist/importmap.d.ts.map +1 -0
- package/dist/importmap.js +69 -0
- package/dist/importmap.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.esm.js +460 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.esm.min.js +2 -0
- package/dist/index.esm.min.js.map +1 -0
- package/dist/lazyLoad.d.ts +4 -0
- package/dist/lazyLoad.d.ts.map +1 -0
- package/dist/lazyLoad.js +166 -0
- package/dist/lazyLoad.js.map +1 -0
- package/dist/registerHandler.d.ts +2 -0
- package/dist/registerHandler.d.ts.map +1 -0
- package/dist/registerHandler.js +22 -0
- package/dist/registerHandler.js.map +1 -0
- package/dist/resolveLoader.d.ts +3 -0
- package/dist/resolveLoader.d.ts.map +1 -0
- package/dist/resolveLoader.js +45 -0
- package/dist/resolveLoader.js.map +1 -0
- package/dist/tags.d.ts +4 -0
- package/dist/tags.d.ts.map +1 -0
- package/dist/tags.js +7 -0
- package/dist/tags.js.map +1 -0
- package/dist/types.d.ts +45 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/vanilla.d.ts +2 -0
- package/dist/vanilla.d.ts.map +1 -0
- package/dist/vanilla.js +5 -0
- package/dist/vanilla.js.map +1 -0
- package/package.json +73 -0
package/dist/lazyLoad.js
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { resolveLoader } from "./resolveLoader.js";
|
|
2
|
+
import { failedTags, loadingTags } from "./tags.js";
|
|
3
|
+
const isCustomElement = (node) => {
|
|
4
|
+
return (node instanceof Element && (node.tagName.includes("-") || node.getAttribute("is")?.includes("-"))) ?? false;
|
|
5
|
+
};
|
|
6
|
+
export function getCustomTagInfo(e) {
|
|
7
|
+
const elementTagName = e.tagName.toLowerCase();
|
|
8
|
+
let name;
|
|
9
|
+
let extendsName;
|
|
10
|
+
if (elementTagName.includes("-")) {
|
|
11
|
+
name = elementTagName;
|
|
12
|
+
extendsName = null;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
const tagName = e.getAttribute("is");
|
|
16
|
+
if (tagName === null) {
|
|
17
|
+
throw new Error("Custom element without a dash or 'is' attribute found: " + elementTagName);
|
|
18
|
+
}
|
|
19
|
+
if (!tagName.includes("-")) {
|
|
20
|
+
throw new Error("Custom element 'is' attribute without a dash found: " + elementTagName);
|
|
21
|
+
}
|
|
22
|
+
name = tagName;
|
|
23
|
+
extendsName = elementTagName;
|
|
24
|
+
}
|
|
25
|
+
return { name, extends: extendsName };
|
|
26
|
+
}
|
|
27
|
+
const observedCustomElements = new WeakSet();
|
|
28
|
+
async function observeShadowRoot(element, config, prefixMap) {
|
|
29
|
+
observedCustomElements.add(element);
|
|
30
|
+
await handlerForLazyLoad(element.shadowRoot, config, prefixMap);
|
|
31
|
+
}
|
|
32
|
+
async function checkObserveShadowRoot(element, config, prefixMap) {
|
|
33
|
+
if (element.shadowRoot) {
|
|
34
|
+
if (!observedCustomElements.has(element)) {
|
|
35
|
+
await observeShadowRoot(element, config, prefixMap);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function matchNameSpace(tagName, prefixMap) {
|
|
40
|
+
for (const [prefix, info] of Object.entries(prefixMap)) {
|
|
41
|
+
if (tagName.startsWith(prefix + "-")) {
|
|
42
|
+
return info;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
async function tagLoad(tagInfo, config, prefixMap) {
|
|
48
|
+
const info = matchNameSpace(tagInfo.name, prefixMap);
|
|
49
|
+
if (info === null) {
|
|
50
|
+
throw new Error("No matching namespace found for lazy loaded component: " + tagInfo.name);
|
|
51
|
+
}
|
|
52
|
+
if (loadingTags.has(tagInfo.name)) {
|
|
53
|
+
await customElements.whenDefined(tagInfo.name);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
loadingTags.add(tagInfo.name);
|
|
57
|
+
try {
|
|
58
|
+
let loader;
|
|
59
|
+
try {
|
|
60
|
+
loader = resolveLoader("", info.loaderKey, config.loaders);
|
|
61
|
+
}
|
|
62
|
+
catch (_e) {
|
|
63
|
+
throw new Error("Loader redirection is not supported for lazy loaded components: " + tagInfo.name);
|
|
64
|
+
}
|
|
65
|
+
const file = tagInfo.name.slice(info.prefix.length + 1);
|
|
66
|
+
if (file === "") {
|
|
67
|
+
throw new Error("Invalid component name for lazy loaded component: " + tagInfo.name);
|
|
68
|
+
}
|
|
69
|
+
const path = info.key + file + loader.postfix;
|
|
70
|
+
if (customElements.get(tagInfo.name)) {
|
|
71
|
+
// すでに定義済み
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const componentConstructor = await loader.loader(path);
|
|
75
|
+
if (componentConstructor !== null) {
|
|
76
|
+
if (customElements.get(tagInfo.name)) {
|
|
77
|
+
// すでに定義済み
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (tagInfo.extends === null) {
|
|
81
|
+
customElements.define(tagInfo.name, componentConstructor);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
customElements.define(tagInfo.name, componentConstructor, { extends: tagInfo.extends });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
throw new Error("Loader returned null for component: " + tagInfo.name);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
console.error(`Failed to lazy load component '${tagInfo.name}':`, e);
|
|
93
|
+
failedTags.add(tagInfo.name);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
loadingTags.delete(tagInfo.name);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//
|
|
100
|
+
async function lazyLoad(root, config, prefixMap) {
|
|
101
|
+
const elements = [];
|
|
102
|
+
// Create TreeWalker (target element and comment nodes)
|
|
103
|
+
const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, (node) => {
|
|
104
|
+
return isCustomElement(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
|
|
105
|
+
});
|
|
106
|
+
// Move to next node with TreeWalker and add matching nodes to array
|
|
107
|
+
while (walker.nextNode()) {
|
|
108
|
+
elements.push(walker.currentNode);
|
|
109
|
+
}
|
|
110
|
+
const tagInfos = [];
|
|
111
|
+
const tagNames = new Set();
|
|
112
|
+
for (const element of elements) {
|
|
113
|
+
const tagInfo = getCustomTagInfo(element);
|
|
114
|
+
const customClass = customElements.get(tagInfo.name);
|
|
115
|
+
if (customClass === undefined) {
|
|
116
|
+
// undefined
|
|
117
|
+
customElements.whenDefined(tagInfo.name).then(async () => {
|
|
118
|
+
// upgraded
|
|
119
|
+
await checkObserveShadowRoot(element, config, prefixMap);
|
|
120
|
+
});
|
|
121
|
+
if (!tagNames.has(tagInfo.name) && !failedTags.has(tagInfo.name)) {
|
|
122
|
+
tagNames.add(tagInfo.name);
|
|
123
|
+
tagInfos.push(tagInfo);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// upgraded
|
|
128
|
+
await checkObserveShadowRoot(element, config, prefixMap);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
let tagCount = 0;
|
|
132
|
+
for (const tagInfo of tagInfos) {
|
|
133
|
+
await tagLoad(tagInfo, config, prefixMap);
|
|
134
|
+
tagCount++;
|
|
135
|
+
}
|
|
136
|
+
return tagCount;
|
|
137
|
+
}
|
|
138
|
+
async function lazyLoads(root, config, prefixMap) {
|
|
139
|
+
while (await lazyLoad(root, config, prefixMap) > 0) {
|
|
140
|
+
// Repeat until no more tags to load
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
export async function handlerForLazyLoad(root, config, prefixMap) {
|
|
144
|
+
if (Object.keys(prefixMap).length === 0) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
await lazyLoads(root, config, prefixMap);
|
|
149
|
+
}
|
|
150
|
+
catch (e) {
|
|
151
|
+
throw new Error("Failed to lazy load components: " + e);
|
|
152
|
+
}
|
|
153
|
+
if (!config.observable) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const mo = new MutationObserver(async () => {
|
|
157
|
+
try {
|
|
158
|
+
await lazyLoads(root, config, prefixMap);
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
console.error("Failed to lazy load components: " + e);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
mo.observe(root, { childList: true, subtree: true });
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=lazyLoad.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazyLoad.js","sourceRoot":"","sources":["../src/lazyLoad.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerHandler.d.ts","sourceRoot":"","sources":["../src/registerHandler.ts"],"names":[],"mappings":"AAKA,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBrD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { buildMap, loadImportmap } from "./importmap.js";
|
|
2
|
+
import { config } from "./config.js";
|
|
3
|
+
import { eagerLoad } from "./eagerload.js";
|
|
4
|
+
import { handlerForLazyLoad } from "./lazyLoad.js";
|
|
5
|
+
export async function registerHandler() {
|
|
6
|
+
const importmap = loadImportmap(); // 事前に importmap を読み込んでおく
|
|
7
|
+
if (importmap === null) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const { prefixMap, loadMap } = buildMap(importmap);
|
|
11
|
+
// 先にeager loadを実行すると、DOMContentLoadedイベントが発生しないことがあるため、後に実行する
|
|
12
|
+
document.addEventListener("DOMContentLoaded", async () => {
|
|
13
|
+
await handlerForLazyLoad(document, config, prefixMap);
|
|
14
|
+
});
|
|
15
|
+
try {
|
|
16
|
+
await eagerLoad(loadMap, config.loaders);
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
throw new Error("Failed to eager load components: " + e);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=registerHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerHandler.js","sourceRoot":"","sources":["../src/registerHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC,CAAC,yBAAyB;IAC5D,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IACD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnD,8DAA8D;IAC9D,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,KAAK,IAAmB,EAAE;QACtE,MAAM,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAM,CAAC,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveLoader.d.ts","sourceRoot":"","sources":["../src/resolveLoader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,GACxC,OAAO,CA4CT"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { DEFAULT_KEY } from "./config.js";
|
|
2
|
+
export function resolveLoader(path, loaderKey, loaders) {
|
|
3
|
+
let loader;
|
|
4
|
+
if (loaderKey === null || loaderKey === DEFAULT_KEY || loaderKey === "") {
|
|
5
|
+
// Try to resolve by postfix
|
|
6
|
+
let resolvedLoader = null;
|
|
7
|
+
const candidates = [];
|
|
8
|
+
for (const [key, l] of Object.entries(loaders)) {
|
|
9
|
+
if (key === DEFAULT_KEY)
|
|
10
|
+
continue;
|
|
11
|
+
const currentLoader = typeof l === "string" ? loaders[l] : l;
|
|
12
|
+
if (typeof currentLoader === "string")
|
|
13
|
+
continue; // Should not happen if config is correct
|
|
14
|
+
candidates.push(currentLoader);
|
|
15
|
+
}
|
|
16
|
+
// Sort by postfix length descending to match longest extension first
|
|
17
|
+
candidates.sort((a, b) => b.postfix.length - a.postfix.length);
|
|
18
|
+
for (const currentLoader of candidates) {
|
|
19
|
+
if (path.endsWith(currentLoader.postfix)) {
|
|
20
|
+
resolvedLoader = currentLoader;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (resolvedLoader) {
|
|
25
|
+
loader = resolvedLoader;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
loader = loaders[DEFAULT_KEY];
|
|
29
|
+
if (typeof loader === "string") {
|
|
30
|
+
loader = loaders[loader];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
loader = loaders[loaderKey];
|
|
36
|
+
if (!loader) {
|
|
37
|
+
throw new Error("Loader not found: " + loaderKey);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (typeof loader === "string") {
|
|
41
|
+
throw new Error("Loader redirection is not supported here");
|
|
42
|
+
}
|
|
43
|
+
return loader;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=resolveLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveLoader.js","sourceRoot":"","sources":["../src/resolveLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,SAAwB,EACxB,OAAyC;IAEzC,IAAI,MAAwB,CAAC;IAE7B,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACxE,4BAA4B;QAC5B,IAAI,cAAc,GAAmB,IAAI,CAAC;QAE1C,MAAM,UAAU,GAAc,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,IAAI,GAAG,KAAK,WAAW;gBAAE,SAAS;YAClC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAI,OAAO,aAAa,KAAK,QAAQ;gBAAE,SAAS,CAAC,yCAAyC;YAC1F,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjC,CAAC;QAED,qEAAqE;QACrE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE/D,KAAK,MAAM,aAAa,IAAI,UAAU,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,cAAc,GAAG,aAAa,CAAC;gBAC/B,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,GAAG,cAAc,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/tags.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,UAAU,aAAoB,CAAC;AAC5C,eAAO,MAAM,WAAW,aAAoB,CAAC;AAE7C,wBAAgB,UAAU,SAGzB"}
|
package/dist/tags.js
ADDED
package/dist/tags.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;AAE7C,MAAM,UAAU,UAAU;IACxB,UAAU,CAAC,KAAK,EAAE,CAAC;IACnB,WAAW,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export type LoaderFunction = (path: string) => Promise<CustomElementConstructor | null>;
|
|
2
|
+
export interface ILoader {
|
|
3
|
+
readonly postfix: string;
|
|
4
|
+
readonly loader: LoaderFunction;
|
|
5
|
+
}
|
|
6
|
+
export interface IConfig {
|
|
7
|
+
readonly scanImportmap: boolean;
|
|
8
|
+
readonly loaders: Record<string, ILoader | string>;
|
|
9
|
+
readonly observable: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface IWritableConfig {
|
|
12
|
+
scanImportmap?: boolean;
|
|
13
|
+
loaders?: Record<string, ILoader | string>;
|
|
14
|
+
observable?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface IImportMap {
|
|
17
|
+
imports: Record<string, string>;
|
|
18
|
+
}
|
|
19
|
+
export interface IPrefixMap {
|
|
20
|
+
[key: string]: INameSpaceInfo;
|
|
21
|
+
}
|
|
22
|
+
export interface ILoadMap {
|
|
23
|
+
[key: string]: IEagerLoadInfo;
|
|
24
|
+
}
|
|
25
|
+
export interface INameSpaceInfo {
|
|
26
|
+
key: string;
|
|
27
|
+
prefix: string;
|
|
28
|
+
loaderKey: string | null;
|
|
29
|
+
}
|
|
30
|
+
export interface IEagerLoadInfo {
|
|
31
|
+
key: string;
|
|
32
|
+
tagName: string;
|
|
33
|
+
loaderKey: string | null;
|
|
34
|
+
extends: string | null;
|
|
35
|
+
}
|
|
36
|
+
export type IKeyInfo = (INameSpaceInfo & {
|
|
37
|
+
isNameSpaced: true;
|
|
38
|
+
}) | (IEagerLoadInfo & {
|
|
39
|
+
isNameSpaced: false;
|
|
40
|
+
});
|
|
41
|
+
export interface ITagInfo {
|
|
42
|
+
name: string;
|
|
43
|
+
extends: string | null;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAC;AAExF,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,MAAM,QAAQ,GAChB,CAAC,cAAc,GAAG;IAAE,YAAY,EAAE,IAAI,CAAA;CAAE,CAAC,GACzC,CAAC,cAAc,GAAG;IAAE,YAAY,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAE/C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsBC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vanilla.d.ts","sourceRoot":"","sources":["../src/vanilla.ts"],"names":[],"mappings":"AACA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAG1E"}
|
package/dist/vanilla.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vanilla.js","sourceRoot":"","sources":["../src/vanilla.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAY;IACrC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,OAAmC,CAAC;AACpD,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@wcstack/autoloader",
|
|
3
|
+
"version": "1.3.11",
|
|
4
|
+
"description": "Auto-detect and dynamically import undefined custom elements via Import Maps. Zero dependencies, buildless.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.esm.js",
|
|
7
|
+
"module": "./dist/index.esm.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.esm.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"directories": {
|
|
19
|
+
"example": "__e2e__"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"clean": "rimraf dist",
|
|
23
|
+
"build": "rimraf dist && tsc && rollup -c",
|
|
24
|
+
"test": "vitest run",
|
|
25
|
+
"test:watch": "vitest",
|
|
26
|
+
"test:coverage": "vitest run --coverage",
|
|
27
|
+
"lint": "eslint src",
|
|
28
|
+
"version:patch": "npm version patch",
|
|
29
|
+
"version:minor": "npm version minor",
|
|
30
|
+
"version:major": "npm version major",
|
|
31
|
+
"prepublishOnly": "npm run build && npm run test:coverage"
|
|
32
|
+
},
|
|
33
|
+
"keywords": [
|
|
34
|
+
"web-components",
|
|
35
|
+
"autoloader",
|
|
36
|
+
"custom-elements",
|
|
37
|
+
"import-maps",
|
|
38
|
+
"dynamic-import",
|
|
39
|
+
"mutation-observer",
|
|
40
|
+
"buildless",
|
|
41
|
+
"zero-dependencies",
|
|
42
|
+
"lazy-loading"
|
|
43
|
+
],
|
|
44
|
+
"author": "mogera551",
|
|
45
|
+
"homepage": "https://github.com/nicari/wcstack/tree/main/packages/autoloader#readme",
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "git+https://github.com/nicari/wcstack.git",
|
|
49
|
+
"directory": "packages/autoloader"
|
|
50
|
+
},
|
|
51
|
+
"bugs": {
|
|
52
|
+
"url": "https://github.com/nicari/wcstack/issues"
|
|
53
|
+
},
|
|
54
|
+
"license": "MIT",
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@eslint/js": "^9.39.1",
|
|
57
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
58
|
+
"@rollup/plugin-typescript": "^11.1.6",
|
|
59
|
+
"@vitest/coverage-v8": "^4.0.15",
|
|
60
|
+
"@vitest/ui": "^4.0.15",
|
|
61
|
+
"eslint": "^9.39.1",
|
|
62
|
+
"globals": "^16.5.0",
|
|
63
|
+
"happy-dom": "^20.0.11",
|
|
64
|
+
"rimraf": "^6.0.1",
|
|
65
|
+
"rollup": "^4.22.4",
|
|
66
|
+
"rollup-plugin-dts": "^6.1.1",
|
|
67
|
+
"rollup-plugin-copy": "^3.5.0",
|
|
68
|
+
"tslib": "^2.8.1",
|
|
69
|
+
"typescript": "^5.9.3",
|
|
70
|
+
"typescript-eslint": "^8.49.0",
|
|
71
|
+
"vitest": "^4.0.15"
|
|
72
|
+
}
|
|
73
|
+
}
|