@featurevisor/core 2.5.0 → 2.6.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 (90) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/coverage/clover.xml +444 -78
  3. package/coverage/coverage-final.json +9 -3
  4. package/coverage/lcov-report/index.html +42 -42
  5. package/coverage/lcov-report/lib/builder/allocator.js.html +1 -1
  6. package/coverage/lcov-report/lib/builder/buildScopedConditions.js.html +373 -0
  7. package/coverage/lcov-report/lib/builder/buildScopedDatafile.js.html +403 -0
  8. package/coverage/lcov-report/lib/builder/buildScopedSegments.js.html +379 -0
  9. package/coverage/lcov-report/lib/builder/index.html +53 -8
  10. package/coverage/lcov-report/lib/builder/revision.js.html +1 -1
  11. package/coverage/lcov-report/lib/builder/traffic.js.html +1 -1
  12. package/coverage/lcov-report/lib/list/index.html +14 -14
  13. package/coverage/lcov-report/lib/list/matrix.js.html +23 -8
  14. package/coverage/lcov-report/lib/tester/helpers.js.html +1 -1
  15. package/coverage/lcov-report/lib/tester/index.html +1 -1
  16. package/coverage/lcov-report/src/builder/allocator.ts.html +1 -1
  17. package/coverage/lcov-report/src/builder/buildScopedConditions.ts.html +487 -0
  18. package/coverage/lcov-report/src/builder/buildScopedDatafile.ts.html +604 -0
  19. package/coverage/lcov-report/src/builder/buildScopedSegments.ts.html +544 -0
  20. package/coverage/lcov-report/src/builder/index.html +55 -10
  21. package/coverage/lcov-report/src/builder/revision.ts.html +1 -1
  22. package/coverage/lcov-report/src/builder/traffic.ts.html +3 -3
  23. package/coverage/lcov-report/src/list/index.html +14 -14
  24. package/coverage/lcov-report/src/list/matrix.ts.html +33 -12
  25. package/coverage/lcov-report/src/tester/helpers.ts.html +1 -1
  26. package/coverage/lcov-report/src/tester/index.html +1 -1
  27. package/coverage/lcov.info +810 -129
  28. package/jest.config.js +8 -0
  29. package/lib/builder/buildDatafile.d.ts +10 -0
  30. package/lib/builder/buildDatafile.js +27 -0
  31. package/lib/builder/buildDatafile.js.map +1 -1
  32. package/lib/builder/buildProject.d.ts +2 -0
  33. package/lib/builder/buildProject.js +38 -4
  34. package/lib/builder/buildProject.js.map +1 -1
  35. package/lib/builder/buildScopedConditions.d.ts +5 -0
  36. package/lib/builder/buildScopedConditions.js +97 -0
  37. package/lib/builder/buildScopedConditions.js.map +1 -0
  38. package/lib/builder/buildScopedConditions.spec.d.ts +1 -0
  39. package/lib/builder/buildScopedConditions.spec.js +2167 -0
  40. package/lib/builder/buildScopedConditions.spec.js.map +1 -0
  41. package/lib/builder/buildScopedDatafile.d.ts +2 -0
  42. package/lib/builder/buildScopedDatafile.js +107 -0
  43. package/lib/builder/buildScopedDatafile.js.map +1 -0
  44. package/lib/builder/buildScopedDatafile.spec.d.ts +1 -0
  45. package/lib/builder/buildScopedDatafile.spec.js +1988 -0
  46. package/lib/builder/buildScopedDatafile.spec.js.map +1 -0
  47. package/lib/builder/buildScopedSegments.d.ts +5 -0
  48. package/lib/builder/buildScopedSegments.js +99 -0
  49. package/lib/builder/buildScopedSegments.js.map +1 -0
  50. package/lib/builder/buildScopedSegments.spec.d.ts +1 -0
  51. package/lib/builder/buildScopedSegments.spec.js +1062 -0
  52. package/lib/builder/buildScopedSegments.spec.js.map +1 -0
  53. package/lib/builder/index.d.ts +1 -0
  54. package/lib/builder/index.js +1 -0
  55. package/lib/builder/index.js.map +1 -1
  56. package/lib/config/projectConfig.d.ts +9 -1
  57. package/lib/config/projectConfig.js +1 -0
  58. package/lib/config/projectConfig.js.map +1 -1
  59. package/lib/datasource/adapter.d.ts +3 -1
  60. package/lib/datasource/adapter.js.map +1 -1
  61. package/lib/datasource/filesystemAdapter.js +3 -1
  62. package/lib/datasource/filesystemAdapter.js.map +1 -1
  63. package/lib/linter/testSchema.d.ts +5 -0
  64. package/lib/linter/testSchema.js +8 -0
  65. package/lib/linter/testSchema.js.map +1 -1
  66. package/lib/list/matrix.js +5 -0
  67. package/lib/list/matrix.js.map +1 -1
  68. package/lib/tester/testFeature.d.ts +5 -3
  69. package/lib/tester/testFeature.js +34 -9
  70. package/lib/tester/testFeature.js.map +1 -1
  71. package/lib/tester/testProject.d.ts +3 -2
  72. package/lib/tester/testProject.js +40 -6
  73. package/lib/tester/testProject.js.map +1 -1
  74. package/package.json +5 -5
  75. package/src/builder/buildDatafile.ts +47 -0
  76. package/src/builder/buildProject.ts +58 -3
  77. package/src/builder/buildScopedConditions.spec.ts +2659 -0
  78. package/src/builder/buildScopedConditions.ts +134 -0
  79. package/src/builder/buildScopedDatafile.spec.ts +2236 -0
  80. package/src/builder/buildScopedDatafile.ts +173 -0
  81. package/src/builder/buildScopedSegments.spec.ts +1573 -0
  82. package/src/builder/buildScopedSegments.ts +153 -0
  83. package/src/builder/index.ts +1 -0
  84. package/src/config/projectConfig.ts +11 -1
  85. package/src/datasource/adapter.ts +4 -1
  86. package/src/datasource/filesystemAdapter.ts +4 -1
  87. package/src/linter/testSchema.ts +12 -0
  88. package/src/list/matrix.ts +7 -0
  89. package/src/tester/testFeature.ts +50 -16
  90. package/src/tester/testProject.ts +68 -8
