@featurevisor/core 2.25.0 → 2.26.0

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.
Files changed (104) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/coverage/clover.xml +1499 -1476
  3. package/coverage/coverage-final.json +18 -17
  4. package/coverage/lcov-report/builder/allocator.ts.html +1 -1
  5. package/coverage/lcov-report/builder/buildDatafile.ts.html +1 -1
  6. package/coverage/lcov-report/builder/buildScopedConditions.ts.html +1 -1
  7. package/coverage/lcov-report/builder/buildScopedDatafile.ts.html +1 -1
  8. package/coverage/lcov-report/builder/buildScopedSegments.ts.html +1 -1
  9. package/coverage/lcov-report/builder/convertToV1.ts.html +1 -1
  10. package/coverage/lcov-report/builder/getFeatureRanges.ts.html +1 -1
  11. package/coverage/lcov-report/builder/hashes.ts.html +1 -1
  12. package/coverage/lcov-report/builder/index.html +1 -1
  13. package/coverage/lcov-report/builder/mutateVariables.ts.html +1 -1
  14. package/coverage/lcov-report/builder/mutator.ts.html +52 -52
  15. package/coverage/lcov-report/builder/revision.ts.html +1 -1
  16. package/coverage/lcov-report/builder/traffic.ts.html +1 -1
  17. package/coverage/lcov-report/config/index.html +1 -1
  18. package/coverage/lcov-report/config/index.ts.html +1 -1
  19. package/coverage/lcov-report/config/projectConfig.ts.html +15 -15
  20. package/coverage/lcov-report/datasource/adapter.ts.html +1 -1
  21. package/coverage/lcov-report/datasource/datasource.ts.html +18 -18
  22. package/coverage/lcov-report/datasource/filesystemAdapter.ts.html +43 -43
  23. package/coverage/lcov-report/datasource/index.html +1 -1
  24. package/coverage/lcov-report/datasource/index.ts.html +1 -1
  25. package/coverage/lcov-report/generate-code/index.html +1 -1
  26. package/coverage/lcov-report/generate-code/typescript.ts.html +1 -1
  27. package/coverage/lcov-report/index.html +18 -18
  28. package/coverage/lcov-report/linter/attributeSchema.ts.html +130 -130
  29. package/coverage/lcov-report/linter/checkCircularDependency.ts.html +11 -11
  30. package/coverage/lcov-report/linter/checkPercentageExceedingSlot.ts.html +15 -15
  31. package/coverage/lcov-report/linter/conditionSchema.ts.html +150 -150
  32. package/coverage/lcov-report/linter/featureSchema.ts.html +458 -443
  33. package/coverage/lcov-report/linter/groupSchema.ts.html +24 -27
  34. package/coverage/lcov-report/linter/index.html +83 -68
  35. package/coverage/lcov-report/linter/lintProject.ts.html +158 -158
  36. package/coverage/lcov-report/linter/mutationNotation.ts.html +104 -104
  37. package/coverage/lcov-report/linter/printError.ts.html +79 -28
  38. package/coverage/lcov-report/linter/schema.ts.html +129 -135
  39. package/coverage/lcov-report/linter/segmentSchema.ts.html +15 -9
  40. package/coverage/lcov-report/linter/testSchema.ts.html +67 -94
  41. package/coverage/lcov-report/linter/zodHelpers.ts.html +133 -0
  42. package/coverage/lcov-report/list/index.html +1 -1
  43. package/coverage/lcov-report/list/matrix.ts.html +1 -1
  44. package/coverage/lcov-report/tester/cliFormat.ts.html +6 -6
  45. package/coverage/lcov-report/tester/helpers.ts.html +1 -1
  46. package/coverage/lcov-report/tester/index.html +1 -1
  47. package/coverage/lcov-report/utils/extractKeys.ts.html +1 -1
  48. package/coverage/lcov-report/utils/git.ts.html +1 -1
  49. package/coverage/lcov-report/utils/index.html +1 -1
  50. package/coverage/lcov-report/utils/index.ts.html +1 -1
  51. package/coverage/lcov-report/utils/pretty.ts.html +1 -1
  52. package/coverage/lcov.info +3031 -2984
  53. package/lib/linter/attributeSchema.d.ts +19 -352
  54. package/lib/linter/attributeSchema.spec.js.map +1 -1
  55. package/lib/linter/conditionSchema.d.ts +1 -1
  56. package/lib/linter/conditionSchema.js +2 -3
  57. package/lib/linter/conditionSchema.js.map +1 -1
  58. package/lib/linter/conditionSchema.spec.js.map +1 -1
  59. package/lib/linter/featureSchema.d.ts +75 -964
  60. package/lib/linter/featureSchema.js +64 -53
  61. package/lib/linter/featureSchema.js.map +1 -1
  62. package/lib/linter/featureSchema.spec.js +28 -0
  63. package/lib/linter/featureSchema.spec.js.map +1 -1
  64. package/lib/linter/groupSchema.d.ts +4 -28
  65. package/lib/linter/groupSchema.js +3 -5
  66. package/lib/linter/groupSchema.js.map +1 -1
  67. package/lib/linter/lintProject.spec.js +101 -13
  68. package/lib/linter/lintProject.spec.js.map +1 -1
  69. package/lib/linter/printError.js +21 -7
  70. package/lib/linter/printError.js.map +1 -1
  71. package/lib/linter/schema.d.ts +9 -2
  72. package/lib/linter/schema.js +2 -6
  73. package/lib/linter/schema.js.map +1 -1
  74. package/lib/linter/schema.spec.js +3 -2
  75. package/lib/linter/schema.spec.js.map +1 -1
  76. package/lib/linter/segmentSchema.d.ts +1 -9
  77. package/lib/linter/segmentSchema.js +3 -1
  78. package/lib/linter/segmentSchema.js.map +1 -1
  79. package/lib/linter/segmentSchema.spec.js.map +1 -1
  80. package/lib/linter/testSchema.d.ts +16 -222
  81. package/lib/linter/testSchema.js +23 -38
  82. package/lib/linter/testSchema.js.map +1 -1
  83. package/lib/linter/testSchema.spec.d.ts +1 -0
  84. package/lib/linter/testSchema.spec.js +162 -0
  85. package/lib/linter/testSchema.spec.js.map +1 -0
  86. package/lib/linter/zodHelpers.d.ts +2 -0
  87. package/lib/linter/zodHelpers.js +15 -0
  88. package/lib/linter/zodHelpers.js.map +1 -0
  89. package/package.json +3 -3
  90. package/src/linter/attributeSchema.spec.ts +3 -3
  91. package/src/linter/conditionSchema.spec.ts +3 -3
  92. package/src/linter/conditionSchema.ts +4 -4
  93. package/src/linter/featureSchema.spec.ts +39 -4
  94. package/src/linter/featureSchema.ts +82 -77
  95. package/src/linter/groupSchema.ts +11 -12
  96. package/src/linter/lintProject.spec.ts +121 -13
  97. package/src/linter/printError.ts +27 -10
  98. package/src/linter/schema.spec.ts +12 -11
  99. package/src/linter/schema.ts +7 -9
  100. package/src/linter/segmentSchema.spec.ts +5 -5
  101. package/src/linter/segmentSchema.ts +3 -1
  102. package/src/linter/testSchema.spec.ts +193 -0
  103. package/src/linter/testSchema.ts +36 -45
  104. package/src/linter/zodHelpers.ts +16 -0
