@featurevisor/core 2.25.0 → 2.26.1

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 (106) hide show
  1. package/CHANGELOG.md +22 -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 +3 -3
  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/generate-code/typescript.js +2 -2
  54. package/lib/linter/attributeSchema.d.ts +19 -352
  55. package/lib/linter/attributeSchema.spec.js.map +1 -1
  56. package/lib/linter/conditionSchema.d.ts +1 -1
  57. package/lib/linter/conditionSchema.js +2 -3
  58. package/lib/linter/conditionSchema.js.map +1 -1
  59. package/lib/linter/conditionSchema.spec.js.map +1 -1
  60. package/lib/linter/featureSchema.d.ts +75 -964
  61. package/lib/linter/featureSchema.js +64 -53
  62. package/lib/linter/featureSchema.js.map +1 -1
  63. package/lib/linter/featureSchema.spec.js +28 -0
  64. package/lib/linter/featureSchema.spec.js.map +1 -1
  65. package/lib/linter/groupSchema.d.ts +4 -28
  66. package/lib/linter/groupSchema.js +3 -5
  67. package/lib/linter/groupSchema.js.map +1 -1
  68. package/lib/linter/lintProject.spec.js +101 -13
  69. package/lib/linter/lintProject.spec.js.map +1 -1
  70. package/lib/linter/printError.js +21 -7
  71. package/lib/linter/printError.js.map +1 -1
  72. package/lib/linter/schema.d.ts +9 -2
  73. package/lib/linter/schema.js +2 -6
  74. package/lib/linter/schema.js.map +1 -1
  75. package/lib/linter/schema.spec.js +3 -2
  76. package/lib/linter/schema.spec.js.map +1 -1
  77. package/lib/linter/segmentSchema.d.ts +1 -9
  78. package/lib/linter/segmentSchema.js +3 -1
  79. package/lib/linter/segmentSchema.js.map +1 -1
  80. package/lib/linter/segmentSchema.spec.js.map +1 -1
  81. package/lib/linter/testSchema.d.ts +16 -222
  82. package/lib/linter/testSchema.js +23 -38
  83. package/lib/linter/testSchema.js.map +1 -1
  84. package/lib/linter/testSchema.spec.d.ts +1 -0
  85. package/lib/linter/testSchema.spec.js +162 -0
  86. package/lib/linter/testSchema.spec.js.map +1 -0
  87. package/lib/linter/zodHelpers.d.ts +2 -0
  88. package/lib/linter/zodHelpers.js +15 -0
  89. package/lib/linter/zodHelpers.js.map +1 -0
  90. package/package.json +3 -3
  91. package/src/generate-code/typescript.ts +2 -2
  92. package/src/linter/attributeSchema.spec.ts +3 -3
  93. package/src/linter/conditionSchema.spec.ts +3 -3
  94. package/src/linter/conditionSchema.ts +4 -4
  95. package/src/linter/featureSchema.spec.ts +39 -4
  96. package/src/linter/featureSchema.ts +82 -77
  97. package/src/linter/groupSchema.ts +11 -12
  98. package/src/linter/lintProject.spec.ts +121 -13
  99. package/src/linter/printError.ts +27 -10
  100. package/src/linter/schema.spec.ts +12 -11
  101. package/src/linter/schema.ts +7 -9
  102. package/src/linter/segmentSchema.spec.ts +5 -5
  103. package/src/linter/segmentSchema.ts +3 -1
  104. package/src/linter/testSchema.spec.ts +193 -0
  105. package/src/linter/testSchema.ts +36 -45
  106. package/src/linter/zodHelpers.ts +16 -0
@@ -725,17 +725,17 @@
725
725
  <span class="cline-any cline-neutral">&nbsp;</span>
726
726
  <span class="cline-any cline-neutral">&nbsp;</span>
727
727
  <span class="cline-any cline-neutral">&nbsp;</span>
728
- <span class="cline-any cline-yes">192x</span>
728
+ <span class="cline-any cline-yes">225x</span>
729
729
  <span class="cline-any cline-neutral">&nbsp;</span>
730
730
  <span class="cline-any cline-neutral">&nbsp;</span>
731
731
  <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-yes">70x</span>
732
+ <span class="cline-any cline-yes">84x</span>
733
733
  <span class="cline-any cline-yes">2x</span>
734
734
  <span class="cline-any cline-neutral">&nbsp;</span>
735
735
  <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-yes">68x</span>
736
+ <span class="cline-any cline-yes">82x</span>
737
737
  <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-yes">63x</span>
738
+ <span class="cline-any cline-yes">77x</span>
739
739
  <span class="cline-any cline-neutral">&nbsp;</span>
740
740
  <span class="cline-any cline-no">&nbsp;</span>
741
741
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -756,12 +756,12 @@
756
756
  <span class="cline-any cline-neutral">&nbsp;</span>
757
757
  <span class="cline-any cline-neutral">&nbsp;</span>
758
758
  <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-yes">192x</span>
759
+ <span class="cline-any cline-yes">225x</span>
760
760
  <span class="cline-any cline-neutral">&nbsp;</span>