@@ -136,7 +136,7 @@
136
136
  <div class='footer quiet pad2 space-top1 center small'>
137
137
  Code coverage generated by
138
138
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
139
- at 2025-12-28T17:50:17.514Z
139
+ at 2026-01-25T22:19:43.878Z
140
140
  </div>
141
141
  <script src="../../prettify.js"></script>
142
142
  <script>
@@ -30,9 +30,9 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">78.57% </span>
33
+ <span class="strong">76.31% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>33/42</span>
35
+ <span class='fraction'>29/38</span>
36
36
  </div>
37
37
 
38
38
 
@@ -643,7 +643,7 @@ export function getTraffic(
643
643
  <div class='footer quiet pad2 space-top1 center small'>
644
644
  Code coverage generated by
645
645
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
646
- at 2025-12-28T17:50:17.514Z
646
+ at 2026-01-25T22:19:43.878Z
647
647
  </div>
648
648
  <script src="../../prettify.js"></script>
649
649
  <script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">23.8% </span>
26
+ <span class="strong">23.25% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>20/84</span>
28
+ <span class='fraction'>20/86</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">9.37% </span>
33
+ <span class="strong">10.34% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>3/32</span>
35
+ <span class='fraction'>3/29</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">23.75% </span>
47
+ <span class="strong">23.17% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>19/80</span>
49
+ <span class='fraction'>19/82</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,17 +80,17 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file low" data-value="matrix.ts"><a href="matrix.ts.html">matrix.ts</a></td>
83
- <td data-value="23.8" class="pic low">
83
+ <td data-value="23.25" class="pic low">
84
84
  <div class="chart"><div class="cover-fill" style="width: 23%"></div><div class="cover-empty" style="width: 77%"></div></div>
85
85
  </td>
86
- <td data-value="23.8" class="pct low">23.8%</td>
87
- <td data-value="84" class="abs low">20/84</td>
88
- <td data-value="9.37" class="pct low">9.37%</td>
89
- <td data-value="32" class="abs low">3/32</td>
86
+ <td data-value="23.25" class="pct low">23.25%</td>
87
+ <td data-value="86" class="abs low">20/86</td>
88
+ <td data-value="10.34" class="pct low">10.34%</td>
89
+ <td data-value="29" class="abs low">3/29</td>
90
90
  <td data-value="20" class="pct low">20%</td>
91
91
  <td data-value="10" class="abs low">2/10</td>
92
- <td data-value="23.75" class="pct low">23.75%</td>
93
- <td data-value="80" class="abs low">19/80</td>
92
+ <td data-value="23.17" class="pct low">23.17%</td>
93
+ <td data-value="82" class="abs low">19/82</td>
94
94
  </tr>
95
95
 
96
96
  </tbody>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2025-12-28T17:50:17.514Z
104
+ at 2026-01-25T22:19:43.878Z
105
105
  </div>
106
106
  <script src="../../prettify.js"></script>
107
107
  <script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">23.8% </span>
26
+ <span class="strong">23.25% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>20/84</span>
28
+ <span class='fraction'>20/86</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">9.37% </span>
33
+ <span class="strong">10.34% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>3/32</span>
35
+ <span class='fraction'>3/29</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">23.75% </span>
47
+ <span class="strong">23.17% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>19/80</span>
49
+ <span class='fraction'>19/82</span>
50
50
  </div>
51
51
 
52
52
 
@@ -270,7 +270,14 @@
270
270
  <a name='L205'></a><a href='#L205'>205</a>
271
271
  <a name='L206'></a><a href='#L206'>206</a>
272
272
  <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
274
281
  <span class="cline-any cline-neutral">&nbsp;</span>
275
282
  <span class="cline-any cline-neutral">&nbsp;</span>
276
283
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -368,6 +375,13 @@
368
375
  <span class="cline-any cline-neutral">&nbsp;</span>
369
376
  <span class="cline-any cline-neutral">&nbsp;</span>
370
377
  <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-no">&nbsp;</span>
380
+ <span class="cline-any cline-no">&nbsp;</span>
381
+ <span class="cline-any cline-neutral">&nbsp;</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
371
385
  <span class="cline-any cline-no">&nbsp;</span>
372
386
  <span class="cline-any cline-neutral">&nbsp;</span>
373
387
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -543,7 +557,7 @@ export function <span class="fstat-no" title="function not covered" >applyCombin
543
557
  combination: any,
544
558
  assertion: FeatureAssertion,
545
559
  ): FeatureAssertion {
546
- const flattenedAssertion<span class="cstat-no" title="statement not covered" > = { ...assertion };</span>
560
+ const flattenedAssertion = <span class="cstat-no" title="statement not covered" >{ ...assertion };</span>
547
561
  &nbsp;
548
562
  // environment
549
563
  <span class="cstat-no" title="statement not covered" > flattenedAssertion.environment = applyCombinationToValue(</span>
@@ -574,6 +588,13 @@ export function <span class="fstat-no" title="function not covered" >applyCombin
574
588
  combination,
575
589
  );
576
590
  }