@@ -525,8 +525,8 @@
525
525
  <span class="cline-any cline-neutral">&nbsp;</span>
526
526
  <span class="cline-any cline-neutral">&nbsp;</span>
527
527
  <span class="cline-any cline-yes">3x</span>
528
- <span class="cline-any cline-yes">858x</span>
529
- <span class="cline-any cline-yes">858x</span>
528
+ <span class="cline-any cline-yes">1258x</span>
529
+ <span class="cline-any cline-yes">1258x</span>
530
530
  <span class="cline-any cline-neutral">&nbsp;</span>
531
531
  <span class="cline-any cline-neutral">&nbsp;</span>
532
532
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -535,22 +535,22 @@
535
535
  <span class="cline-any cline-neutral">&nbsp;</span>
536
536
  <span class="cline-any cline-neutral">&nbsp;</span>
537
537
  <span class="cline-any cline-yes">3x</span>
538
- <span class="cline-any cline-yes">227x</span>
539
- <span class="cline-any cline-yes">227x</span>
538
+ <span class="cline-any cline-yes">307x</span>
539
+ <span class="cline-any cline-yes">307x</span>
540
540
  <span class="cline-any cline-neutral">&nbsp;</span>
541
- <span class="cline-any cline-yes">222x</span>
542
- <span class="cline-any cline-yes">222x</span>
543
- <span class="cline-any cline-yes">222x</span>
541
+ <span class="cline-any cline-yes">302x</span>
542
+ <span class="cline-any cline-yes">302x</span>
543
+ <span class="cline-any cline-yes">302x</span>
544
544
  <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-yes">222x</span>
545
+ <span class="cline-any cline-yes">302x</span>
546
546
  <span class="cline-any cline-neutral">&nbsp;</span>
547
547
  <span class="cline-any cline-neutral">&nbsp;</span>
548
548
  <span class="cline-any cline-neutral">&nbsp;</span>
549
549
  <span class="cline-any cline-neutral">&nbsp;</span>
550
550
  <span class="cline-any cline-neutral">&nbsp;</span>
551
551
  <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-yes">222x</span>
553
- <span class="cline-any cline-yes">222x</span>
552
+ <span class="cline-any cline-yes">302x</span>
553
+ <span class="cline-any cline-yes">302x</span>
554
554
  <span class="cline-any cline-neutral">&nbsp;</span>
555
555
  <span class="cline-any cline-neutral">&nbsp;</span>