761
- <span class="cline-any cline-yes">192x</span>
762
- <span class="cline-any cline-yes">31x</span>
763
- <span class="cline-any cline-yes">70x</span>
764
- <span class="cline-any cline-yes">70x</span>
761
+ <span class="cline-any cline-yes">225x</span>
762
+ <span class="cline-any cline-yes">37x</span>
763
+ <span class="cline-any cline-yes">84x</span>
764
+ <span class="cline-any cline-yes">84x</span>
765
765
  <span class="cline-any cline-yes">4x</span>
766
766
  <span class="cline-any cline-neutral">&nbsp;</span>
767
767
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -771,17 +771,17 @@
771
771
  <span class="cline-any cline-neutral">&nbsp;</span>
772
772
  <span class="cline-any cline-neutral">&nbsp;</span>
773
773
  <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-yes">192x</span>
775
- <span class="cline-any cline-yes">11x</span>
774
+ <span class="cline-any cline-yes">225x</span>
775
+ <span class="cline-any cline-yes">13x</span>
776
776
  <span class="cline-any cline-neutral">&nbsp;</span>
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
780
  <span class="cline-any cline-neutral">&nbsp;</span>
781
781
  <span class="cline-any cline-neutral">&nbsp;</span>
782
- <span class="cline-any cline-yes">192x</span>
783
- <span class="cline-any cline-yes">21x</span>
784
- <span class="cline-any cline-yes">29x</span>
782
+ <span class="cline-any cline-yes">225x</span>
783
+ <span class="cline-any cline-yes">23x</span>
784
+ <span class="cline-any cline-yes">33x</span>
785
785
  <span class="cline-any cline-neutral">&nbsp;</span>
786
786
  <span class="cline-any cline-neutral">&nbsp;</span>
787
787
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -789,7 +789,7 @@
789
789
  <span class="cline-any cline-neutral">&nbsp;</span>
790
790
  <span class="cline-any cline-neutral">&nbsp;</span>
791
791
  <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-yes">192x</span>
792
+ <span class="cline-any cline-yes">225x</span>
793
793
  <span class="cline-any cline-yes">2x</span>
794
794
  <span class="cline-any cline-neutral">&nbsp;</span>
795
795
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -797,10 +797,10 @@
797
797
  <span class="cline-any cline-neutral">&nbsp;</span>
798
798
  <span class="cline-any cline-neutral">&nbsp;</span>
799
799
  <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-yes">192x</span>
801
- <span class="cline-any cline-yes">11x</span>
802
- <span class="cline-any cline-yes">22x</span>
803
- <span class="cline-any cline-yes">22x</span>
800
+ <span class="cline-any cline-yes">225x</span>
801
+ <span class="cline-any cline-yes">12x</span>
802
+ <span class="cline-any cline-yes">24x</span>
803
+ <span class="cline-any cline-yes">24x</span>
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>
@@ -815,14 +815,14 @@
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">192x</span>
818
+ <span class="cline-any cline-yes">225x</span>
819
819
  <span class="cline-any cline-neutral">&nbsp;</span>
820
- <span class="cline-any cline-yes">192x</span>
821
- <span class="cline-any cline-yes">192x</span>
822
- <span class="cline-any cline-yes">192x</span>
823
- <span class="cline-any cline-yes">192x</span>
820
+ <span class="cline-any cline-yes">225x</span>
821
+ <span class="cline-any cline-yes">225x</span>
822
+ <span class="cline-any cline-yes">225x</span>
823
+ <span class="cline-any cline-yes">225x</span>
824
824
  <span class="cline-any cline-neutral">&nbsp;</span>
825
- <span class="cline-any cline-yes">192x</span>
825
+ <span class="cline-any cline-yes">225x</span>
826
826
  <span class="cline-any cline-yes">1x</span>
827
827
  <span class="cline-any cline-neutral">&nbsp;</span>
828
828
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -830,9 +830,9 @@
830
830
  <span class="cline-any cline-neutral">&nbsp;</span>
831
831
  <span class="cline-any cline-neutral">&nbsp;</span>
832
832
  <span class="cline-any cline-neutral">&nbsp;</span>
833
- <span class="cline-any cline-yes">192x</span>
834
- <span class="cline-any cline-yes">5x</span>
835
- <span class="cline-any cline-yes">5x</span>
833
+ <span class="cline-any cline-yes">225x</span>
834
+ <span class="cline-any cline-yes">6x</span>
835
+ <span class="cline-any cline-yes">6x</span>
836
836
  <span class="cline-any cline-neutral">&nbsp;</span>
837
837
  <span class="cline-any cline-yes">2x</span>
838
838
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -842,12 +842,12 @@
842
842
  <span class="cline-any cline-neutral">&nbsp;</span>
843
843
  <span class="cline-any cline-neutral">&nbsp;</span>
844
844
  <span class="cline-any cline-neutral">&nbsp;</span>