591
+ &nbsp;
592
+ // scope
593
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (flattenedAssertion.scope) {</span>
594
+ <span class="cstat-no" title="statement not covered" > flattenedAssertion.scope = applyCombinationToValue(flattenedAssertion.scope, combination);</span>
595
+ }
596
+ &nbsp;
597
+ // @TODO: support `tag` later, similar to `scope` above
577
598
  &nbsp;
578
599
  <span class="cstat-no" title="statement not covered" > return flattenedAssertion;</span>
579
600
  }
@@ -583,7 +604,7 @@ export function <span class="fstat-no" title="function not covered" >getFeatureA
583
604
  assertionWithMatrix: FeatureAssertion,
584
605
  ): FeatureAssertion[] {
585
606
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!assertionWithMatrix.matrix) {</span>
586
- const assertion<span class="cstat-no" title="statement not covered" > = { ...assertionWithMatrix };</span>
607
+ const assertion = <span class="cstat-no" title="statement not covered" >{ ...assertionWithMatrix };</span>
587
608
  &nbsp;
588
609
  let suffix;
589
610
  &nbsp;
@@ -636,7 +657,7 @@ export function <span class="fstat-no" title="function not covered" >applyCombin
636
657
  combination: any,
637
658
  assertion: SegmentAssertion,
638
659
  ): SegmentAssertion {
639
- const flattenedAssertion<span class="cstat-no" title="statement not covered" > = { ...assertion };</span>
660
+ const flattenedAssertion = <span class="cstat-no" title="statement not covered" >{ ...assertion };</span>
640
661
  &nbsp;
641
662
  // context
642
663
  <span class="cstat-no" title="statement not covered" > flattenedAssertion.context = Object.keys(flattenedAssertion.context).reduce(<span class="fstat-no" title="function not covered" >(a</span>cc, key) =&gt; {</span>
@@ -661,7 +682,7 @@ export function <span class="fstat-no" title="function not covered" >getSegmentA
661
682
  assertionWithMatrix: SegmentAssertion,
662
683
  ): SegmentAssertion[] {
663
684
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!assertionWithMatrix.matrix) {</span>
664
- const assertion<span class="cstat-no" title="statement not covered" > = { ...assertionWithMatrix };</span>
685
+ const assertion = <span class="cstat-no" title="statement not covered" >{ ...assertionWithMatrix };</span>
665
686
  <span class="cstat-no" title="statement not covered" > assertion.description = `Assertion #${aIndex + 1}${</span>
666
687
  assertion.description ? `: ${assertion.description}` : ""
667
688
  }`;
@@ -691,7 +712,7 @@ export function <span class="fstat-no" title="function not covered" >getSegmentA
691
712
  <div class='footer quiet pad2 space-top1 center small'>
692
713
  Code coverage generated by
693
714
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
694
- at 2025-12-28T17:50:17.514Z
715
+ at 2026-01-25T22:19:43.878Z
695
716
  </div>
696
717
  <script src="../../prettify.js"></script>
697
718
  <script>
@@ -298,7 +298,7 @@ export function checkIfArraysAreEqual(arr1: any[], arr2: any[]): boolean {
298
298
  <div class='footer quiet pad2 space-top1 center small'>
299
299
  Code coverage generated by
300
300
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
301
- at 2025-12-28T17:50:17.514Z
301
+ at 2026-01-25T22:19:43.878Z
302
302
  </div>
303
303
  <script src="../../prettify.js"></script>
304
304
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2025-12-28T17:50:17.514Z
104
+ at 2026-01-25T22:19:43.878Z
105
105
  </div>
106
106
  <script src="../../prettify.js"></script>
107
107
  <script>