556
556
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -561,18 +561,18 @@
561
561
  <span class="cline-any cline-neutral">&nbsp;</span>
562
562
  <span class="cline-any cline-neutral">&nbsp;</span>
563
563
  <span class="cline-any cline-neutral">&nbsp;</span>
564
- <span class="cline-any cline-yes">1329x</span>
565
- <span class="cline-any cline-yes">1327x</span>
566
- <span class="cline-any cline-yes">104x</span>
564
+ <span class="cline-any cline-yes">1887x</span>
565
+ <span class="cline-any cline-yes">1885x</span>
566
+ <span class="cline-any cline-yes">152x</span>
567
567
  <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-yes">1223x</span>
568
+ <span class="cline-any cline-yes">1733x</span>
569
569
  <span class="cline-any cline-neutral">&nbsp;</span>
570
570
  <span class="cline-any cline-neutral">&nbsp;</span>
571
571
  <span class="cline-any cline-neutral">&nbsp;</span>
572
572
  <span class="cline-any cline-neutral">&nbsp;</span>
573
573
  <span class="cline-any cline-neutral">&nbsp;</span>
574
574
  <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-yes">768x</span>
575
+ <span class="cline-any cline-yes">1096x</span>
576
576
  <span class="cline-any cline-neutral">&nbsp;</span>
577
577
  <span class="cline-any cline-neutral">&nbsp;</span>
578
578
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -587,34 +587,34 @@
587
587
  <span class="cline-any cline-neutral">&nbsp;</span>
588
588
  <span class="cline-any cline-neutral">&nbsp;</span>
589
589
  <span class="cline-any cline-neutral">&nbsp;</span>
590
- <span class="cline-any cline-yes">214x</span>
591
- <span class="cline-any cline-yes">214x</span>
590
+ <span class="cline-any cline-yes">294x</span>
591
+ <span class="cline-any cline-yes">294x</span>
592
592
  <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-yes">212x</span>
594
- <span class="cline-any cline-yes">301x</span>
595
- <span class="cline-any cline-yes">300x</span>
596
- <span class="cline-any cline-yes">273x</span>
597
- <span class="cline-any cline-yes">270x</span>
598
- <span class="cline-any cline-yes">270x</span>
599
- <span class="cline-any cline-yes">270x</span>
600
- <span class="cline-any cline-yes">270x</span>
593
+ <span class="cline-any cline-yes">292x</span>
594
+ <span class="cline-any cline-yes">426x</span>
595
+ <span class="cline-any cline-yes">425x</span>
596
+ <span class="cline-any cline-yes">389x</span>
597
+ <span class="cline-any cline-yes">386x</span>
598
+ <span class="cline-any cline-yes">386x</span>
599
+ <span class="cline-any cline-yes">386x</span>
600
+ <span class="cline-any cline-yes">386x</span>
601
601
  <span class="cline-any cline-yes">9x</span>
602
602
  <span class="cline-any cline-yes">2x</span>
603
603
  <span class="cline-any cline-yes">2x</span>
604
604
  <span class="cline-any cline-yes">2x</span>
605
605
  <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-yes">261x</span>
607
- <span class="cline-any cline-yes">261x</span>
606
+ <span class="cline-any cline-yes">377x</span>
607
+ <span class="cline-any cline-yes">377x</span>
608
608
  <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-yes">288x</span>
610
- <span class="cline-any cline-yes">43x</span>
611
- <span class="cline-any cline-yes">42x</span>
612
- <span class="cline-any cline-yes">42x</span>
613
- <span class="cline-any cline-yes">42x</span>
614
- <span class="cline-any cline-yes">42x</span>
609
+ <span class="cline-any cline-yes">413x</span>
610
+ <span class="cline-any cline-yes">59x</span>
611
+ <span class="cline-any cline-yes">58x</span>
612
+ <span class="cline-any cline-yes">58x</span>
613
+ <span class="cline-any cline-yes">58x</span>
614
+ <span class="cline-any cline-yes">58x</span>
615
615
  <span class="cline-any cline-neutral">&nbsp;</span>
616
616
  <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-yes">200x</span>
617
+ <span class="cline-any cline-yes">280x</span>
618
618
  <span class="cline-any cline-neutral">&nbsp;</span>
619
619
  <span class="cline-any cline-neutral">&nbsp;</span>
620
620
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -627,73 +627,73 @@
627
627
  <span class="cline-any cline-neutral">&nbsp;</span>
628
628
  <span class="cline-any cline-neutral">&nbsp;</span>
629
629
  <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-yes">199x</span>
631
- <span class="cline-any cline-yes">10x</span>
632
- <span class="cline-any cline-yes">10x</span>
630
+ <span class="cline-any cline-yes">279x</span>
631
+ <span class="cline-any cline-yes">12x</span>
632
+ <span class="cline-any cline-yes">12x</span>
633
633
  <span class="cline-any cline-neutral">&nbsp;</span>
