@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';
|
|
3
8
|
import type { GetImportMapOptions, ImportMapManifest } from './import-map';
|
|
4
9
|
|
|
5
10
|
describe('buildImportsMap', () => {
|
|
@@ -12,7 +17,6 @@ describe('buildImportsMap', () => {
|
|
|
12
17
|
const manifests: ImportMapManifest[] = [
|
|
13
18
|
{
|
|
14
19
|
name: 'test-module',
|
|
15
|
-
imports: {},
|
|
16
20
|
exports: {
|
|
17
21
|
component: {
|
|
18
22
|
name: 'component',
|
|
@@ -42,19 +46,16 @@ describe('buildImportsMap', () => {
|
|
|
42
46
|
});
|
|
43
47
|
});
|
|
44
48
|
|
|
45
|
-
test('should
|
|
49
|
+
test('should create aliases for index suffixes', () => {
|
|
46
50
|
const manifests: ImportMapManifest[] = [
|
|
47
51
|
{
|
|
48
52
|
name: 'test-module',
|
|
49
|
-
imports: {
|
|
50
|
-
'custom-name': 'test-module/component'
|
|
51
|
-
},
|
|
52
53
|
exports: {
|
|
53
|
-
|
|
54
|
-
name: '
|
|
54
|
+
'src/index': {
|
|
55
|
+
name: 'src/index',
|
|
55
56
|
pkg: false,
|
|
56
|
-
file: '
|
|
57
|
-
identifier: 'test-module/
|
|
57
|
+
file: 'src/index.js',
|
|
58
|
+
identifier: 'test-module/src/index'
|
|
58
59
|
}
|
|
59
60
|
},
|
|
60
61
|
scopes: {}
|
|
@@ -67,27 +68,29 @@ describe('buildImportsMap', () => {
|
|
|
67
68
|
);
|
|
68
69
|
|
|
69
70
|
assert.deepEqual(result, {
|
|
70
|
-
'test-module/
|
|
71
|
-
'test-module/
|
|
71
|
+
'test-module/src/index': 'test-module/src/index.js',
|
|
72
|
+
'test-module/src': 'test-module/src/index.js'
|
|
72
73
|
});
|
|
73
74
|
});
|
|
74
75
|
|
|
75
|
-
test('should handle
|
|
76
|
+
test('should handle multiple manifests', () => {
|
|
76
77
|
const manifests: ImportMapManifest[] = [
|
|
77
78
|
{
|
|
78
|
-
name: '
|
|
79
|
-
imports: {
|
|
80
|
-
external: 'https://cdn.com/lib.js'
|
|
81
|
-
},
|
|
79
|
+
name: 'module-a',
|
|
82
80
|
exports: {
|
|
83
|
-
|
|
84
|
-
name: '
|
|
81
|
+
utils: {
|
|
82
|
+
name: 'utils',
|
|
85
83
|
pkg: false,
|
|
86
|
-
file: '
|
|
87
|
-
identifier: '
|
|
84
|
+
file: 'utils.js',
|
|
85
|
+
identifier: 'module-a/utils'
|
|
88
86
|
}
|
|
89
87
|
},
|
|
90
88
|
scopes: {}
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'module-b',
|
|
92
|
+
exports: {},
|
|
93
|
+
scopes: {}
|
|
91
94
|
}
|
|
92
95
|
];
|
|
93
96
|
|
|
@@ -97,22 +100,37 @@ describe('buildImportsMap', () => {
|
|
|
97
100
|
);
|
|
98
101
|
|
|
99
102
|
assert.deepEqual(result, {
|
|
100
|
-
'
|
|
101
|
-
'test-module/external': 'https://cdn.com/lib.js'
|
|
103
|
+
'module-a/utils': 'module-a/utils.js'
|
|
102
104
|
});
|
|
103
105
|
});
|
|
104
106
|
|
|
105
|
-
test('should
|
|
107
|
+
test('should handle empty exports', () => {
|
|
108
|
+
const manifests: ImportMapManifest[] = [
|
|
109
|
+
{
|
|
110
|
+
name: 'test-module',
|
|
111
|
+
exports: {},
|
|
112
|
+
scopes: {}
|
|
113
|
+
}
|
|
114
|
+
];
|
|
115
|
+
|
|
116
|
+
const result = buildImportsMap(
|
|
117
|
+
manifests,
|
|
118
|
+
(name, file) => `${name}/${file}`
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
assert.deepEqual(result, {});
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
test('should handle duplicate alias creation', () => {
|
|
106
125
|
const manifests: ImportMapManifest[] = [
|
|
107
126
|
{
|
|
108
127
|
name: 'test-module',
|
|
109
|
-
imports: {},
|
|
110
128
|
exports: {
|
|
111
|
-
'src/index': {
|
|
112
|
-
name: 'src/index',
|
|
129
|
+
'src/components/index': {
|
|
130
|
+
name: 'src/components/index',
|
|
113
131
|
pkg: false,
|
|
114
|
-
file: 'src/index.js',
|
|
115
|
-
identifier: 'test-module/src/index'
|
|
132
|
+
file: 'src/components/index.js',
|
|
133
|
+
identifier: 'test-module/src/components/index'
|
|
116
134
|
}
|
|
117
135
|
},
|
|
118
136
|
scopes: {}
|
|
@@ -125,21 +143,21 @@ describe('buildImportsMap', () => {
|
|
|
125
143
|
);
|
|
126
144
|
|
|
127
145
|
assert.deepEqual(result, {
|
|
128
|
-
'test-module/src/index':
|
|
129
|
-
|
|
146
|
+
'test-module/src/components/index':
|
|
147
|
+
'test-module/src/components/index.js',
|
|
148
|
+
'test-module/src/components': 'test-module/src/components/index.js'
|
|
130
149
|
});
|
|
131
150
|
});
|
|
132
151
|
|
|
133
|
-
test('should handle
|
|
152
|
+
test('should handle identifier conflicts across modules', () => {
|
|
134
153
|
const manifests: ImportMapManifest[] = [
|
|
135
154
|
{
|
|
136
155
|
name: 'module-a',
|
|
137
|
-
imports: {},
|
|
138
156
|
exports: {
|
|
139
157
|
utils: {
|
|
140
158
|
name: 'utils',
|
|
141
159
|
pkg: false,
|
|
142
|
-
file: 'utils.js',
|
|
160
|
+
file: 'utils-a.js',
|
|
143
161
|
identifier: 'module-a/utils'
|
|
144
162
|
}
|
|
145
163
|
},
|
|
@@ -147,10 +165,14 @@ describe('buildImportsMap', () => {
|
|
|
147
165
|
},
|
|
148
166
|
{
|
|
149
167
|
name: 'module-b',
|
|
150
|
-
|
|
151
|
-
|
|
168
|
+
exports: {
|
|
169
|
+
utils: {
|
|
170
|
+
name: 'utils',
|
|
171
|
+
pkg: false,
|
|
172
|
+
file: 'utils-b.js',
|
|
173
|
+
identifier: 'module-b/utils'
|
|
174
|
+
}
|
|
152
175
|
},
|
|
153
|
-
exports: {},
|
|
154
176
|
scopes: {}
|
|
155
177
|
}
|
|
156
178
|
];
|
|
@@ -161,31 +183,21 @@ describe('buildImportsMap', () => {
|
|
|
161
183
|
);
|
|
162
184
|
|
|
163
185
|
assert.deepEqual(result, {
|
|
164
|
-
'module-a/utils': 'module-a/utils.js',
|
|
165
|
-
'module-b/
|
|
186
|
+
'module-a/utils': 'module-a/utils-a.js',
|
|
187
|
+
'module-b/utils': 'module-b/utils-b.js'
|
|
166
188
|
});
|
|
167
189
|
});
|
|
168
190
|
|
|
169
|
-
test('should
|
|
191
|
+
test('should handle nested index aliases', () => {
|
|
170
192
|
const manifests: ImportMapManifest[] = [
|
|
171
193
|
{
|
|
172
194
|
name: 'test-module',
|
|
173
|
-
imports: {
|
|
174
|
-
react: 'preact',
|
|
175
|
-
vue: './custom/vue.js'
|
|
176
|
-
},
|
|
177
195
|
exports: {
|
|
178
|
-
|
|
179
|
-
name: '
|
|
180
|
-
pkg: false,
|
|
181
|
-
file: 'react.js',
|
|
182
|
-
identifier: 'test-module/react'
|
|
183
|
-
},
|
|
184
|
-
vue: {
|
|
185
|
-
name: 'vue',
|
|
196
|
+
'src/components/utils/index': {
|
|
197
|
+
name: 'src/components/utils/index',
|
|
186
198
|
pkg: false,
|
|
187
|
-
file: '
|
|
188
|
-
identifier: 'test-module/
|
|
199
|
+
file: 'src/components/utils/index.js',
|
|
200
|
+
identifier: 'test-module/src/components/utils/index'
|
|
189
201
|
}
|
|
190
202
|
},
|
|
191
203
|
scopes: {}
|
|
@@ -198,294 +210,717 @@ describe('buildImportsMap', () => {
|
|
|
198
210
|
);
|
|
199
211
|
|
|
200
212
|
assert.deepEqual(result, {
|
|
201
|
-
'test-module/
|
|
202
|
-
|
|
213
|
+
'test-module/src/components/utils/index':
|
|
214
|
+
'test-module/src/components/utils/index.js',
|
|
215
|
+
'test-module/src/components/utils':
|
|
216
|
+
'test-module/src/components/utils/index.js'
|
|
203
217
|
});
|
|
204
218
|
});
|
|
219
|
+
});
|
|
205
220
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
221
|
+
describe('fixNestedScopesResolution', () => {
|
|
222
|
+
test('should return unchanged import map for empty scopes', () => {
|
|
223
|
+
const importMap = {
|
|
224
|
+
imports: {
|
|
225
|
+
'shared-modules/vue': '/shared-modules/vue.620a1e89.final.mjs'
|
|
226
|
+
},
|
|
227
|
+
scopes: {}
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
const result = fixNestedScopesResolution(importMap);
|
|
231
|
+
assert.deepEqual(result, importMap);
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
test('should return unchanged import map for shallow scopes only', () => {
|
|
235
|
+
const importMap = {
|
|
236
|
+
imports: {
|
|
237
|
+
'shared-modules/vue': '/shared-modules/vue.620a1e89.final.mjs'
|
|
238
|
+
},
|
|
239
|
+
scopes: {
|
|
240
|
+
'/shared-modules/': {
|
|
241
|
+
vue: '/shared-modules/vue.620a1e89.final.mjs'
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
const result = fixNestedScopesResolution(importMap);
|
|
247
|
+
assert.deepEqual(result, importMap);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
test('should create file-level scopes for nested scopes', () => {
|
|
251
|
+
const importMap = {
|
|
252
|
+
imports: {
|
|
253
|
+
'shared-modules/vue2':
|
|
254
|
+
'/shared-modules/vue2.a1b2c3d4.final.mjs',
|
|
255
|
+
'shared-modules/vue2/@esmx/router-vue':
|
|
256
|
+
'/shared-modules/vue2/@esmx/router-vue.e5f6g7h8.final.mjs',
|
|
257
|
+
'shared-modules/vue2/index':
|
|
258
|
+
'/shared-modules/vue2/index.i9j0k1l2.final.mjs',
|
|
259
|
+
'shared-modules/vue': '/shared-modules/vue.m3n4o5p6.final.mjs'
|
|
260
|
+
},
|
|
261
|
+
scopes: {
|
|
262
|
+
'/shared-modules/': {
|
|
263
|
+
vue: '/shared-modules/vue.m3n4o5p6.final.mjs'
|
|
214
264
|
},
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
265
|
+
'/shared-modules/vue2/': {
|
|
266
|
+
vue: '/shared-modules/vue2.a1b2c3d4.final.mjs'
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
const expected = {
|
|
272
|
+
imports: {
|
|
273
|
+
'shared-modules/vue2':
|
|
274
|
+
'/shared-modules/vue2.a1b2c3d4.final.mjs',
|
|
275
|
+
'shared-modules/vue2/@esmx/router-vue':
|
|
276
|
+
'/shared-modules/vue2/@esmx/router-vue.e5f6g7h8.final.mjs',
|
|
277
|
+
'shared-modules/vue2/index':
|
|
278
|
+
'/shared-modules/vue2/index.i9j0k1l2.final.mjs',
|
|
279
|
+
'shared-modules/vue': '/shared-modules/vue.m3n4o5p6.final.mjs'
|
|
280
|
+
},
|
|
281
|
+
scopes: {
|
|
282
|
+
'/shared-modules/vue.m3n4o5p6.final.mjs': {
|
|
283
|
+
vue: '/shared-modules/vue.m3n4o5p6.final.mjs'
|
|
222
284
|
},
|
|
223
|
-
|
|
285
|
+
'/shared-modules/vue2.a1b2c3d4.final.mjs': {
|
|
286
|
+
vue: '/shared-modules/vue.m3n4o5p6.final.mjs'
|
|
287
|
+
},
|
|
288
|
+
'/shared-modules/vue2/@esmx/router-vue.e5f6g7h8.final.mjs': {
|
|
289
|
+
vue: '/shared-modules/vue2.a1b2c3d4.final.mjs'
|
|
290
|
+
},
|
|
291
|
+
'/shared-modules/vue2/index.i9j0k1l2.final.mjs': {
|
|
292
|
+
vue: '/shared-modules/vue2.a1b2c3d4.final.mjs'
|
|
293
|
+
}
|
|
224
294
|
}
|
|
225
|
-
|
|
295
|
+
};
|
|
226
296
|
|
|
227
|
-
const result =
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
);
|
|
297
|
+
const result = fixNestedScopesResolution(importMap);
|
|
298
|
+
assert.deepEqual(result, expected);
|
|
299
|
+
});
|
|
231
300
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
301
|
+
test('should handle multiple nested scopes correctly', () => {
|
|
302
|
+
const importMap = {
|
|
303
|
+
imports: {
|
|
304
|
+
'shared-modules/vue2':
|
|
305
|
+
'/shared-modules/vue2.q7r8s9t0.final.mjs',
|
|
306
|
+
'shared-modules/vue2/component':
|
|
307
|
+
'/shared-modules/vue2/component.u1v2w3x4.final.mjs',
|
|
308
|
+
'shared-modules/vue3':
|
|
309
|
+
'/shared-modules/vue3.y5z6a7b8.final.mjs',
|
|
310
|
+
'shared-modules/vue3/component':
|
|
311
|
+
'/shared-modules/vue3/component.c9d0e1f2.final.mjs',
|
|
312
|
+
'shared-modules/vue': '/shared-modules/vue.g3h4i5j6.final.mjs'
|
|
313
|
+
},
|
|
314
|
+
scopes: {
|
|
315
|
+
'/shared-modules/': {
|
|
316
|
+
vue: '/shared-modules/vue.g3h4i5j6.final.mjs'
|
|
317
|
+
},
|
|
318
|
+
'/shared-modules/vue2/': {
|
|
319
|
+
vue: '/shared-modules/vue2.q7r8s9t0.final.mjs'
|
|
320
|
+
},
|
|
321
|
+
'/shared-modules/vue3/': {
|
|
322
|
+
vue: '/shared-modules/vue3.y5z6a7b8.final.mjs'
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
const expected = {
|
|
328
|
+
imports: {
|
|
329
|
+
'shared-modules/vue2':
|
|
330
|
+
'/shared-modules/vue2.q7r8s9t0.final.mjs',
|
|
331
|
+
'shared-modules/vue2/component':
|
|
332
|
+
'/shared-modules/vue2/component.u1v2w3x4.final.mjs',
|
|
333
|
+
'shared-modules/vue3':
|
|
334
|
+
'/shared-modules/vue3.y5z6a7b8.final.mjs',
|
|
335
|
+
'shared-modules/vue3/component':
|
|
336
|
+
'/shared-modules/vue3/component.c9d0e1f2.final.mjs',
|
|
337
|
+
'shared-modules/vue': '/shared-modules/vue.g3h4i5j6.final.mjs'
|
|
338
|
+
},
|
|
339
|
+
scopes: {
|
|
340
|
+
'/shared-modules/vue.g3h4i5j6.final.mjs': {
|
|
341
|
+
vue: '/shared-modules/vue.g3h4i5j6.final.mjs'
|
|
342
|
+
},
|
|
343
|
+
'/shared-modules/vue2.q7r8s9t0.final.mjs': {
|
|
344
|
+
vue: '/shared-modules/vue.g3h4i5j6.final.mjs'
|
|
345
|
+
},
|
|
346
|
+
'/shared-modules/vue2/component.u1v2w3x4.final.mjs': {
|
|
347
|
+
vue: '/shared-modules/vue2.q7r8s9t0.final.mjs'
|
|
348
|
+
},
|
|
349
|
+
'/shared-modules/vue3.y5z6a7b8.final.mjs': {
|
|
350
|
+
vue: '/shared-modules/vue.g3h4i5j6.final.mjs'
|
|
351
|
+
},
|
|
352
|
+
'/shared-modules/vue3/component.c9d0e1f2.final.mjs': {
|
|
353
|
+
vue: '/shared-modules/vue3.y5z6a7b8.final.mjs'
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
const result = fixNestedScopesResolution(importMap);
|
|
359
|
+
assert.deepEqual(result, expected);
|
|
238
360
|
});
|
|
239
361
|
|
|
240
|
-
test('should handle
|
|
241
|
-
const
|
|
242
|
-
{
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
362
|
+
test('should handle deeply nested scopes', () => {
|
|
363
|
+
const importMap = {
|
|
364
|
+
imports: {
|
|
365
|
+
'shared-modules/vue2/components/button':
|
|
366
|
+
'/shared-modules/vue2/components/button.k7l8m9n0.final.mjs',
|
|
367
|
+
'shared-modules/vue2/components/input':
|
|
368
|
+
'/shared-modules/vue2/components/input.o1p2q3r4.final.mjs'
|
|
369
|
+
},
|
|
370
|
+
scopes: {
|
|
371
|
+
'/shared-modules/vue2/components/': {
|
|
372
|
+
vue: '/shared-modules/vue2.s5t6u7v8.final.mjs'
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
const expected = {
|
|
378
|
+
imports: {
|
|
379
|
+
'shared-modules/vue2/components/button':
|
|
380
|
+
'/shared-modules/vue2/components/button.k7l8m9n0.final.mjs',
|
|
381
|
+
'shared-modules/vue2/components/input':
|
|
382
|
+
'/shared-modules/vue2/components/input.o1p2q3r4.final.mjs'
|
|
383
|
+
},
|
|
384
|
+
scopes: {
|
|
385
|
+
'/shared-modules/vue2/components/button.k7l8m9n0.final.mjs': {
|
|
386
|
+
vue: '/shared-modules/vue2.s5t6u7v8.final.mjs'
|
|
246
387
|
},
|
|
247
|
-
|
|
248
|
-
|
|
388
|
+
'/shared-modules/vue2/components/input.o1p2q3r4.final.mjs': {
|
|
389
|
+
vue: '/shared-modules/vue2.s5t6u7v8.final.mjs'
|
|
390
|
+
}
|
|
249
391
|
}
|
|
250
|
-
|
|
392
|
+
};
|
|
251
393
|
|
|
252
|
-
const result =
|
|
253
|
-
|
|
254
|
-
|
|
394
|
+
const result = fixNestedScopesResolution(importMap);
|
|
395
|
+
assert.deepEqual(result, expected);
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
test('should not create file-level scopes for imports not matching nested scope', () => {
|
|
399
|
+
const importMap = {
|
|
400
|
+
imports: {
|
|
401
|
+
'shared-modules/vue': '/shared-modules/vue.w9x0y1z2.final.mjs',
|
|
402
|
+
'shared-modules/vue2/component':
|
|
403
|
+
'/shared-modules/vue2/component.a3b4c5d6.final.mjs',
|
|
404
|
+
'other-modules/component':
|
|
405
|
+
'/other-modules/component.e7f8g9h0.final.mjs'
|
|
406
|
+
},
|
|
407
|
+
scopes: {
|
|
408
|
+
'/shared-modules/vue2/': {
|
|
409
|
+
vue: '/shared-modules/vue2.i1j2k3l4.final.mjs'
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
const expected = {
|
|
415
|
+
imports: importMap.imports,
|
|
416
|
+
scopes: {
|
|
417
|
+
'/shared-modules/vue2/component.a3b4c5d6.final.mjs': {
|
|
418
|
+
vue: '/shared-modules/vue2.i1j2k3l4.final.mjs'
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
};
|
|
422
|
+
|
|
423
|
+
const result = fixNestedScopesResolution(importMap);
|
|
424
|
+
assert.deepEqual(result, expected);
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
test('should handle empty imports', () => {
|
|
428
|
+
const importMap = {
|
|
429
|
+
imports: {},
|
|
430
|
+
scopes: {
|
|
431
|
+
'/shared-modules/vue2/': {
|
|
432
|
+
vue: '/shared-modules/vue2.m5n6o7p8.final.mjs'
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
|
|
437
|
+
const expected = {
|
|
438
|
+
imports: {},
|
|
439
|
+
scopes: {}
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
const result = fixNestedScopesResolution(importMap);
|
|
443
|
+
assert.deepEqual(result, expected);
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
test('should preserve original import map structure', () => {
|
|
447
|
+
const importMap = {
|
|
448
|
+
imports: {
|
|
449
|
+
'shared-modules/vue2':
|
|
450
|
+
'/shared-modules/vue2.q9r8s7t6.final.mjs',
|
|
451
|
+
'shared-modules/vue2/component':
|
|
452
|
+
'/shared-modules/vue2/component.u5v4w3x2.final.mjs'
|
|
453
|
+
},
|
|
454
|
+
scopes: {
|
|
455
|
+
'/shared-modules/vue2/': {
|
|
456
|
+
vue: '/shared-modules/vue2.q9r8s7t6.final.mjs',
|
|
457
|
+
'vue-router':
|
|
458
|
+
'/shared-modules/vue2/router.y1z0a9b8.final.mjs'
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
};
|
|
462
|
+
|
|
463
|
+
const result = fixNestedScopesResolution(importMap);
|
|
464
|
+
|
|
465
|
+
assert.deepEqual(result.imports, importMap.imports);
|
|
466
|
+
assert.deepEqual(
|
|
467
|
+
result.scopes['/shared-modules/vue2/'],
|
|
468
|
+
importMap.scopes['/shared-modules/vue2/']
|
|
255
469
|
);
|
|
256
470
|
|
|
257
|
-
assert.deepEqual(
|
|
258
|
-
'
|
|
259
|
-
|
|
471
|
+
assert.deepEqual(
|
|
472
|
+
result.scopes['/shared-modules/vue2/component.u5v4w3x2.final.mjs'],
|
|
473
|
+
{
|
|
474
|
+
vue: '/shared-modules/vue2.q9r8s7t6.final.mjs',
|
|
475
|
+
'vue-router': '/shared-modules/vue2/router.y1z0a9b8.final.mjs'
|
|
476
|
+
}
|
|
477
|
+
);
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
test('should handle complex priority scenarios with multiple nested levels', () => {
|
|
481
|
+
const importMap = {
|
|
482
|
+
imports: {
|
|
483
|
+
'shared-modules/vue2':
|
|
484
|
+
'/shared-modules/vue2.c7d8e9f0.final.mjs',
|
|
485
|
+
'shared-modules/vue2/test':
|
|
486
|
+
'/shared-modules/vue2/test.a1b2c3d4.final.mjs',
|
|
487
|
+
'shared-modules/vue2/test/component':
|
|
488
|
+
'/shared-modules/vue2/test/component.e5f6g7h8.final.mjs',
|
|
489
|
+
'shared-modules/vue': '/shared-modules/vue.i9j0k1l2.final.mjs'
|
|
490
|
+
},
|
|
491
|
+
scopes: {
|
|
492
|
+
'/shared-modules/': {
|
|
493
|
+
vue: '/shared-modules/vue.i9j0k1l2.final.mjs',
|
|
494
|
+
'vue-router':
|
|
495
|
+
'/shared-modules/@esmx/router.m3n4o5p6.final.mjs'
|
|
496
|
+
},
|
|
497
|
+
'/shared-modules/vue2/': {
|
|
498
|
+
vue: '/shared-modules/vue2.c7d8e9f0.final.mjs',
|
|
499
|
+
'vue-router':
|
|
500
|
+
'/shared-modules/vue2/@esmx/router-vue.q7r8s9t0.final.mjs'
|
|
501
|
+
},
|
|
502
|
+
'/shared-modules/vue2/test/': {
|
|
503
|
+
vue: '/shared-modules/vue2.c7d8e9f0.final.mjs',
|
|
504
|
+
'test-utils':
|
|
505
|
+
'/shared-modules/vue2/test/utils.u1v2w3x4.final.mjs'
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
const expected = {
|
|
511
|
+
imports: {
|
|
512
|
+
'shared-modules/vue2':
|
|
513
|
+
'/shared-modules/vue2.c7d8e9f0.final.mjs',
|
|
514
|
+
'shared-modules/vue2/test':
|
|
515
|
+
'/shared-modules/vue2/test.a1b2c3d4.final.mjs',
|
|
516
|
+
'shared-modules/vue2/test/component':
|
|
517
|
+
'/shared-modules/vue2/test/component.e5f6g7h8.final.mjs',
|
|
518
|
+
'shared-modules/vue': '/shared-modules/vue.i9j0k1l2.final.mjs'
|
|
519
|
+
},
|
|
520
|
+
scopes: {
|
|
521
|
+
'/shared-modules/vue.i9j0k1l2.final.mjs': {
|
|
522
|
+
vue: '/shared-modules/vue.i9j0k1l2.final.mjs',
|
|
523
|
+
'vue-router':
|
|
524
|
+
'/shared-modules/@esmx/router.m3n4o5p6.final.mjs'
|
|
525
|
+
},
|
|
526
|
+
'/shared-modules/vue2.c7d8e9f0.final.mjs': {
|
|
527
|
+
vue: '/shared-modules/vue.i9j0k1l2.final.mjs',
|
|
528
|
+
'vue-router':
|
|
529
|
+
'/shared-modules/@esmx/router.m3n4o5p6.final.mjs'
|
|
530
|
+
},
|
|
531
|
+
'/shared-modules/vue2/test.a1b2c3d4.final.mjs': {
|
|
532
|
+
vue: '/shared-modules/vue2.c7d8e9f0.final.mjs',
|
|
533
|
+
'vue-router':
|
|
534
|
+
'/shared-modules/vue2/@esmx/router-vue.q7r8s9t0.final.mjs'
|
|
535
|
+
},
|
|
536
|
+
'/shared-modules/vue2/test/component.e5f6g7h8.final.mjs': {
|
|
537
|
+
vue: '/shared-modules/vue2.c7d8e9f0.final.mjs',
|
|
538
|
+
'test-utils':
|
|
539
|
+
'/shared-modules/vue2/test/utils.u1v2w3x4.final.mjs',
|
|
540
|
+
'vue-router':
|
|
541
|
+
'/shared-modules/vue2/@esmx/router-vue.q7r8s9t0.final.mjs'
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
};
|
|
545
|
+
|
|
546
|
+
const result = fixNestedScopesResolution(importMap);
|
|
547
|
+
assert.deepEqual(result, expected);
|
|
548
|
+
});
|
|
549
|
+
|
|
550
|
+
test('should handle priority with overlapping nested scopes', () => {
|
|
551
|
+
const importMap = {
|
|
552
|
+
imports: {
|
|
553
|
+
'shared-modules/vue2':
|
|
554
|
+
'/shared-modules/vue2.n3o4p5q6.final.mjs',
|
|
555
|
+
'shared-modules/vue2/components':
|
|
556
|
+
'/shared-modules/vue2/components.r7s8t9u0.final.mjs',
|
|
557
|
+
'shared-modules/vue2/components/button':
|
|
558
|
+
'/shared-modules/vue2/components/button.v1w2x3y4.final.mjs',
|
|
559
|
+
'shared-modules/vue2/components/input':
|
|
560
|
+
'/shared-modules/vue2/components/input.z5a6b7c8.final.mjs'
|
|
561
|
+
},
|
|
562
|
+
scopes: {
|
|
563
|
+
'/shared-modules/vue2/': {
|
|
564
|
+
vue: '/shared-modules/vue2.n3o4p5q6.final.mjs',
|
|
565
|
+
'vue-router':
|
|
566
|
+
'/shared-modules/vue2/@esmx/router-vue.d9e0f1g2.final.mjs'
|
|
567
|
+
},
|
|
568
|
+
'/shared-modules/vue2/components/': {
|
|
569
|
+
vue: '/shared-modules/vue2.n3o4p5q6.final.mjs',
|
|
570
|
+
'component-utils':
|
|
571
|
+
'/shared-modules/vue2/components/utils.h3i4j5k6.final.mjs'
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
};
|
|
575
|
+
|
|
576
|
+
const expected = {
|
|
577
|
+
imports: {
|
|
578
|
+
'shared-modules/vue2':
|
|
579
|
+
'/shared-modules/vue2.n3o4p5q6.final.mjs',
|
|
580
|
+
'shared-modules/vue2/components':
|
|
581
|
+
'/shared-modules/vue2/components.r7s8t9u0.final.mjs',
|
|
582
|
+
'shared-modules/vue2/components/button':
|
|
583
|
+
'/shared-modules/vue2/components/button.v1w2x3y4.final.mjs',
|
|
584
|
+
'shared-modules/vue2/components/input':
|
|
585
|
+
'/shared-modules/vue2/components/input.z5a6b7c8.final.mjs'
|
|
586
|
+
},
|
|
587
|
+
scopes: {
|
|
588
|
+
'/shared-modules/vue2/components.r7s8t9u0.final.mjs': {
|
|
589
|
+
vue: '/shared-modules/vue2.n3o4p5q6.final.mjs',
|
|
590
|
+
'vue-router':
|
|
591
|
+
'/shared-modules/vue2/@esmx/router-vue.d9e0f1g2.final.mjs'
|
|
592
|
+
},
|
|
593
|
+
'/shared-modules/vue2/components/button.v1w2x3y4.final.mjs': {
|
|
594
|
+
'component-utils':
|
|
595
|
+
'/shared-modules/vue2/components/utils.h3i4j5k6.final.mjs',
|
|
596
|
+
vue: '/shared-modules/vue2.n3o4p5q6.final.mjs',
|
|
597
|
+
'vue-router':
|
|
598
|
+
'/shared-modules/vue2/@esmx/router-vue.d9e0f1g2.final.mjs'
|
|
599
|
+
},
|
|
600
|
+
'/shared-modules/vue2/components/input.z5a6b7c8.final.mjs': {
|
|
601
|
+
'component-utils':
|
|
602
|
+
'/shared-modules/vue2/components/utils.h3i4j5k6.final.mjs',
|
|
603
|
+
vue: '/shared-modules/vue2.n3o4p5q6.final.mjs',
|
|
604
|
+
'vue-router':
|
|
605
|
+
'/shared-modules/vue2/@esmx/router-vue.d9e0f1g2.final.mjs'
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
};
|
|
609
|
+
|
|
610
|
+
const result = fixNestedScopesResolution(importMap);
|
|
611
|
+
assert.deepEqual(result, expected);
|
|
612
|
+
});
|
|
613
|
+
|
|
614
|
+
test('should handle very deeply nested scope priority scenarios', () => {
|
|
615
|
+
const importMap = {
|
|
616
|
+
imports: {
|
|
617
|
+
'shared-modules/vue2':
|
|
618
|
+
'/shared-modules/vue2.l7m8n9o0.final.mjs',
|
|
619
|
+
'shared-modules/vue2/test':
|
|
620
|
+
'/shared-modules/vue2/test.p1q2r3s4.final.mjs',
|
|
621
|
+
'shared-modules/vue2/test/unit':
|
|
622
|
+
'/shared-modules/vue2/test/unit.t5u6v7w8.final.mjs',
|
|
623
|
+
'shared-modules/vue2/test/unit/component':
|
|
624
|
+
'/shared-modules/vue2/test/unit/component.x9y0z1a2.final.mjs'
|
|
625
|
+
},
|
|
626
|
+
scopes: {
|
|
627
|
+
'/shared-modules/': {
|
|
628
|
+
vue: '/shared-modules/vue.b3c4d5e6.final.mjs'
|
|
629
|
+
},
|
|
630
|
+
'/shared-modules/vue2/': {
|
|
631
|
+
vue: '/shared-modules/vue2.l7m8n9o0.final.mjs'
|
|
632
|
+
},
|
|
633
|
+
'/shared-modules/vue2/test/': {
|
|
634
|
+
vue: '/shared-modules/vue2.l7m8n9o0.final.mjs',
|
|
635
|
+
'test-utils':
|
|
636
|
+
'/shared-modules/vue2/test/utils.f7g8h9i0.final.mjs'
|
|
637
|
+
},
|
|
638
|
+
'/shared-modules/vue2/test/unit/': {
|
|
639
|
+
vue: '/shared-modules/vue2.l7m8n9o0.final.mjs',
|
|
640
|
+
'test-utils':
|
|
641
|
+
'/shared-modules/vue2/test/utils.f7g8h9i0.final.mjs'
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
};
|
|
645
|
+
|
|
646
|
+
const expected = {
|
|
647
|
+
imports: {
|
|
648
|
+
'shared-modules/vue2':
|
|
649
|
+
'/shared-modules/vue2.l7m8n9o0.final.mjs',
|
|
650
|
+
'shared-modules/vue2/test':
|
|
651
|
+
'/shared-modules/vue2/test.p1q2r3s4.final.mjs',
|
|
652
|
+
'shared-modules/vue2/test/unit':
|
|
653
|
+
'/shared-modules/vue2/test/unit.t5u6v7w8.final.mjs',
|
|
654
|
+
'shared-modules/vue2/test/unit/component':
|
|
655
|
+
'/shared-modules/vue2/test/unit/component.x9y0z1a2.final.mjs'
|
|
656
|
+
},
|
|
657
|
+
scopes: {
|
|
658
|
+
'/shared-modules/vue2.l7m8n9o0.final.mjs': {
|
|
659
|
+
vue: '/shared-modules/vue.b3c4d5e6.final.mjs'
|
|
660
|
+
},
|
|
661
|
+
'/shared-modules/vue2/test.p1q2r3s4.final.mjs': {
|
|
662
|
+
vue: '/shared-modules/vue2.l7m8n9o0.final.mjs'
|
|
663
|
+
},
|
|
664
|
+
'/shared-modules/vue2/test/unit.t5u6v7w8.final.mjs': {
|
|
665
|
+
vue: '/shared-modules/vue2.l7m8n9o0.final.mjs',
|
|
666
|
+
'test-utils':
|
|
667
|
+
'/shared-modules/vue2/test/utils.f7g8h9i0.final.mjs'
|
|
668
|
+
},
|
|
669
|
+
'/shared-modules/vue2/test/unit/component.x9y0z1a2.final.mjs': {
|
|
670
|
+
vue: '/shared-modules/vue2.l7m8n9o0.final.mjs',
|
|
671
|
+
'test-utils':
|
|
672
|
+
'/shared-modules/vue2/test/utils.f7g8h9i0.final.mjs'
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
};
|
|
676
|
+
|
|
677
|
+
const result = fixNestedScopesResolution(importMap);
|
|
678
|
+
assert.deepEqual(result, expected);
|
|
260
679
|
});
|
|
261
680
|
|
|
262
|
-
test('should
|
|
263
|
-
const
|
|
264
|
-
{
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
681
|
+
test('should ensure different directory levels have distinct values for proper testing', () => {
|
|
682
|
+
const importMap = {
|
|
683
|
+
imports: {
|
|
684
|
+
'shared-modules/level1':
|
|
685
|
+
'/shared-modules/level1.a1b2c3d4.final.mjs',
|
|
686
|
+
'shared-modules/level1/level2':
|
|
687
|
+
'/shared-modules/level1/level2.e5f6g7h8.final.mjs',
|
|
688
|
+
'shared-modules/level1/level2/level3':
|
|
689
|
+
'/shared-modules/level1/level2/level3.i9j0k1l2.final.mjs'
|
|
690
|
+
},
|
|
691
|
+
scopes: {
|
|
692
|
+
'/shared-modules/level1/': {
|
|
693
|
+
vue: '/shared-modules/level1.a1b2c3d4.final.mjs'
|
|
274
694
|
},
|
|
275
|
-
|
|
695
|
+
'/shared-modules/level1/level2/': {
|
|
696
|
+
vue: '/shared-modules/level1/level2.e5f6g7h8.final.mjs'
|
|
697
|
+
}
|
|
276
698
|
}
|
|
277
|
-
|
|
699
|
+
};
|
|
278
700
|
|
|
279
|
-
const
|
|
280
|
-
|
|
281
|
-
|
|
701
|
+
const expected = {
|
|
702
|
+
imports: {
|
|
703
|
+
'shared-modules/level1':
|
|
704
|
+
'/shared-modules/level1.a1b2c3d4.final.mjs',
|
|
705
|
+
'shared-modules/level1/level2':
|
|
706
|
+
'/shared-modules/level1/level2.e5f6g7h8.final.mjs',
|
|
707
|
+
'shared-modules/level1/level2/level3':
|
|
708
|
+
'/shared-modules/level1/level2/level3.i9j0k1l2.final.mjs'
|
|
709
|
+
},
|
|
710
|
+
scopes: {
|
|
711
|
+
'/shared-modules/level1/level2.e5f6g7h8.final.mjs': {
|
|
712
|
+
vue: '/shared-modules/level1.a1b2c3d4.final.mjs'
|
|
713
|
+
},
|
|
714
|
+
'/shared-modules/level1/level2/level3.i9j0k1l2.final.mjs': {
|
|
715
|
+
vue: '/shared-modules/level1/level2.e5f6g7h8.final.mjs'
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
};
|
|
719
|
+
|
|
720
|
+
const result = fixNestedScopesResolution(importMap);
|
|
721
|
+
assert.deepEqual(result, expected);
|
|
722
|
+
|
|
723
|
+
assert.equal(
|
|
724
|
+
result.scopes['/shared-modules/level1/level2.e5f6g7h8.final.mjs']
|
|
725
|
+
.vue,
|
|
726
|
+
'/shared-modules/level1.a1b2c3d4.final.mjs'
|
|
282
727
|
);
|
|
283
728
|
|
|
284
|
-
assert.
|
|
285
|
-
|
|
286
|
-
|
|
729
|
+
assert.equal(
|
|
730
|
+
result.scopes[
|
|
731
|
+
'/shared-modules/level1/level2/level3.i9j0k1l2.final.mjs'
|
|
732
|
+
].vue,
|
|
733
|
+
'/shared-modules/level1/level2.e5f6g7h8.final.mjs'
|
|
734
|
+
);
|
|
287
735
|
});
|
|
288
736
|
|
|
289
|
-
test('should
|
|
290
|
-
const
|
|
291
|
-
{
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
file: 'src/components/index.js',
|
|
299
|
-
identifier: 'test-module/src/components/index'
|
|
300
|
-
}
|
|
301
|
-
},
|
|
302
|
-
scopes: {}
|
|
737
|
+
test('should successfully delete properties using Reflect.deleteProperty', () => {
|
|
738
|
+
const importMap = {
|
|
739
|
+
imports: {
|
|
740
|
+
'shared/modules/vue2': '/shared/modules/vue2.a1b2c3d4.final.mjs'
|
|
741
|
+
},
|
|
742
|
+
scopes: {
|
|
743
|
+
'/shared/modules/vue2/': {
|
|
744
|
+
vue: '/shared/modules/vue2.a1b2c3d4.final.mjs'
|
|
745
|
+
}
|
|
303
746
|
}
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
const result = buildImportsMap(
|
|
307
|
-
manifests,
|
|
308
|
-
(name, file) => `${name}/${file}`
|
|
309
|
-
);
|
|
747
|
+
};
|
|
310
748
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
749
|
+
const result = fixNestedScopesResolution(importMap);
|
|
750
|
+
assert.deepEqual(result.imports, importMap.imports);
|
|
751
|
+
assert.isUndefined(result.scopes['/shared/modules/vue2/']);
|
|
752
|
+
assert.doesNotThrow(() => {
|
|
753
|
+
fixNestedScopesResolution(importMap);
|
|
315
754
|
});
|
|
316
755
|
});
|
|
317
756
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
{
|
|
321
|
-
name: 'module-a',
|
|
322
|
-
imports: {},
|
|
323
|
-
exports: {
|
|
324
|
-
utils: {
|
|
325
|
-
name: 'utils',
|
|
326
|
-
pkg: false,
|
|
327
|
-
file: 'utils.js',
|
|
328
|
-
identifier: 'module-a/utils'
|
|
329
|
-
}
|
|
330
|
-
},
|
|
331
|
-
scopes: {}
|
|
332
|
-
},
|
|
333
|
-
{
|
|
334
|
-
name: 'module-b',
|
|
757
|
+
describe('scope path processing logic', () => {
|
|
758
|
+
test('should process all scope paths regardless of format', () => {
|
|
759
|
+
const importMap = {
|
|
335
760
|
imports: {
|
|
336
|
-
shared
|
|
761
|
+
'shared/modules/vue2':
|
|
762
|
+
'/shared/modules/vue2.a1b2c3d4.final.mjs',
|
|
763
|
+
'shared/vue': '/shared/vue.e5f6g7h8.final.mjs'
|
|
337
764
|
},
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
765
|
+
scopes: {
|
|
766
|
+
'shared/modules/vue2/': {
|
|
767
|
+
vue: '/shared/modules/vue2.a1b2c3d4.final.mjs'
|
|
768
|
+
},
|
|
769
|
+
'/shared/modules/vue2': {
|
|
770
|
+
vue: '/shared/modules/vue2.a1b2c3d4.final.mjs'
|
|
771
|
+
},
|
|
772
|
+
'/shared/': {
|
|
773
|
+
vue: '/shared/vue.e5f6g7h8.final.mjs'
|
|
774
|
+
},
|
|
775
|
+
'/shared/modules/vue2/': {
|
|
776
|
+
vue: '/shared/modules/vue2.a1b2c3d4.final.mjs'
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
};
|
|
342
780
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
781
|
+
const expected = {
|
|
782
|
+
imports: {
|
|
783
|
+
'shared/modules/vue2':
|
|
784
|
+
'/shared/modules/vue2.a1b2c3d4.final.mjs',
|
|
785
|
+
'shared/vue': '/shared/vue.e5f6g7h8.final.mjs'
|
|
786
|
+
},
|
|
787
|
+
scopes: {
|
|
788
|
+
'/shared/modules/vue2.a1b2c3d4.final.mjs': {
|
|
789
|
+
vue: '/shared/modules/vue2.a1b2c3d4.final.mjs'
|
|
790
|
+
},
|
|
791
|
+
'/shared/vue.e5f6g7h8.final.mjs': {
|
|
792
|
+
vue: '/shared/vue.e5f6g7h8.final.mjs'
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
};
|
|
347
796
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
'module-b/shared': 'module-a/utils.js'
|
|
797
|
+
const result = fixNestedScopesResolution(importMap);
|
|
798
|
+
assert.deepEqual(result, expected);
|
|
351
799
|
});
|
|
352
|
-
});
|
|
353
800
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
imports: {},
|
|
359
|
-
exports: {
|
|
360
|
-
utils: {
|
|
361
|
-
name: 'utils',
|
|
362
|
-
pkg: false,
|
|
363
|
-
file: 'utils.js',
|
|
364
|
-
identifier: 'module-a/utils'
|
|
365
|
-
}
|
|
801
|
+
test('should handle scope paths with any depth', () => {
|
|
802
|
+
const importMap = {
|
|
803
|
+
imports: {
|
|
804
|
+
'a/b/c': '/a/b/c.a1b2c3d4.final.mjs'
|
|
366
805
|
},
|
|
367
|
-
scopes: {
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
806
|
+
scopes: {
|
|
807
|
+
'/a/b/c/': {
|
|
808
|
+
vue: '/a/b/c.a1b2c3d4.final.mjs'
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
};
|
|
812
|
+
|
|
813
|
+
const expected = {
|
|
371
814
|
imports: {
|
|
372
|
-
|
|
815
|
+
'a/b/c': '/a/b/c.a1b2c3d4.final.mjs'
|
|
373
816
|
},
|
|
374
|
-
exports: {},
|
|
375
817
|
scopes: {}
|
|
376
|
-
}
|
|
377
|
-
];
|
|
378
|
-
|
|
379
|
-
const result = buildImportsMap(
|
|
380
|
-
manifests,
|
|
381
|
-
(name, file) => `${name}/${file}`
|
|
382
|
-
);
|
|
818
|
+
};
|
|
383
819
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
'module-b/external': 'module-a/non-existent'
|
|
820
|
+
const result = fixNestedScopesResolution(importMap);
|
|
821
|
+
assert.deepEqual(result, expected);
|
|
387
822
|
});
|
|
388
|
-
});
|
|
389
823
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
imports: {},
|
|
395
|
-
exports: {
|
|
396
|
-
utils: {
|
|
397
|
-
name: 'utils',
|
|
398
|
-
pkg: false,
|
|
399
|
-
file: 'utils-a.js',
|
|
400
|
-
identifier: 'module-a/utils'
|
|
401
|
-
}
|
|
824
|
+
test('should handle very deep nested scope paths', () => {
|
|
825
|
+
const importMap = {
|
|
826
|
+
imports: {
|
|
827
|
+
'a/b/c/d/e/f': '/a/b/c/d/e/f.a1b2c3d4.final.mjs'
|
|
402
828
|
},
|
|
403
|
-
scopes: {
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
name: 'module-b',
|
|
407
|
-
imports: {},
|
|
408
|
-
exports: {
|
|
409
|
-
utils: {
|
|
410
|
-
name: 'utils',
|
|
411
|
-
pkg: false,
|
|
412
|
-
file: 'utils-b.js',
|
|
413
|
-
identifier: 'module-b/utils'
|
|
829
|
+
scopes: {
|
|
830
|
+
'/a/b/c/d/e/f/': {
|
|
831
|
+
vue: '/a/b/c/d/e/f.a1b2c3d4.final.mjs'
|
|
414
832
|
}
|
|
833
|
+
}
|
|
834
|
+
};
|
|
835
|
+
|
|
836
|
+
const expected = {
|
|
837
|
+
imports: {
|
|
838
|
+
'a/b/c/d/e/f': '/a/b/c/d/e/f.a1b2c3d4.final.mjs'
|
|
415
839
|
},
|
|
416
840
|
scopes: {}
|
|
417
|
-
}
|
|
418
|
-
];
|
|
419
|
-
|
|
420
|
-
const result = buildImportsMap(
|
|
421
|
-
manifests,
|
|
422
|
-
(name, file) => `${name}/${file}`
|
|
423
|
-
);
|
|
841
|
+
};
|
|
424
842
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
'module-b/utils': 'module-b/utils-b.js'
|
|
843
|
+
const result = fixNestedScopesResolution(importMap);
|
|
844
|
+
assert.deepEqual(result, expected);
|
|
428
845
|
});
|
|
429
|
-
});
|
|
430
846
|
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
{
|
|
434
|
-
name: 'test-module',
|
|
847
|
+
test('should create file-level scopes for all scope paths', () => {
|
|
848
|
+
const importMap = {
|
|
435
849
|
imports: {
|
|
436
|
-
'
|
|
850
|
+
'modules/vue': '/modules/vue.a1b2c3d4.final.mjs',
|
|
851
|
+
'shared/vue': '/shared/vue.e5f6g7h8.final.mjs'
|
|
437
852
|
},
|
|
438
|
-
|
|
439
|
-
'
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
853
|
+
scopes: {
|
|
854
|
+
'/modules/': {
|
|
855
|
+
vue: '/modules/vue.a1b2c3d4.final.mjs'
|
|
856
|
+
},
|
|
857
|
+
'/shared/': {
|
|
858
|
+
vue: '/shared/vue.e5f6g7h8.final.mjs'
|
|
444
859
|
}
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
}
|
|
448
|
-
];
|
|
860
|
+
}
|
|
861
|
+
};
|
|
449
862
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
863
|
+
const expected = {
|
|
864
|
+
imports: {
|
|
865
|
+
'modules/vue': '/modules/vue.a1b2c3d4.final.mjs',
|
|
866
|
+
'shared/vue': '/shared/vue.e5f6g7h8.final.mjs'
|
|
867
|
+
},
|
|
868
|
+
scopes: {
|
|
869
|
+
'/modules/vue.a1b2c3d4.final.mjs': {
|
|
870
|
+
vue: '/modules/vue.a1b2c3d4.final.mjs'
|
|
871
|
+
},
|
|
872
|
+
'/shared/vue.e5f6g7h8.final.mjs': {
|
|
873
|
+
vue: '/shared/vue.e5f6g7h8.final.mjs'
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
};
|
|
454
877
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
'test-module/src': 'test-module/src/index.js',
|
|
458
|
-
'test-module/alias-test': 'test-module/src/index.js'
|
|
878
|
+
const result = fixNestedScopesResolution(importMap);
|
|
879
|
+
assert.deepEqual(result, expected);
|
|
459
880
|
});
|
|
460
|
-
});
|
|
461
881
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
file: 'src/components/utils/index.js',
|
|
472
|
-
identifier: 'test-module/src/components/utils/index'
|
|
473
|
-
}
|
|
882
|
+
test('should process multiple scope paths in correct order by depth', () => {
|
|
883
|
+
const importMap = {
|
|
884
|
+
imports: {
|
|
885
|
+
'shared/modules/vue2':
|
|
886
|
+
'/shared/modules/vue2.a1b2c3d4.final.mjs',
|
|
887
|
+
'shared/modules/vue2/component':
|
|
888
|
+
'/shared/modules/vue2/component.e5f6g7h8.final.mjs',
|
|
889
|
+
'shared/modules/vue2/utils':
|
|
890
|
+
'/shared/modules/vue2/utils.i9j0k1l2.final.mjs'
|
|
474
891
|
},
|
|
475
|
-
scopes: {
|
|
476
|
-
|
|
477
|
-
|
|
892
|
+
scopes: {
|
|
893
|
+
'/shared/modules/vue2/': {
|
|
894
|
+
vue: '/shared/modules/vue2.a1b2c3d4.final.mjs'
|
|
895
|
+
},
|
|
896
|
+
'/shared/modules/vue2/utils/': {
|
|
897
|
+
'test-utils':
|
|
898
|
+
'/shared/modules/vue2/utils.i9j0k1l2.final.mjs'
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
};
|
|
478
902
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
903
|
+
const expected = {
|
|
904
|
+
imports: {
|
|
905
|
+
'shared/modules/vue2':
|
|
906
|
+
'/shared/modules/vue2.a1b2c3d4.final.mjs',
|
|
907
|
+
'shared/modules/vue2/component':
|
|
908
|
+
'/shared/modules/vue2/component.e5f6g7h8.final.mjs',
|
|
909
|
+
'shared/modules/vue2/utils':
|
|
910
|
+
'/shared/modules/vue2/utils.i9j0k1l2.final.mjs'
|
|
911
|
+
},
|
|
912
|
+
scopes: {
|
|
913
|
+
'/shared/modules/vue2/component.e5f6g7h8.final.mjs': {
|
|
914
|
+
vue: '/shared/modules/vue2.a1b2c3d4.final.mjs'
|
|
915
|
+
},
|
|
916
|
+
'/shared/modules/vue2/utils.i9j0k1l2.final.mjs': {
|
|
917
|
+
vue: '/shared/modules/vue2.a1b2c3d4.final.mjs'
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
};
|
|
483
921
|
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
'test-module/src/components/utils/index.js',
|
|
487
|
-
'test-module/src/components/utils':
|
|
488
|
-
'test-module/src/components/utils/index.js'
|
|
922
|
+
const result = fixNestedScopesResolution(importMap);
|
|
923
|
+
assert.deepEqual(result, expected);
|
|
489
924
|
});
|
|
490
925
|
});
|
|
491
926
|
});
|
|
@@ -509,7 +944,6 @@ describe('buildScopesMap', () => {
|
|
|
509
944
|
const manifests: ImportMapManifest[] = [
|
|
510
945
|
{
|
|
511
946
|
name: 'test-module',
|
|
512
|
-
imports: {},
|
|
513
947
|
exports: {
|
|
514
948
|
component: {
|
|
515
949
|
name: 'component',
|
|
@@ -537,7 +971,6 @@ describe('buildScopesMap', () => {
|
|
|
537
971
|
const manifests: ImportMapManifest[] = [
|
|
538
972
|
{
|
|
539
973
|
name: 'test-module',
|
|
540
|
-
imports: {},
|
|
541
974
|
exports: {
|
|
542
975
|
component: {
|
|
543
976
|
name: 'component',
|
|
@@ -580,7 +1013,6 @@ describe('buildScopesMap', () => {
|
|
|
580
1013
|
const manifests: ImportMapManifest[] = [
|
|
581
1014
|
{
|
|
582
1015
|
name: 'test-module',
|
|
583
|
-
imports: {},
|
|
584
1016
|
exports: {
|
|
585
1017
|
component: {
|
|
586
1018
|
name: 'component',
|
|
@@ -617,7 +1049,6 @@ describe('buildScopesMap', () => {
|
|
|
617
1049
|
const manifests: ImportMapManifest[] = [
|
|
618
1050
|
{
|
|
619
1051
|
name: 'test-module',
|
|
620
|
-
imports: {},
|
|
621
1052
|
exports: {
|
|
622
1053
|
component: {
|
|
623
1054
|
name: 'component',
|
|
@@ -655,7 +1086,6 @@ describe('buildScopesMap', () => {
|
|
|
655
1086
|
const manifests: ImportMapManifest[] = [
|
|
656
1087
|
{
|
|
657
1088
|
name: 'test-module',
|
|
658
|
-
imports: {},
|
|
659
1089
|
exports: {
|
|
660
1090
|
node_modules: {
|
|
661
1091
|
name: 'node_modules',
|
|
@@ -696,7 +1126,6 @@ describe('buildScopesMap', () => {
|
|
|
696
1126
|
const manifests: ImportMapManifest[] = [
|
|
697
1127
|
{
|
|
698
1128
|
name: 'test-module',
|
|
699
|
-
imports: {},
|
|
700
1129
|
exports: {
|
|
701
1130
|
component: {
|
|
702
1131
|
name: 'component',
|
|
@@ -732,7 +1161,6 @@ describe('buildScopesMap', () => {
|
|
|
732
1161
|
const manifests: ImportMapManifest[] = [
|
|
733
1162
|
{
|
|
734
1163
|
name: 'test-module',
|
|
735
|
-
imports: {},
|
|
736
1164
|
exports: {
|
|
737
1165
|
component: {
|
|
738
1166
|
name: 'component',
|
|
@@ -780,7 +1208,6 @@ describe('buildScopesMap', () => {
|
|
|
780
1208
|
const manifests: ImportMapManifest[] = [
|
|
781
1209
|
{
|
|
782
1210
|
name: 'module-a',
|
|
783
|
-
imports: {},
|
|
784
1211
|
exports: {
|
|
785
1212
|
component: {
|
|
786
1213
|
name: 'component',
|
|
@@ -797,7 +1224,6 @@ describe('buildScopesMap', () => {
|
|
|
797
1224
|
},
|
|
798
1225
|
{
|
|
799
1226
|
name: 'module-b',
|
|
800
|
-
imports: {},
|
|
801
1227
|
exports: {
|
|
802
1228
|
utils: {
|
|
803
1229
|
name: 'utils',
|
|
@@ -835,7 +1261,6 @@ describe('buildScopesMap', () => {
|
|
|
835
1261
|
const manifests: ImportMapManifest[] = [
|
|
836
1262
|
{
|
|
837
1263
|
name: 'test-module',
|
|
838
|
-
imports: {},
|
|
839
1264
|
exports: {
|
|
840
1265
|
component: {
|
|
841
1266
|
name: 'component',
|
|
@@ -866,7 +1291,6 @@ describe('buildScopesMap', () => {
|
|
|
866
1291
|
const manifests: ImportMapManifest[] = [
|
|
867
1292
|
{
|
|
868
1293
|
name: 'test-module',
|
|
869
|
-
imports: {},
|
|
870
1294
|
exports: {
|
|
871
1295
|
component: {
|
|
872
1296
|
name: 'component',
|
|
@@ -901,14 +1325,11 @@ describe('getImportMap', () => {
|
|
|
901
1325
|
});
|
|
902
1326
|
});
|
|
903
1327
|
|
|
904
|
-
test('should build complete import map with
|
|
1328
|
+
test('should build complete import map with exports and scopes', () => {
|
|
905
1329
|
const options: GetImportMapOptions = {
|
|
906
1330
|
manifests: [
|
|
907
1331
|
{
|
|
908
1332
|
name: 'test-module',
|
|
909
|
-
imports: {
|
|
910
|
-
'custom-react': 'test-module/component'
|
|
911
|
-
},
|
|
912
1333
|
exports: {
|
|
913
1334
|
component: {
|
|
914
1335
|
name: 'component',
|
|
@@ -938,8 +1359,7 @@ describe('getImportMap', () => {
|
|
|
938
1359
|
assert.deepEqual(result, {
|
|
939
1360
|
imports: {
|
|
940
1361
|
'test-module/component': 'test-module/component.js',
|
|
941
|
-
'test-module/utils': 'test-module/utils.js'
|
|
942
|
-
'test-module/custom-react': 'test-module/component.js'
|
|
1362
|
+
'test-module/utils': 'test-module/utils.js'
|
|
943
1363
|
},
|
|
944
1364
|
scopes: {
|
|
945
1365
|
'test-module//node_modules': {
|
|
@@ -955,7 +1375,6 @@ describe('getImportMap', () => {
|
|
|
955
1375
|
manifests: [
|
|
956
1376
|
{
|
|
957
1377
|
name: 'module-a',
|
|
958
|
-
imports: {},
|
|
959
1378
|
exports: {
|
|
960
1379
|
utils: {
|
|
961
1380
|
name: 'utils',
|
|
@@ -972,9 +1391,6 @@ describe('getImportMap', () => {
|
|
|
972
1391
|
},
|
|
973
1392
|
{
|
|
974
1393
|
name: 'module-b',
|
|
975
|
-
imports: {
|
|
976
|
-
shared: 'module-a/utils'
|
|
977
|
-
},
|
|
978
1394
|
exports: {
|
|
979
1395
|
component: {
|
|
980
1396
|
name: 'component',
|
|
@@ -997,8 +1413,7 @@ describe('getImportMap', () => {
|
|
|
997
1413
|
assert.deepEqual(result, {
|
|
998
1414
|
imports: {
|
|
999
1415
|
'module-a/utils': 'module-a/utils.js',
|
|
1000
|
-
'module-b/component': 'module-b/component.js'
|
|
1001
|
-
'module-b/shared': 'module-a/utils.js'
|
|
1416
|
+
'module-b/component': 'module-b/component.js'
|
|
1002
1417
|
},
|
|
1003
1418
|
scopes: {
|
|
1004
1419
|
'module-a//node_modules': {
|
|
@@ -1016,7 +1431,6 @@ describe('getImportMap', () => {
|
|
|
1016
1431
|
manifests: [
|
|
1017
1432
|
{
|
|
1018
1433
|
name: 'test-module',
|
|
1019
|
-
imports: {},
|
|
1020
1434
|
exports: {
|
|
1021
1435
|
component: {
|
|
1022
1436
|
name: 'component',
|
|
@@ -1040,36 +1454,11 @@ describe('getImportMap', () => {
|
|
|
1040
1454
|
});
|
|
1041
1455
|
});
|
|
1042
1456
|
|
|
1043
|
-
test('should handle manifests with only imports', () => {
|
|
1044
|
-
const options: GetImportMapOptions = {
|
|
1045
|
-
manifests: [
|
|
1046
|
-
{
|
|
1047
|
-
name: 'test-module',
|
|
1048
|
-
imports: {
|
|
1049
|
-
external: 'https://cdn.com/lib.js'
|
|
1050
|
-
},
|
|
1051
|
-
exports: {},
|
|
1052
|
-
scopes: {}
|
|
1053
|
-
}
|
|
1054
|
-
],
|
|
1055
|
-
getFile: (name, file) => `${name}/${file}`,
|
|
1056
|
-
getScope: (name, scope) => `${name}/${scope}`
|
|
1057
|
-
};
|
|
1058
|
-
const result = getImportMap(options);
|
|
1059
|
-
assert.deepEqual(result, {
|
|
1060
|
-
imports: {
|
|
1061
|
-
'test-module/external': 'https://cdn.com/lib.js'
|
|
1062
|
-
},
|
|
1063
|
-
scopes: {}
|
|
1064
|
-
});
|
|
1065
|
-
});
|
|
1066
|
-
|
|
1067
1457
|
test('should handle manifests with only scopes', () => {
|
|
1068
1458
|
const options: GetImportMapOptions = {
|
|
1069
1459
|
manifests: [
|
|
1070
1460
|
{
|
|
1071
1461
|
name: 'test-module',
|
|
1072
|
-
imports: {},
|
|
1073
1462
|
exports: {},
|
|
1074
1463
|
scopes: {
|
|
1075
1464
|
node_modules: {
|
|
@@ -1097,7 +1486,6 @@ describe('getImportMap', () => {
|
|
|
1097
1486
|
manifests: [
|
|
1098
1487
|
{
|
|
1099
1488
|
name: 'test-module',
|
|
1100
|
-
imports: {},
|
|
1101
1489
|
exports: {
|
|
1102
1490
|
component: {
|
|
1103
1491
|
name: 'component',
|
|
@@ -1134,7 +1522,6 @@ describe('getImportMap', () => {
|
|
|
1134
1522
|
manifests: [
|
|
1135
1523
|
{
|
|
1136
1524
|
name: 'test-module',
|
|
1137
|
-
imports: {},
|
|
1138
1525
|
exports: {
|
|
1139
1526
|
component: {
|
|
1140
1527
|
name: 'component',
|
|
@@ -1163,10 +1550,6 @@ describe('getImportMap', () => {
|
|
|
1163
1550
|
manifests: [
|
|
1164
1551
|
{
|
|
1165
1552
|
name: 'test-module',
|
|
1166
|
-
imports: {
|
|
1167
|
-
'external-react': 'https://cdn.com/react.js',
|
|
1168
|
-
'local-alias': 'test-module/component'
|
|
1169
|
-
},
|
|
1170
1553
|
exports: {
|
|
1171
1554
|
component: {
|
|
1172
1555
|
name: 'component',
|
|
@@ -1189,9 +1572,7 @@ describe('getImportMap', () => {
|
|
|
1189
1572
|
const result = getImportMap(options);
|
|
1190
1573
|
assert.deepEqual(result, {
|
|
1191
1574
|
imports: {
|
|
1192
|
-
'test-module/component': 'test-module/component.js'
|
|
1193
|
-
'test-module/external-react': 'https://cdn.com/react.js',
|
|
1194
|
-
'test-module/local-alias': 'test-module/component.js'
|
|
1575
|
+
'test-module/component': 'test-module/component.js'
|
|
1195
1576
|
},
|
|
1196
1577
|
scopes: {
|
|
1197
1578
|
'test-module//node_modules': {
|
|
@@ -1207,7 +1588,6 @@ describe('getImportMap', () => {
|
|
|
1207
1588
|
manifests: [
|
|
1208
1589
|
{
|
|
1209
1590
|
name: 'test-module',
|
|
1210
|
-
imports: {},
|
|
1211
1591
|
exports: {
|
|
1212
1592
|
'src/index': {
|
|
1213
1593
|
name: 'src/index',
|