845
- <span class="cline-any cline-yes">192x</span>
846
- <span class="cline-any cline-yes">62x</span>
847
- <span class="cline-any cline-yes">62x</span>
848
- <span class="cline-any cline-yes">62x</span>
845
+ <span class="cline-any cline-yes">225x</span>
846
+ <span class="cline-any cline-yes">76x</span>
847
+ <span class="cline-any cline-yes">76x</span>
848
+ <span class="cline-any cline-yes">76x</span>
849
849
  <span class="cline-any cline-neutral">&nbsp;</span>
850
- <span class="cline-any cline-yes">62x</span>
850
+ <span class="cline-any cline-yes">76x</span>
851
851
  <span class="cline-any cline-no">&nbsp;</span>
852
852
  <span class="cline-any cline-no">&nbsp;</span>
853
853
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -855,10 +855,10 @@
855
855
  <span class="cline-any cline-neutral">&nbsp;</span>
856
856
  <span class="cline-any cline-neutral">&nbsp;</span>
857
857
  <span class="cline-any cline-neutral">&nbsp;</span>
858
- <span class="cline-any cline-yes">62x</span>
858
+ <span class="cline-any cline-yes">76x</span>
859
859
  <span class="cline-any cline-neutral">&nbsp;</span>
860
860
  <span class="cline-any cline-neutral">&nbsp;</span>
861
- <span class="cline-any cline-yes">192x</span>
861
+ <span class="cline-any cline-yes">225x</span>
862
862
  <span class="cline-any cline-no">&nbsp;</span>
863
863
  <span class="cline-any cline-no">&nbsp;</span>
864
864
  <span class="cline-any cline-no">&nbsp;</span>
@@ -883,25 +883,25 @@
883
883
  <span class="cline-any cline-neutral">&nbsp;</span>
884
884
  <span class="cline-any cline-neutral">&nbsp;</span>
885
885
  <span class="cline-any cline-neutral">&nbsp;</span>
886
- <span class="cline-any cline-yes">192x</span>
887
- <span class="cline-any cline-yes">28x</span>
888
- <span class="cline-any cline-yes">65x</span>
889
- <span class="cline-any cline-yes">62x</span>
890
- <span class="cline-any cline-yes">62x</span>
886
+ <span class="cline-any cline-yes">225x</span>
887
+ <span class="cline-any cline-yes">34x</span>
888
+ <span class="cline-any cline-yes">79x</span>
889
+ <span class="cline-any cline-yes">76x</span>
890
+ <span class="cline-any cline-yes">76x</span>
891
891
  <span class="cline-any cline-no">&nbsp;</span>
892
892
  <span class="cline-any cline-neutral">&nbsp;</span>
893
893
  <span class="cline-any cline-neutral">&nbsp;</span>
894
894
  <span class="cline-any cline-neutral">&nbsp;</span>
895
895
  <span class="cline-any cline-neutral">&nbsp;</span>
896
896
  <span class="cline-any cline-neutral">&nbsp;</span>
897
- <span class="cline-any cline-yes">62x</span>
897
+ <span class="cline-any cline-yes">76x</span>
898
898
  <span class="cline-any cline-no">&nbsp;</span>
899
899
  <span class="cline-any cline-neutral">&nbsp;</span>
900
900
  <span class="cline-any cline-neutral">&nbsp;</span>
901
901
  <span class="cline-any cline-neutral">&nbsp;</span>
902
902
  <span class="cline-any cline-neutral">&nbsp;</span>
903
903
  <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-yes">62x</span>
904
+ <span class="cline-any cline-yes">76x</span>
905
905
  <span class="cline-any cline-no">&nbsp;</span>
906
906
  <span class="cline-any cline-neutral">&nbsp;</span>
907
907
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -911,17 +911,17 @@
911
911
  <span class="cline-any cline-neutral">&nbsp;</span>
912
912
  <span class="cline-any cline-neutral">&nbsp;</span>
913
913
  <span class="cline-any cline-neutral">&nbsp;</span>
914
- <span class="cline-any cline-yes">192x</span>
915
- <span class="cline-any cline-yes">11x</span>
914
+ <span class="cline-any cline-yes">225x</span>
915
+ <span class="cline-any cline-yes">13x</span>
916
916
  <span class="cline-any cline-neutral">&nbsp;</span>
917
917
  <span class="cline-any cline-neutral">&nbsp;</span>
918
918
  <span class="cline-any cline-neutral">&nbsp;</span>
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">192x</span>
923
- <span class="cline-any cline-yes">21x</span>
924
- <span class="cline-any cline-yes">29x</span>
922
+ <span class="cline-any cline-yes">225x</span>
923
+ <span class="cline-any cline-yes">23x</span>
924
+ <span class="cline-any cline-yes">33x</span>
925
925
  <span class="cline-any cline-neutral">&nbsp;</span>
926
926
  <span class="cline-any cline-neutral">&nbsp;</span>
927
927
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -929,7 +929,7 @@
929
929
  <span class="cline-any cline-neutral">&nbsp;</span>
930
930
  <span class="cline-any cline-neutral">&nbsp;</span>
931
931
  <span class="cline-any cline-neutral">&nbsp;</span>
932
- <span class="cline-any cline-yes">192x</span>
932
+ <span class="cline-any cline-yes">225x</span>
933
933
  <span class="cline-any cline-yes">2x</span>