634
634
  <span class="cline-any cline-neutral">&nbsp;</span>
635
635
  <span class="cline-any cline-neutral">&nbsp;</span>
636
- <span class="cline-any cline-yes">189x</span>
637
- <span class="cline-any cline-yes">189x</span>
638
- <span class="cline-any cline-yes">189x</span>
639
- <span class="cline-any cline-yes">189x</span>
640
- <span class="cline-any cline-yes">189x</span>
641
- <span class="cline-any cline-yes">100x</span>
642
- <span class="cline-any cline-yes">100x</span>
643
- <span class="cline-any cline-yes">90x</span>
644
- <span class="cline-any cline-yes">90x</span>
645
- <span class="cline-any cline-yes">90x</span>
646
- <span class="cline-any cline-yes">90x</span>
647
- <span class="cline-any cline-yes">90x</span>
636
+ <span class="cline-any cline-yes">267x</span>
637
+ <span class="cline-any cline-yes">267x</span>
638
+ <span class="cline-any cline-yes">267x</span>
639
+ <span class="cline-any cline-yes">267x</span>
640
+ <span class="cline-any cline-yes">267x</span>
641
+ <span class="cline-any cline-yes">147x</span>
642
+ <span class="cline-any cline-yes">147x</span>
643
+ <span class="cline-any cline-yes">132x</span>
644
+ <span class="cline-any cline-yes">132x</span>
645
+ <span class="cline-any cline-yes">132x</span>
646
+ <span class="cline-any cline-yes">132x</span>
647
+ <span class="cline-any cline-yes">132x</span>
648
648
  <span class="cline-any cline-yes">1x</span>
649
649
  <span class="cline-any cline-no">&nbsp;</span>
650
650
  <span class="cline-any cline-no">&nbsp;</span>
651
651
  <span class="cline-any cline-no">&nbsp;</span>
652
652
  <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-yes">89x</span>
653
+ <span class="cline-any cline-yes">131x</span>
654
654
  <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-yes">99x</span>
656
- <span class="cline-any cline-yes">20x</span>
657
- <span class="cline-any cline-yes">20x</span>
658
- <span class="cline-any cline-yes">20x</span>
659
- <span class="cline-any cline-yes">20x</span>
655
+ <span class="cline-any cline-yes">146x</span>
656
+ <span class="cline-any cline-yes">30x</span>
657
+ <span class="cline-any cline-yes">30x</span>
658
+ <span class="cline-any cline-yes">30x</span>
659
+ <span class="cline-any cline-yes">30x</span>
660
660
  <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-yes">99x</span>
661
+ <span class="cline-any cline-yes">146x</span>
662
662
  <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-yes">188x</span>
664
- <span class="cline-any cline-yes">188x</span>
665
- <span class="cline-any cline-yes">188x</span>
666
- <span class="cline-any cline-yes">21x</span>
667
- <span class="cline-any cline-yes">21x</span>
668
- <span class="cline-any cline-yes">7x</span>
669
- <span class="cline-any cline-yes">7x</span>
670
- <span class="cline-any cline-yes">7x</span>
671
- <span class="cline-any cline-yes">7x</span>
672
- <span class="cline-any cline-yes">7x</span>
663
+ <span class="cline-any cline-yes">266x</span>
664
+ <span class="cline-any cline-yes">266x</span>
665
+ <span class="cline-any cline-yes">266x</span>
666
+ <span class="cline-any cline-yes">27x</span>
667
+ <span class="cline-any cline-yes">27x</span>
668
+ <span class="cline-any cline-yes">9x</span>
669
+ <span class="cline-any cline-yes">9x</span>
670
+ <span class="cline-any cline-yes">9x</span>
671
+ <span class="cline-any cline-yes">9x</span>
672
+ <span class="cline-any cline-yes">9x</span>
673
673
  <span class="cline-any cline-yes">1x</span>
674
674
  <span class="cline-any cline-no">&nbsp;</span>
675
675
  <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-yes">6x</span>
676
+ <span class="cline-any cline-yes">8x</span>
677
677
  <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-yes">6x</span>
678
+ <span class="cline-any cline-yes">8x</span>
679
679
  <span class="cline-any cline-neutral">&nbsp;</span>
680
680
  <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-yes">20x</span>
681
+ <span class="cline-any cline-yes">26x</span>
682
682
  <span class="cline-any cline-neutral">&nbsp;</span>
683
683
  <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-yes">20x</span>
684
+ <span class="cline-any cline-yes">26x</span>
685
685
  <span class="cline-any cline-neutral">&nbsp;</span>
686
686
  <span class="cline-any cline-neutral">&nbsp;</span>
687
687
  <span class="cline-any cline-neutral">&nbsp;</span>
688
688
  <span class="cline-any cline-neutral">&nbsp;</span>
689
689
  <span class="cline-any cline-neutral">&nbsp;</span>
690
690
  <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-yes">167x</span>
