@esmx/core 3.0.0-rc.69 → 3.0.0-rc.71
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 +10 -7
- package/README.zh-CN.md +10 -7
- package/dist/cli/cli.mjs +9 -4
- package/dist/core.mjs +3 -3
- package/dist/utils/import-map.d.ts +12 -9
- package/dist/utils/import-map.mjs +56 -6
- package/dist/utils/import-map.test.mjs +214 -68
- package/package.json +9 -9
- package/src/cli/cli.ts +11 -5
- package/src/core.ts +3 -3
- package/src/utils/import-map.test.ts +228 -70
- package/src/utils/import-map.ts +73 -11
package/src/core.ts
CHANGED
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
import type { ImportmapMode } from './render-context';
|
|
23
23
|
import type { RenderContext, RenderContextOptions } from './render-context';
|
|
24
24
|
import { type CacheHandle, createCache } from './utils/cache';
|
|
25
|
-
import {
|
|
25
|
+
import { createClientImportMap, createImportMap } from './utils/import-map';
|
|
26
26
|
import type { Middleware } from './utils/middleware';
|
|
27
27
|
import { type ProjectPath, resolvePath } from './utils/resolve-path';
|
|
28
28
|
import { getImportPreloadInfo as getStaticImportPaths } from './utils/static-import-lexer';
|
|
@@ -854,7 +854,7 @@ export class Esmx {
|
|
|
854
854
|
let json: ImportMap = {};
|
|
855
855
|
switch (env) {
|
|
856
856
|
case 'client': {
|
|
857
|
-
json =
|
|
857
|
+
json = createClientImportMap({
|
|
858
858
|
manifests,
|
|
859
859
|
getScope(name, scope) {
|
|
860
860
|
return `/${name}${scope}`;
|
|
@@ -866,7 +866,7 @@ export class Esmx {
|
|
|
866
866
|
break;
|
|
867
867
|
}
|
|
868
868
|
case 'server':
|
|
869
|
-
json =
|
|
869
|
+
json = createImportMap({
|
|
870
870
|
manifests,
|
|
871
871
|
getScope: (name: string, scope: string) => {
|
|
872
872
|
const linkPath = moduleConfig.links[name].server;
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { assert, describe, test } from 'vitest';
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
compressImportMap,
|
|
4
|
+
createImportMap,
|
|
5
|
+
createImportsMap,
|
|
6
|
+
createScopesMap,
|
|
7
|
+
fixImportMapNestedScopes
|
|
7
8
|
} from './import-map';
|
|
8
9
|
import type { GetImportMapOptions, ImportMapManifest } from './import-map';
|
|
9
10
|
|
|
10
|
-
describe('
|
|
11
|
+
describe('createImportsMap', () => {
|
|
11
12
|
test('should return empty object for empty manifests', () => {
|
|
12
|
-
const result =
|
|
13
|
+
const result = createImportsMap([], (name, file) => `${name}/${file}`);
|
|
13
14
|
assert.deepEqual(result, {});
|
|
14
15
|
});
|
|
15
16
|
|
|
@@ -35,7 +36,7 @@ describe('buildImportsMap', () => {
|
|
|
35
36
|
}
|
|
36
37
|
];
|
|
37
38
|
|
|
38
|
-
const result =
|
|
39
|
+
const result = createImportsMap(
|
|
39
40
|
manifests,
|
|
40
41
|
(name, file) => `${name}/${file}`
|
|
41
42
|
);
|
|
@@ -62,7 +63,7 @@ describe('buildImportsMap', () => {
|
|
|
62
63
|
}
|
|
63
64
|
];
|
|
64
65
|
|
|
65
|
-
const result =
|
|
66
|
+
const result = createImportsMap(
|
|
66
67
|
manifests,
|
|
67
68
|
(name, file) => `${name}/${file}`
|
|
68
69
|
);
|
|
@@ -94,7 +95,7 @@ describe('buildImportsMap', () => {
|
|
|
94
95
|
}
|
|
95
96
|
];
|
|
96
97
|
|
|
97
|
-
const result =
|
|
98
|
+
const result = createImportsMap(
|
|
98
99
|
manifests,
|
|
99
100
|
(name, file) => `${name}/${file}`
|
|
100
101
|
);
|
|
@@ -113,7 +114,7 @@ describe('buildImportsMap', () => {
|
|
|
113
114
|
}
|
|
114
115
|
];
|
|
115
116
|
|
|
116
|
-
const result =
|
|
117
|
+
const result = createImportsMap(
|
|
117
118
|
manifests,
|
|
118
119
|
(name, file) => `${name}/${file}`
|
|
119
120
|
);
|
|
@@ -137,7 +138,7 @@ describe('buildImportsMap', () => {
|
|
|
137
138
|
}
|
|
138
139
|
];
|
|
139
140
|
|
|
140
|
-
const result =
|
|
141
|
+
const result = createImportsMap(
|
|
141
142
|
manifests,
|
|
142
143
|
(name, file) => `${name}/${file}`
|
|
143
144
|
);
|
|
@@ -177,7 +178,7 @@ describe('buildImportsMap', () => {
|
|
|
177
178
|
}
|
|
178
179
|
];
|
|
179
180
|
|
|
180
|
-
const result =
|
|
181
|
+
const result = createImportsMap(
|
|
181
182
|
manifests,
|
|
182
183
|
(name, file) => `${name}/${file}`
|
|
183
184
|
);
|
|
@@ -204,7 +205,7 @@ describe('buildImportsMap', () => {
|
|
|
204
205
|
}
|
|
205
206
|
];
|
|
206
207
|
|
|
207
|
-
const result =
|
|
208
|
+
const result = createImportsMap(
|
|
208
209
|
manifests,
|
|
209
210
|
(name, file) => `${name}/${file}`
|
|
210
211
|
);
|
|
@@ -218,7 +219,7 @@ describe('buildImportsMap', () => {
|
|
|
218
219
|
});
|
|
219
220
|
});
|
|
220
221
|
|
|
221
|
-
describe('
|
|
222
|
+
describe('fixImportMapNestedScopes', () => {
|
|
222
223
|
test('should return unchanged import map for empty scopes', () => {
|
|
223
224
|
const importMap = {
|
|
224
225
|
imports: {
|
|
@@ -227,7 +228,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
227
228
|
scopes: {}
|
|
228
229
|
};
|
|
229
230
|
|
|
230
|
-
const result =
|
|
231
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
231
232
|
assert.deepEqual(result, importMap);
|
|
232
233
|
});
|
|
233
234
|
|
|
@@ -243,7 +244,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
243
244
|
}
|
|
244
245
|
};
|
|
245
246
|
|
|
246
|
-
const result =
|
|
247
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
247
248
|
assert.deepEqual(result, importMap);
|
|
248
249
|
});
|
|
249
250
|
|
|
@@ -294,7 +295,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
294
295
|
}
|
|
295
296
|
};
|
|
296
297
|
|
|
297
|
-
const result =
|
|
298
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
298
299
|
assert.deepEqual(result, expected);
|
|
299
300
|
});
|
|
300
301
|
|
|
@@ -355,7 +356,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
355
356
|
}
|
|
356
357
|
};
|
|
357
358
|
|
|
358
|
-
const result =
|
|
359
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
359
360
|
assert.deepEqual(result, expected);
|
|
360
361
|
});
|
|
361
362
|
|
|
@@ -391,7 +392,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
391
392
|
}
|
|
392
393
|
};
|
|
393
394
|
|
|
394
|
-
const result =
|
|
395
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
395
396
|
assert.deepEqual(result, expected);
|
|
396
397
|
});
|
|
397
398
|
|
|
@@ -420,7 +421,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
420
421
|
}
|
|
421
422
|
};
|
|
422
423
|
|
|
423
|
-
const result =
|
|
424
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
424
425
|
assert.deepEqual(result, expected);
|
|
425
426
|
});
|
|
426
427
|
|
|
@@ -439,7 +440,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
439
440
|
scopes: {}
|
|
440
441
|
};
|
|
441
442
|
|
|
442
|
-
const result =
|
|
443
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
443
444
|
assert.deepEqual(result, expected);
|
|
444
445
|
});
|
|
445
446
|
|
|
@@ -460,21 +461,18 @@ describe('fixNestedScopesResolution', () => {
|
|
|
460
461
|
}
|
|
461
462
|
};
|
|
462
463
|
|
|
463
|
-
const result =
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
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'
|
|
464
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
465
|
+
const expected = {
|
|
466
|
+
imports: importMap.imports,
|
|
467
|
+
scopes: {
|
|
468
|
+
'/shared-modules/vue2/component.u5v4w3x2.final.mjs': {
|
|
469
|
+
vue: '/shared-modules/vue2.q9r8s7t6.final.mjs',
|
|
470
|
+
'vue-router':
|
|
471
|
+
'/shared-modules/vue2/router.y1z0a9b8.final.mjs'
|
|
472
|
+
}
|
|
476
473
|
}
|
|
477
|
-
|
|
474
|
+
};
|
|
475
|
+
assert.deepEqual(result, expected);
|
|
478
476
|
});
|
|
479
477
|
|
|
480
478
|
test('should handle complex priority scenarios with multiple nested levels', () => {
|
|
@@ -543,7 +541,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
543
541
|
}
|
|
544
542
|
};
|
|
545
543
|
|
|
546
|
-
const result =
|
|
544
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
547
545
|
assert.deepEqual(result, expected);
|
|
548
546
|
});
|
|
549
547
|
|
|
@@ -607,7 +605,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
607
605
|
}
|
|
608
606
|
};
|
|
609
607
|
|
|
610
|
-
const result =
|
|
608
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
611
609
|
assert.deepEqual(result, expected);
|
|
612
610
|
});
|
|
613
611
|
|
|
@@ -674,7 +672,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
674
672
|
}
|
|
675
673
|
};
|
|
676
674
|
|
|
677
|
-
const result =
|
|
675
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
678
676
|
assert.deepEqual(result, expected);
|
|
679
677
|
});
|
|
680
678
|
|
|
@@ -717,7 +715,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
717
715
|
}
|
|
718
716
|
};
|
|
719
717
|
|
|
720
|
-
const result =
|
|
718
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
721
719
|
assert.deepEqual(result, expected);
|
|
722
720
|
|
|
723
721
|
assert.equal(
|
|
@@ -746,11 +744,14 @@ describe('fixNestedScopesResolution', () => {
|
|
|
746
744
|
}
|
|
747
745
|
};
|
|
748
746
|
|
|
749
|
-
const result =
|
|
750
|
-
|
|
751
|
-
|
|
747
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
748
|
+
const expected = {
|
|
749
|
+
imports: importMap.imports,
|
|
750
|
+
scopes: {}
|
|
751
|
+
};
|
|
752
|
+
assert.deepEqual(result, expected);
|
|
752
753
|
assert.doesNotThrow(() => {
|
|
753
|
-
|
|
754
|
+
fixImportMapNestedScopes(importMap);
|
|
754
755
|
});
|
|
755
756
|
});
|
|
756
757
|
|
|
@@ -794,7 +795,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
794
795
|
}
|
|
795
796
|
};
|
|
796
797
|
|
|
797
|
-
const result =
|
|
798
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
798
799
|
assert.deepEqual(result, expected);
|
|
799
800
|
});
|
|
800
801
|
|
|
@@ -817,7 +818,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
817
818
|
scopes: {}
|
|
818
819
|
};
|
|
819
820
|
|
|
820
|
-
const result =
|
|
821
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
821
822
|
assert.deepEqual(result, expected);
|
|
822
823
|
});
|
|
823
824
|
|
|
@@ -840,7 +841,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
840
841
|
scopes: {}
|
|
841
842
|
};
|
|
842
843
|
|
|
843
|
-
const result =
|
|
844
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
844
845
|
assert.deepEqual(result, expected);
|
|
845
846
|
});
|
|
846
847
|
|
|
@@ -875,7 +876,7 @@ describe('fixNestedScopesResolution', () => {
|
|
|
875
876
|
}
|
|
876
877
|
};
|
|
877
878
|
|
|
878
|
-
const result =
|
|
879
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
879
880
|
assert.deepEqual(result, expected);
|
|
880
881
|
});
|
|
881
882
|
|
|
@@ -919,17 +920,17 @@ describe('fixNestedScopesResolution', () => {
|
|
|
919
920
|
}
|
|
920
921
|
};
|
|
921
922
|
|
|
922
|
-
const result =
|
|
923
|
+
const result = fixImportMapNestedScopes(importMap);
|
|
923
924
|
assert.deepEqual(result, expected);
|
|
924
925
|
});
|
|
925
926
|
});
|
|
926
927
|
});
|
|
927
928
|
|
|
928
|
-
describe('
|
|
929
|
+
describe('createScopesMap', () => {
|
|
929
930
|
test('should return empty object for empty manifests', () => {
|
|
930
931
|
const imports = {};
|
|
931
932
|
const manifests: ImportMapManifest[] = [];
|
|
932
|
-
const result =
|
|
933
|
+
const result = createScopesMap(
|
|
933
934
|
imports,
|
|
934
935
|
manifests,
|
|
935
936
|
(name, scope) => `${name}/${scope}`
|
|
@@ -955,7 +956,7 @@ describe('buildScopesMap', () => {
|
|
|
955
956
|
scopes: {}
|
|
956
957
|
}
|
|
957
958
|
];
|
|
958
|
-
const result =
|
|
959
|
+
const result = createScopesMap(
|
|
959
960
|
imports,
|
|
960
961
|
manifests,
|
|
961
962
|
(name, scope) => `${name}/${scope}`
|
|
@@ -993,7 +994,7 @@ describe('buildScopesMap', () => {
|
|
|
993
994
|
}
|
|
994
995
|
}
|
|
995
996
|
];
|
|
996
|
-
const result =
|
|
997
|
+
const result = createScopesMap(
|
|
997
998
|
imports,
|
|
998
999
|
manifests,
|
|
999
1000
|
(name, scope) => `${name}/${scope}`
|
|
@@ -1029,7 +1030,7 @@ describe('buildScopesMap', () => {
|
|
|
1029
1030
|
}
|
|
1030
1031
|
}
|
|
1031
1032
|
];
|
|
1032
|
-
const result =
|
|
1033
|
+
const result = createScopesMap(
|
|
1033
1034
|
imports,
|
|
1034
1035
|
manifests,
|
|
1035
1036
|
(name, scope) => `${name}/${scope}`
|
|
@@ -1065,7 +1066,7 @@ describe('buildScopesMap', () => {
|
|
|
1065
1066
|
}
|
|
1066
1067
|
}
|
|
1067
1068
|
];
|
|
1068
|
-
const result =
|
|
1069
|
+
const result = createScopesMap(
|
|
1069
1070
|
imports,
|
|
1070
1071
|
manifests,
|
|
1071
1072
|
(name, scope) => `${name}/${scope}`
|
|
@@ -1107,7 +1108,7 @@ describe('buildScopesMap', () => {
|
|
|
1107
1108
|
}
|
|
1108
1109
|
}
|
|
1109
1110
|
];
|
|
1110
|
-
const result =
|
|
1111
|
+
const result = createScopesMap(
|
|
1111
1112
|
imports,
|
|
1112
1113
|
manifests,
|
|
1113
1114
|
(name, scope) => `${name}/${scope}`
|
|
@@ -1141,7 +1142,7 @@ describe('buildScopesMap', () => {
|
|
|
1141
1142
|
}
|
|
1142
1143
|
}
|
|
1143
1144
|
];
|
|
1144
|
-
const result =
|
|
1145
|
+
const result = createScopesMap(
|
|
1145
1146
|
imports,
|
|
1146
1147
|
manifests,
|
|
1147
1148
|
(name, scope) => `${name}/${scope}`
|
|
@@ -1185,7 +1186,7 @@ describe('buildScopesMap', () => {
|
|
|
1185
1186
|
}
|
|
1186
1187
|
}
|
|
1187
1188
|
];
|
|
1188
|
-
const result =
|
|
1189
|
+
const result = createScopesMap(
|
|
1189
1190
|
imports,
|
|
1190
1191
|
manifests,
|
|
1191
1192
|
(name, scope) => `${name}/${scope}`
|
|
@@ -1239,7 +1240,7 @@ describe('buildScopesMap', () => {
|
|
|
1239
1240
|
}
|
|
1240
1241
|
}
|
|
1241
1242
|
];
|
|
1242
|
-
const result =
|
|
1243
|
+
const result = createScopesMap(
|
|
1243
1244
|
imports,
|
|
1244
1245
|
manifests,
|
|
1245
1246
|
(name, scope) => `${name}/${scope}`
|
|
@@ -1274,7 +1275,7 @@ describe('buildScopesMap', () => {
|
|
|
1274
1275
|
}
|
|
1275
1276
|
}
|
|
1276
1277
|
];
|
|
1277
|
-
const result =
|
|
1278
|
+
const result = createScopesMap(
|
|
1278
1279
|
imports,
|
|
1279
1280
|
manifests,
|
|
1280
1281
|
(name, scope) => `${name}/${scope}`
|
|
@@ -1302,7 +1303,7 @@ describe('buildScopesMap', () => {
|
|
|
1302
1303
|
scopes: undefined as any
|
|
1303
1304
|
}
|
|
1304
1305
|
];
|
|
1305
|
-
const result =
|
|
1306
|
+
const result = createScopesMap(
|
|
1306
1307
|
imports,
|
|
1307
1308
|
manifests,
|
|
1308
1309
|
(name, scope) => `${name}/${scope}`
|
|
@@ -1311,14 +1312,14 @@ describe('buildScopesMap', () => {
|
|
|
1311
1312
|
});
|
|
1312
1313
|
});
|
|
1313
1314
|
|
|
1314
|
-
describe('
|
|
1315
|
+
describe('createImportMap', () => {
|
|
1315
1316
|
test('should return empty import map for empty manifests', () => {
|
|
1316
1317
|
const options: GetImportMapOptions = {
|
|
1317
1318
|
manifests: [],
|
|
1318
1319
|
getFile: (name, file) => `${name}/${file}`,
|
|
1319
1320
|
getScope: (name, scope) => `${name}/${scope}`
|
|
1320
1321
|
};
|
|
1321
|
-
const result =
|
|
1322
|
+
const result = createImportMap(options);
|
|
1322
1323
|
assert.deepEqual(result, {
|
|
1323
1324
|
imports: {},
|
|
1324
1325
|
scopes: {}
|
|
@@ -1355,7 +1356,7 @@ describe('getImportMap', () => {
|
|
|
1355
1356
|
getFile: (name, file) => `${name}/${file}`,
|
|
1356
1357
|
getScope: (name, scope) => `${name}/${scope}`
|
|
1357
1358
|
};
|
|
1358
|
-
const result =
|
|
1359
|
+
const result = createImportMap(options);
|
|
1359
1360
|
assert.deepEqual(result, {
|
|
1360
1361
|
imports: {
|
|
1361
1362
|
'test-module/component': 'test-module/component.js',
|
|
@@ -1409,7 +1410,7 @@ describe('getImportMap', () => {
|
|
|
1409
1410
|
getFile: (name, file) => `${name}/${file}`,
|
|
1410
1411
|
getScope: (name, scope) => `${name}/${scope}`
|
|
1411
1412
|
};
|
|
1412
|
-
const result =
|
|
1413
|
+
const result = createImportMap(options);
|
|
1413
1414
|
assert.deepEqual(result, {
|
|
1414
1415
|
imports: {
|
|
1415
1416
|
'module-a/utils': 'module-a/utils.js',
|
|
@@ -1445,7 +1446,7 @@ describe('getImportMap', () => {
|
|
|
1445
1446
|
getFile: (name, file) => `${name}/${file}`,
|
|
1446
1447
|
getScope: (name, scope) => `${name}/${scope}`
|
|
1447
1448
|
};
|
|
1448
|
-
const result =
|
|
1449
|
+
const result = createImportMap(options);
|
|
1449
1450
|
assert.deepEqual(result, {
|
|
1450
1451
|
imports: {
|
|
1451
1452
|
'test-module/component': 'test-module/component.js'
|
|
@@ -1470,7 +1471,7 @@ describe('getImportMap', () => {
|
|
|
1470
1471
|
getFile: (name, file) => `${name}/${file}`,
|
|
1471
1472
|
getScope: (name, scope) => `${name}/${scope}`
|
|
1472
1473
|
};
|
|
1473
|
-
const result =
|
|
1474
|
+
const result = createImportMap(options);
|
|
1474
1475
|
assert.deepEqual(result, {
|
|
1475
1476
|
imports: {},
|
|
1476
1477
|
scopes: {
|
|
@@ -1504,7 +1505,7 @@ describe('getImportMap', () => {
|
|
|
1504
1505
|
getFile: (name, file) => `/custom/path/${name}/${file}`,
|
|
1505
1506
|
getScope: (name, scope) => `custom-scope-${name}-${scope}`
|
|
1506
1507
|
};
|
|
1507
|
-
const result =
|
|
1508
|
+
const result = createImportMap(options);
|
|
1508
1509
|
assert.deepEqual(result, {
|
|
1509
1510
|
imports: {
|
|
1510
1511
|
'test-module/component': '/custom/path/test-module/component.js'
|
|
@@ -1536,7 +1537,7 @@ describe('getImportMap', () => {
|
|
|
1536
1537
|
getFile: (name, file) => `${name}/${file}`,
|
|
1537
1538
|
getScope: (name, scope) => `${name}/${scope}`
|
|
1538
1539
|
};
|
|
1539
|
-
const result =
|
|
1540
|
+
const result = createImportMap(options);
|
|
1540
1541
|
assert.deepEqual(result, {
|
|
1541
1542
|
imports: {
|
|
1542
1543
|
'test-module/component': 'test-module/component.js'
|
|
@@ -1569,7 +1570,7 @@ describe('getImportMap', () => {
|
|
|
1569
1570
|
getFile: (name, file) => `${name}/${file}`,
|
|
1570
1571
|
getScope: (name, scope) => `${name}/${scope}`
|
|
1571
1572
|
};
|
|
1572
|
-
const result =
|
|
1573
|
+
const result = createImportMap(options);
|
|
1573
1574
|
assert.deepEqual(result, {
|
|
1574
1575
|
imports: {
|
|
1575
1576
|
'test-module/component': 'test-module/component.js'
|
|
@@ -1606,7 +1607,7 @@ describe('getImportMap', () => {
|
|
|
1606
1607
|
getFile: (name, file) => `${name}/${file}`,
|
|
1607
1608
|
getScope: (name, scope) => `${name}/${scope}`
|
|
1608
1609
|
};
|
|
1609
|
-
const result =
|
|
1610
|
+
const result = createImportMap(options);
|
|
1610
1611
|
assert.deepEqual(result, {
|
|
1611
1612
|
imports: {
|
|
1612
1613
|
'test-module/src/index': 'test-module/src/index.js',
|
|
@@ -1620,3 +1621,160 @@ describe('getImportMap', () => {
|
|
|
1620
1621
|
});
|
|
1621
1622
|
});
|
|
1622
1623
|
});
|
|
1624
|
+
|
|
1625
|
+
describe('compressImportMap', () => {
|
|
1626
|
+
test('does not promote when no global exists; keeps scopes intact', () => {
|
|
1627
|
+
const importMap = {
|
|
1628
|
+
imports: {},
|
|
1629
|
+
scopes: {
|
|
1630
|
+
'/a/': {
|
|
1631
|
+
vue: '/a/vue.final.mjs'
|
|
1632
|
+
},
|
|
1633
|
+
'/b/': {
|
|
1634
|
+
vue: '/a/vue.final.mjs'
|
|
1635
|
+
}
|
|
1636
|
+
}
|
|
1637
|
+
};
|
|
1638
|
+
|
|
1639
|
+
const result = compressImportMap(importMap);
|
|
1640
|
+
assert.deepEqual(result, {
|
|
1641
|
+
imports: { vue: '/a/vue.final.mjs' }
|
|
1642
|
+
});
|
|
1643
|
+
});
|
|
1644
|
+
|
|
1645
|
+
test('does not promote when scoped mappings conflict across scopes', () => {
|
|
1646
|
+
const importMap = {
|
|
1647
|
+
imports: {},
|
|
1648
|
+
scopes: {
|
|
1649
|
+
'/a/': { vue: '/a/vue.final.mjs' },
|
|
1650
|
+
'/b/': { vue: '/b/vue.final.mjs' }
|
|
1651
|
+
}
|
|
1652
|
+
};
|
|
1653
|
+
|
|
1654
|
+
const result = compressImportMap(importMap);
|
|
1655
|
+
assert.deepEqual(result, importMap);
|
|
1656
|
+
});
|
|
1657
|
+
|
|
1658
|
+
test('removes scoped entries that equal global mapping', () => {
|
|
1659
|
+
const importMap = {
|
|
1660
|
+
imports: { vue: '/shared/vue.final.mjs' },
|
|
1661
|
+
scopes: {
|
|
1662
|
+
'/a/': {
|
|
1663
|
+
vue: '/shared/vue.final.mjs',
|
|
1664
|
+
lodash: '/a/lodash.final.mjs'
|
|
1665
|
+
}
|
|
1666
|
+
}
|
|
1667
|
+
};
|
|
1668
|
+
|
|
1669
|
+
const result = compressImportMap(importMap);
|
|
1670
|
+
const expected = {
|
|
1671
|
+
imports: {
|
|
1672
|
+
vue: '/shared/vue.final.mjs',
|
|
1673
|
+
lodash: '/a/lodash.final.mjs'
|
|
1674
|
+
}
|
|
1675
|
+
};
|
|
1676
|
+
assert.deepEqual(result, expected);
|
|
1677
|
+
});
|
|
1678
|
+
|
|
1679
|
+
test('promotes to global when global matches single unique target across scopes', () => {
|
|
1680
|
+
const importMap = {
|
|
1681
|
+
imports: { vue: '/shared/vue.final.mjs' },
|
|
1682
|
+
scopes: {
|
|
1683
|
+
'/a/': { vue: '/shared/vue.final.mjs' },
|
|
1684
|
+
'/b/': { vue: '/shared/vue.final.mjs' }
|
|
1685
|
+
}
|
|
1686
|
+
};
|
|
1687
|
+
|
|
1688
|
+
const result = compressImportMap(importMap);
|
|
1689
|
+
assert.deepEqual(result, {
|
|
1690
|
+
imports: { vue: '/shared/vue.final.mjs' }
|
|
1691
|
+
});
|
|
1692
|
+
});
|
|
1693
|
+
|
|
1694
|
+
test('promotes to global when no global exists and targets are consistent across scopes (promote mode)', () => {
|
|
1695
|
+
const importMap = {
|
|
1696
|
+
imports: {},
|
|
1697
|
+
scopes: {
|
|
1698
|
+
'/a/': { vue: '/x/vue.final.mjs' },
|
|
1699
|
+
'/b/': { vue: '/x/vue.final.mjs' }
|
|
1700
|
+
}
|
|
1701
|
+
};
|
|
1702
|
+
const result = compressImportMap(importMap);
|
|
1703
|
+
assert.deepEqual(result, {
|
|
1704
|
+
imports: { vue: '/x/vue.final.mjs' }
|
|
1705
|
+
});
|
|
1706
|
+
});
|
|
1707
|
+
|
|
1708
|
+
test('promotes dominant target and keeps exceptions in scopes (promote mode)', () => {
|
|
1709
|
+
const importMap = {
|
|
1710
|
+
imports: {},
|
|
1711
|
+
scopes: {
|
|
1712
|
+
'/a/': { vue: '/x/vue.final.mjs' },
|
|
1713
|
+
'/b/': { vue: '/x/vue.final.mjs' },
|
|
1714
|
+
'/c/': { vue: '/y/vue2.final.mjs' }
|
|
1715
|
+
}
|
|
1716
|
+
};
|
|
1717
|
+
const result = compressImportMap(importMap);
|
|
1718
|
+
assert.deepEqual(result, {
|
|
1719
|
+
imports: { vue: '/x/vue.final.mjs' },
|
|
1720
|
+
scopes: {
|
|
1721
|
+
'/c/': { vue: '/y/vue2.final.mjs' }
|
|
1722
|
+
}
|
|
1723
|
+
});
|
|
1724
|
+
});
|
|
1725
|
+
|
|
1726
|
+
test('does not promote when no global exists; keeps scopes intact', () => {
|
|
1727
|
+
const importMap = {
|
|
1728
|
+
imports: {},
|
|
1729
|
+
scopes: {
|
|
1730
|
+
'/a/': { vue: '/shared/vue.final.mjs' },
|
|
1731
|
+
'/b/': { vue: '/shared/vue.final.mjs' },
|
|
1732
|
+
'/c/': { vue: '/c/vue2.final.mjs' }
|
|
1733
|
+
}
|
|
1734
|
+
};
|
|
1735
|
+
const result = compressImportMap(importMap);
|
|
1736
|
+
assert.deepEqual(result, {
|
|
1737
|
+
imports: { vue: '/shared/vue.final.mjs' },
|
|
1738
|
+
scopes: { '/c/': { vue: '/c/vue2.final.mjs' } }
|
|
1739
|
+
});
|
|
1740
|
+
});
|
|
1741
|
+
|
|
1742
|
+
test('aggressive default does not override different existing global', () => {
|
|
1743
|
+
const importMap = {
|
|
1744
|
+
imports: { vue: '/global/vue.final.mjs' },
|
|
1745
|
+
scopes: {
|
|
1746
|
+
'/a/': { vue: '/shared/vue.final.mjs' },
|
|
1747
|
+
'/b/': { vue: '/shared/vue.final.mjs' }
|
|
1748
|
+
}
|
|
1749
|
+
};
|
|
1750
|
+
const result = compressImportMap(importMap);
|
|
1751
|
+
assert.deepEqual(result, {
|
|
1752
|
+
imports: { vue: '/global/vue.final.mjs' },
|
|
1753
|
+
scopes: {
|
|
1754
|
+
'/a/': { vue: '/shared/vue.final.mjs' },
|
|
1755
|
+
'/b/': { vue: '/shared/vue.final.mjs' }
|
|
1756
|
+
}
|
|
1757
|
+
});
|
|
1758
|
+
});
|
|
1759
|
+
|
|
1760
|
+
test('returns new object and keeps input unchanged', () => {
|
|
1761
|
+
const original = {
|
|
1762
|
+
imports: {},
|
|
1763
|
+
scopes: {
|
|
1764
|
+
'/a/': { vue: '/x/vue.final.mjs' },
|
|
1765
|
+
'/b/': { vue: '/x/vue.final.mjs' },
|
|
1766
|
+
'/c/': { vue: '/y/vue2.final.mjs' }
|
|
1767
|
+
}
|
|
1768
|
+
};
|
|
1769
|
+
const importMap = JSON.parse(JSON.stringify(original));
|
|
1770
|
+
const result = compressImportMap(importMap);
|
|
1771
|
+
assert.notStrictEqual(result, importMap);
|
|
1772
|
+
assert.notStrictEqual(result.imports, importMap.imports);
|
|
1773
|
+
assert.notStrictEqual(result.scopes, importMap.scopes);
|
|
1774
|
+
assert.deepEqual(importMap, original);
|
|
1775
|
+
assert.deepEqual(result, {
|
|
1776
|
+
imports: { vue: '/x/vue.final.mjs' },
|
|
1777
|
+
scopes: { '/c/': { vue: '/y/vue2.final.mjs' } }
|
|
1778
|
+
});
|
|
1779
|
+
});
|
|
1780
|
+
});
|