@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/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 { getImportMap } from './utils/import-map';
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 = getImportMap({
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 = getImportMap({
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
- buildImportsMap,
4
- buildScopesMap,
5
- fixNestedScopesResolution,
6
- getImportMap
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('buildImportsMap', () => {
11
+ describe('createImportsMap', () => {
11
12
  test('should return empty object for empty manifests', () => {
12
- const result = buildImportsMap([], (name, file) => `${name}/${file}`);
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 = buildImportsMap(
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 = buildImportsMap(
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 = buildImportsMap(
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 = buildImportsMap(
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 = buildImportsMap(
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 = buildImportsMap(
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 = buildImportsMap(
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('fixNestedScopesResolution', () => {
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
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 = 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/']
469
- );
470
-
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'
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
750
- assert.deepEqual(result.imports, importMap.imports);
751
- assert.isUndefined(result.scopes['/shared/modules/vue2/']);
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
- fixNestedScopesResolution(importMap);
754
+ fixImportMapNestedScopes(importMap);
754
755
  });
755
756
  });
756
757
 
@@ -794,7 +795,7 @@ describe('fixNestedScopesResolution', () => {
794
795
  }
795
796
  };
796
797
 
797
- const result = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
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 = fixNestedScopesResolution(importMap);
923
+ const result = fixImportMapNestedScopes(importMap);
923
924
  assert.deepEqual(result, expected);
924
925
  });
925
926
  });
926
927
  });
927
928
 
928
- describe('buildScopesMap', () => {
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 = buildScopesMap(
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 = buildScopesMap(
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 = buildScopesMap(
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 = buildScopesMap(
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 = buildScopesMap(
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 = buildScopesMap(
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 = buildScopesMap(
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 = buildScopesMap(
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 = buildScopesMap(
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 = buildScopesMap(
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 = buildScopesMap(
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('getImportMap', () => {
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 = getImportMap(options);
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 = getImportMap(options);
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 = getImportMap(options);
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 = getImportMap(options);
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 = getImportMap(options);
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 = getImportMap(options);
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 = getImportMap(options);
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 = getImportMap(options);
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 = getImportMap(options);
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
+ });