691
+ <span class="cline-any cline-yes">239x</span>
692
692
  <span class="cline-any cline-neutral">&nbsp;</span>
693
- <span class="cline-any cline-yes">167x</span>
693
+ <span class="cline-any cline-yes">239x</span>
694
694
  <span class="cline-any cline-neutral">&nbsp;</span>
695
695
  <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-yes">167x</span>
696
+ <span class="cline-any cline-yes">239x</span>
697
697
  <span class="cline-any cline-neutral">&nbsp;</span>
698
698
  <span class="cline-any cline-neutral">&nbsp;</span>
699
699
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -715,8 +715,8 @@
715
715
  <span class="cline-any cline-neutral">&nbsp;</span>
716
716
  <span class="cline-any cline-neutral">&nbsp;</span>
717
717
  <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-yes">204x</span>
719
- <span class="cline-any cline-yes">204x</span>
718
+ <span class="cline-any cline-yes">284x</span>
719
+ <span class="cline-any cline-yes">284x</span>
720
720
  <span class="cline-any cline-yes">1x</span>
721
721
  <span class="cline-any cline-neutral">&nbsp;</span>
722
722
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -726,8 +726,8 @@
726
726
  <span class="cline-any cline-neutral">&nbsp;</span>
727
727
  <span class="cline-any cline-neutral">&nbsp;</span>
728
728
  <span class="cline-any cline-neutral">&nbsp;</span>
729
- <span class="cline-any cline-yes">203x</span>
730
- <span class="cline-any cline-yes">203x</span>
729
+ <span class="cline-any cline-yes">283x</span>
730
+ <span class="cline-any cline-yes">283x</span>
731
731
  <span class="cline-any cline-yes">1x</span>
732
732
  <span class="cline-any cline-neutral">&nbsp;</span>
733
733
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -737,8 +737,8 @@
737
737
  <span class="cline-any cline-neutral">&nbsp;</span>
738
738
  <span class="cline-any cline-neutral">&nbsp;</span>
739
739
  <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-yes">202x</span>
741
- <span class="cline-any cline-yes">202x</span>
740
+ <span class="cline-any cline-yes">282x</span>
741
+ <span class="cline-any cline-yes">282x</span>
742
742
  <span class="cline-any cline-yes">2x</span>
743
743
  <span class="cline-any cline-neutral">&nbsp;</span>
744
744
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -748,8 +748,8 @@
748
748
  <span class="cline-any cline-neutral">&nbsp;</span>
749
749
  <span class="cline-any cline-neutral">&nbsp;</span>
750
750
  <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-yes">200x</span>
752
- <span class="cline-any cline-yes">200x</span>
751
+ <span class="cline-any cline-yes">280x</span>
752
+ <span class="cline-any cline-yes">280x</span>
753
753
  <span class="cline-any cline-neutral">&nbsp;</span>
754
754
  <span class="cline-any cline-no">&nbsp;</span>
755
755
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -766,7 +766,7 @@
766
766
  <span class="cline-any cline-neutral">&nbsp;</span>
767
767
  <span class="cline-any cline-neutral">&nbsp;</span>
768
768
  <span class="cline-any cline-neutral">&nbsp;</span>
769
- <span class="cline-any cline-yes">200x</span>
769
+ <span class="cline-any cline-yes">280x</span>
770
770
  <span class="cline-any cline-yes">1x</span>
771
771
  <span class="cline-any cline-neutral">&nbsp;</span>
772
772
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -777,13 +777,13 @@
777
777
  <span class="cline-any cline-neutral">&nbsp;</span>
778
778
  <span class="cline-any cline-neutral">&nbsp;</span>
779
779
  <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-yes">199x</span>
781
- <span class="cline-any cline-yes">199x</span>
780
+ <span class="cline-any cline-yes">279x</span>
781
+ <span class="cline-any cline-yes">279x</span>
782
782
  <span class="cline-any cline-neutral">&nbsp;</span>
783
- <span class="cline-any cline-yes">199x</span>
783
+ <span class="cline-any cline-yes">279x</span>
784
784
  <span class="cline-any cline-neutral">&nbsp;</span>
785
785
  <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-yes">25x</span>
786
+ <span class="cline-any cline-yes">34x</span>
787
787
  <span class="cline-any cline-yes">1x</span>
788
788
  <span class="cline-any cline-neutral">&nbsp;</span>
789
789
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -793,8 +793,8 @@
793
793
  <span class="cline-any cline-neutral">&nbsp;</span>
794
794
  <span class="cline-any cline-neutral">&nbsp;</span>
795
795
  <span class="cline-any cline-neutral">&nbsp;</span>
796
- <span class="cline-any cline-yes">24x</span>
797
- <span class="cline-any cline-yes">24x</span>
796
+ <span class="cline-any cline-yes">33x</span>
797
+ <span class="cline-any cline-yes">33x</span>
798
798
  <span class="cline-any cline-yes">2x</span>
799
799
  <span class="cline-any cline-neutral">&nbsp;</span>