934
934
  <span class="cline-any cline-neutral">&nbsp;</span>
935
935
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -937,10 +937,10 @@
937
937
  <span class="cline-any cline-neutral">&nbsp;</span>
938
938
  <span class="cline-any cline-neutral">&nbsp;</span>
939
939
  <span class="cline-any cline-neutral">&nbsp;</span>
940
- <span class="cline-any cline-yes">192x</span>
941
- <span class="cline-any cline-yes">11x</span>
942
- <span class="cline-any cline-yes">22x</span>
943
- <span class="cline-any cline-yes">22x</span>
940
+ <span class="cline-any cline-yes">225x</span>
941
+ <span class="cline-any cline-yes">12x</span>
942
+ <span class="cline-any cline-yes">24x</span>
943
+ <span class="cline-any cline-yes">24x</span>
944
944
  <span class="cline-any cline-neutral">&nbsp;</span>
945
945
  <span class="cline-any cline-neutral">&nbsp;</span>
946
946
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -955,17 +955,17 @@
955
955
  <span class="cline-any cline-neutral">&nbsp;</span>
956
956
  <span class="cline-any cline-neutral">&nbsp;</span>
957
957
  <span class="cline-any cline-neutral">&nbsp;</span>
958
- <span class="cline-any cline-yes">192x</span>
958
+ <span class="cline-any cline-yes">225x</span>
959
959
  <span class="cline-any cline-neutral">&nbsp;</span>
960
- <span class="cline-any cline-yes">192x</span>
960
+ <span class="cline-any cline-yes">225x</span>
961
961
  <span class="cline-any cline-neutral">&nbsp;</span>
962
962
  <span class="cline-any cline-neutral">&nbsp;</span>
963
963
  <span class="cline-any cline-neutral">&nbsp;</span>
964
964
  <span class="cline-any cline-neutral">&nbsp;</span>
965
965
  <span class="cline-any cline-neutral">&nbsp;</span>
966
- <span class="cline-any cline-yes">5x</span>
967
- <span class="cline-any cline-yes">5x</span>
968
966
  <span class="cline-any cline-yes">6x</span>
967
+ <span class="cline-any cline-yes">6x</span>
968
+ <span class="cline-any cline-yes">7x</span>
969
969
  <span class="cline-any cline-yes">1x</span>
970
970
  <span class="cline-any cline-neutral">&nbsp;</span>
971
971
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -975,9 +975,9 @@
975
975
  <span class="cline-any cline-neutral">&nbsp;</span>
976
976
  <span class="cline-any cline-neutral">&nbsp;</span>
977
977
  <span class="cline-any cline-neutral">&nbsp;</span>
978
- <span class="cline-any cline-yes">192x</span>
979
- <span class="cline-any cline-yes">21x</span>
980
- <span class="cline-any cline-yes">29x</span>
978
+ <span class="cline-any cline-yes">225x</span>
979
+ <span class="cline-any cline-yes">23x</span>
980
+ <span class="cline-any cline-yes">33x</span>
981
981
  <span class="cline-any cline-neutral">&nbsp;</span>
982
982
  <span class="cline-any cline-neutral">&nbsp;</span>
983
983
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -985,7 +985,7 @@
985
985
  <span class="cline-any cline-neutral">&nbsp;</span>
986
986
  <span class="cline-any cline-neutral">&nbsp;</span>
987
987
  <span class="cline-any cline-neutral">&nbsp;</span>
988
- <span class="cline-any cline-yes">192x</span>
988
+ <span class="cline-any cline-yes">225x</span>
989
989
  <span class="cline-any cline-yes">2x</span>
990
990
  <span class="cline-any cline-neutral">&nbsp;</span>
991
991
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -993,18 +993,18 @@
993
993
  <span class="cline-any cline-neutral">&nbsp;</span>
994
994
  <span class="cline-any cline-neutral">&nbsp;</span>
995
995
  <span class="cline-any cline-neutral">&nbsp;</span>
996
- <span class="cline-any cline-yes">192x</span>
997
- <span class="cline-any cline-yes">11x</span>
996
+ <span class="cline-any cline-yes">225x</span>
997
+ <span class="cline-any cline-yes">13x</span>
998
998
  <span class="cline-any cline-neutral">&nbsp;</span>
999
999
  <span class="cline-any cline-neutral">&nbsp;</span>
1000
1000
  <span class="cline-any cline-neutral">&nbsp;</span>
1001
1001
  <span class="cline-any cline-neutral">&nbsp;</span>
1002
1002
  <span class="cline-any cline-neutral">&nbsp;</span>
1003
1003
  <span class="cline-any cline-neutral">&nbsp;</span>
1004
- <span class="cline-any cline-yes">192x</span>
1005
- <span class="cline-any cline-yes">11x</span>
1006
- <span class="cline-any cline-yes">22x</span>
1007
- <span class="cline-any cline-yes">22x</span>
1004
+ <span class="cline-any cline-yes">225x</span>
1005
+ <span class="cline-any cline-yes">12x</span>
1006
+ <span class="cline-any cline-yes">24x</span>
1007
+ <span class="cline-any cline-yes">24x</span>
1008
1008
  <span class="cline-any cline-neutral">&nbsp;</span>
