@esmx/core 3.0.0-rc.62 → 3.0.0-rc.63

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.
@@ -1,5 +1,10 @@
1
1
  import { assert, describe, test } from "vitest";
2
- import { buildImportsMap, buildScopesMap, getImportMap } from "./import-map.mjs";
2
+ import {
3
+ buildImportsMap,
4
+ buildScopesMap,
5
+ fixNestedScopesResolution,
6
+ getImportMap
7
+ } from "./import-map.mjs";
3
8
  describe("buildImportsMap", () => {
4
9
  test("should return empty object for empty manifests", () => {
5
10
  const result = buildImportsMap([], (name, file) => `${name}/${file}`);
@@ -439,6 +444,577 @@ describe("buildImportsMap", () => {
439
444
  });
440
445
  });
441
446
  });
447
+ describe("fixNestedScopesResolution", () => {
448
+ test("should return unchanged import map for empty scopes", () => {
449
+ const importMap = {
450
+ imports: {
451
+ "shared-modules/vue": "/shared-modules/vue.620a1e89.final.mjs"
452
+ },
453
+ scopes: {}
454
+ };
455
+ const result = fixNestedScopesResolution(importMap);
456
+ assert.deepEqual(result, importMap);
457
+ });
458
+ test("should return unchanged import map for shallow scopes only", () => {
459
+ const importMap = {
460
+ imports: {
461
+ "shared-modules/vue": "/shared-modules/vue.620a1e89.final.mjs"
462
+ },
463
+ scopes: {
464
+ "/shared-modules/": {
465
+ vue: "/shared-modules/vue.620a1e89.final.mjs"
466
+ }
467
+ }
468
+ };
469
+ const result = fixNestedScopesResolution(importMap);
470
+ assert.deepEqual(result, importMap);
471
+ });
472
+ test("should create file-level scopes for nested scopes", () => {
473
+ const importMap = {
474
+ imports: {
475
+ "shared-modules/vue2": "/shared-modules/vue2.a1b2c3d4.final.mjs",
476
+ "shared-modules/vue2/@esmx/router-vue": "/shared-modules/vue2/@esmx/router-vue.e5f6g7h8.final.mjs",
477
+ "shared-modules/vue2/index": "/shared-modules/vue2/index.i9j0k1l2.final.mjs",
478
+ "shared-modules/vue": "/shared-modules/vue.m3n4o5p6.final.mjs"
479
+ },
480
+ scopes: {
481
+ "/shared-modules/": {
482
+ vue: "/shared-modules/vue.m3n4o5p6.final.mjs"
483
+ },
484
+ "/shared-modules/vue2/": {
485
+ vue: "/shared-modules/vue2.a1b2c3d4.final.mjs"
486
+ }
487
+ }
488
+ };
489
+ const expected = {
490
+ imports: {
491
+ "shared-modules/vue2": "/shared-modules/vue2.a1b2c3d4.final.mjs",
492
+ "shared-modules/vue2/@esmx/router-vue": "/shared-modules/vue2/@esmx/router-vue.e5f6g7h8.final.mjs",
493
+ "shared-modules/vue2/index": "/shared-modules/vue2/index.i9j0k1l2.final.mjs",
494
+ "shared-modules/vue": "/shared-modules/vue.m3n4o5p6.final.mjs"
495
+ },
496
+ scopes: {
497
+ "/shared-modules/vue.m3n4o5p6.final.mjs": {
498
+ vue: "/shared-modules/vue.m3n4o5p6.final.mjs"
499
+ },
500
+ "/shared-modules/vue2.a1b2c3d4.final.mjs": {
501
+ vue: "/shared-modules/vue.m3n4o5p6.final.mjs"
502
+ },
503
+ "/shared-modules/vue2/@esmx/router-vue.e5f6g7h8.final.mjs": {
504
+ vue: "/shared-modules/vue2.a1b2c3d4.final.mjs"
505
+ },
506
+ "/shared-modules/vue2/index.i9j0k1l2.final.mjs": {
507
+ vue: "/shared-modules/vue2.a1b2c3d4.final.mjs"
508
+ }
509
+ }
510
+ };
511
+ const result = fixNestedScopesResolution(importMap);
512
+ assert.deepEqual(result, expected);
513
+ });
514
+ test("should handle multiple nested scopes correctly", () => {
515
+ const importMap = {
516
+ imports: {
517
+ "shared-modules/vue2": "/shared-modules/vue2.q7r8s9t0.final.mjs",
518
+ "shared-modules/vue2/component": "/shared-modules/vue2/component.u1v2w3x4.final.mjs",
519
+ "shared-modules/vue3": "/shared-modules/vue3.y5z6a7b8.final.mjs",
520
+ "shared-modules/vue3/component": "/shared-modules/vue3/component.c9d0e1f2.final.mjs",
521
+ "shared-modules/vue": "/shared-modules/vue.g3h4i5j6.final.mjs"
522
+ },
523
+ scopes: {
524
+ "/shared-modules/": {
525
+ vue: "/shared-modules/vue.g3h4i5j6.final.mjs"
526
+ },
527
+ "/shared-modules/vue2/": {
528
+ vue: "/shared-modules/vue2.q7r8s9t0.final.mjs"
529
+ },
530
+ "/shared-modules/vue3/": {
531
+ vue: "/shared-modules/vue3.y5z6a7b8.final.mjs"
532
+ }
533
+ }
534
+ };
535
+ const expected = {
536
+ imports: {
537
+ "shared-modules/vue2": "/shared-modules/vue2.q7r8s9t0.final.mjs",
538
+ "shared-modules/vue2/component": "/shared-modules/vue2/component.u1v2w3x4.final.mjs",
539
+ "shared-modules/vue3": "/shared-modules/vue3.y5z6a7b8.final.mjs",
540
+ "shared-modules/vue3/component": "/shared-modules/vue3/component.c9d0e1f2.final.mjs",
541
+ "shared-modules/vue": "/shared-modules/vue.g3h4i5j6.final.mjs"
542
+ },
543
+ scopes: {
544
+ "/shared-modules/vue.g3h4i5j6.final.mjs": {
545
+ vue: "/shared-modules/vue.g3h4i5j6.final.mjs"
546
+ },
547
+ "/shared-modules/vue2.q7r8s9t0.final.mjs": {
548
+ vue: "/shared-modules/vue.g3h4i5j6.final.mjs"
549
+ },
550
+ "/shared-modules/vue2/component.u1v2w3x4.final.mjs": {
551
+ vue: "/shared-modules/vue2.q7r8s9t0.final.mjs"
552
+ },
553
+ "/shared-modules/vue3.y5z6a7b8.final.mjs": {
554
+ vue: "/shared-modules/vue.g3h4i5j6.final.mjs"
555
+ },
556
+ "/shared-modules/vue3/component.c9d0e1f2.final.mjs": {
557
+ vue: "/shared-modules/vue3.y5z6a7b8.final.mjs"
558
+ }
559
+ }
560
+ };
561
+ const result = fixNestedScopesResolution(importMap);
562
+ assert.deepEqual(result, expected);
563
+ });
564
+ test("should handle deeply nested scopes", () => {
565
+ const importMap = {
566
+ imports: {
567
+ "shared-modules/vue2/components/button": "/shared-modules/vue2/components/button.k7l8m9n0.final.mjs",
568
+ "shared-modules/vue2/components/input": "/shared-modules/vue2/components/input.o1p2q3r4.final.mjs"
569
+ },
570
+ scopes: {
571
+ "/shared-modules/vue2/components/": {
572
+ vue: "/shared-modules/vue2.s5t6u7v8.final.mjs"
573
+ }
574
+ }
575
+ };
576
+ const expected = {
577
+ imports: {
578
+ "shared-modules/vue2/components/button": "/shared-modules/vue2/components/button.k7l8m9n0.final.mjs",
579
+ "shared-modules/vue2/components/input": "/shared-modules/vue2/components/input.o1p2q3r4.final.mjs"
580
+ },
581
+ scopes: {
582
+ "/shared-modules/vue2/components/button.k7l8m9n0.final.mjs": {
583
+ vue: "/shared-modules/vue2.s5t6u7v8.final.mjs"
584
+ },
585
+ "/shared-modules/vue2/components/input.o1p2q3r4.final.mjs": {
586
+ vue: "/shared-modules/vue2.s5t6u7v8.final.mjs"
587
+ }
588
+ }
589
+ };
590
+ const result = fixNestedScopesResolution(importMap);
591
+ assert.deepEqual(result, expected);
592
+ });
593
+ test("should not create file-level scopes for imports not matching nested scope", () => {
594
+ const importMap = {
595
+ imports: {
596
+ "shared-modules/vue": "/shared-modules/vue.w9x0y1z2.final.mjs",
597
+ "shared-modules/vue2/component": "/shared-modules/vue2/component.a3b4c5d6.final.mjs",
598
+ "other-modules/component": "/other-modules/component.e7f8g9h0.final.mjs"
599
+ },
600
+ scopes: {
601
+ "/shared-modules/vue2/": {
602
+ vue: "/shared-modules/vue2.i1j2k3l4.final.mjs"
603
+ }
604
+ }
605
+ };
606
+ const expected = {
607
+ imports: importMap.imports,
608
+ scopes: {
609
+ "/shared-modules/vue2/component.a3b4c5d6.final.mjs": {
610
+ vue: "/shared-modules/vue2.i1j2k3l4.final.mjs"
611
+ }
612
+ }
613
+ };
614
+ const result = fixNestedScopesResolution(importMap);
615
+ assert.deepEqual(result, expected);
616
+ });
617
+ test("should handle empty imports", () => {
618
+ const importMap = {
619
+ imports: {},
620
+ scopes: {
621
+ "/shared-modules/vue2/": {
622
+ vue: "/shared-modules/vue2.m5n6o7p8.final.mjs"
623
+ }
624
+ }
625
+ };
626
+ const expected = {
627
+ imports: {},
628
+ scopes: {}
629
+ };
630
+ const result = fixNestedScopesResolution(importMap);
631
+ assert.deepEqual(result, expected);
632
+ });
633
+ test("should preserve original import map structure", () => {
634
+ const importMap = {
635
+ imports: {
636
+ "shared-modules/vue2": "/shared-modules/vue2.q9r8s7t6.final.mjs",
637
+ "shared-modules/vue2/component": "/shared-modules/vue2/component.u5v4w3x2.final.mjs"
638
+ },
639
+ scopes: {
640
+ "/shared-modules/vue2/": {
641
+ vue: "/shared-modules/vue2.q9r8s7t6.final.mjs",
642
+ "vue-router": "/shared-modules/vue2/router.y1z0a9b8.final.mjs"
643
+ }
644
+ }
645
+ };
646
+ const result = fixNestedScopesResolution(importMap);
647
+ assert.deepEqual(result.imports, importMap.imports);
648
+ assert.deepEqual(
649
+ result.scopes["/shared-modules/vue2/"],
650
+ importMap.scopes["/shared-modules/vue2/"]
651
+ );
652
+ assert.deepEqual(
653
+ result.scopes["/shared-modules/vue2/component.u5v4w3x2.final.mjs"],
654
+ {
655
+ vue: "/shared-modules/vue2.q9r8s7t6.final.mjs",
656
+ "vue-router": "/shared-modules/vue2/router.y1z0a9b8.final.mjs"
657
+ }
658
+ );
659
+ });
660
+ test("should handle complex priority scenarios with multiple nested levels", () => {
661
+ const importMap = {
662
+ imports: {
663
+ "shared-modules/vue2": "/shared-modules/vue2.c7d8e9f0.final.mjs",
664
+ "shared-modules/vue2/test": "/shared-modules/vue2/test.a1b2c3d4.final.mjs",
665
+ "shared-modules/vue2/test/component": "/shared-modules/vue2/test/component.e5f6g7h8.final.mjs",
666
+ "shared-modules/vue": "/shared-modules/vue.i9j0k1l2.final.mjs"
667
+ },
668
+ scopes: {
669
+ "/shared-modules/": {
670
+ vue: "/shared-modules/vue.i9j0k1l2.final.mjs",
671
+ "vue-router": "/shared-modules/@esmx/router.m3n4o5p6.final.mjs"
672
+ },
673
+ "/shared-modules/vue2/": {
674
+ vue: "/shared-modules/vue2.c7d8e9f0.final.mjs",
675
+ "vue-router": "/shared-modules/vue2/@esmx/router-vue.q7r8s9t0.final.mjs"
676
+ },
677
+ "/shared-modules/vue2/test/": {
678
+ vue: "/shared-modules/vue2.c7d8e9f0.final.mjs",
679
+ "test-utils": "/shared-modules/vue2/test/utils.u1v2w3x4.final.mjs"
680
+ }
681
+ }
682
+ };
683
+ const expected = {
684
+ imports: {
685
+ "shared-modules/vue2": "/shared-modules/vue2.c7d8e9f0.final.mjs",
686
+ "shared-modules/vue2/test": "/shared-modules/vue2/test.a1b2c3d4.final.mjs",
687
+ "shared-modules/vue2/test/component": "/shared-modules/vue2/test/component.e5f6g7h8.final.mjs",
688
+ "shared-modules/vue": "/shared-modules/vue.i9j0k1l2.final.mjs"
689
+ },
690
+ scopes: {
691
+ "/shared-modules/vue.i9j0k1l2.final.mjs": {
692
+ vue: "/shared-modules/vue.i9j0k1l2.final.mjs",
693
+ "vue-router": "/shared-modules/@esmx/router.m3n4o5p6.final.mjs"
694
+ },
695
+ "/shared-modules/vue2.c7d8e9f0.final.mjs": {
696
+ vue: "/shared-modules/vue.i9j0k1l2.final.mjs",
697
+ "vue-router": "/shared-modules/@esmx/router.m3n4o5p6.final.mjs"
698
+ },
699
+ "/shared-modules/vue2/test.a1b2c3d4.final.mjs": {
700
+ vue: "/shared-modules/vue2.c7d8e9f0.final.mjs",
701
+ "vue-router": "/shared-modules/vue2/@esmx/router-vue.q7r8s9t0.final.mjs"
702
+ },
703
+ "/shared-modules/vue2/test/component.e5f6g7h8.final.mjs": {
704
+ vue: "/shared-modules/vue2.c7d8e9f0.final.mjs",
705
+ "test-utils": "/shared-modules/vue2/test/utils.u1v2w3x4.final.mjs",
706
+ "vue-router": "/shared-modules/vue2/@esmx/router-vue.q7r8s9t0.final.mjs"
707
+ }
708
+ }
709
+ };
710
+ const result = fixNestedScopesResolution(importMap);
711
+ assert.deepEqual(result, expected);
712
+ });
713
+ test("should handle priority with overlapping nested scopes", () => {
714
+ const importMap = {
715
+ imports: {
716
+ "shared-modules/vue2": "/shared-modules/vue2.n3o4p5q6.final.mjs",
717
+ "shared-modules/vue2/components": "/shared-modules/vue2/components.r7s8t9u0.final.mjs",
718
+ "shared-modules/vue2/components/button": "/shared-modules/vue2/components/button.v1w2x3y4.final.mjs",
719
+ "shared-modules/vue2/components/input": "/shared-modules/vue2/components/input.z5a6b7c8.final.mjs"
720
+ },
721
+ scopes: {
722
+ "/shared-modules/vue2/": {
723
+ vue: "/shared-modules/vue2.n3o4p5q6.final.mjs",
724
+ "vue-router": "/shared-modules/vue2/@esmx/router-vue.d9e0f1g2.final.mjs"
725
+ },
726
+ "/shared-modules/vue2/components/": {
727
+ vue: "/shared-modules/vue2.n3o4p5q6.final.mjs",
728
+ "component-utils": "/shared-modules/vue2/components/utils.h3i4j5k6.final.mjs"
729
+ }
730
+ }
731
+ };
732
+ const expected = {
733
+ imports: {
734
+ "shared-modules/vue2": "/shared-modules/vue2.n3o4p5q6.final.mjs",
735
+ "shared-modules/vue2/components": "/shared-modules/vue2/components.r7s8t9u0.final.mjs",
736
+ "shared-modules/vue2/components/button": "/shared-modules/vue2/components/button.v1w2x3y4.final.mjs",
737
+ "shared-modules/vue2/components/input": "/shared-modules/vue2/components/input.z5a6b7c8.final.mjs"
738
+ },
739
+ scopes: {
740
+ "/shared-modules/vue2/components.r7s8t9u0.final.mjs": {
741
+ vue: "/shared-modules/vue2.n3o4p5q6.final.mjs",
742
+ "vue-router": "/shared-modules/vue2/@esmx/router-vue.d9e0f1g2.final.mjs"
743
+ },
744
+ "/shared-modules/vue2/components/button.v1w2x3y4.final.mjs": {
745
+ "component-utils": "/shared-modules/vue2/components/utils.h3i4j5k6.final.mjs",
746
+ vue: "/shared-modules/vue2.n3o4p5q6.final.mjs",
747
+ "vue-router": "/shared-modules/vue2/@esmx/router-vue.d9e0f1g2.final.mjs"
748
+ },
749
+ "/shared-modules/vue2/components/input.z5a6b7c8.final.mjs": {
750
+ "component-utils": "/shared-modules/vue2/components/utils.h3i4j5k6.final.mjs",
751
+ vue: "/shared-modules/vue2.n3o4p5q6.final.mjs",
752
+ "vue-router": "/shared-modules/vue2/@esmx/router-vue.d9e0f1g2.final.mjs"
753
+ }
754
+ }
755
+ };
756
+ const result = fixNestedScopesResolution(importMap);
757
+ assert.deepEqual(result, expected);
758
+ });
759
+ test("should handle very deeply nested scope priority scenarios", () => {
760
+ const importMap = {
761
+ imports: {
762
+ "shared-modules/vue2": "/shared-modules/vue2.l7m8n9o0.final.mjs",
763
+ "shared-modules/vue2/test": "/shared-modules/vue2/test.p1q2r3s4.final.mjs",
764
+ "shared-modules/vue2/test/unit": "/shared-modules/vue2/test/unit.t5u6v7w8.final.mjs",
765
+ "shared-modules/vue2/test/unit/component": "/shared-modules/vue2/test/unit/component.x9y0z1a2.final.mjs"
766
+ },
767
+ scopes: {
768
+ "/shared-modules/": {
769
+ vue: "/shared-modules/vue.b3c4d5e6.final.mjs"
770
+ },
771
+ "/shared-modules/vue2/": {
772
+ vue: "/shared-modules/vue2.l7m8n9o0.final.mjs"
773
+ },
774
+ "/shared-modules/vue2/test/": {
775
+ vue: "/shared-modules/vue2.l7m8n9o0.final.mjs",
776
+ "test-utils": "/shared-modules/vue2/test/utils.f7g8h9i0.final.mjs"
777
+ },
778
+ "/shared-modules/vue2/test/unit/": {
779
+ vue: "/shared-modules/vue2.l7m8n9o0.final.mjs",
780
+ "test-utils": "/shared-modules/vue2/test/utils.f7g8h9i0.final.mjs"
781
+ }
782
+ }
783
+ };
784
+ const expected = {
785
+ imports: {
786
+ "shared-modules/vue2": "/shared-modules/vue2.l7m8n9o0.final.mjs",
787
+ "shared-modules/vue2/test": "/shared-modules/vue2/test.p1q2r3s4.final.mjs",
788
+ "shared-modules/vue2/test/unit": "/shared-modules/vue2/test/unit.t5u6v7w8.final.mjs",
789
+ "shared-modules/vue2/test/unit/component": "/shared-modules/vue2/test/unit/component.x9y0z1a2.final.mjs"
790
+ },
791
+ scopes: {
792
+ "/shared-modules/vue2.l7m8n9o0.final.mjs": {
793
+ vue: "/shared-modules/vue.b3c4d5e6.final.mjs"
794
+ },
795
+ "/shared-modules/vue2/test.p1q2r3s4.final.mjs": {
796
+ vue: "/shared-modules/vue2.l7m8n9o0.final.mjs"
797
+ },
798
+ "/shared-modules/vue2/test/unit.t5u6v7w8.final.mjs": {
799
+ vue: "/shared-modules/vue2.l7m8n9o0.final.mjs",
800
+ "test-utils": "/shared-modules/vue2/test/utils.f7g8h9i0.final.mjs"
801
+ },
802
+ "/shared-modules/vue2/test/unit/component.x9y0z1a2.final.mjs": {
803
+ vue: "/shared-modules/vue2.l7m8n9o0.final.mjs",
804
+ "test-utils": "/shared-modules/vue2/test/utils.f7g8h9i0.final.mjs"
805
+ }
806
+ }
807
+ };
808
+ const result = fixNestedScopesResolution(importMap);
809
+ assert.deepEqual(result, expected);
810
+ });
811
+ test("should ensure different directory levels have distinct values for proper testing", () => {
812
+ const importMap = {
813
+ imports: {
814
+ "shared-modules/level1": "/shared-modules/level1.a1b2c3d4.final.mjs",
815
+ "shared-modules/level1/level2": "/shared-modules/level1/level2.e5f6g7h8.final.mjs",
816
+ "shared-modules/level1/level2/level3": "/shared-modules/level1/level2/level3.i9j0k1l2.final.mjs"
817
+ },
818
+ scopes: {
819
+ "/shared-modules/level1/": {
820
+ vue: "/shared-modules/level1.a1b2c3d4.final.mjs"
821
+ },
822
+ "/shared-modules/level1/level2/": {
823
+ vue: "/shared-modules/level1/level2.e5f6g7h8.final.mjs"
824
+ }
825
+ }
826
+ };
827
+ const expected = {
828
+ imports: {
829
+ "shared-modules/level1": "/shared-modules/level1.a1b2c3d4.final.mjs",
830
+ "shared-modules/level1/level2": "/shared-modules/level1/level2.e5f6g7h8.final.mjs",
831
+ "shared-modules/level1/level2/level3": "/shared-modules/level1/level2/level3.i9j0k1l2.final.mjs"
832
+ },
833
+ scopes: {
834
+ "/shared-modules/level1/level2.e5f6g7h8.final.mjs": {
835
+ vue: "/shared-modules/level1.a1b2c3d4.final.mjs"
836
+ },
837
+ "/shared-modules/level1/level2/level3.i9j0k1l2.final.mjs": {
838
+ vue: "/shared-modules/level1/level2.e5f6g7h8.final.mjs"
839
+ }
840
+ }
841
+ };
842
+ const result = fixNestedScopesResolution(importMap);
843
+ assert.deepEqual(result, expected);
844
+ assert.equal(
845
+ result.scopes["/shared-modules/level1/level2.e5f6g7h8.final.mjs"].vue,
846
+ "/shared-modules/level1.a1b2c3d4.final.mjs"
847
+ );
848
+ assert.equal(
849
+ result.scopes["/shared-modules/level1/level2/level3.i9j0k1l2.final.mjs"].vue,
850
+ "/shared-modules/level1/level2.e5f6g7h8.final.mjs"
851
+ );
852
+ });
853
+ test("should successfully delete properties using Reflect.deleteProperty", () => {
854
+ const importMap = {
855
+ imports: {
856
+ "shared/modules/vue2": "/shared/modules/vue2.a1b2c3d4.final.mjs"
857
+ },
858
+ scopes: {
859
+ "/shared/modules/vue2/": {
860
+ vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
861
+ }
862
+ }
863
+ };
864
+ const result = fixNestedScopesResolution(importMap);
865
+ assert.deepEqual(result.imports, importMap.imports);
866
+ assert.isUndefined(result.scopes["/shared/modules/vue2/"]);
867
+ assert.doesNotThrow(() => {
868
+ fixNestedScopesResolution(importMap);
869
+ });
870
+ });
871
+ describe("scope path processing logic", () => {
872
+ test("should process all scope paths regardless of format", () => {
873
+ const importMap = {
874
+ imports: {
875
+ "shared/modules/vue2": "/shared/modules/vue2.a1b2c3d4.final.mjs",
876
+ "shared/vue": "/shared/vue.e5f6g7h8.final.mjs"
877
+ },
878
+ scopes: {
879
+ "shared/modules/vue2/": {
880
+ vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
881
+ },
882
+ "/shared/modules/vue2": {
883
+ vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
884
+ },
885
+ "/shared/": {
886
+ vue: "/shared/vue.e5f6g7h8.final.mjs"
887
+ },
888
+ "/shared/modules/vue2/": {
889
+ vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
890
+ }
891
+ }
892
+ };
893
+ const expected = {
894
+ imports: {
895
+ "shared/modules/vue2": "/shared/modules/vue2.a1b2c3d4.final.mjs",
896
+ "shared/vue": "/shared/vue.e5f6g7h8.final.mjs"
897
+ },
898
+ scopes: {
899
+ "/shared/modules/vue2.a1b2c3d4.final.mjs": {
900
+ vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
901
+ },
902
+ "/shared/vue.e5f6g7h8.final.mjs": {
903
+ vue: "/shared/vue.e5f6g7h8.final.mjs"
904
+ }
905
+ }
906
+ };
907
+ const result = fixNestedScopesResolution(importMap);
908
+ assert.deepEqual(result, expected);
909
+ });
910
+ test("should handle scope paths with any depth", () => {
911
+ const importMap = {
912
+ imports: {
913
+ "a/b/c": "/a/b/c.a1b2c3d4.final.mjs"
914
+ },
915
+ scopes: {
916
+ "/a/b/c/": {
917
+ vue: "/a/b/c.a1b2c3d4.final.mjs"
918
+ }
919
+ }
920
+ };
921
+ const expected = {
922
+ imports: {
923
+ "a/b/c": "/a/b/c.a1b2c3d4.final.mjs"
924
+ },
925
+ scopes: {}
926
+ };
927
+ const result = fixNestedScopesResolution(importMap);
928
+ assert.deepEqual(result, expected);
929
+ });
930
+ test("should handle very deep nested scope paths", () => {
931
+ const importMap = {
932
+ imports: {
933
+ "a/b/c/d/e/f": "/a/b/c/d/e/f.a1b2c3d4.final.mjs"
934
+ },
935
+ scopes: {
936
+ "/a/b/c/d/e/f/": {
937
+ vue: "/a/b/c/d/e/f.a1b2c3d4.final.mjs"
938
+ }
939
+ }
940
+ };
941
+ const expected = {
942
+ imports: {
943
+ "a/b/c/d/e/f": "/a/b/c/d/e/f.a1b2c3d4.final.mjs"
944
+ },
945
+ scopes: {}
946
+ };
947
+ const result = fixNestedScopesResolution(importMap);
948
+ assert.deepEqual(result, expected);
949
+ });
950
+ test("should create file-level scopes for all scope paths", () => {
951
+ const importMap = {
952
+ imports: {
953
+ "modules/vue": "/modules/vue.a1b2c3d4.final.mjs",
954
+ "shared/vue": "/shared/vue.e5f6g7h8.final.mjs"
955
+ },
956
+ scopes: {
957
+ "/modules/": {
958
+ vue: "/modules/vue.a1b2c3d4.final.mjs"
959
+ },
960
+ "/shared/": {
961
+ vue: "/shared/vue.e5f6g7h8.final.mjs"
962
+ }
963
+ }
964
+ };
965
+ const expected = {
966
+ imports: {
967
+ "modules/vue": "/modules/vue.a1b2c3d4.final.mjs",
968
+ "shared/vue": "/shared/vue.e5f6g7h8.final.mjs"
969
+ },
970
+ scopes: {
971
+ "/modules/vue.a1b2c3d4.final.mjs": {
972
+ vue: "/modules/vue.a1b2c3d4.final.mjs"
973
+ },
974
+ "/shared/vue.e5f6g7h8.final.mjs": {
975
+ vue: "/shared/vue.e5f6g7h8.final.mjs"
976
+ }
977
+ }
978
+ };
979
+ const result = fixNestedScopesResolution(importMap);
980
+ assert.deepEqual(result, expected);
981
+ });
982
+ test("should process multiple scope paths in correct order by depth", () => {
983
+ const importMap = {
984
+ imports: {
985
+ "shared/modules/vue2": "/shared/modules/vue2.a1b2c3d4.final.mjs",
986
+ "shared/modules/vue2/component": "/shared/modules/vue2/component.e5f6g7h8.final.mjs",
987
+ "shared/modules/vue2/utils": "/shared/modules/vue2/utils.i9j0k1l2.final.mjs"
988
+ },
989
+ scopes: {
990
+ "/shared/modules/vue2/": {
991
+ vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
992
+ },
993
+ "/shared/modules/vue2/utils/": {
994
+ "test-utils": "/shared/modules/vue2/utils.i9j0k1l2.final.mjs"
995
+ }
996
+ }
997
+ };
998
+ const expected = {
999
+ imports: {
1000
+ "shared/modules/vue2": "/shared/modules/vue2.a1b2c3d4.final.mjs",
1001
+ "shared/modules/vue2/component": "/shared/modules/vue2/component.e5f6g7h8.final.mjs",
1002
+ "shared/modules/vue2/utils": "/shared/modules/vue2/utils.i9j0k1l2.final.mjs"
1003
+ },
1004
+ scopes: {
1005
+ "/shared/modules/vue2/component.e5f6g7h8.final.mjs": {
1006
+ vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
1007
+ },
1008
+ "/shared/modules/vue2/utils.i9j0k1l2.final.mjs": {
1009
+ vue: "/shared/modules/vue2.a1b2c3d4.final.mjs"
1010
+ }
1011
+ }
1012
+ };
1013
+ const result = fixNestedScopesResolution(importMap);
1014
+ assert.deepEqual(result, expected);
1015
+ });
1016
+ });
1017
+ });
442
1018
  describe("buildScopesMap", () => {
443
1019
  test("should return empty object for empty manifests", () => {
444
1020
  const imports = {};
package/package.json CHANGED
@@ -59,7 +59,7 @@
59
59
  "build": "unbuild"
60
60
  },
61
61
  "dependencies": {
62
- "@esmx/import": "3.0.0-rc.62",
62
+ "@esmx/import": "3.0.0-rc.63",
63
63
  "@types/serialize-javascript": "^5.0.4",
64
64
  "es-module-lexer": "^1.7.0",
65
65
  "find": "^0.3.0",
@@ -77,7 +77,7 @@
77
77
  "unbuild": "3.6.0",
78
78
  "vitest": "3.2.4"
79
79
  },
80
- "version": "3.0.0-rc.62",
80
+ "version": "3.0.0-rc.63",
81
81
  "type": "module",
82
82
  "private": false,
83
83
  "exports": {
@@ -100,5 +100,5 @@
100
100
  "template",
101
101
  "public"
102
102
  ],
103
- "gitHead": "e5a1e811403bf1db4437dff88c3ea8bc6b576f64"
103
+ "gitHead": "18a524ff1b7f9c6ea60d8bb57ad314329febc58c"
104
104
  }
package/src/core.ts CHANGED
@@ -853,7 +853,7 @@ export class Esmx {
853
853
  const manifests = await this.getManifestList(env);
854
854
  let json: ImportMap = {};
855
855
  switch (env) {
856
- case 'client':
856
+ case 'client': {
857
857
  json = getImportMap({
858
858
  manifests,
859
859
  getScope(name, scope) {
@@ -864,6 +864,7 @@ export class Esmx {
864
864
  }
865
865
  });
866
866
  break;
867
+ }
867
868
  case 'server':
868
869
  json = getImportMap({
869
870
  manifests,