800
800
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -804,7 +804,7 @@
804
804
  <span class="cline-any cline-neutral">&nbsp;</span>
805
805
  <span class="cline-any cline-neutral">&nbsp;</span>
806
806
  <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-yes">22x</span>
807
+ <span class="cline-any cline-yes">31x</span>
808
808
  <span class="cline-any cline-no">&nbsp;</span>
809
809
  <span class="cline-any cline-neutral">&nbsp;</span>
810
810
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -815,10 +815,10 @@
815
815
  <span class="cline-any cline-neutral">&nbsp;</span>
816
816
  <span class="cline-any cline-neutral">&nbsp;</span>
817
817
  <span class="cline-any cline-neutral">&nbsp;</span>
818
- <span class="cline-any cline-yes">22x</span>
818
+ <span class="cline-any cline-yes">31x</span>
819
819
  <span class="cline-any cline-neutral">&nbsp;</span>
820
820
  <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-yes">22x</span>
821
+ <span class="cline-any cline-yes">31x</span>
822
822
  <span class="cline-any cline-neutral">&nbsp;</span>
823
823
  <span class="cline-any cline-neutral">&nbsp;</span>
824
824
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -829,7 +829,7 @@
829
829
  <span class="cline-any cline-neutral">&nbsp;</span>
830
830
  <span class="cline-any cline-neutral">&nbsp;</span>
831
831
  <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-yes">24x</span>
832
+ <span class="cline-any cline-yes">29x</span>
833
833
  <span class="cline-any cline-yes">2x</span>
834
834
  <span class="cline-any cline-neutral">&nbsp;</span>
835
835
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -839,9 +839,9 @@
839
839
  <span class="cline-any cline-neutral">&nbsp;</span>
840
840
  <span class="cline-any cline-neutral">&nbsp;</span>
841
841
  <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-yes">27x</span>
843
+ <span class="cline-any cline-yes">27x</span>
842
844
  <span class="cline-any cline-yes">22x</span>
843
- <span class="cline-any cline-yes">22x</span>
844
- <span class="cline-any cline-yes">17x</span>
845
845
  <span class="cline-any cline-no">&nbsp;</span>
846
846
  <span class="cline-any cline-neutral">&nbsp;</span>
847
847
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -851,9 +851,9 @@
851
851
  <span class="cline-any cline-neutral">&nbsp;</span>
852
852
  <span class="cline-any cline-neutral">&nbsp;</span>
853
853
  <span class="cline-any cline-neutral">&nbsp;</span>
854
- <span class="cline-any cline-yes">17x</span>
855
- <span class="cline-any cline-yes">10x</span>
856
- <span class="cline-any cline-yes">10x</span>
854
+ <span class="cline-any cline-yes">22x</span>
855
+ <span class="cline-any cline-yes">13x</span>
856
+ <span class="cline-any cline-yes">13x</span>
857
857
  <span class="cline-any cline-yes">1x</span>
858
858
  <span class="cline-any cline-neutral">&nbsp;</span>
859
859
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -864,12 +864,12 @@
864
864
  <span class="cline-any cline-neutral">&nbsp;</span>
865
865
  <span class="cline-any cline-neutral">&nbsp;</span>
866
866
  <span class="cline-any cline-neutral">&nbsp;</span>
867
- <span class="cline-any cline-yes">9x</span>
867
+ <span class="cline-any cline-yes">12x</span>
868
868
  <span class="cline-any cline-neutral">&nbsp;</span>
869
869
  <span class="cline-any cline-neutral">&nbsp;</span>
870
- <span class="cline-any cline-yes">9x</span>
870
+ <span class="cline-any cline-yes">12x</span>
871
871
  <span class="cline-any cline-neutral">&nbsp;</span>
872
- <span class="cline-any cline-yes">7x</span>
872
+ <span class="cline-any cline-yes">9x</span>
873
873
  <span class="cline-any cline-neutral">&nbsp;</span>
874
874
  <span class="cline-any cline-yes">5x</span>
875
875
  <span class="cline-any cline-no">&nbsp;</span>
@@ -899,7 +899,7 @@
899
899
  <span class="cline-any cline-yes">2x</span>
900
900
  <span class="cline-any cline-neutral">&nbsp;</span>
901
901
  <span class="cline-any cline-neutral">&nbsp;</span>
902
- <span class="cline-any cline-yes">150x</span>
902
+ <span class="cline-any cline-yes">216x</span>
903
903
  <span class="cline-any cline-yes">5x</span>
904
904
  <span class="cline-any cline-neutral">&nbsp;</span>
905
905
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -909,7 +909,7 @@
909
909
  <span class="cline-any cline-neutral">&nbsp;</span>
910
910
  <span class="cline-any cline-neutral">&nbsp;</span>
911
911
  <span class="cline-any cline-neutral">&nbsp;</span>
912
- <span class="cline-any cline-yes">145x</span>
912
+ <span class="cline-any cline-yes">211x</span>
913
913
  <span class="cline-any cline-yes">1x</span>