1009
1009
  <span class="cline-any cline-neutral">&nbsp;</span>
1010
1010
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1019,30 +1019,30 @@
1019
1019
  <span class="cline-any cline-neutral">&nbsp;</span>
1020
1020
  <span class="cline-any cline-neutral">&nbsp;</span>
1021
1021
  <span class="cline-any cline-neutral">&nbsp;</span>
1022
- <span class="cline-any cline-yes">192x</span>
1022
+ <span class="cline-any cline-yes">225x</span>
1023
1023
  <span class="cline-any cline-neutral">&nbsp;</span>
1024
- <span class="cline-any cline-yes">192x</span>
1025
- <span class="cline-any cline-yes">35x</span>
1024
+ <span class="cline-any cline-yes">225x</span>
1025
+ <span class="cline-any cline-yes">39x</span>
1026
1026
  <span class="cline-any cline-no">&nbsp;</span>
1027
1027
  <span class="cline-any cline-neutral">&nbsp;</span>
1028
1028
  <span class="cline-any cline-neutral">&nbsp;</span>
1029
- <span class="cline-any cline-yes">35x</span>
1029
+ <span class="cline-any cline-yes">39x</span>
1030
1030
  <span class="cline-any cline-yes">4x</span>
1031
1031
  <span class="cline-any cline-neutral">&nbsp;</span>
1032
1032
  <span class="cline-any cline-neutral">&nbsp;</span>
1033
- <span class="cline-any cline-yes">31x</span>
1033
+ <span class="cline-any cline-yes">35x</span>
1034
1034
  <span class="cline-any cline-yes">2x</span>
1035
1035
  <span class="cline-any cline-yes">4x</span>
1036
1036
  <span class="cline-any cline-neutral">&nbsp;</span>
1037
1037
  <span class="cline-any cline-neutral">&nbsp;</span>
1038
1038
  <span class="cline-any cline-neutral">&nbsp;</span>
1039
- <span class="cline-any cline-yes">29x</span>
1039
+ <span class="cline-any cline-yes">33x</span>
1040
1040
  <span class="cline-any cline-neutral">&nbsp;</span>
1041
1041
  <span class="cline-any cline-neutral">&nbsp;</span>
1042
- <span class="cline-any cline-yes">192x</span>
1043
- <span class="cline-any cline-yes">21x</span>
1044
- <span class="cline-any cline-yes">29x</span>
1045
- <span class="cline-any cline-yes">29x</span>
1042
+ <span class="cline-any cline-yes">225x</span>
1043
+ <span class="cline-any cline-yes">23x</span>
1044
+ <span class="cline-any cline-yes">33x</span>
1045
+ <span class="cline-any cline-yes">33x</span>
1046
1046
  <span class="cline-any cline-yes">2x</span>
1047
1047
  <span class="cline-any cline-neutral">&nbsp;</span>
1048
1048
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1052,7 +1052,7 @@
1052
1052
  <span class="cline-any cline-neutral">&nbsp;</span>
1053
1053
  <span class="cline-any cline-neutral">&nbsp;</span>
1054
1054
  <span class="cline-any cline-neutral">&nbsp;</span>
1055
- <span class="cline-any cline-yes">192x</span>
1055
+ <span class="cline-any cline-yes">225x</span>
1056
1056
  <span class="cline-any cline-neutral">&nbsp;</span>
1057
1057
  <span class="cline-any cline-neutral">&nbsp;</span>
1058
1058
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1065,17 +1065,17 @@
1065
1065
  <span class="cline-any cline-neutral">&nbsp;</span>
1066
1066
  <span class="cline-any cline-neutral">&nbsp;</span>
1067
1067
  <span class="cline-any cline-neutral">&nbsp;</span>
1068
- <span class="cline-any cline-yes">192x</span>
1069
- <span class="cline-any cline-yes">11x</span>
1068
+ <span class="cline-any cline-yes">225x</span>
1069
+ <span class="cline-any cline-yes">13x</span>
1070
1070
  <span class="cline-any cline-neutral">&nbsp;</span>
1071
1071
  <span class="cline-any cline-neutral">&nbsp;</span>
1072
1072
  <span class="cline-any cline-neutral">&nbsp;</span>
1073
1073
  <span class="cline-any cline-neutral">&nbsp;</span>
1074
1074
  <span class="cline-any cline-neutral">&nbsp;</span>
1075
1075
  <span class="cline-any cline-neutral">&nbsp;</span>
1076
- <span class="cline-any cline-yes">192x</span>
1077
- <span class="cline-any cline-yes">21x</span>
1078
- <span class="cline-any cline-yes">29x</span>
1076
+ <span class="cline-any cline-yes">225x</span>
1077
+ <span class="cline-any cline-yes">23x</span>
1078
+ <span class="cline-any cline-yes">33x</span>
1079
1079
  <span class="cline-any cline-neutral">&nbsp;</span>
1080
1080
  <span class="cline-any cline-neutral">&nbsp;</span>
1081
1081
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1083,7 +1083,7 @@
1083
1083
  <span class="cline-any cline-neutral">&nbsp;</span>
