@featurevisor/core 2.14.0 → 2.15.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.
- package/CHANGELOG.md +11 -0
- package/coverage/clover.xml +774 -652
- package/coverage/coverage-final.json +19 -18
- package/coverage/lcov-report/builder/allocator.ts.html +1 -1
- package/coverage/lcov-report/builder/buildScopedConditions.ts.html +1 -1
- package/coverage/lcov-report/builder/buildScopedDatafile.ts.html +1 -1
- package/coverage/lcov-report/builder/buildScopedSegments.ts.html +1 -1
- package/coverage/lcov-report/builder/index.html +1 -1
- package/coverage/lcov-report/builder/mutateVariables.ts.html +1 -1
- package/coverage/lcov-report/builder/mutator.ts.html +1 -1
- package/coverage/lcov-report/builder/revision.ts.html +1 -1
- package/coverage/lcov-report/builder/traffic.ts.html +1 -1
- package/coverage/lcov-report/config/index.html +30 -15
- package/coverage/lcov-report/config/index.ts.html +88 -0
- package/coverage/lcov-report/config/projectConfig.ts.html +79 -46
- package/coverage/lcov-report/datasource/adapter.ts.html +74 -11
- package/coverage/lcov-report/datasource/datasource.ts.html +76 -25
- package/coverage/lcov-report/datasource/filesystemAdapter.ts.html +690 -66
- package/coverage/lcov-report/datasource/index.html +35 -35
- package/coverage/lcov-report/datasource/index.ts.html +1 -1
- package/coverage/lcov-report/index.html +43 -43
- package/coverage/lcov-report/linter/attributeSchema.ts.html +4 -4
- package/coverage/lcov-report/linter/checkCircularDependency.ts.html +1 -1
- package/coverage/lcov-report/linter/checkPercentageExceedingSlot.ts.html +1 -1
- package/coverage/lcov-report/linter/conditionSchema.ts.html +7 -7
- package/coverage/lcov-report/linter/featureSchema.ts.html +152 -164
- package/coverage/lcov-report/linter/groupSchema.ts.html +3 -3
- package/coverage/lcov-report/linter/index.html +34 -34
- package/coverage/lcov-report/linter/lintProject.ts.html +428 -83
- package/coverage/lcov-report/linter/mutationNotation.ts.html +3 -3
- package/coverage/lcov-report/linter/printError.ts.html +9 -9
- package/coverage/lcov-report/linter/schema.ts.html +4 -4
- package/coverage/lcov-report/linter/segmentSchema.ts.html +3 -3
- package/coverage/lcov-report/linter/testSchema.ts.html +6 -6
- package/coverage/lcov-report/list/index.html +1 -1
- package/coverage/lcov-report/list/matrix.ts.html +1 -1
- package/coverage/lcov-report/parsers/index.html +1 -1
- package/coverage/lcov-report/parsers/index.ts.html +4 -4
- package/coverage/lcov-report/parsers/json.ts.html +2 -2
- package/coverage/lcov-report/parsers/yml.ts.html +6 -6
- package/coverage/lcov-report/tester/cliFormat.ts.html +1 -1
- package/coverage/lcov-report/tester/helpers.ts.html +1 -1
- package/coverage/lcov-report/tester/index.html +1 -1
- package/coverage/lcov-report/utils/git.ts.html +118 -16
- package/coverage/lcov-report/utils/index.html +14 -14
- package/coverage/lcov.info +1374 -1107
- package/lib/config/projectConfig.d.ts +3 -0
- package/lib/config/projectConfig.js +7 -1
- package/lib/config/projectConfig.js.map +1 -1
- package/lib/config/projectConfig.spec.d.ts +1 -0
- package/lib/config/projectConfig.spec.js +24 -0
- package/lib/config/projectConfig.spec.js.map +1 -0
- package/lib/datasource/adapter.d.ts +7 -0
- package/lib/datasource/adapter.js +7 -0
- package/lib/datasource/adapter.js.map +1 -1
- package/lib/datasource/datasource.d.ts +3 -1
- package/lib/datasource/datasource.js +6 -0
- package/lib/datasource/datasource.js.map +1 -1
- package/lib/datasource/filesystemAdapter.d.ts +8 -0
- package/lib/datasource/filesystemAdapter.js +134 -7
- package/lib/datasource/filesystemAdapter.js.map +1 -1
- package/lib/datasource/filesystemAdapter.spec.d.ts +1 -0
- package/lib/datasource/filesystemAdapter.spec.js +88 -0
- package/lib/datasource/filesystemAdapter.spec.js.map +1 -0
- package/lib/linter/conditionSchema.spec.js +2 -0
- package/lib/linter/conditionSchema.spec.js.map +1 -1
- package/lib/linter/featureSchema.js +46 -49
- package/lib/linter/featureSchema.js.map +1 -1
- package/lib/linter/featureSchema.spec.js +17 -0
- package/lib/linter/featureSchema.spec.js.map +1 -1
- package/lib/linter/lintProject.d.ts +2 -0
- package/lib/linter/lintProject.js +85 -8
- package/lib/linter/lintProject.js.map +1 -1
- package/lib/linter/lintProject.spec.js +37 -0
- package/lib/linter/lintProject.spec.js.map +1 -1
- package/lib/linter/segmentSchema.spec.js +2 -0
- package/lib/linter/segmentSchema.spec.js.map +1 -1
- package/lib/utils/git.js +32 -7
- package/lib/utils/git.js.map +1 -1
- package/package.json +2 -2
- package/src/config/projectConfig.spec.ts +31 -0
- package/src/config/projectConfig.ts +11 -0
- package/src/datasource/adapter.ts +21 -0
- package/src/datasource/datasource.ts +18 -1
- package/src/datasource/filesystemAdapter.spec.ts +153 -0
- package/src/datasource/filesystemAdapter.ts +216 -8
- package/src/linter/conditionSchema.spec.ts +2 -0
- package/src/linter/featureSchema.spec.ts +21 -0
- package/src/linter/featureSchema.ts +84 -88
- package/src/linter/lintProject.spec.ts +74 -0
- package/src/linter/lintProject.ts +123 -8
- package/src/linter/segmentSchema.spec.ts +2 -0
- package/src/utils/git.ts +41 -7
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">70.
|
|
26
|
+
<span class="strong">70.96% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>369/
|
|
28
|
+
<span class='fraction'>369/520</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">61.
|
|
33
|
+
<span class="strong">61.49% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>222/361</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">76.38% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>55/72</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">75.1% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>356/
|
|
49
|
+
<span class='fraction'>356/474</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -1829,11 +1829,7 @@
|
|
|
1829
1829
|
<a name='L1764'></a><a href='#L1764'>1764</a>
|
|
1830
1830
|
<a name='L1765'></a><a href='#L1765'>1765</a>
|
|
1831
1831
|
<a name='L1766'></a><a href='#L1766'>1766</a>
|
|
1832
|
-
<a name='L1767'></a><a href='#L1767'>1767</a>
|
|
1833
|
-
<a name='L1768'></a><a href='#L1768'>1768</a>
|
|
1834
|
-
<a name='L1769'></a><a href='#L1769'>1769</a>
|
|
1835
|
-
<a name='L1770'></a><a href='#L1770'>1770</a>
|
|
1836
|
-
<a name='L1771'></a><a href='#L1771'>1771</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
1832
|
+
<a name='L1767'></a><a href='#L1767'>1767</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
1837
1833
|
<span class="cline-any cline-yes">2x</span>
|
|
1838
1834
|
<span class="cline-any cline-neutral"> </span>
|
|
1839
1835
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2732,7 +2728,7 @@
|
|
|
2732
2728
|
<span class="cline-any cline-neutral"> </span>
|
|
2733
2729
|
<span class="cline-any cline-neutral"> </span>
|
|
2734
2730
|
<span class="cline-any cline-neutral"> </span>
|
|
2735
|
-
<span class="cline-any cline-yes">
|
|
2731
|
+
<span class="cline-any cline-yes">669x</span>
|
|
2736
2732
|
<span class="cline-any cline-yes">71x</span>
|
|
2737
2733
|
<span class="cline-any cline-neutral"> </span>
|
|
2738
2734
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2759,14 +2755,14 @@
|
|
|
2759
2755
|
<span class="cline-any cline-neutral"> </span>
|
|
2760
2756
|
<span class="cline-any cline-yes">67x</span>
|
|
2761
2757
|
<span class="cline-any cline-neutral"> </span>
|
|
2762
|
-
<span class="cline-any cline-yes">
|
|
2763
|
-
<span class="cline-any cline-yes">
|
|
2764
|
-
<span class="cline-any cline-yes">
|
|
2758
|
+
<span class="cline-any cline-yes">598x</span>
|
|
2759
|
+
<span class="cline-any cline-yes">598x</span>
|
|
2760
|
+
<span class="cline-any cline-yes">6x</span>
|
|
2765
2761
|
<span class="cline-any cline-neutral"> </span>
|
|
2766
2762
|
<span class="cline-any cline-neutral"> </span>
|
|
2767
2763
|
<span class="cline-any cline-neutral"> </span>
|
|
2768
2764
|
<span class="cline-any cline-neutral"> </span>
|
|
2769
|
-
<span class="cline-any cline-yes">
|
|
2765
|
+
<span class="cline-any cline-yes">6x</span>
|
|
2770
2766
|
<span class="cline-any cline-neutral"> </span>
|
|
2771
2767
|
<span class="cline-any cline-yes">592x</span>
|
|
2772
2768
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2789,9 +2785,9 @@
|
|
|
2789
2785
|
<span class="cline-any cline-neutral"> </span>
|
|
2790
2786
|
<span class="cline-any cline-neutral"> </span>
|
|
2791
2787
|
<span class="cline-any cline-neutral"> </span>
|
|
2792
|
-
<span class="cline-any cline-yes">
|
|
2788
|
+
<span class="cline-any cline-yes">18x</span>
|
|
2793
2789
|
<span class="cline-any cline-neutral"> </span>
|
|
2794
|
-
<span class="cline-any cline-yes">
|
|
2790
|
+
<span class="cline-any cline-yes">18x</span>
|
|
2795
2791
|
<span class="cline-any cline-yes">10x</span>
|
|
2796
2792
|
<span class="cline-any cline-no"> </span>
|
|
2797
2793
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2802,7 +2798,7 @@
|
|
|
2802
2798
|
<span class="cline-any cline-neutral"> </span>
|
|
2803
2799
|
<span class="cline-any cline-neutral"> </span>
|
|
2804
2800
|
<span class="cline-any cline-neutral"> </span>
|
|
2805
|
-
<span class="cline-any cline-yes">
|
|
2801
|
+
<span class="cline-any cline-yes">18x</span>
|
|
2806
2802
|
<span class="cline-any cline-yes">6x</span>
|
|
2807
2803
|
<span class="cline-any cline-yes">6x</span>
|
|
2808
2804
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2828,11 +2824,11 @@
|
|
|
2828
2824
|
<span class="cline-any cline-neutral"> </span>
|
|
2829
2825
|
<span class="cline-any cline-neutral"> </span>
|
|
2830
2826
|
<span class="cline-any cline-neutral"> </span>
|
|
2831
|
-
<span class="cline-any cline-yes">
|
|
2827
|
+
<span class="cline-any cline-yes">230x</span>
|
|
2832
2828
|
<span class="cline-any cline-neutral"> </span>
|
|
2833
|
-
<span class="cline-any cline-yes">
|
|
2834
|
-
<span class="cline-any cline-yes">
|
|
2835
|
-
<span class="cline-any cline-yes">
|
|
2829
|
+
<span class="cline-any cline-yes">285x</span>
|
|
2830
|
+
<span class="cline-any cline-yes">47x</span>
|
|
2831
|
+
<span class="cline-any cline-yes">428x</span>
|
|
2836
2832
|
<span class="cline-any cline-neutral"> </span>
|
|
2837
2833
|
<span class="cline-any cline-neutral"> </span>
|
|
2838
2834
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2845,7 +2841,7 @@
|
|
|
2845
2841
|
<span class="cline-any cline-neutral"> </span>
|
|
2846
2842
|
<span class="cline-any cline-neutral"> </span>
|
|
2847
2843
|
<span class="cline-any cline-neutral"> </span>
|
|
2848
|
-
<span class="cline-any cline-yes">
|
|
2844
|
+
<span class="cline-any cline-yes">285x</span>
|
|
2849
2845
|
<span class="cline-any cline-yes">2x</span>
|
|
2850
2846
|
<span class="cline-any cline-no"> </span>
|
|
2851
2847
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2919,20 +2915,20 @@
|
|
|
2919
2915
|
<span class="cline-any cline-neutral"> </span>
|
|
2920
2916
|
<span class="cline-any cline-neutral"> </span>
|
|
2921
2917
|
<span class="cline-any cline-neutral"> </span>
|
|
2922
|
-
<span class="cline-any cline-yes">
|
|
2923
|
-
<span class="cline-any cline-yes">
|
|
2924
|
-
<span class="cline-any cline-yes">
|
|
2918
|
+
<span class="cline-any cline-yes">73x</span>
|
|
2919
|
+
<span class="cline-any cline-yes">73x</span>
|
|
2920
|
+
<span class="cline-any cline-yes">73x</span>
|
|
2925
2921
|
<span class="cline-any cline-neutral"> </span>
|
|
2926
|
-
<span class="cline-any cline-yes">
|
|
2922
|
+
<span class="cline-any cline-yes">73x</span>
|
|
2927
2923
|
<span class="cline-any cline-neutral"> </span>
|
|
2928
|
-
<span class="cline-any cline-yes">
|
|
2929
|
-
<span class="cline-any cline-yes">
|
|
2924
|
+
<span class="cline-any cline-yes">73x</span>
|
|
2925
|
+
<span class="cline-any cline-yes">367x</span>
|
|
2930
2926
|
<span class="cline-any cline-no"> </span>
|
|
2931
2927
|
<span class="cline-any cline-neutral"> </span>
|
|
2932
2928
|
<span class="cline-any cline-neutral"> </span>
|
|
2933
2929
|
<span class="cline-any cline-neutral"> </span>
|
|
2934
2930
|
<span class="cline-any cline-neutral"> </span>
|
|
2935
|
-
<span class="cline-any cline-yes">
|
|
2931
|
+
<span class="cline-any cline-yes">73x</span>
|
|
2936
2932
|
<span class="cline-any cline-neutral"> </span>
|
|
2937
2933
|
<span class="cline-any cline-neutral"> </span>
|
|
2938
2934
|
<span class="cline-any cline-yes">20x</span>
|
|
@@ -2950,15 +2946,15 @@
|
|
|
2950
2946
|
<span class="cline-any cline-neutral"> </span>
|
|
2951
2947
|
<span class="cline-any cline-neutral"> </span>
|
|
2952
2948
|
<span class="cline-any cline-neutral"> </span>
|
|
2953
|
-
<span class="cline-any cline-yes">
|
|
2949
|
+
<span class="cline-any cline-yes">73x</span>
|
|
2954
2950
|
<span class="cline-any cline-neutral"> </span>
|
|
2955
|
-
<span class="cline-any cline-yes">
|
|
2951
|
+
<span class="cline-any cline-yes">73x</span>
|
|
2956
2952
|
<span class="cline-any cline-neutral"> </span>
|
|
2957
|
-
<span class="cline-any cline-yes">
|
|
2953
|
+
<span class="cline-any cline-yes">73x</span>
|
|
2958
2954
|
<span class="cline-any cline-yes">4x</span>
|
|
2959
2955
|
<span class="cline-any cline-neutral"> </span>
|
|
2960
2956
|
<span class="cline-any cline-neutral"> </span>
|
|
2961
|
-
<span class="cline-any cline-yes">
|
|
2957
|
+
<span class="cline-any cline-yes">73x</span>
|
|
2962
2958
|
<span class="cline-any cline-neutral"> </span>
|
|
2963
2959
|
<span class="cline-any cline-neutral"> </span>
|
|
2964
2960
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2977,7 +2973,7 @@
|
|
|
2977
2973
|
<span class="cline-any cline-neutral"> </span>
|
|
2978
2974
|
<span class="cline-any cline-neutral"> </span>
|
|
2979
2975
|
<span class="cline-any cline-neutral"> </span>
|
|
2980
|
-
<span class="cline-any cline-yes">
|
|
2976
|
+
<span class="cline-any cline-yes">231x</span>
|
|
2981
2977
|
<span class="cline-any cline-no"> </span>
|
|
2982
2978
|
<span class="cline-any cline-neutral"> </span>
|
|
2983
2979
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2986,8 +2982,8 @@
|
|
|
2986
2982
|
<span class="cline-any cline-neutral"> </span>
|
|
2987
2983
|
<span class="cline-any cline-neutral"> </span>
|
|
2988
2984
|
<span class="cline-any cline-neutral"> </span>
|
|
2989
|
-
<span class="cline-any cline-yes">
|
|
2990
|
-
<span class="cline-any cline-yes">
|
|
2985
|
+
<span class="cline-any cline-yes">286x</span>
|
|
2986
|
+
<span class="cline-any cline-yes">231x</span>
|
|
2991
2987
|
<span class="cline-any cline-neutral"> </span>
|
|
2992
2988
|
<span class="cline-any cline-no"> </span>
|
|
2993
2989
|
<span class="cline-any cline-no"> </span>
|
|
@@ -2997,8 +2993,8 @@
|
|
|
2997
2993
|
<span class="cline-any cline-neutral"> </span>
|
|
2998
2994
|
<span class="cline-any cline-neutral"> </span>
|
|
2999
2995
|
<span class="cline-any cline-neutral"> </span>
|
|
3000
|
-
<span class="cline-any cline-yes">
|
|
3001
|
-
<span class="cline-any cline-yes">
|
|
2996
|
+
<span class="cline-any cline-yes">231x</span>
|
|
2997
|
+
<span class="cline-any cline-yes">231x</span>
|
|
3002
2998
|
<span class="cline-any cline-neutral"> </span>
|
|
3003
2999
|
<span class="cline-any cline-neutral"> </span>
|
|
3004
3000
|
<span class="cline-any cline-no"> </span>
|
|
@@ -3009,7 +3005,7 @@
|
|
|
3009
3005
|
<span class="cline-any cline-neutral"> </span>
|
|
3010
3006
|
<span class="cline-any cline-neutral"> </span>
|
|
3011
3007
|
<span class="cline-any cline-neutral"> </span>
|
|
3012
|
-
<span class="cline-any cline-yes">
|
|
3008
|
+
<span class="cline-any cline-yes">73x</span>
|
|
3013
3009
|
<span class="cline-any cline-neutral"> </span>
|
|
3014
3010
|
<span class="cline-any cline-neutral"> </span>
|
|
3015
3011
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -3032,23 +3028,23 @@
|
|
|
3032
3028
|
<span class="cline-any cline-neutral"> </span>
|
|
3033
3029
|
<span class="cline-any cline-neutral"> </span>
|
|
3034
3030
|
<span class="cline-any cline-neutral"> </span>
|
|
3035
|
-
<span class="cline-any cline-yes">
|
|
3036
|
-
<span class="cline-any cline-yes">
|
|
3037
|
-
<span class="cline-any cline-
|
|
3031
|
+
<span class="cline-any cline-yes">73x</span>
|
|
3032
|
+
<span class="cline-any cline-yes">118x</span>
|
|
3033
|
+
<span class="cline-any cline-yes">1x</span>
|
|
3038
3034
|
<span class="cline-any cline-neutral"> </span>
|
|
3039
3035
|
<span class="cline-any cline-neutral"> </span>
|
|
3040
3036
|
<span class="cline-any cline-neutral"> </span>
|
|
3041
3037
|
<span class="cline-any cline-neutral"> </span>
|
|
3042
|
-
<span class="cline-any cline-yes">
|
|
3038
|
+
<span class="cline-any cline-yes">73x</span>
|
|
3043
3039
|
<span class="cline-any cline-yes">2x</span>
|
|
3044
3040
|
<span class="cline-any cline-no"> </span>
|
|
3045
3041
|
<span class="cline-any cline-neutral"> </span>
|
|
3046
3042
|
<span class="cline-any cline-neutral"> </span>
|
|
3047
3043
|
<span class="cline-any cline-neutral"> </span>
|
|
3048
3044
|
<span class="cline-any cline-neutral"> </span>
|
|
3049
|
-
<span class="cline-any cline-yes">
|
|
3045
|
+
<span class="cline-any cline-yes">73x</span>
|
|
3050
3046
|
<span class="cline-any cline-neutral"> </span>
|
|
3051
|
-
<span class="cline-any cline-yes">
|
|
3047
|
+
<span class="cline-any cline-yes">73x</span>
|
|
3052
3048
|
<span class="cline-any cline-neutral"> </span>
|
|
3053
3049
|
<span class="cline-any cline-neutral"> </span>
|
|
3054
3050
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -3057,7 +3053,7 @@
|
|
|
3057
3053
|
<span class="cline-any cline-neutral"> </span>
|
|
3058
3054
|
<span class="cline-any cline-neutral"> </span>
|
|
3059
3055
|
<span class="cline-any cline-neutral"> </span>
|
|
3060
|
-
<span class="cline-any cline-yes">
|
|
3056
|
+
<span class="cline-any cline-yes">126x</span>
|
|
3061
3057
|
<span class="cline-any cline-no"> </span>
|
|
3062
3058
|
<span class="cline-any cline-neutral"> </span>
|
|
3063
3059
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -3065,7 +3061,7 @@
|
|
|
3065
3061
|
<span class="cline-any cline-neutral"> </span>
|
|
3066
3062
|
<span class="cline-any cline-neutral"> </span>
|
|
3067
3063
|
<span class="cline-any cline-neutral"> </span>
|
|
3068
|
-
<span class="cline-any cline-yes">
|
|
3064
|
+
<span class="cline-any cline-yes">116x</span>
|
|
3069
3065
|
<span class="cline-any cline-neutral"> </span>
|
|
3070
3066
|
<span class="cline-any cline-no"> </span>
|
|
3071
3067
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -3280,7 +3276,7 @@
|
|
|
3280
3276
|
<span class="cline-any cline-neutral"> </span>
|
|
3281
3277
|
<span class="cline-any cline-neutral"> </span>
|
|
3282
3278
|
<span class="cline-any cline-neutral"> </span>
|
|
3283
|
-
<span class="cline-any cline-yes">
|
|
3279
|
+
<span class="cline-any cline-yes">115x</span>
|
|
3284
3280
|
<span class="cline-any cline-yes">2x</span>
|
|
3285
3281
|
<span class="cline-any cline-no"> </span>
|
|
3286
3282
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -3300,24 +3296,19 @@
|
|
|
3300
3296
|
<span class="cline-any cline-neutral"> </span>
|
|
3301
3297
|
<span class="cline-any cline-neutral"> </span>
|
|
3302
3298
|
<span class="cline-any cline-neutral"> </span>
|
|
3303
|
-
<span class="cline-any cline-yes">114x</span>
|
|
3304
|
-
<span class="cline-any cline-yes">22x</span>
|
|
3305
|
-
<span class="cline-any cline-neutral"> </span>
|
|
3306
3299
|
<span class="cline-any cline-neutral"> </span>
|
|
3307
3300
|
<span class="cline-any cline-neutral"> </span>
|
|
3301
|
+
<span class="cline-any cline-yes">115x</span>
|
|
3302
|
+
<span class="cline-any cline-yes">115x</span>
|
|
3308
3303
|
<span class="cline-any cline-neutral"> </span>
|
|
3309
|
-
<span class="cline-any cline-
|
|
3310
|
-
<span class="cline-any cline-
|
|
3311
|
-
<span class="cline-any cline-yes">
|
|
3312
|
-
<span class="cline-any cline-yes">92x</span>
|
|
3313
|
-
<span class="cline-any cline-neutral"> </span>
|
|
3314
|
-
<span class="cline-any cline-yes">92x</span>
|
|
3315
|
-
<span class="cline-any cline-yes">33x</span>
|
|
3316
|
-
<span class="cline-any cline-yes">70x</span>
|
|
3304
|
+
<span class="cline-any cline-yes">115x</span>
|
|
3305
|
+
<span class="cline-any cline-yes">35x</span>
|
|
3306
|
+
<span class="cline-any cline-yes">74x</span>
|
|
3317
3307
|
<span class="cline-any cline-neutral"> </span>
|
|
3318
3308
|
<span class="cline-any cline-neutral"> </span>
|
|
3319
3309
|
<span class="cline-any cline-neutral"> </span>
|
|
3320
3310
|
<span class="cline-any cline-neutral"> </span>
|
|
3311
|
+
<span class="cline-any cline-yes">115x</span>
|
|
3321
3312
|
<span class="cline-any cline-yes">92x</span>
|
|
3322
3313
|
<span class="cline-any cline-yes">92x</span>
|
|
3323
3314
|
<span class="cline-any cline-yes">264x</span>
|
|
@@ -3413,10 +3404,11 @@
|
|
|
3413
3404
|
<span class="cline-any cline-neutral"> </span>
|
|
3414
3405
|
<span class="cline-any cline-neutral"> </span>
|
|
3415
3406
|
<span class="cline-any cline-neutral"> </span>
|
|
3416
|
-
<span class="cline-any cline-yes">92x</span>
|
|
3417
|
-
<span class="cline-any cline-yes">33x</span>
|
|
3418
3407
|
<span class="cline-any cline-neutral"> </span>
|
|
3419
|
-
<span class="cline-any cline-yes">
|
|
3408
|
+
<span class="cline-any cline-yes">115x</span>
|
|
3409
|
+
<span class="cline-any cline-yes">35x</span>
|
|
3410
|
+
<span class="cline-any cline-neutral"> </span>
|
|
3411
|
+
<span class="cline-any cline-yes">74x</span>
|
|
3420
3412
|
<span class="cline-any cline-yes">29x</span>
|
|
3421
3413
|
<span class="cline-any cline-yes">235x</span>
|
|
3422
3414
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -3431,7 +3423,7 @@
|
|
|
3431
3423
|
<span class="cline-any cline-neutral"> </span>
|
|
3432
3424
|
<span class="cline-any cline-neutral"> </span>
|
|
3433
3425
|
<span class="cline-any cline-neutral"> </span>
|
|
3434
|
-
<span class="cline-any cline-yes">
|
|
3426
|
+
<span class="cline-any cline-yes">74x</span>
|
|
3435
3427
|
<span class="cline-any cline-yes">17x</span>
|
|
3436
3428
|
<span class="cline-any cline-yes">35x</span>
|
|
3437
3429
|
<span class="cline-any cline-yes">35x</span>
|
|
@@ -3537,12 +3529,12 @@
|
|
|
3537
3529
|
<span class="cline-any cline-neutral"> </span>
|
|
3538
3530
|
<span class="cline-any cline-neutral"> </span>
|
|
3539
3531
|
<span class="cline-any cline-neutral"> </span>
|
|
3540
|
-
<span class="cline-any cline-yes">
|
|
3532
|
+
<span class="cline-any cline-yes">115x</span>
|
|
3541
3533
|
<span class="cline-any cline-neutral"> </span>
|
|
3542
|
-
<span class="cline-any cline-yes">
|
|
3534
|
+
<span class="cline-any cline-yes">115x</span>
|
|
3543
3535
|
<span class="cline-any cline-neutral"> </span>
|
|
3544
|
-
<span class="cline-any cline-yes">
|
|
3545
|
-
<span class="cline-any cline-yes">
|
|
3536
|
+
<span class="cline-any cline-yes">230x</span>
|
|
3537
|
+
<span class="cline-any cline-yes">230x</span>
|
|
3546
3538
|
<span class="cline-any cline-neutral"> </span>
|
|
3547
3539
|
<span class="cline-any cline-neutral"> </span>
|
|
3548
3540
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -3555,8 +3547,8 @@
|
|
|
3555
3547
|
<span class="cline-any cline-neutral"> </span>
|
|
3556
3548
|
<span class="cline-any cline-neutral"> </span>
|
|
3557
3549
|
<span class="cline-any cline-neutral"> </span>
|
|
3558
|
-
<span class="cline-any cline-yes">
|
|
3559
|
-
<span class="cline-any cline-yes">
|
|
3550
|
+
<span class="cline-any cline-yes">230x</span>
|
|
3551
|
+
<span class="cline-any cline-yes">18x</span>
|
|
3560
3552
|
<span class="cline-any cline-neutral"> </span>
|
|
3561
3553
|
<span class="cline-any cline-neutral"> </span>
|
|
3562
3554
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -3601,7 +3593,7 @@
|
|
|
3601
3593
|
<span class="cline-any cline-neutral"> </span>
|
|
3602
3594
|
<span class="cline-any cline-neutral"> </span>
|
|
3603
3595
|
<span class="cline-any cline-neutral"> </span>
|
|
3604
|
-
<span class="cline-any cline-yes">
|
|
3596
|
+
<span class="cline-any cline-yes">73x</span>
|
|
3605
3597
|
<span class="cline-any cline-neutral"> </span>
|
|
3606
3598
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import type { Schema, SchemaType } from "@featurevisor/types";
|
|
3607
3599
|
import { z } from "zod";
|
|
@@ -4804,7 +4796,7 @@ export function getFeatureZodSchema(
|
|
|
4804
4796
|
|
|
4805
4797
|
const attributeKeyZodSchema = z.string().refine(
|
|
4806
4798
|
(value) => value === "*" || availableAttributeKeys.includes(value),
|
|
4807
|
-
|
|
4799
|
+
(value) => ({
|
|
4808
4800
|
message: `Unknown attribute "${value}"`,
|
|
4809
4801
|
}),
|
|
4810
4802
|
);
|
|
@@ -5070,15 +5062,9 @@ export function getFeatureZodSchema(
|
|
|
5070
5062
|
}
|
|
5071
5063
|
}
|
|
5072
5064
|
|
|
5073
|
-
|
|
5074
|
-
|
|
5075
|
-
}
|
|
5076
|
-
|
|
5077
|
-
// Every variable value is validated against its schema from variablesSchema. Sources covered:
|
|
5078
|
-
// 1. variablesSchema[key].defaultValue 2. variablesSchema[key].disabledValue
|
|
5079
|
-
// 3. variations[n].variables[key] 4. variations[n].variableOverrides[key][].value
|
|
5080
|
-
// 5. rules[env][n].variables[key] 6. force[env][n].variables[key]
|
|
5081
|
-
const variableSchemaByKey = value.variablesSchema;
|
|
5065
|
+
// When variablesSchema is absent, variableSchemaByKey is {} so any variable key used in
|
|
5066
|
+
// rules/force/variations will be reported as "not defined in variablesSchema".
|
|
5067
|
+
const variableSchemaByKey = value.variablesSchema ?? {};
|
|
5082
5068
|
const variationValues: string[] = [];
|
|
5083
5069
|
|
|
5084
5070
|
if (value.variations) {
|
|
@@ -5087,100 +5073,102 @@ export function getFeatureZodSchema(
|
|
|
5087
5073
|
});
|
|
5088
5074
|
}
|
|
5089
5075
|
|
|
5090
|
-
// variablesSchema[key]
|
|
5091
|
-
|
|
5092
|
-
|
|
5093
|
-
|
|
5076
|
+
// variablesSchema[key] — only when feature defines variablesSchema
|
|
5077
|
+
if (value.variablesSchema) {
|
|
5078
|
+
const variableKeys = Object.keys(variableSchemaByKey);
|
|
5079
|
+
variableKeys.forEach((variableKey) => {
|
|
5080
|
+
const variableSchema = variableSchemaByKey[variableKey];
|
|
5094
5081
|
|
|
5095
|
-
|
|
5096
|
-
|
|
5097
|
-
|
|
5098
|
-
|
|
5099
|
-
schemasByKey,
|
|
5100
|
-
);
|
|
5101
|
-
if (!resolvedSchema) {
|
|
5102
|
-
ctx.addIssue({
|
|
5103
|
-
code: z.ZodIssueCode.custom,
|
|
5104
|
-
message: `Schema "${variableSchema.schema}" could not be loaded for variable "${variableKey}".`,
|
|
5105
|
-
path: ["variablesSchema", variableKey],
|
|
5106
|
-
});
|
|
5107
|
-
} else {
|
|
5108
|
-
refineRequiredKeysInSchema(
|
|
5109
|
-
resolvedSchema as SchemaLikeForRequired,
|
|
5110
|
-
["variablesSchema", variableKey],
|
|
5111
|
-
ctx,
|
|
5082
|
+
// When variable references a schema by name, ensure it resolves and validate the referenced schema
|
|
5083
|
+
if ("schema" in variableSchema && variableSchema.schema) {
|
|
5084
|
+
const resolvedSchema = resolveVariableSchema(
|
|
5085
|
+
variableSchema as Parameters<typeof resolveVariableSchema>[0],
|
|
5112
5086
|
schemasByKey,
|
|
5113
5087
|
);
|
|
5088
|
+
if (!resolvedSchema) {
|
|
5089
|
+
ctx.addIssue({
|
|
5090
|
+
code: z.ZodIssueCode.custom,
|
|
5091
|
+
message: `Schema "${variableSchema.schema}" could not be loaded for variable "${variableKey}".`,
|
|
5092
|
+
path: ["variablesSchema", variableKey],
|
|
5093
|
+
});
|
|
5094
|
+
} else {
|
|
5095
|
+
refineRequiredKeysInSchema(
|
|
5096
|
+
resolvedSchema as SchemaLikeForRequired,
|
|
5097
|
+
["variablesSchema", variableKey],
|
|
5098
|
+
ctx,
|
|
5099
|
+
schemasByKey,
|
|
5100
|
+
);
|
|
5101
|
+
}
|
|
5114
5102
|
}
|
|
5115
|
-
}
|
|
5116
|
-
|
|
5117
|
-
// When type and enum are both present, all enum values must match the type
|
|
5118
|
-
const effectiveSchema = resolveVariableSchema(variableSchema, schemasByKey);
|
|
5119
|
-
if (
|
|
5120
|
-
effectiveSchema &&
|
|
5121
|
-
effectiveSchema.type &&
|
|
5122
|
-
Array.isArray(effectiveSchema.enum) &&
|
|
5123
|
-
effectiveSchema.enum.length > 0
|
|
5124
|
-
) {
|
|
5125
|
-
refineEnumMatchesType(
|
|
5126
|
-
effectiveSchema as Parameters<typeof refineEnumMatchesType>[0],
|
|
5127
|
-
["variablesSchema", variableKey],
|
|
5128
|
-
ctx,
|
|
5129
|
-
);
|
|
5130
|
-
}
|
|
5131
5103
|
|
|
5132
|
-
|
|
5133
|
-
|
|
5134
|
-
|
|
5135
|
-
|
|
5136
|
-
|
|
5137
|
-
|
|
5138
|
-
|
|
5139
|
-
)
|
|
5140
|
-
|
|
5141
|
-
|
|
5142
|
-
|
|
5143
|
-
|
|
5144
|
-
|
|
5145
|
-
|
|
5146
|
-
variableSchema as Parameters<typeof refineArrayItems>[0],
|
|
5147
|
-
pathPrefix,
|
|
5148
|
-
ctx,
|
|
5149
|
-
);
|
|
5150
|
-
}
|
|
5104
|
+
// When type and enum are both present, all enum values must match the type
|
|
5105
|
+
const effectiveSchema = resolveVariableSchema(variableSchema, schemasByKey);
|
|
5106
|
+
if (
|
|
5107
|
+
effectiveSchema &&
|
|
5108
|
+
effectiveSchema.type &&
|
|
5109
|
+
Array.isArray(effectiveSchema.enum) &&
|
|
5110
|
+
effectiveSchema.enum.length > 0
|
|
5111
|
+
) {
|
|
5112
|
+
refineEnumMatchesType(
|
|
5113
|
+
effectiveSchema as Parameters<typeof refineEnumMatchesType>[0],
|
|
5114
|
+
["variablesSchema", variableKey],
|
|
5115
|
+
ctx,
|
|
5116
|
+
);
|
|
5117
|
+
}
|
|
5151
5118
|
|
|
5152
|
-
|
|
5153
|
-
|
|
5154
|
-
|
|
5155
|
-
|
|
5156
|
-
|
|
5157
|
-
|
|
5158
|
-
|
|
5119
|
+
// Inline variable schemas: validate minimum/maximum, minLength/maxLength/pattern, minItems/maxItems/uniqueItems
|
|
5120
|
+
if (!("schema" in variableSchema) || !variableSchema.schema) {
|
|
5121
|
+
const pathPrefix = ["variablesSchema", variableKey];
|
|
5122
|
+
refineMinimumMaximum(
|
|
5123
|
+
variableSchema as Parameters<typeof refineMinimumMaximum>[0],
|
|
5124
|
+
pathPrefix,
|
|
5125
|
+
ctx,
|
|
5126
|
+
);
|
|
5127
|
+
refineStringLengthPattern(
|
|
5128
|
+
variableSchema as Parameters<typeof refineStringLengthPattern>[0],
|
|
5129
|
+
pathPrefix,
|
|
5130
|
+
ctx,
|
|
5131
|
+
);
|
|
5132
|
+
refineArrayItems(
|
|
5133
|
+
variableSchema as Parameters<typeof refineArrayItems>[0],
|
|
5134
|
+
pathPrefix,
|
|
5135
|
+
ctx,
|
|
5136
|
+
);
|
|
5137
|
+
}
|
|
5159
5138
|
|
|
5160
|
-
|
|
5161
|
-
|
|
5162
|
-
|
|
5163
|
-
|
|
5164
|
-
|
|
5165
|
-
|
|
5166
|
-
|
|
5167
|
-
variableKey,
|
|
5168
|
-
schemasByKey,
|
|
5169
|
-
);
|
|
5139
|
+
if (variableKey === "variation") {
|
|
5140
|
+
ctx.addIssue({
|
|
5141
|
+
code: z.ZodIssueCode.custom,
|
|
5142
|
+
message: `Variable key "${variableKey}" is reserved and cannot be used.`,
|
|
5143
|
+
path: ["variablesSchema", variableKey],
|
|
5144
|
+
});
|
|
5145
|
+
}
|
|
5170
5146
|
|
|
5171
|
-
|
|
5172
|
-
if (variableSchema.disabledValue !== undefined) {
|
|
5147
|
+
// defaultValue
|
|
5173
5148
|
superRefineVariableValue(
|
|
5174
5149
|
projectConfig,
|
|
5175
5150
|
variableSchema,
|
|
5176
|
-
variableSchema.
|
|
5177
|
-
["variablesSchema", variableKey, "
|
|
5151
|
+
variableSchema.defaultValue,
|
|
5152
|
+
["variablesSchema", variableKey, "defaultValue"],
|
|
5178
5153
|
ctx,
|
|
5179
5154
|
variableKey,
|
|
5180
5155
|
schemasByKey,
|
|
5181
5156
|
);
|
|
5182
|
-
|
|
5183
|
-
|
|
5157
|
+
|
|
5158
|
+
// disabledValue (only when present)
|
|
5159
|
+
if (variableSchema.disabledValue !== undefined) {
|
|
5160
|
+
superRefineVariableValue(
|
|
5161
|
+
projectConfig,
|
|
5162
|
+
variableSchema,
|
|
5163
|
+
variableSchema.disabledValue,
|
|
5164
|
+
["variablesSchema", variableKey, "disabledValue"],
|
|
5165
|
+
ctx,
|
|
5166
|
+
variableKey,
|
|
5167
|
+
schemasByKey,
|
|
5168
|
+
);
|
|
5169
|
+
}
|
|
5170
|
+
});
|
|
5171
|
+
}
|
|
5184
5172
|
|
|
5185
5173
|
// variations: validate variation.variables and variation.variableOverrides (each value against its variable schema)
|
|
5186
5174
|
if (value.variations) {
|
|
@@ -5380,7 +5368,7 @@ export function getFeatureZodSchema(
|
|
|
5380
5368
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
5381
5369
|
Code coverage generated by
|
|
5382
5370
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
5383
|
-
at 2026-02-
|
|
5371
|
+
at 2026-02-25T22:03:15.189Z
|
|
5384
5372
|
</div>
|
|
5385
5373
|
<script src="../prettify.js"></script>
|
|
5386
5374
|
<script>
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
<span class="cline-any cline-neutral"> </span>
|
|
121
121
|
<span class="cline-any cline-neutral"> </span>
|
|
122
122
|
<span class="cline-any cline-neutral"> </span>
|
|
123
|
-
<span class="cline-any cline-yes">
|
|
123
|
+
<span class="cline-any cline-yes">6x</span>
|
|
124
124
|
<span class="cline-any cline-neutral"> </span>
|
|
125
125
|
<span class="cline-any cline-neutral"> </span>
|
|
126
126
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -155,7 +155,7 @@
|
|
|
155
155
|
<span class="cline-any cline-neutral"> </span>
|
|
156
156
|
<span class="cline-any cline-neutral"> </span>
|
|
157
157
|
<span class="cline-any cline-neutral"> </span>
|
|
158
|
-
<span class="cline-any cline-yes">
|
|
158
|
+
<span class="cline-any cline-yes">6x</span>
|
|
159
159
|
<span class="cline-any cline-neutral"> </span>
|
|
160
160
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { z } from "zod";
|
|
161
161
|
|
|
@@ -211,7 +211,7 @@ export function getGroupZodSchema(
|
|
|
211
211
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
212
212
|
Code coverage generated by
|
|
213
213
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
214
|
-
at 2026-02-
|
|
214
|
+
at 2026-02-25T22:03:15.189Z
|
|
215
215
|
</div>
|
|
216
216
|
<script src="../prettify.js"></script>
|
|
217
217
|
<script>
|