914
914
  <span class="cline-any cline-neutral">&nbsp;</span>
915
915
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -919,7 +919,7 @@
919
919
  <span class="cline-any cline-neutral">&nbsp;</span>
920
920
  <span class="cline-any cline-neutral">&nbsp;</span>
921
921
  <span class="cline-any cline-neutral">&nbsp;</span>
922
- <span class="cline-any cline-yes">144x</span>
922
+ <span class="cline-any cline-yes">210x</span>
923
923
  <span class="cline-any cline-neutral">&nbsp;</span>
924
924
  <span class="cline-any cline-neutral">&nbsp;</span>
925
925
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1396,7 +1396,7 @@ export function parsePathMapKey(relativePath: string): PathSegment[] | null {
1396
1396
  <div class='footer quiet pad2 space-top1 center small'>
1397
1397
  Code coverage generated by
1398
1398
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1399
- at 2026-04-16T19:15:59.143Z
1399
+ at 2026-04-16T19:50:48.735Z
1400
1400
  </div>
1401
1401
  <script src="../prettify.js"></script>
1402
1402
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">56.25% </span>
26
+ <span class="strong">65.38% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>9/16</span>
28
+ <span class='fraction'>17/26</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">57.14% </span>
33
+ <span class="strong">60% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>4/7</span>
35
+ <span class='fraction'>9/15</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">50% </span>
40
+ <span class="strong">71.42% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/4</span>
42
+ <span class='fraction'>5/7</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">56.25% </span>
47
+ <span class="strong">64% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>9/16</span>
49
+ <span class='fraction'>16/25</span>
50
50
  </div>
51
51
 
52
52
 
@@ -114,29 +114,63 @@
114
114
  <a name='L49'></a><a href='#L49'>49</a>
115
115
  <a name='L50'></a><a href='#L50'>50</a>
116
116
  <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
135
+ <span class="cline-any cline-neutral">&nbsp;</span>
136
+ <span class="cline-any cline-yes">2x</span>
137
+ <span class="cline-any cline-neutral">&nbsp;</span>
138
+ <span class="cline-any cline-neutral">&nbsp;</span>
139
+ <span class="cline-any cline-neutral">&nbsp;</span>
140
+ <span class="cline-any cline-neutral">&nbsp;</span>
141
+ <span class="cline-any cline-neutral">&nbsp;</span>
118
142
  <span class="cline-any cline-neutral">&nbsp;</span>
119
- <span class="cline-any cline-yes">1x</span>
120
143
  <span class="cline-any cline-neutral">&nbsp;</span>
121
144
  <span class="cline-any cline-neutral">&nbsp;</span>
122
145
  <span class="cline-any cline-neutral">&nbsp;</span>
146
+ <span class="cline-any cline-yes">21x</span>
123
147
  <span class="cline-any cline-neutral">&nbsp;</span>
124
148
  <span class="cline-any cline-neutral">&nbsp;</span>
125
149
  <span class="cline-any cline-neutral">&nbsp;</span>
150
+ <span class="cline-any cline-yes">8x</span>
151
+ <span class="cline-any cline-yes">6x</span>
126
152
  <span class="cline-any cline-neutral">&nbsp;</span>
127
153
  <span class="cline-any cline-neutral">&nbsp;</span>
128
- <span class="cline-any cline-yes">1x</span>
129
154
  <span class="cline-any cline-yes">2x</span>
155
+ <span class="cline-any cline-yes">2x</span>
156
+ <span class="cline-any cline-no">&nbsp;</span>
130
157
  <span class="cline-any cline-neutral">&nbsp;</span>
131
- <span class="cline-any cline-yes">4x</span>
132
158
  <span class="cline-any cline-neutral">&nbsp;</span>
159
+ <span class="cline-any cline-yes">2x</span>
160
+ <span class="cline-any cline-yes">2x</span>
161
+ <span class="cline-any cline-yes">2x</span>
133
162
  <span class="cline-any cline-neutral">&nbsp;</span>
134
163
  <span class="cline-any cline-neutral">&nbsp;</span>
164
+ <span class="cline-any cline-no">&nbsp;</span>
135
165
  <span class="cline-any cline-neutral">&nbsp;</span>
136
- <span class="cline-any cline-yes">1x</span>
137
- <span class="cline-any cline-yes">1x</span>
138
166
  <span class="cline-any cline-neutral">&nbsp;</span>
139
- <span class="cline-any cline-yes">1x</span>
167
+ <span class="cline-any cline-yes">2x</span>
168
+ <span class="cline-any cline-yes">6x</span>
169
+ <span class="cline-any cline-neutral">&nbsp;</span>
170
+ <span class="cline-any cline-yes">8x</span>
171
+ <span class="cline-any cline-neutral">&nbsp;</span>
172
+ <span class="cline-any cline-yes">8x</span>
173
+ <span class="cline-any cline-yes">2x</span>
140
174
  <span class="cline-any cline-neutral">&nbsp;</span>
141
175
  <span class="cline-any cline-neutral">&nbsp;</span>
142
176
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -144,7 +178,7 @@
144
178
  <span class="cline-any cline-neutral">&nbsp;</span>
145
179
  <span class="cline-any cline-neutral">&nbsp;</span>
146
180
  <span class="cline-any cline-neutral">&nbsp;</span>
147
- <span class="cline-any cline-yes">3x</span>
181
+ <span class="cline-any cline-yes">6x</span>
148
182
  <span class="cline-any cline-neutral">&nbsp;</span>
149
183
  <span class="cline-any cline-neutral">&nbsp;</span>
150
184
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -154,7 +188,7 @@
154
188
  <span class="cline-any cline-neutral">&nbsp;</span>
155
189
  <span class="cline-any cline-neutral">&nbsp;</span>
156
190
  <span class="cline-any cline-neutral">&nbsp;</span>
157
- <span class="cline-any cline-yes">1x</span>
191
+ <span class="cline-any cline-yes">2x</span>
158
192
  <span class="cline-any cline-no">&nbsp;</span>
159
193
  <span class="cline-any cline-no">&nbsp;</span>
160
194
  <span class="cline-any cline-no">&nbsp;</span>
@@ -165,7 +199,7 @@
165
199
  <span class="cline-any cline-no">&nbsp;</span>
166
200
  <span class="cline-any cline-neutral">&nbsp;</span>
167
201
  <span class="cline-any cline-neutral">&nbsp;</span>
168
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { ZodError } from "zod";
202
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { ZodError, ZodIssue } from "zod";
169
203
  &nbsp;
170
204
  import { CLI_FORMAT_RED } from "../tester/cliFormat";
171
205
  &nbsp;
@@ -176,20 +210,37 @@ export interface LintIssueFromZod {
176
210
  value?: unknown;
177
211
  }
178
212
  &nbsp;
213
+ function normalizePath(path: PropertyKey[]): (string | number)[] {
214
+ return path.map((segment) =&gt; (typeof segment === "symbol" ? <span class="branch-0 cbranch-no" title="branch not covered" >String(segment) </span>: segment));
215
+ }
216
+ &nbsp;
217
+ function getInvalidUnionIssue(issue: ZodIssue): ZodIssue | undefined {
218
+ if (issue.code !== "invalid_union" || issue.path.length &gt; 0) {
219
+ return undefined;
220
+ }
221
+ &nbsp;
222
+ const unionErrors = (issue as any).unionErrors as ZodError[] | undefined;
223
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(unionErrors) &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >unionErrors.length &gt; 0)</span> {
224
+ <span class="cstat-no" title="statement not covered" > return unionErrors[unionErrors.length - 1].issues[0];</span>
225
+ }
226
+ &nbsp;
227
+ const errors = (issue as any).errors as ZodIssue[][] | undefined;
228
+ if (Array.isArray(errors) &amp;&amp; errors.length &gt; 0) {
229
+ return errors[errors.length - 1][0];
230
+ }
231
+ &nbsp;
232
+ <span class="cstat-no" title="statement not covered" > return undefined;</span>
233
+ }
234
+ &nbsp;
179
235
  export function getLintIssuesFromZodError(e: ZodError): LintIssueFromZod[] {
180
236
  return e.issues
181
237
  .map((issue) =&gt; {
182
- if (
183
- issue.code === "invalid_union" &amp;&amp;
184
- issue.path.length === 0 &amp;&amp;
185
- issue.unionErrors.length &gt; 0
186
- ) {
187
- const lastUnionError = issue.unionErrors[issue.unionErrors.length - 1];
188
- const nestedIssue = lastUnionError.issues[0];
238
+ const nestedIssue = getInvalidUnionIssue(issue);
189
239
  &nbsp;
240
+ if (nestedIssue) {
190
241
  return {
191
242
  message: nestedIssue.message,
192
- path: nestedIssue.path,
243
+ path: normalizePath(nestedIssue.path),
193
244
  code: nestedIssue.code,
194
245
  value: (nestedIssue as any).received,
195
246
  };
@@ -197,7 +248,7 @@ export function getLintIssuesFromZodError(e: ZodError): LintIssueFromZod[] {
197
248
  &nbsp;
198
249
  return {
199
250
  message: issue.message,
200
- path: issue.path,
251
+ path: normalizePath(issue.path),
201
252
  code: issue.code,
202
253
  value: (issue as any).received,
203
254
  };
@@ -223,7 +274,7 @@ export function <span class="fstat-no" title="function not covered" >printZodErr
223
274
  <div class='footer quiet pad2 space-top1 center small'>
224
275
  Code coverage generated by
225
276
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
226
- at 2026-04-16T19:15:59.143Z
277
+ at 2026-04-16T19:50:48.735Z
227
278
  </div>
228
279
  <script src="../prettify.js"></script>
229
280
  <script>