1084
1084
  <span class="cline-any cline-neutral">&nbsp;</span>
1085
1085
  <span class="cline-any cline-neutral">&nbsp;</span>
1086
- <span class="cline-any cline-yes">192x</span>
1086
+ <span class="cline-any cline-yes">225x</span>
1087
1087
  <span class="cline-any cline-yes">2x</span>
1088
1088
  <span class="cline-any cline-neutral">&nbsp;</span>
1089
1089
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1091,10 +1091,10 @@
1091
1091
  <span class="cline-any cline-neutral">&nbsp;</span>
1092
1092
  <span class="cline-any cline-neutral">&nbsp;</span>
1093
1093
  <span class="cline-any cline-neutral">&nbsp;</span>
1094
- <span class="cline-any cline-yes">192x</span>
1095
- <span class="cline-any cline-yes">11x</span>
1096
- <span class="cline-any cline-yes">22x</span>
1097
- <span class="cline-any cline-yes">22x</span>
1094
+ <span class="cline-any cline-yes">225x</span>
1095
+ <span class="cline-any cline-yes">12x</span>
1096
+ <span class="cline-any cline-yes">24x</span>
1097
+ <span class="cline-any cline-yes">24x</span>
1098
1098
  <span class="cline-any cline-neutral">&nbsp;</span>
1099
1099
  <span class="cline-any cline-neutral">&nbsp;</span>
1100
1100
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1109,12 +1109,12 @@
1109
1109
  <span class="cline-any cline-neutral">&nbsp;</span>
1110
1110
  <span class="cline-any cline-neutral">&nbsp;</span>
1111
1111
  <span class="cline-any cline-neutral">&nbsp;</span>
1112
- <span class="cline-any cline-yes">192x</span>
1112
+ <span class="cline-any cline-yes">225x</span>
1113
1113
  <span class="cline-any cline-neutral">&nbsp;</span>
1114
- <span class="cline-any cline-yes">192x</span>
1115
- <span class="cline-any cline-yes">17x</span>
1116
- <span class="cline-any cline-yes">11x</span>
1117
- <span class="cline-any cline-yes">11x</span>
1114
+ <span class="cline-any cline-yes">225x</span>
1115
+ <span class="cline-any cline-yes">20x</span>
1116
+ <span class="cline-any cline-yes">13x</span>
1117
+ <span class="cline-any cline-yes">13x</span>
1118
1118
  <span class="cline-any cline-yes">1x</span>
1119
1119
  <span class="cline-any cline-neutral">&nbsp;</span>
1120
1120
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1123,7 +1123,7 @@
1123
1123
  <span class="cline-any cline-neutral">&nbsp;</span>
1124
1124
  <span class="cline-any cline-neutral">&nbsp;</span>
1125
1125
  <span class="cline-any cline-neutral">&nbsp;</span>
1126
- <span class="cline-any cline-yes">17x</span>
1126
+ <span class="cline-any cline-yes">20x</span>
1127
1127
  <span class="cline-any cline-yes">1x</span>
1128
1128
  <span class="cline-any cline-neutral">&nbsp;</span>
1129
1129
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1131,7 +1131,7 @@
1131
1131
  <span class="cline-any cline-neutral">&nbsp;</span>
1132
1132
  <span class="cline-any cline-neutral">&nbsp;</span>
1133
1133
  <span class="cline-any cline-neutral">&nbsp;</span>
1134
- <span class="cline-any cline-yes">17x</span>
1134
+ <span class="cline-any cline-yes">20x</span>
1135
1135
  <span class="cline-any cline-yes">3x</span>
1136
1136
  <span class="cline-any cline-yes">5x</span>
1137
1137
  <span class="cline-any cline-yes">1x</span>
@@ -1144,17 +1144,17 @@
1144
1144
  <span class="cline-any cline-neutral">&nbsp;</span>
1145
1145
  <span class="cline-any cline-neutral">&nbsp;</span>
1146
1146
  <span class="cline-any cline-neutral">&nbsp;</span>
1147
- <span class="cline-any cline-yes">192x</span>
1148
- <span class="cline-any cline-yes">11x</span>
1147
+ <span class="cline-any cline-yes">225x</span>
1148
+ <span class="cline-any cline-yes">13x</span>
1149
1149
  <span class="cline-any cline-neutral">&nbsp;</span>
1150
1150
  <span class="cline-any cline-neutral">&nbsp;</span>
1151
1151
  <span class="cline-any cline-neutral">&nbsp;</span>
1152
1152
  <span class="cline-any cline-neutral">&nbsp;</span>
1153
1153
  <span class="cline-any cline-neutral">&nbsp;</span>
1154
1154
  <span class="cline-any cline-neutral">&nbsp;</span>
1155
- <span class="cline-any cline-yes">192x</span>
1156
- <span class="cline-any cline-yes">21x</span>
1157
- <span class="cline-any cline-yes">29x</span>
1155
+ <span class="cline-any cline-yes">225x</span>
1156
+ <span class="cline-any cline-yes">23x</span>
1157
+ <span class="cline-any cline-yes">33x</span>
1158
1158
  <span class="cline-any cline-neutral">&nbsp;</span>
