@esmx/core 3.0.0-rc.62 → 3.0.0-rc.64
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.md +4 -4
- package/README.zh-CN.md +4 -4
- package/dist/core.mjs +2 -1
- package/dist/manifest-json.d.ts +0 -4
- package/dist/module-config.mjs +7 -1
- package/dist/module-config.test.mjs +24 -0
- package/dist/utils/import-map.d.ts +31 -2
- package/dist/utils/import-map.mjs +18 -6
- package/dist/utils/import-map.test.mjs +583 -314
- package/package.json +3 -3
- package/src/core.ts +2 -1
- package/src/manifest-json.ts +0 -4
- package/src/module-config.test.ts +31 -0
- package/src/module-config.ts +7 -1
- package/src/utils/import-map.test.ts +722 -342
- package/src/utils/import-map.ts +53 -9
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { assert, describe, test } from "vitest";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
buildImportsMap,
|
|
4
|
+
buildScopesMap,
|
|
5
|
+
fixNestedScopesResolution,
|
|
6
|
+
getImportMap
|
|
7
|
+
} from "./import-map.mjs";
|
|
3
8
|
describe("buildImportsMap", () => {
|
|
4
9
|
test("should return empty object for empty manifests", () => {
|
|
5
10
|
const result = buildImportsMap([], (name, file) => `${name}/${file}`);
|
|
@@ -9,7 +14,6 @@ describe("buildImportsMap", () => {
|
|
|
9
14
|
const manifests = [
|
|
10
15
|
{
|
|
11
16
|
name: "test-module",
|
|
12
|
-
imports: {},
|
|
13
17
|
exports: {
|
|
14
18
|
component: {
|
|
15
19
|
name: "component",
|
|
@@ -36,65 +40,10 @@ describe("buildImportsMap", () => {
|
|
|
36
40
|
"test-module/vue": "test-module/vue.js"
|
|
37
41
|
});
|
|
38
42
|
});
|
|
39
|
-
test("should handle user imports with existing identifiers", () => {
|
|
40
|
-
const manifests = [
|
|
41
|
-
{
|
|
42
|
-
name: "test-module",
|
|
43
|
-
imports: {
|
|
44
|
-
"custom-name": "test-module/component"
|
|
45
|
-
},
|
|
46
|
-
exports: {
|
|
47
|
-
component: {
|
|
48
|
-
name: "component",
|
|
49
|
-
pkg: false,
|
|
50
|
-
file: "component.js",
|
|
51
|
-
identifier: "test-module/component"
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
scopes: {}
|
|
55
|
-
}
|
|
56
|
-
];
|
|
57
|
-
const result = buildImportsMap(
|
|
58
|
-
manifests,
|
|
59
|
-
(name, file) => `${name}/${file}`
|
|
60
|
-
);
|
|
61
|
-
assert.deepEqual(result, {
|
|
62
|
-
"test-module/component": "test-module/component.js",
|
|
63
|
-
"test-module/custom-name": "test-module/component.js"
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
test("should handle user imports with non existing identifiers", () => {
|
|
67
|
-
const manifests = [
|
|
68
|
-
{
|
|
69
|
-
name: "test-module",
|
|
70
|
-
imports: {
|
|
71
|
-
external: "https://cdn.com/lib.js"
|
|
72
|
-
},
|
|
73
|
-
exports: {
|
|
74
|
-
component: {
|
|
75
|
-
name: "component",
|
|
76
|
-
pkg: false,
|
|
77
|
-
file: "component.js",
|
|
78
|
-
identifier: "test-module/component"
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
scopes: {}
|
|
82
|
-
}
|
|
83
|
-
];
|
|
84
|
-
const result = buildImportsMap(
|
|
85
|
-
manifests,
|
|
86
|
-
(name, file) => `${name}/${file}`
|
|
87
|
-
);
|
|
88
|
-
assert.deepEqual(result, {
|
|
89
|
-
"test-module/component": "test-module/component.js",
|
|
90
|
-
"test-module/external": "https://cdn.com/lib.js"
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
43
|
test("should create aliases for index suffixes", () => {
|
|
94
44
|
const manifests = [
|
|
95
45
|
{
|
|
96
46
|
name: "test-module",
|
|
97
|
-
imports: {},
|
|
98
47
|
exports: {
|
|
99
48
|
"src/index": {
|
|
100
49
|
name: "src/index",
|
|
@@ -119,7 +68,6 @@ describe("buildImportsMap", () => {
|
|
|
119
68
|
const manifests = [
|
|
120
69
|
{
|
|
121
70
|
name: "module-a",
|
|
122
|
-
imports: {},
|
|
123
71
|
exports: {
|
|
124
72
|
utils: {
|
|
125
73
|
name: "utils",
|
|
@@ -132,9 +80,6 @@ describe("buildImportsMap", () => {
|
|
|
132
80
|
},
|
|
133
81
|
{
|
|
134
82
|
name: "module-b",
|
|
135
|
-
imports: {
|
|
136
|
-
shared: "module-a/utils"
|
|
137
|
-
},
|
|
138
83
|
exports: {},
|
|
139
84
|
scopes: {}
|
|
140
85
|
}
|
|
@@ -144,82 +89,13 @@ describe("buildImportsMap", () => {
|
|
|
144
89
|
(name, file) => `${name}/${file}`
|
|
145
90
|
);
|
|
146
91
|
assert.deepEqual(result, {
|
|
147
|
-
"module-a/utils": "module-a/utils.js"
|
|
148
|
-
"module-b/shared": "module-a/utils.js"
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
test("should prioritize user imports", () => {
|
|
152
|
-
const manifests = [
|
|
153
|
-
{
|
|
154
|
-
name: "test-module",
|
|
155
|
-
imports: {
|
|
156
|
-
react: "preact",
|
|
157
|
-
vue: "./custom/vue.js"
|
|
158
|
-
},
|
|
159
|
-
exports: {
|
|
160
|
-
react: {
|
|
161
|
-
name: "react",
|
|
162
|
-
pkg: false,
|
|
163
|
-
file: "react.js",
|
|
164
|
-
identifier: "test-module/react"
|
|
165
|
-
},
|
|
166
|
-
vue: {
|
|
167
|
-
name: "vue",
|
|
168
|
-
pkg: false,
|
|
169
|
-
file: "vue.js",
|
|
170
|
-
identifier: "test-module/vue"
|
|
171
|
-
}
|
|
172
|
-
},
|
|
173
|
-
scopes: {}
|
|
174
|
-
}
|
|
175
|
-
];
|
|
176
|
-
const result = buildImportsMap(
|
|
177
|
-
manifests,
|
|
178
|
-
(name, file) => `${name}/${file}`
|
|
179
|
-
);
|
|
180
|
-
assert.deepEqual(result, {
|
|
181
|
-
"test-module/react": "preact",
|
|
182
|
-
"test-module/vue": "./custom/vue.js"
|
|
183
|
-
});
|
|
184
|
-
});
|
|
185
|
-
test("should handle mixed user import types", () => {
|
|
186
|
-
const manifests = [
|
|
187
|
-
{
|
|
188
|
-
name: "test-module",
|
|
189
|
-
imports: {
|
|
190
|
-
"url-import": "https://example.com/lib.js",
|
|
191
|
-
"relative-import": "./local/file.js",
|
|
192
|
-
"identifier-import": "test-module/component"
|
|
193
|
-
},
|
|
194
|
-
exports: {
|
|
195
|
-
component: {
|
|
196
|
-
name: "component",
|
|
197
|
-
pkg: false,
|
|
198
|
-
file: "component.js",
|
|
199
|
-
identifier: "test-module/component"
|
|
200
|
-
}
|
|
201
|
-
},
|
|
202
|
-
scopes: {}
|
|
203
|
-
}
|
|
204
|
-
];
|
|
205
|
-
const result = buildImportsMap(
|
|
206
|
-
manifests,
|
|
207
|
-
(name, file) => `${name}/${file}`
|
|
208
|
-
);
|
|
209
|
-
assert.deepEqual(result, {
|
|
210
|
-
"test-module/component": "test-module/component.js",
|
|
211
|
-
"test-module/url-import": "https://example.com/lib.js",
|
|
212
|
-
"test-module/relative-import": "./local/file.js",
|
|
213
|
-
"test-module/identifier-import": "test-module/component.js"
|
|
92
|
+
"module-a/utils": "module-a/utils.js"
|
|
214
93
|
});
|
|
215
94
|
});
|
|
216
95
|
test("should handle empty exports", () => {
|
|
217
96
|
const manifests = [
|
|
218
97
|
{
|
|
219
98
|
name: "test-module",
|
|
220
|
-
imports: {
|
|
221
|
-
external: "https://cdn.com/lib.js"
|
|
222
|
-
},
|
|
223
99
|
exports: {},
|
|
224
100
|
scopes: {}
|
|
225
101
|
}
|
|
@@ -228,39 +104,12 @@ describe("buildImportsMap", () => {
|
|
|
228
104
|
manifests,
|
|
229
105
|
(name, file) => `${name}/${file}`
|
|
230
106
|
);
|
|
231
|
-
assert.deepEqual(result, {
|
|
232
|
-
"test-module/external": "https://cdn.com/lib.js"
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
test("should handle empty imports", () => {
|
|
236
|
-
const manifests = [
|
|
237
|
-
{
|
|
238
|
-
name: "test-module",
|
|
239
|
-
imports: {},
|
|
240
|
-
exports: {
|
|
241
|
-
component: {
|
|
242
|
-
name: "component",
|
|
243
|
-
pkg: false,
|
|
244
|
-
file: "component.js",
|
|
245
|
-
identifier: "test-module/component"
|
|
246
|
-
}
|
|
247
|
-
},
|
|
248
|
-
scopes: {}
|
|
249
|
-
}
|
|
250
|
-
];
|
|
251
|
-
const result = buildImportsMap(
|
|
252
|
-
manifests,
|
|
253
|
-
(name, file) => `${name}/${file}`
|
|
254
|
-
);
|
|
255
|
-
assert.deepEqual(result, {
|
|
256
|
-
"test-module/component": "test-module/component.js"
|
|
257
|
-
});
|
|
107
|
+
assert.deepEqual(result, {});
|
|
258
108
|
});
|
|
259
109
|
test("should handle duplicate alias creation", () => {
|
|
260
110
|
const manifests = [
|
|
261
111
|
{
|
|
262
112
|
name: "test-module",
|
|
263
|
-
imports: {},
|
|
264
113
|
exports: {
|
|
265
114
|
"src/components/index": {
|
|
266
115
|
name: "src/components/index",
|
|
@@ -281,77 +130,10 @@ describe("buildImportsMap", () => {
|
|
|
281
130
|
"test-module/src/components": "test-module/src/components/index.js"
|
|
282
131
|
});
|
|
283
132
|
});
|
|
284
|
-
test("should handle cross-module references", () => {
|
|
285
|
-
const manifests = [
|
|
286
|
-
{
|
|
287
|
-
name: "module-a",
|
|
288
|
-
imports: {},
|
|
289
|
-
exports: {
|
|
290
|
-
utils: {
|
|
291
|
-
name: "utils",
|
|
292
|
-
pkg: false,
|
|
293
|
-
file: "utils.js",
|
|
294
|
-
identifier: "module-a/utils"
|
|
295
|
-
}
|
|
296
|
-
},
|
|
297
|
-
scopes: {}
|
|
298
|
-
},
|
|
299
|
-
{
|
|
300
|
-
name: "module-b",
|
|
301
|
-
imports: {
|
|
302
|
-
shared: "module-a/utils"
|
|
303
|
-
},
|
|
304
|
-
exports: {},
|
|
305
|
-
scopes: {}
|
|
306
|
-
}
|
|
307
|
-
];
|
|
308
|
-
const result = buildImportsMap(
|
|
309
|
-
manifests,
|
|
310
|
-
(name, file) => `${name}/${file}`
|
|
311
|
-
);
|
|
312
|
-
assert.deepEqual(result, {
|
|
313
|
-
"module-a/utils": "module-a/utils.js",
|
|
314
|
-
"module-b/shared": "module-a/utils.js"
|
|
315
|
-
});
|
|
316
|
-
});
|
|
317
|
-
test("should handle cross-module non-existent references", () => {
|
|
318
|
-
const manifests = [
|
|
319
|
-
{
|
|
320
|
-
name: "module-a",
|
|
321
|
-
imports: {},
|
|
322
|
-
exports: {
|
|
323
|
-
utils: {
|
|
324
|
-
name: "utils",
|
|
325
|
-
pkg: false,
|
|
326
|
-
file: "utils.js",
|
|
327
|
-
identifier: "module-a/utils"
|
|
328
|
-
}
|
|
329
|
-
},
|
|
330
|
-
scopes: {}
|
|
331
|
-
},
|
|
332
|
-
{
|
|
333
|
-
name: "module-b",
|
|
334
|
-
imports: {
|
|
335
|
-
external: "module-a/non-existent"
|
|
336
|
-
},
|
|
337
|
-
exports: {},
|
|
338
|
-
scopes: {}
|
|
339
|
-
}
|
|
340
|
-
];
|
|
341
|
-
const result = buildImportsMap(
|
|
342
|
-
manifests,
|
|
343
|
-
(name, file) => `${name}/${file}`
|
|
344
|
-
);
|
|
345
|
-
assert.deepEqual(result, {
|
|
346
|
-
"module-a/utils": "module-a/utils.js",
|
|
347
|
-
"module-b/external": "module-a/non-existent"
|
|
348
|
-
});
|
|
349
|
-
});
|
|
350
133
|
test("should handle identifier conflicts across modules", () => {
|
|
351
134
|
const manifests = [
|
|
352
135
|
{
|
|
353
136
|
name: "module-a",
|
|
354
|
-
imports: {},
|
|
355
137
|
exports: {
|
|
356
138
|
utils: {
|
|
357
139
|
name: "utils",
|
|
@@ -364,7 +146,6 @@ describe("buildImportsMap", () => {
|
|
|
364
146
|
},
|
|
365
147
|
{
|
|
366
148
|
name: "module-b",
|
|
367
|
-
imports: {},
|
|
368
149
|
exports: {
|
|
369
150
|
utils: {
|
|
370
151
|
name: "utils",
|
|
@@ -385,39 +166,10 @@ describe("buildImportsMap", () => {
|
|
|
385
166
|
"module-b/utils": "module-b/utils-b.js"
|
|
386
167
|
});
|
|
387
168
|
});
|
|
388
|
-
test("should handle user imports referencing aliased identifiers", () => {
|
|
389
|
-
const manifests = [
|
|
390
|
-
{
|
|
391
|
-
name: "test-module",
|
|
392
|
-
imports: {
|
|
393
|
-
"alias-test": "test-module/src/index"
|
|
394
|
-
},
|
|
395
|
-
exports: {
|
|
396
|
-
"src/index": {
|
|
397
|
-
name: "src/index",
|
|
398
|
-
pkg: false,
|
|
399
|
-
file: "src/index.js",
|
|
400
|
-
identifier: "test-module/src/index"
|
|
401
|
-
}
|
|
402
|
-
},
|
|
403
|
-
scopes: {}
|
|
404
|
-
}
|
|
405
|
-
];
|
|
406
|
-
const result = buildImportsMap(
|
|
407
|
-
manifests,
|
|
408
|
-
(name, file) => `${name}/${file}`
|
|
409
|
-
);
|
|
410
|
-
assert.deepEqual(result, {
|
|
411
|
-
"test-module/src/index": "test-module/src/index.js",
|
|
412
|
-
"test-module/src": "test-module/src/index.js",
|
|
413
|
-
"test-module/alias-test": "test-module/src/index.js"
|
|
414
|
-
});
|
|
415
|
-
});
|
|
416
169
|
test("should handle nested index aliases", () => {
|
|
417
170
|
const manifests = [
|
|
418
171
|
{
|
|
419
172
|
name: "test-module",
|
|
420
|
-
imports: {},
|
|
421
173
|
exports: {
|
|
422
174
|
"src/components/utils/index": {
|
|
423
175
|
name: "src/components/utils/index",
|
|
@@ -439,6 +191,577 @@ describe("buildImportsMap", () => {
|
|
|
439
191
|
});
|
|
440
192
|
});
|
|
441
193
|
});
|
|
194
|
+
describe("fixNestedScopesResolution", () => {
|
|
195
|
+
test("should return unchanged import map for empty scopes", () => {
|
|
196
|
+
const importMap = {
|
|
197
|
+
imports: {
|
|
198
|
+
"shared-modules/vue": "/shared-modules/vue.620a1e89.final.mjs"
|
|
199
|
+
},
|
|
200
|
+
scopes: {}
|
|
201
|
+
};
|
|
202
|
+
const result = fixNestedScopesResolution(importMap);
|
|
203
|
+
assert.deepEqual(result, importMap);
|
|
204
|
+
});
|
|
205
|
+
test("should return unchanged import map for shallow scopes only", () => {
|
|
206
|
+
const importMap = {
|
|
207
|
+
imports: {
|
|
208
|
+
"shared-modules/vue": "/shared-modules/vue.620a1e89.final.mjs"
|
|
209
|
+
},
|
|
210
|
+
scopes: {
|
|
211
|
+
"/shared-modules/": {
|
|
212
|
+
vue: "/shared-modules/vue.620a1e89.final.mjs"
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
const result = fixNestedScopesResolution(importMap);
|
|
217
|
+
assert.deepEqual(result, importMap);
|
|
218
|
+
});
|
|
219
|
+
test("should create file-level scopes for nested scopes", () => {
|
|
220
|
+
const importMap = {
|
|
221
|
+
imports: {
|
|
222
|
+
"shared-modules/vue2": "/shared-modules/vue2.a1b2c3d4.final.mjs",
|
|
223
|
+
"shared-modules/vue2/@esmx/router-vue": "/shared-modules/vue2/@esmx/router-vue.e5f6g7h8.final.mjs",
|
|
224
|
+
"shared-modules/vue2/index": "/shared-modules/vue2/index.i9j0k1l2.final.mjs",
|
|
225
|
+
"shared-modules/vue": "/shared-modules/vue.m3n4o5p6.final.mjs"
|
|
226
|
+
},
|
|
227
|
+
scopes: {
|
|
228
|
+
"/shared-modules/": {
|
|
229
|
+
vue: "/shared-modules/vue.m3n4o5p6.final.mjs"
|
|
230
|
+
},
|
|
231
|
+
"/shared-modules/vue2/": {
|
|
232
|
+
vue: "/shared-modules/vue2.a1b2c3d4.final.mjs"
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
const expected = {
|
|
237
|
+
imports: {
|
|
238
|
+
"shared-modules/vue2": "/shared-modules/vue2.a1b2c3d4.final.mjs",
|
|
239
|
+
"shared-modules/vue2/@esmx/router-vue": "/shared-modules/vue2/@esmx/router-vue.e5f6g7h8.final.mjs",
|
|
240
|
+
"shared-modules/vue2/index": "/shared-modules/vue2/index.i9j0k1l2.final.mjs",
|
|
241
|
+
"shared-modules/vue": "/shared-modules/vue.m3n4o5p6.final.mjs"
|
|
242
|
+
},
|
|
243
|
+
scopes: {
|
|
244
|
+
"/shared-modules/vue.m3n4o5p6.final.mjs": {
|
|
245
|
+
vue: "/shared-modules/vue.m3n4o5p6.final.mjs"
|
|
246
|
+
},
|
|
247
|
+
"/shared-modules/vue2.a1b2c3d4.final.mjs": {
|
|
248
|
+
vue: "/shared-modules/vue.m3n4o5p6.final.mjs"
|
|
249
|
+
},
|
|
250
|
+
"/shared-modules/vue2/@esmx/router-vue.e5f6g7h8.final.mjs": {
|
|
251
|
+
vue: "/shared-modules/vue2.a1b2c3d4.final.mjs"
|
|
252
|
+
},
|
|
253
|
+
"/shared-modules/vue2/index.i9j0k1l2.final.mjs": {
|
|
254
|
+
vue: "/shared-modules/vue2.a1b2c3d4.final.mjs"
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
const result = fixNestedScopesResolution(importMap);
|
|
259
|
+
assert.deepEqual(result, expected);
|
|
260
|
+
});
|
|
261
|
+
test("should handle multiple nested scopes correctly", () => {
|
|
262
|
+
const importMap = {
|
|
263
|
+
imports: {
|
|
264
|
+
"shared-modules/vue2": "/shared-modules/vue2.q7r8s9t0.final.mjs",
|
|
265
|
+
"shared-modules/vue2/component": "/shared-modules/vue2/component.u1v2w3x4.final.mjs",
|
|
266
|
+
"shared-modules/vue3": "/shared-modules/vue3.y5z6a7b8.final.mjs",
|
|
267
|
+
"shared-modules/vue3/component": "/shared-modules/vue3/component.c9d0e1f2.final.mjs",
|
|
268
|
+
"shared-modules/vue": "/shared-modules/vue.g3h4i5j6.final.mjs"
|
|
269
|
+
},
|
|
270
|
+
scopes: {
|
|
271
|
+
"/shared-modules/": {
|
|
272
|
+
vue: "/shared-modules/vue.g3h4i5j6.final.mjs"
|
|
273
|
+
},
|
|
274
|
+
"/shared-modules/vue2/": {
|
|
275
|
+
vue: "/shared-modules/vue2.q7r8s9t0.final.mjs"
|
|
276
|
+
},
|
|
277
|
+
"/shared-modules/vue3/": {
|
|
278
|
+
vue: "/shared-modules/vue3.y5z6a7b8.final.mjs"
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
const expected = {
|
|
283
|
+
imports: {
|
|
284
|
+
"shared-modules/vue2": "/shared-modules/vue2.q7r8s9t0.final.mjs",
|
|
285
|
+
"shared-modules/vue2/component": "/shared-modules/vue2/component.u1v2w3x4.final.mjs",
|
|
286
|
+
"shared-modules/vue3": "/shared-modules/vue3.y5z6a7b8.final.mjs",
|
|
287
|
+
"shared-modules/vue3/component": "/shared-modules/vue3/component.c9d0e1f2.final.mjs",
|
|
288
|
+
"shared-modules/vue": "/shared-modules/vue.g3h4i5j6.final.mjs"
|
|
289
|
+
},
|
|
290
|
+
scopes: {
|
|
291
|
+
"/shared-modules/vue.g3h4i5j6.final.mjs": {
|
|
292
|
+
vue: "/shared-modules/vue.g3h4i5j6.final.mjs"
|
|
293
|
+
},
|
|
294
|
+
"/shared-modules/vue2.q7r8s9t0.final.mjs": {
|
|
295
|
+
vue: "/shared-modules/vue.g3h4i5j6.final.mjs"
|
|
296
|
+
},
|
|
297
|
+
"/shared-modules/vue2/component.u1v2w3x4.final.mjs": {
|
|
298
|
+
vue: "/shared-modules/vue2.q7r8s9t0.final.mjs"
|
|
299
|
+
},
|
|
300
|
+
"/shared-modules/vue3.y5z6a7b8.final.mjs": {
|
|
301
|
+
vue: "/shared-modules/vue.g3h4i5j6.final.mjs"
|
|
302
|
+
},
|
|
303
|
+
"/shared-modules/vue3/component.c9d0e1f2.final.mjs": {
|
|
304
|
+
vue: "/shared-modules/vue3.y5z6a7b8.final.mjs"
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
const result = fixNestedScopesResolution(importMap);
|
|
309
|
+
assert.deepEqual(result, expected);
|
|
310
|
+
});
|
|
311
|
+
test("should handle deeply nested scopes", () => {
|
|
312
|
+
const importMap = {
|
|
313
|
+
imports: {
|
|
314
|
+
"shared-modules/vue2/components/button": "/shared-modules/vue2/components/button.k7l8m9n0.final.mjs",
|
|
315
|
+
"shared-modules/vue2/components/input": "/shared-modules/vue2/components/input.o1p2q3r4.final.mjs"
|
|
316
|
+
},
|
|
317
|
+
scopes: {
|
|
318
|
+
"/shared-modules/vue2/components/": {
|
|
319
|
+
vue: "/shared-modules/vue2.s5t6u7v8.final.mjs"
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
const expected = {
|
|
324
|
+
imports: {
|
|
325
|
+
"shared-modules/vue2/components/button": "/shared-modules/vue2/components/button.k7l8m9n0.final.mjs",
|
|
326
|
+
"shared-modules/vue2/components/input": "/shared-modules/vue2/components/input.o1p2q3r4.final.mjs"
|
|
327
|
+
},
|
|
328
|
+
scopes: {
|
|
329
|
+
"/shared-modules/vue2/components/button.k7l8m9n0.final.mjs": {
|
|
330
|
+
vue: "/shared-modules/vue2.s5t6u7v8.final.mjs"
|
|
331
|
+
},
|
|
332
|
+
"/shared-modules/vue2/components/input.o1p2q3r4.final.mjs": {
|
|
333
|
+
vue: "/shared-modules/vue2.s5t6u7v8.final.mjs"
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
const result = fixNestedScopesResolution(importMap);
|
|
338
|
+
assert.deepEqual(result, expected);
|
|
339
|
+
});
|
|
340
|
+
test("should not create file-level scopes for imports not matching nested scope", () => {
|
|
341
|
+
const importMap = {
|
|
342
|
+
imports: {
|
|
343
|
+
"shared-modules/vue": "/shared-modules/vue.w9x0y1z2.final.mjs",
|
|
344
|
+
"shared-modules/vue2/component": "/shared-modules/vue2/component.a3b4c5d6.final.mjs",
|
|
345
|
+
"other-modules/component": "/other-modules/component.e7f8g9h0.final.mjs"
|
|
346
|
+
},
|
|
347
|
+
scopes: {
|
|
348
|
+
"/shared-modules/vue2/": {
|
|
349
|
+
vue: "/shared-modules/vue2.i1j2k3l4.final.mjs"
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
const expected = {
|
|
354
|
+
imports: importMap.imports,
|
|
355
|
+
scopes: {
|
|
356
|
+
"/shared-modules/vue2/component.a3b4c5d6.final.mjs": {
|
|
357
|
+
vue: "/shared-modules/vue2.i1j2k3l4.final.mjs"
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
const result = fixNestedScopesResolution(importMap);
|
|
362
|
+
assert.deepEqual(result, expected);
|
|
363
|
+
});
|
|
364
|
+
test("should handle empty imports", () => {
|
|
365
|
+
const importMap = {
|
|
366
|
+
imports: {},
|
|
367
|
+
scopes: {
|
|
368
|
+
"/shared-modules/vue2/": {
|
|
369
|
+
vue: "/shared-modules/vue2.m5n6o7p8.final.mjs"
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
const expected = {
|
|
374
|
+
imports: {},
|
|
375
|
+
scopes: {}
|
|
376
|
+
};
|
|
377
|
+
const result = fixNestedScopesResolution(importMap);
|
|
378
|
+
assert.deepEqual(result, expected);
|
|
379
|
+
});
|
|
380
|
+
test("should preserve original import map structure", () => {
|
|
381
|
+
const importMap = {
|
|
382
|
+
imports: {
|
|
383
|
+
"shared-modules/vue2": "/shared-modules/vue2.q9r8s7t6.final.mjs",
|
|
384
|
+
"shared-modules/vue2/component": "/shared-modules/vue2/component.u5v4w3x2.final.mjs"
|
|
385
|
+
},
|
|
386
|
+
scopes: {
|
|
387
|
+
"/shared-modules/vue2/": {
|
|
388
|
+
vue: "/shared-modules/vue2.q9r8s7t6.final.mjs",
|
|
389
|
+
"vue-router": "/shared-modules/vue2/router.y1z0a9b8.final.mjs"
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
const result = fixNestedScopesResolution(importMap);
|
|
394
|
+
assert.deepEqual(result.imports, importMap.imports);
|
|
395
|
+
assert.deepEqual(
|
|
396
|
+
result.scopes["/shared-modules/vue2/"],
|
|
397
|
+
importMap.scopes["/shared-modules/vue2/"]
|
|
398
|
+
);
|
|
399
|
+
assert.deepEqual(
|
|
400
|
+
result.scopes["/shared-modules/vue2/component.u5v4w3x2.final.mjs"],
|
|
401
|
+
{
|
|
402
|
+
vue: "/shared-modules/vue2.q9r8s7t6.final.mjs",
|
|
403
|
+
"vue-router": "/shared-modules/vue2/router.y1z0a9b8.final.mjs"
|
|
404
|
+
}
|
|
405
|
+
);
|
|
406
|
+
});
|
|
407
|
+
test("should handle complex priority scenarios with multiple nested levels", () => {
|
|
408
|
+
const importMap = {
|
|
409
|
+
imports: {
|
|
410
|
+
"shared-modules/vue2": "/shared-modules/vue2.c7d8e9f0.final.mjs",
|
|
411
|
+
"shared-modules/vue2/test": "/shared-modules/vue2/test.a1b2c3d4.final.mjs",
|
|
412
|
+
"shared-modules/vue2/test/component": "/shared-modules/vue2/test/component.e5f6g7h8.final.mjs",
|
|
413
|
+
"shared-modules/vue": "/shared-modules/vue.i9j0k1l2.final.mjs"
|
|
414
|
+
},
|
|
415
|
+
scopes: {
|
|
416
|
+
"/shared-modules/": {
|
|
417
|
+
vue: "/shared-modules/vue.i9j0k1l2.final.mjs",
|
|
418
|
+
"vue-router": "/shared-modules/@esmx/router.m3n4o5p6.final.mjs"
|
|
419
|
+
},
|
|
420
|
+
"/shared-modules/vue2/": {
|
|
421
|
+
vue: "/shared-modules/vue2.c7d8e9f0.final.mjs",
|
|
422
|
+
"vue-router": "/shared-modules/vue2/@esmx/router-vue.q7r8s9t0.final.mjs"
|
|
423
|
+
},
|
|
424
|
+
"/shared-modules/vue2/test/": {
|
|
425
|
+
vue: "/shared-modules/vue2.c7d8e9f0.final.mjs",
|
|
426
|
+
"test-utils": "/shared-modules/vue2/test/utils.u1v2w3x4.final.mjs"
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
const expected = {
|
|
431
|
+
imports: {
|
|
432
|
+
"shared-modules/vue2": "/shared-modules/vue2.c7d8e9f0.final.mjs",
|
|
433
|
+
"shared-modules/vue2/test": "/shared-modules/vue2/test.a1b2c3d4.final.mjs",
|
|
434
|
+
"shared-modules/vue2/test/component": "/shared-modules/vue2/test/component.e5f6g7h8.final.mjs",
|
|
435
|
+
"shared-modules/vue": "/shared-modules/vue.i9j0k1l2.final.mjs"
|
|
436
|
+
},
|
|
437
|
+
scopes: {
|
|
438
|
+
"/shared-modules/vue.i9j0k1l2.final.mjs": {
|
|
439
|
+
vue: "/shared-modules/vue.i9j0k1l2.final.mjs",
|
|
440
|
+
"vue-router": "/shared-modules/@esmx/router.m3n4o5p6.final.mjs"
|
|
441
|
+
},
|
|
442
|
+
"/shared-modules/vue2.c7d8e9f0.final.mjs": {
|
|
443
|
+
vue: "/shared-modules/vue.i9j0k1l2.final.mjs",
|
|
444
|
+
"vue-router": "/shared-modules/@esmx/router.m3n4o5p6.final.mjs"
|
|
445
|
+
},
|
|
446
|
+
"/shared-modules/vue2/test.a1b2c3d4.final.mjs": {
|
|
447
|
+
vue: "/shared-modules/vue2.c7d8e9f0.final.mjs",
|
|
448
|
+
"vue-router": "/shared-modules/vue2/@esmx/router-vue.q7r8s9t0.final.mjs"
|
|
449
|
+
},
|
|
450
|
+
"/shared-modules/vue2/test/component.e5f6g7h8.final.mjs": {
|
|
451
|
+
vue: "/shared-modules/vue2.c7d8e9f0.final.mjs",
|
|
452
|
+
"test-utils": "/shared-modules/vue2/test/utils.u1v2w3x4.final.mjs",
|
|
453
|
+
"vue-router": "/shared-modules/vue2/@esmx/router-vue.q7r8s9t0.final.mjs"
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
};
|
|
457
|
+
const result = fixNestedScopesResolution(importMap);
|
|
458
|
+
assert.deepEqual(result, expected);
|
|
459
|
+
});
|
|
460
|
+
test("should handle priority with overlapping nested scopes", () => {
|
|
461
|
+
const importMap = {
|
|
462
|
+
imports: {
|
|
463
|
+
"shared-modules/vue2": "/shared-modules/vue2.n3o4p5q6.final.mjs",
|
|
464
|
+
"shared-modules/vue2/components": "/shared-modules/vue2/components.r7s8t9u0.final.mjs",
|
|
465
|
+
"shared-modules/vue2/components/button": "/shared-modules/vue2/components/button.v1w2x3y4.final.mjs",
|
|
466
|
+
"shared-modules/vue2/components/input": "/shared-modules/vue2/components/input.z5a6b7c8.final.mjs"
|
|
467
|
+
},
|
|
468
|
+
scopes: {
|
|
469
|
+
"/shared-modules/vue2/": {
|
|
470
|
+
vue: "/shared-modules/vue2.n3o4p5q6.final.mjs",
|
|
471
|
+
"vue-router": "/shared-modules/vue2/@esmx/router-vue.d9e0f1g2.final.mjs"
|
|
472
|
+
},
|
|
473
|
+
"/shared-modules/vue2/components/": {
|
|
474
|
+
vue: "/shared-modules/vue2.n3o4p5q6.final.mjs",
|
|
475
|
+
"component-utils": "/shared-modules/vue2/components/utils.h3i4j5k6.final.mjs"
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
};
|
|
479
|
+
const expected = {
|
|
480
|
+
imports: {
|
|
481
|
+
"shared-modules/vue2": "/shared-modules/vue2.n3o4p5q6.final.mjs",
|
|
482
|
+
"shared-modules/vue2/components": "/shared-modules/vue2/components.r7s8t9u0.final.mjs",
|
|
483
|
+
"shared-modules/vue2/components/button": "/shared-modules/vue2/components/button.v1w2x3y4.final.mjs",
|
|
484
|
+
"shared-modules/vue2/components/input": "/shared-modules/vue2/components/input.z5a6b7c8.final.mjs"
|
|
485
|
+
},
|
|
486
|
+
scopes: {
|
|
487
|
+
"/shared-modules/vue2/components.r7s8t9u0.final.mjs": {
|
|
488
|
+
vue: "/shared-modules/vue2.n3o4p5q6.final.mjs",
|
|
489
|
+
"vue-router": "/shared-modules/vue2/@esmx/router-vue.d9e0f1g2.final.mjs"
|
|
490
|
+
},
|
|
491
|
+
"/shared-modules/vue2/components/button.v1w2x3y4.final.mjs": {
|
|
492
|
+
"component-utils": "/shared-modules/vue2/components/utils.h3i4j5k6.final.mjs",
|
|
493
|
+
vue: "/shared-modules/vue2.n3o4p5q6.final.mjs",
|
|
494
|
+
"vue-router": "/shared-modules/vue2/@esmx/router-vue.d9e0f1g2.final.mjs"
|
|
495
|
+
},
|
|
496
|
+
"/shared-modules/vue2/components/input.z5a6b7c8.final.mjs": {
|
|
497
|
+
"component-utils": "/shared-modules/vue2/components/utils.h3i4j5k6.final.mjs",
|
|
498
|
+
vue: "/shared-modules/vue2.n3o4p5q6.final.mjs",
|
|
499
|
+
"vue-router": "/shared-modules/vue2/@esmx/router-vue.d9e0f1g2.final.mjs"
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
};
|
|
503
|
+
const result = fixNestedScopesResolution(importMap);
|
|
504
|
+
assert.deepEqual(result, expected);
|
|
505
|
+
});
|
|
506
|
+
test("should handle very deeply nested scope priority scenarios", () => {
|
|
507
|
+
const importMap = {
|
|
508
|
+
imports: {
|
|
509
|
+
"shared-modules/vue2": "/shared-modules/vue2.l7m8n9o0.final.mjs",
|
|
510
|
+
"shared-modules/vue2/test": "/shared-modules/vue2/test.p1q2r3s4.final.mjs",
|
|
511
|
+
"shared-modules/vue2/test/unit": "/shared-modules/vue2/test/unit.t5u6v7w8.final.mjs",
|
|
512
|
+
"shared-modules/vue2/test/unit/component": "/shared-modules/vue2/test/unit/component.x9y0z1a2.final.mjs"
|
|
513
|
+
},
|
|
514
|
+
scopes: {
|
|
515
|
+
"/shared-modules/": {
|
|
516
|
+
vue: "/shared-modules/vue.b3c4d5e6.final.mjs"
|
|
517
|
+
},
|
|
518
|
+
"/shared-modules/vue2/": {
|
|
519
|
+
vue: "/shared-modules/vue2.l7m8n9o0.final.mjs"
|
|
520
|
+
},
|
|
521
|
+
"/shared-modules/vue2/test/": {
|
|
522
|
+
vue: "/shared-modules/vue2.l7m8n9o0.final.mjs",
|
|
523
|
+
"test-utils": "/shared-modules/vue2/test/utils.f7g8h9i0.final.mjs"
|
|
524
|
+
},
|
|
525
|
+
"/shared-modules/vue2/test/unit/": {
|
|
526
|
+
vue: "/shared-modules/vue2.l7m8n9o0.final.mjs",
|
|
527
|
+
"test-utils": "/shared-modules/vue2/test/utils.f7g8h9i0.final.mjs"
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
};
|
|
531
|
+
const expected = {
|
|
532
|
+
imports: {
|
|
533
|
+
"shared-modules/vue2": "/shared-modules/vue2.l7m8n9o0.final.mjs",
|
|
534
|
+
"shared-modules/vue2/test": "/shared-modules/vue2/test.p1q2r3s4.final.mjs",
|
|
535
|
+
"shared-modules/vue2/test/unit": "/shared-modules/vue2/test/unit.t5u6v7w8.final.mjs",
|
|
536
|
+
"shared-modules/vue2/test/unit/component": "/shared-modules/vue2/test/unit/component.x9y0z1a2.final.mjs"
|
|
537
|
+
},
|
|
538
|
+
scopes: {
|
|
539
|
+
"/shared-modules/vue2.l7m8n9o0.final.mjs": {
|
|
540
|
+
vue: "/shared-modules/vue.b3c4d5e6.final.mjs"
|
|
541
|
+
},
|
|
542
|
+
"/shared-modules/vue2/test.p1q2r3s4.final.mjs": {
|
|
543
|
+
vue: "/shared-modules/vue2.l7m8n9o0.final.mjs"
|
|
544
|
+
},
|
|
545
|
+
"/shared-modules/vue2/test/unit.t5u6v7w8.final.mjs": {
|
|
546
|
+
vue: "/shared-modules/vue2.l7m8n9o0.final.mjs",
|
|
547
|
+
"test-utils": "/shared-modules/vue2/test/utils.f7g8h9i0.final.mjs"
|
|
548
|
+
},
|
|
549
|
+
"/shared-modules/vue2/test/unit/component.x9y0z1a2.final.mjs": {
|
|
550
|
+
vue: "/shared-modules/vue2.l7m8n9o0.final.mjs",
|
|
551
|
+
"test-utils": "/shared-modules/vue2/test/utils.f7g8h9i0.final.mjs"
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
};
|
|
555
|
+
const result = fixNestedScopesResolution(importMap);
|
|
556
|
+
assert.deepEqual(result, expected);
|
|
557
|
+
});
|
|
558
|
+
test("should ensure different directory levels have distinct values for proper testing", () => {
|
|
559
|
+
const importMap = {
|
|
560
|
+
imports: {
|
|
561
|
+
"shared-modules/level1": "/shared-modules/level1.a1b2c3d4.final.mjs",
|
|
562
|
+
"shared-modules/level1/level2": "/shared-modules/level1/level2.e5f6g7h8.final.mjs",
|
|
563
|
+
"shared-modules/level1/level2/level3": "/shared-modules/level1/level2/level3.i9j0k1l2.final.mjs"
|
|
564
|
+
},
|
|
565
|
+
scopes: {
|
|
566
|
+
"/shared-modules/level1/": {
|
|
567
|
+
vue: "/shared-modules/level1.a1b2c3d4.final.mjs"
|
|
568
|
+
},
|
|
569
|
+
"/shared-modules/level1/level2/": {
|
|
570
|
+
vue: "/shared-modules/level1/level2.e5f6g7h8.final.mjs"
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
};
|
|
574
|
+
const expected = {
|
|
575
|
+
imports: {
|
|
576
|
+
"shared-modules/level1": "/shared-modules/level1.a1b2c3d4.final.mjs",
|
|
577
|
+
"shared-modules/level1/level2": "/shared-modules/level1/level2.e5f6g7h8.final.mjs",
|
|
578
|
+
"shared-modules/level1/level2/level3": "/shared-modules/level1/level2/level3.i9j0k1l2.final.mjs"
|
|
579
|
+
},
|
|
580
|
+
scopes: {
|
|
581
|
+
"/shared-modules/level1/level2.e5f6g7h8.final.mjs": {
|
|
582
|
+
vue: "/shared-modules/level1.a1b2c3d4.final.mjs"
|
|
583
|
+
},
|
|
584
|
+
"/shared-modules/level1/level2/level3.i9j0k1l2.final.mjs": {
|
|
585
|
+
vue: "/shared-modules/level1/level2.e5f6g7h8.final.mjs"
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
};
|
|
589
|
+
const result = fixNestedScopesResolution(importMap);
|
|
590
|
+
assert.deepEqual(result, expected);
|
|
591
|
+
assert.equal(
|
|
592
|
+
result.scopes["/shared-modules/level1/level2.e5f6g7h8.final.mjs"].vue,
|
|
593
|
+
"/shared-modules/level1.a1b2c3d4.final.mjs"
|
|
594
|
+
);
|
|
595
|
+
assert.equal(
|
|
596
|
+
result.scopes["/shared-modules/level1/level2/level3.i9j0k1l2.final.mjs"].vue,
|
|
597
|
+
"/shared-modules/level1/level2.e5f6g7h8.final.mjs"
|
|
598
|
+
);
|
|
599
|
+
});
|
|
600
|
+
test("should successfully delete properties using Reflect.deleteProperty", () => {
|
|
601
|
+
const importMap = {
|
|
602
|
+
imports: {
|
|
603
|
+
"shared/modules/vue2": "/shared/modules/vue2.a1b2c3d4.final.mjs"
|
|
604
|
+
},
|
|
605
|
+
scopes: {
|
|
606
|
+
"/shared/modules/vue2/": {
|
|
607
|
+
vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
};
|
|
611
|
+
const result = fixNestedScopesResolution(importMap);
|
|
612
|
+
assert.deepEqual(result.imports, importMap.imports);
|
|
613
|
+
assert.isUndefined(result.scopes["/shared/modules/vue2/"]);
|
|
614
|
+
assert.doesNotThrow(() => {
|
|
615
|
+
fixNestedScopesResolution(importMap);
|
|
616
|
+
});
|
|
617
|
+
});
|
|
618
|
+
describe("scope path processing logic", () => {
|
|
619
|
+
test("should process all scope paths regardless of format", () => {
|
|
620
|
+
const importMap = {
|
|
621
|
+
imports: {
|
|
622
|
+
"shared/modules/vue2": "/shared/modules/vue2.a1b2c3d4.final.mjs",
|
|
623
|
+
"shared/vue": "/shared/vue.e5f6g7h8.final.mjs"
|
|
624
|
+
},
|
|
625
|
+
scopes: {
|
|
626
|
+
"shared/modules/vue2/": {
|
|
627
|
+
vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
|
|
628
|
+
},
|
|
629
|
+
"/shared/modules/vue2": {
|
|
630
|
+
vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
|
|
631
|
+
},
|
|
632
|
+
"/shared/": {
|
|
633
|
+
vue: "/shared/vue.e5f6g7h8.final.mjs"
|
|
634
|
+
},
|
|
635
|
+
"/shared/modules/vue2/": {
|
|
636
|
+
vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
};
|
|
640
|
+
const expected = {
|
|
641
|
+
imports: {
|
|
642
|
+
"shared/modules/vue2": "/shared/modules/vue2.a1b2c3d4.final.mjs",
|
|
643
|
+
"shared/vue": "/shared/vue.e5f6g7h8.final.mjs"
|
|
644
|
+
},
|
|
645
|
+
scopes: {
|
|
646
|
+
"/shared/modules/vue2.a1b2c3d4.final.mjs": {
|
|
647
|
+
vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
|
|
648
|
+
},
|
|
649
|
+
"/shared/vue.e5f6g7h8.final.mjs": {
|
|
650
|
+
vue: "/shared/vue.e5f6g7h8.final.mjs"
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
};
|
|
654
|
+
const result = fixNestedScopesResolution(importMap);
|
|
655
|
+
assert.deepEqual(result, expected);
|
|
656
|
+
});
|
|
657
|
+
test("should handle scope paths with any depth", () => {
|
|
658
|
+
const importMap = {
|
|
659
|
+
imports: {
|
|
660
|
+
"a/b/c": "/a/b/c.a1b2c3d4.final.mjs"
|
|
661
|
+
},
|
|
662
|
+
scopes: {
|
|
663
|
+
"/a/b/c/": {
|
|
664
|
+
vue: "/a/b/c.a1b2c3d4.final.mjs"
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
};
|
|
668
|
+
const expected = {
|
|
669
|
+
imports: {
|
|
670
|
+
"a/b/c": "/a/b/c.a1b2c3d4.final.mjs"
|
|
671
|
+
},
|
|
672
|
+
scopes: {}
|
|
673
|
+
};
|
|
674
|
+
const result = fixNestedScopesResolution(importMap);
|
|
675
|
+
assert.deepEqual(result, expected);
|
|
676
|
+
});
|
|
677
|
+
test("should handle very deep nested scope paths", () => {
|
|
678
|
+
const importMap = {
|
|
679
|
+
imports: {
|
|
680
|
+
"a/b/c/d/e/f": "/a/b/c/d/e/f.a1b2c3d4.final.mjs"
|
|
681
|
+
},
|
|
682
|
+
scopes: {
|
|
683
|
+
"/a/b/c/d/e/f/": {
|
|
684
|
+
vue: "/a/b/c/d/e/f.a1b2c3d4.final.mjs"
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
};
|
|
688
|
+
const expected = {
|
|
689
|
+
imports: {
|
|
690
|
+
"a/b/c/d/e/f": "/a/b/c/d/e/f.a1b2c3d4.final.mjs"
|
|
691
|
+
},
|
|
692
|
+
scopes: {}
|
|
693
|
+
};
|
|
694
|
+
const result = fixNestedScopesResolution(importMap);
|
|
695
|
+
assert.deepEqual(result, expected);
|
|
696
|
+
});
|
|
697
|
+
test("should create file-level scopes for all scope paths", () => {
|
|
698
|
+
const importMap = {
|
|
699
|
+
imports: {
|
|
700
|
+
"modules/vue": "/modules/vue.a1b2c3d4.final.mjs",
|
|
701
|
+
"shared/vue": "/shared/vue.e5f6g7h8.final.mjs"
|
|
702
|
+
},
|
|
703
|
+
scopes: {
|
|
704
|
+
"/modules/": {
|
|
705
|
+
vue: "/modules/vue.a1b2c3d4.final.mjs"
|
|
706
|
+
},
|
|
707
|
+
"/shared/": {
|
|
708
|
+
vue: "/shared/vue.e5f6g7h8.final.mjs"
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
};
|
|
712
|
+
const expected = {
|
|
713
|
+
imports: {
|
|
714
|
+
"modules/vue": "/modules/vue.a1b2c3d4.final.mjs",
|
|
715
|
+
"shared/vue": "/shared/vue.e5f6g7h8.final.mjs"
|
|
716
|
+
},
|
|
717
|
+
scopes: {
|
|
718
|
+
"/modules/vue.a1b2c3d4.final.mjs": {
|
|
719
|
+
vue: "/modules/vue.a1b2c3d4.final.mjs"
|
|
720
|
+
},
|
|
721
|
+
"/shared/vue.e5f6g7h8.final.mjs": {
|
|
722
|
+
vue: "/shared/vue.e5f6g7h8.final.mjs"
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
};
|
|
726
|
+
const result = fixNestedScopesResolution(importMap);
|
|
727
|
+
assert.deepEqual(result, expected);
|
|
728
|
+
});
|
|
729
|
+
test("should process multiple scope paths in correct order by depth", () => {
|
|
730
|
+
const importMap = {
|
|
731
|
+
imports: {
|
|
732
|
+
"shared/modules/vue2": "/shared/modules/vue2.a1b2c3d4.final.mjs",
|
|
733
|
+
"shared/modules/vue2/component": "/shared/modules/vue2/component.e5f6g7h8.final.mjs",
|
|
734
|
+
"shared/modules/vue2/utils": "/shared/modules/vue2/utils.i9j0k1l2.final.mjs"
|
|
735
|
+
},
|
|
736
|
+
scopes: {
|
|
737
|
+
"/shared/modules/vue2/": {
|
|
738
|
+
vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
|
|
739
|
+
},
|
|
740
|
+
"/shared/modules/vue2/utils/": {
|
|
741
|
+
"test-utils": "/shared/modules/vue2/utils.i9j0k1l2.final.mjs"
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
};
|
|
745
|
+
const expected = {
|
|
746
|
+
imports: {
|
|
747
|
+
"shared/modules/vue2": "/shared/modules/vue2.a1b2c3d4.final.mjs",
|
|
748
|
+
"shared/modules/vue2/component": "/shared/modules/vue2/component.e5f6g7h8.final.mjs",
|
|
749
|
+
"shared/modules/vue2/utils": "/shared/modules/vue2/utils.i9j0k1l2.final.mjs"
|
|
750
|
+
},
|
|
751
|
+
scopes: {
|
|
752
|
+
"/shared/modules/vue2/component.e5f6g7h8.final.mjs": {
|
|
753
|
+
vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
|
|
754
|
+
},
|
|
755
|
+
"/shared/modules/vue2/utils.i9j0k1l2.final.mjs": {
|
|
756
|
+
vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
};
|
|
760
|
+
const result = fixNestedScopesResolution(importMap);
|
|
761
|
+
assert.deepEqual(result, expected);
|
|
762
|
+
});
|
|
763
|
+
});
|
|
764
|
+
});
|
|
442
765
|
describe("buildScopesMap", () => {
|
|
443
766
|
test("should return empty object for empty manifests", () => {
|
|
444
767
|
const imports = {};
|
|
@@ -457,7 +780,6 @@ describe("buildScopesMap", () => {
|
|
|
457
780
|
const manifests = [
|
|
458
781
|
{
|
|
459
782
|
name: "test-module",
|
|
460
|
-
imports: {},
|
|
461
783
|
exports: {
|
|
462
784
|
component: {
|
|
463
785
|
name: "component",
|
|
@@ -484,7 +806,6 @@ describe("buildScopesMap", () => {
|
|
|
484
806
|
const manifests = [
|
|
485
807
|
{
|
|
486
808
|
name: "test-module",
|
|
487
|
-
imports: {},
|
|
488
809
|
exports: {
|
|
489
810
|
component: {
|
|
490
811
|
name: "component",
|
|
@@ -526,7 +847,6 @@ describe("buildScopesMap", () => {
|
|
|
526
847
|
const manifests = [
|
|
527
848
|
{
|
|
528
849
|
name: "test-module",
|
|
529
|
-
imports: {},
|
|
530
850
|
exports: {
|
|
531
851
|
component: {
|
|
532
852
|
name: "component",
|
|
@@ -562,7 +882,6 @@ describe("buildScopesMap", () => {
|
|
|
562
882
|
const manifests = [
|
|
563
883
|
{
|
|
564
884
|
name: "test-module",
|
|
565
|
-
imports: {},
|
|
566
885
|
exports: {
|
|
567
886
|
component: {
|
|
568
887
|
name: "component",
|
|
@@ -599,7 +918,6 @@ describe("buildScopesMap", () => {
|
|
|
599
918
|
const manifests = [
|
|
600
919
|
{
|
|
601
920
|
name: "test-module",
|
|
602
|
-
imports: {},
|
|
603
921
|
exports: {
|
|
604
922
|
node_modules: {
|
|
605
923
|
name: "node_modules",
|
|
@@ -639,7 +957,6 @@ describe("buildScopesMap", () => {
|
|
|
639
957
|
const manifests = [
|
|
640
958
|
{
|
|
641
959
|
name: "test-module",
|
|
642
|
-
imports: {},
|
|
643
960
|
exports: {
|
|
644
961
|
component: {
|
|
645
962
|
name: "component",
|
|
@@ -674,7 +991,6 @@ describe("buildScopesMap", () => {
|
|
|
674
991
|
const manifests = [
|
|
675
992
|
{
|
|
676
993
|
name: "test-module",
|
|
677
|
-
imports: {},
|
|
678
994
|
exports: {
|
|
679
995
|
component: {
|
|
680
996
|
name: "component",
|
|
@@ -721,7 +1037,6 @@ describe("buildScopesMap", () => {
|
|
|
721
1037
|
const manifests = [
|
|
722
1038
|
{
|
|
723
1039
|
name: "module-a",
|
|
724
|
-
imports: {},
|
|
725
1040
|
exports: {
|
|
726
1041
|
component: {
|
|
727
1042
|
name: "component",
|
|
@@ -738,7 +1053,6 @@ describe("buildScopesMap", () => {
|
|
|
738
1053
|
},
|
|
739
1054
|
{
|
|
740
1055
|
name: "module-b",
|
|
741
|
-
imports: {},
|
|
742
1056
|
exports: {
|
|
743
1057
|
utils: {
|
|
744
1058
|
name: "utils",
|
|
@@ -775,7 +1089,6 @@ describe("buildScopesMap", () => {
|
|
|
775
1089
|
const manifests = [
|
|
776
1090
|
{
|
|
777
1091
|
name: "test-module",
|
|
778
|
-
imports: {},
|
|
779
1092
|
exports: {
|
|
780
1093
|
component: {
|
|
781
1094
|
name: "component",
|
|
@@ -805,7 +1118,6 @@ describe("buildScopesMap", () => {
|
|
|
805
1118
|
const manifests = [
|
|
806
1119
|
{
|
|
807
1120
|
name: "test-module",
|
|
808
|
-
imports: {},
|
|
809
1121
|
exports: {
|
|
810
1122
|
component: {
|
|
811
1123
|
name: "component",
|
|
@@ -838,14 +1150,11 @@ describe("getImportMap", () => {
|
|
|
838
1150
|
scopes: {}
|
|
839
1151
|
});
|
|
840
1152
|
});
|
|
841
|
-
test("should build complete import map with
|
|
1153
|
+
test("should build complete import map with exports and scopes", () => {
|
|
842
1154
|
const options = {
|
|
843
1155
|
manifests: [
|
|
844
1156
|
{
|
|
845
1157
|
name: "test-module",
|
|
846
|
-
imports: {
|
|
847
|
-
"custom-react": "test-module/component"
|
|
848
|
-
},
|
|
849
1158
|
exports: {
|
|
850
1159
|
component: {
|
|
851
1160
|
name: "component",
|
|
@@ -875,8 +1184,7 @@ describe("getImportMap", () => {
|
|
|
875
1184
|
assert.deepEqual(result, {
|
|
876
1185
|
imports: {
|
|
877
1186
|
"test-module/component": "test-module/component.js",
|
|
878
|
-
"test-module/utils": "test-module/utils.js"
|
|
879
|
-
"test-module/custom-react": "test-module/component.js"
|
|
1187
|
+
"test-module/utils": "test-module/utils.js"
|
|
880
1188
|
},
|
|
881
1189
|
scopes: {
|
|
882
1190
|
"test-module//node_modules": {
|
|
@@ -891,7 +1199,6 @@ describe("getImportMap", () => {
|
|
|
891
1199
|
manifests: [
|
|
892
1200
|
{
|
|
893
1201
|
name: "module-a",
|
|
894
|
-
imports: {},
|
|
895
1202
|
exports: {
|
|
896
1203
|
utils: {
|
|
897
1204
|
name: "utils",
|
|
@@ -908,9 +1215,6 @@ describe("getImportMap", () => {
|
|
|
908
1215
|
},
|
|
909
1216
|
{
|
|
910
1217
|
name: "module-b",
|
|
911
|
-
imports: {
|
|
912
|
-
shared: "module-a/utils"
|
|
913
|
-
},
|
|
914
1218
|
exports: {
|
|
915
1219
|
component: {
|
|
916
1220
|
name: "component",
|
|
@@ -933,8 +1237,7 @@ describe("getImportMap", () => {
|
|
|
933
1237
|
assert.deepEqual(result, {
|
|
934
1238
|
imports: {
|
|
935
1239
|
"module-a/utils": "module-a/utils.js",
|
|
936
|
-
"module-b/component": "module-b/component.js"
|
|
937
|
-
"module-b/shared": "module-a/utils.js"
|
|
1240
|
+
"module-b/component": "module-b/component.js"
|
|
938
1241
|
},
|
|
939
1242
|
scopes: {
|
|
940
1243
|
"module-a//node_modules": {
|
|
@@ -951,7 +1254,6 @@ describe("getImportMap", () => {
|
|
|
951
1254
|
manifests: [
|
|
952
1255
|
{
|
|
953
1256
|
name: "test-module",
|
|
954
|
-
imports: {},
|
|
955
1257
|
exports: {
|
|
956
1258
|
component: {
|
|
957
1259
|
name: "component",
|
|
@@ -974,35 +1276,11 @@ describe("getImportMap", () => {
|
|
|
974
1276
|
scopes: {}
|
|
975
1277
|
});
|
|
976
1278
|
});
|
|
977
|
-
test("should handle manifests with only imports", () => {
|
|
978
|
-
const options = {
|
|
979
|
-
manifests: [
|
|
980
|
-
{
|
|
981
|
-
name: "test-module",
|
|
982
|
-
imports: {
|
|
983
|
-
external: "https://cdn.com/lib.js"
|
|
984
|
-
},
|
|
985
|
-
exports: {},
|
|
986
|
-
scopes: {}
|
|
987
|
-
}
|
|
988
|
-
],
|
|
989
|
-
getFile: (name, file) => `${name}/${file}`,
|
|
990
|
-
getScope: (name, scope) => `${name}/${scope}`
|
|
991
|
-
};
|
|
992
|
-
const result = getImportMap(options);
|
|
993
|
-
assert.deepEqual(result, {
|
|
994
|
-
imports: {
|
|
995
|
-
"test-module/external": "https://cdn.com/lib.js"
|
|
996
|
-
},
|
|
997
|
-
scopes: {}
|
|
998
|
-
});
|
|
999
|
-
});
|
|
1000
1279
|
test("should handle manifests with only scopes", () => {
|
|
1001
1280
|
const options = {
|
|
1002
1281
|
manifests: [
|
|
1003
1282
|
{
|
|
1004
1283
|
name: "test-module",
|
|
1005
|
-
imports: {},
|
|
1006
1284
|
exports: {},
|
|
1007
1285
|
scopes: {
|
|
1008
1286
|
node_modules: {
|
|
@@ -1029,7 +1307,6 @@ describe("getImportMap", () => {
|
|
|
1029
1307
|
manifests: [
|
|
1030
1308
|
{
|
|
1031
1309
|
name: "test-module",
|
|
1032
|
-
imports: {},
|
|
1033
1310
|
exports: {
|
|
1034
1311
|
component: {
|
|
1035
1312
|
name: "component",
|
|
@@ -1065,7 +1342,6 @@ describe("getImportMap", () => {
|
|
|
1065
1342
|
manifests: [
|
|
1066
1343
|
{
|
|
1067
1344
|
name: "test-module",
|
|
1068
|
-
imports: {},
|
|
1069
1345
|
exports: {
|
|
1070
1346
|
component: {
|
|
1071
1347
|
name: "component",
|
|
@@ -1093,10 +1369,6 @@ describe("getImportMap", () => {
|
|
|
1093
1369
|
manifests: [
|
|
1094
1370
|
{
|
|
1095
1371
|
name: "test-module",
|
|
1096
|
-
imports: {
|
|
1097
|
-
"external-react": "https://cdn.com/react.js",
|
|
1098
|
-
"local-alias": "test-module/component"
|
|
1099
|
-
},
|
|
1100
1372
|
exports: {
|
|
1101
1373
|
component: {
|
|
1102
1374
|
name: "component",
|
|
@@ -1119,9 +1391,7 @@ describe("getImportMap", () => {
|
|
|
1119
1391
|
const result = getImportMap(options);
|
|
1120
1392
|
assert.deepEqual(result, {
|
|
1121
1393
|
imports: {
|
|
1122
|
-
"test-module/component": "test-module/component.js"
|
|
1123
|
-
"test-module/external-react": "https://cdn.com/react.js",
|
|
1124
|
-
"test-module/local-alias": "test-module/component.js"
|
|
1394
|
+
"test-module/component": "test-module/component.js"
|
|
1125
1395
|
},
|
|
1126
1396
|
scopes: {
|
|
1127
1397
|
"test-module//node_modules": {
|
|
@@ -1136,7 +1406,6 @@ describe("getImportMap", () => {
|
|
|
1136
1406
|
manifests: [
|
|
1137
1407
|
{
|
|
1138
1408
|
name: "test-module",
|
|
1139
|
-
imports: {},
|
|
1140
1409
|
exports: {
|
|
1141
1410
|
"src/index": {
|
|
1142
1411
|
name: "src/index",
|