1159
1159
  <span class="cline-any cline-neutral">&nbsp;</span>
1160
1160
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1162,7 +1162,7 @@
1162
1162
  <span class="cline-any cline-neutral">&nbsp;</span>
1163
1163
  <span class="cline-any cline-neutral">&nbsp;</span>
1164
1164
  <span class="cline-any cline-neutral">&nbsp;</span>
1165
- <span class="cline-any cline-yes">192x</span>
1165
+ <span class="cline-any cline-yes">225x</span>
1166
1166
  <span class="cline-any cline-yes">2x</span>
1167
1167
  <span class="cline-any cline-neutral">&nbsp;</span>
1168
1168
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1170,10 +1170,10 @@
1170
1170
  <span class="cline-any cline-neutral">&nbsp;</span>
1171
1171
  <span class="cline-any cline-neutral">&nbsp;</span>
1172
1172
  <span class="cline-any cline-neutral">&nbsp;</span>
1173
- <span class="cline-any cline-yes">192x</span>
1174
- <span class="cline-any cline-yes">11x</span>
1175
- <span class="cline-any cline-yes">22x</span>
1176
- <span class="cline-any cline-yes">22x</span>
1173
+ <span class="cline-any cline-yes">225x</span>
1174
+ <span class="cline-any cline-yes">12x</span>
1175
+ <span class="cline-any cline-yes">24x</span>
1176
+ <span class="cline-any cline-yes">24x</span>
1177
1177
  <span class="cline-any cline-neutral">&nbsp;</span>
1178
1178
  <span class="cline-any cline-neutral">&nbsp;</span>
1179
1179
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1184,8 +1184,8 @@
1184
1184
  <span class="cline-any cline-neutral">&nbsp;</span>
1185
1185
  <span class="cline-any cline-neutral">&nbsp;</span>
1186
1186
  <span class="cline-any cline-yes">2x</span>
1187
- <span class="cline-any cline-yes">29x</span>
1188
- <span class="cline-any cline-yes">53x</span>
1187
+ <span class="cline-any cline-yes">30x</span>
1188
+ <span class="cline-any cline-yes">27x</span>
1189
1189
  <span class="cline-any cline-neutral">&nbsp;</span>
1190
1190
  <span class="cline-any cline-neutral">&nbsp;</span>
1191
1191
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1209,7 +1209,7 @@
1209
1209
  <span class="cline-any cline-neutral">&nbsp;</span>
1210
1210
  <span class="cline-any cline-neutral">&nbsp;</span>
1211
1211
  <span class="cline-any cline-neutral">&nbsp;</span>
1212
- <span class="cline-any cline-yes">53x</span>
1212
+ <span class="cline-any cline-yes">61x</span>
1213
1213
  <span class="cline-any cline-neutral">&nbsp;</span>
1214
1214
  <span class="cline-any cline-neutral">&nbsp;</span>
1215
1215
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1217,7 +1217,7 @@
1217
1217
  <span class="cline-any cline-neutral">&nbsp;</span>
1218
1218
  <span class="cline-any cline-neutral">&nbsp;</span>
1219
1219
  <span class="cline-any cline-neutral">&nbsp;</span>
1220
- <span class="cline-any cline-yes">53x</span>
1220
+ <span class="cline-any cline-yes">61x</span>
1221
1221
  <span class="cline-any cline-no">&nbsp;</span>
1222
1222
  <span class="cline-any cline-neutral">&nbsp;</span>
1223
1223
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1226,20 +1226,20 @@
1226
1226
  <span class="cline-any cline-neutral">&nbsp;</span>
1227
1227
  <span class="cline-any cline-neutral">&nbsp;</span>
1228
1228
  <span class="cline-any cline-neutral">&nbsp;</span>
1229
- <span class="cline-any cline-yes">53x</span>
1229
+ <span class="cline-any cline-yes">61x</span>
1230
1230
  <span class="cline-any cline-neutral">&nbsp;</span>
1231
- <span class="cline-any cline-yes">53x</span>
1231
+ <span class="cline-any cline-yes">61x</span>
1232
1232
  <span class="cline-any cline-neutral">&nbsp;</span>
1233
- <span class="cline-any cline-yes">53x</span>
1233
+ <span class="cline-any cline-yes">61x</span>
1234
1234
  <span class="cline-any cline-neutral">&nbsp;</span>
1235
- <span class="cline-any cline-yes">53x</span>
1235
+ <span class="cline-any cline-yes">61x</span>
1236
1236
  <span class="cline-any cline-neutral">&nbsp;</span>
1237
- <span class="cline-any cline-yes">53x</span>
1238
- <span class="cline-any cline-yes">53x</span>
1239
- <span class="cline-any cline-yes">53x</span>
1237
+ <span class="cline-any cline-yes">61x</span>
1238
+ <span class="cline-any cline-yes">61x</span>
1239
+ <span class="cline-any cline-yes">61x</span>
1240
1240
  <span class="cline-any cline-neutral">&nbsp;</span>
1241
1241
  <span class="cline-any cline-neutral">&nbsp;</span>
1242
- <span class="cline-any cline-yes">29x</span>
1242
+ <span class="cline-any cline-yes">30x</span>
1243
1243
  <span class="cline-any cline-neutral">&nbsp;</span>
1244
1244
  <span class="cline-any cline-neutral">&nbsp;</span>
1245
1245
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1262,9 +1262,9 @@
1262
1262
  <span class="cline-any cline-neutral">&nbsp;</span>
1263
1263
  <span class="cline-any cline-neutral">&nbsp;</span>
1264
1264
  <span class="cline-any cline-neutral">&nbsp;</span>
1265
- <span class="cline-any cline-yes">75x</span>
1265
+ <span class="cline-any cline-yes">92x</span>
1266
1266
  <span class="cline-any cline-neutral">&nbsp;</span>
1267
- <span class="cline-any cline-yes">75x</span>
1267
+ <span class="cline-any cline-yes">92x</span>
1268
1268
  <span class="cline-any cline-yes">1x</span>
1269
1269
  <span class="cline-any cline-neutral">&nbsp;</span>
1270
1270
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1272,7 +1272,7 @@
1272
1272
  <span class="cline-any cline-neutral">&nbsp;</span>
1273
1273
  <span class="cline-any cline-neutral">&nbsp;</span>
1274
1274
  <span class="cline-any cline-neutral">&nbsp;</span>
1275
- <span class="cline-any cline-yes">75x</span>
1275
+ <span class="cline-any cline-yes">92x</span>
1276
1276
  <span class="cline-any cline-yes">1x</span>
1277
1277
  <span class="cline-any cline-neutral">&nbsp;</span>
1278
1278
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1282,7 +1282,7 @@
1282
1282
  <span class="cline-any cline-neutral">&nbsp;</span>
1283
1283
  <span class="cline-any cline-neutral">&nbsp;</span>
1284
1284
  <span class="cline-any cline-neutral">&nbsp;</span>
1285
- <span class="cline-any cline-yes">75x</span>
1285
+ <span class="cline-any cline-yes">92x</span>
1286
1286
  <span class="cline-any cline-neutral">&nbsp;</span>
1287
1287
  <span class="cline-any cline-neutral">&nbsp;</span>
1288
1288
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1290,7 +1290,7 @@
1290
1290
  <span class="cline-any cline-neutral">&nbsp;</span>
1291
1291
  <span class="cline-any cline-neutral">&nbsp;</span>
1292
1292
  <span class="cline-any cline-neutral">&nbsp;</span>
1293
- <span class="cline-any cline-yes">75x</span>
1293
+ <span class="cline-any cline-yes">92x</span>
1294
1294
  <span class="cline-any cline-yes">2x</span>
1295
1295
  <span class="cline-any cline-neutral">&nbsp;</span>
1296
1296
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1299,19 +1299,19 @@
1299
1299
  <span class="cline-any cline-neutral">&nbsp;</span>
1300
1300
  <span class="cline-any cline-neutral">&nbsp;</span>
1301
1301
  <span class="cline-any cline-neutral">&nbsp;</span>
1302
- <span class="cline-any cline-yes">75x</span>
1302
+ <span class="cline-any cline-yes">92x</span>
1303
1303
  <span class="cline-any cline-neutral">&nbsp;</span>
1304
- <span class="cline-any cline-yes">75x</span>
1304
+ <span class="cline-any cline-yes">92x</span>
1305
1305
  <span class="cline-any cline-neutral">&nbsp;</span>
1306
- <span class="cline-any cline-yes">75x</span>
1306
+ <span class="cline-any cline-yes">92x</span>
1307
1307
  <span class="cline-any cline-neutral">&nbsp;</span>
1308
- <span class="cline-any cline-yes">75x</span>
1308
+ <span class="cline-any cline-yes">92x</span>
1309
1309
  <span class="cline-any cline-neutral">&nbsp;</span>
1310
- <span class="cline-any cline-yes">75x</span>
1311
- <span class="cline-any cline-yes">75x</span>
1312
- <span class="cline-any cline-yes">75x</span>
1310
+ <span class="cline-any cline-yes">92x</span>
1311
+ <span class="cline-any cline-yes">92x</span>
1312
+ <span class="cline-any cline-yes">92x</span>
1313
1313
  <span class="cline-any cline-neutral">&nbsp;</span>
1314
- <span class="cline-any cline-yes">29x</span>
1314
+ <span class="cline-any cline-yes">30x</span>
1315
1315
  <span class="cline-any cline-neutral">&nbsp;</span>
1316
1316
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { Attribute, AttributeProperty } from "@featurevisor/types";
1317
1317
  import { z } from "zod";
@@ -1945,7 +1945,7 @@ export function getAttributeZodSchema() {
1945
1945
  <div class='footer quiet pad2 space-top1 center small'>
1946
1946
  Code coverage generated by
1947
1947
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1948
- at 2026-04-16T19:15:59.143Z
1948
+ at 2026-04-26T16:47:51.164Z
1949
1949
  </div>
1950
1950
  <script src="../prettify.js"></script>
1951
1951
  <script>