@featurevisor/core 2.14.0 → 2.16.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 +22 -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/generate-code/index.d.ts +3 -0
- package/lib/generate-code/index.js +16 -1
- package/lib/generate-code/index.js.map +1 -1
- package/lib/generate-code/typescript.d.ts +6 -1
- package/lib/generate-code/typescript.js +193 -42
- package/lib/generate-code/typescript.js.map +1 -1
- 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/generate-code/index.ts +20 -1
- package/src/generate-code/typescript.ts +266 -64
- 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">
|
|
26
|
+
<span class="strong">72.38% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>173/239</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">61.68% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>95/154</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">52.63% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>10/19</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">74.56% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>173/232</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -648,7 +648,122 @@
|
|
|
648
648
|
<a name='L583'></a><a href='#L583'>583</a>
|
|
649
649
|
<a name='L584'></a><a href='#L584'>584</a>
|
|
650
650
|
<a name='L585'></a><a href='#L585'>585</a>
|
|
651
|
-
<a name='L586'></a><a href='#L586'>586</a
|
|
651
|
+
<a name='L586'></a><a href='#L586'>586</a>
|
|
652
|
+
<a name='L587'></a><a href='#L587'>587</a>
|
|
653
|
+
<a name='L588'></a><a href='#L588'>588</a>
|
|
654
|
+
<a name='L589'></a><a href='#L589'>589</a>
|
|
655
|
+
<a name='L590'></a><a href='#L590'>590</a>
|
|
656
|
+
<a name='L591'></a><a href='#L591'>591</a>
|
|
657
|
+
<a name='L592'></a><a href='#L592'>592</a>
|
|
658
|
+
<a name='L593'></a><a href='#L593'>593</a>
|
|
659
|
+
<a name='L594'></a><a href='#L594'>594</a>
|
|
660
|
+
<a name='L595'></a><a href='#L595'>595</a>
|
|
661
|
+
<a name='L596'></a><a href='#L596'>596</a>
|
|
662
|
+
<a name='L597'></a><a href='#L597'>597</a>
|
|
663
|
+
<a name='L598'></a><a href='#L598'>598</a>
|
|
664
|
+
<a name='L599'></a><a href='#L599'>599</a>
|
|
665
|
+
<a name='L600'></a><a href='#L600'>600</a>
|
|
666
|
+
<a name='L601'></a><a href='#L601'>601</a>
|
|
667
|
+
<a name='L602'></a><a href='#L602'>602</a>
|
|
668
|
+
<a name='L603'></a><a href='#L603'>603</a>
|
|
669
|
+
<a name='L604'></a><a href='#L604'>604</a>
|
|
670
|
+
<a name='L605'></a><a href='#L605'>605</a>
|
|
671
|
+
<a name='L606'></a><a href='#L606'>606</a>
|
|
672
|
+
<a name='L607'></a><a href='#L607'>607</a>
|
|
673
|
+
<a name='L608'></a><a href='#L608'>608</a>
|
|
674
|
+
<a name='L609'></a><a href='#L609'>609</a>
|
|
675
|
+
<a name='L610'></a><a href='#L610'>610</a>
|
|
676
|
+
<a name='L611'></a><a href='#L611'>611</a>
|
|
677
|
+
<a name='L612'></a><a href='#L612'>612</a>
|
|
678
|
+
<a name='L613'></a><a href='#L613'>613</a>
|
|
679
|
+
<a name='L614'></a><a href='#L614'>614</a>
|
|
680
|
+
<a name='L615'></a><a href='#L615'>615</a>
|
|
681
|
+
<a name='L616'></a><a href='#L616'>616</a>
|
|
682
|
+
<a name='L617'></a><a href='#L617'>617</a>
|
|
683
|
+
<a name='L618'></a><a href='#L618'>618</a>
|
|
684
|
+
<a name='L619'></a><a href='#L619'>619</a>
|
|
685
|
+
<a name='L620'></a><a href='#L620'>620</a>
|
|
686
|
+
<a name='L621'></a><a href='#L621'>621</a>
|
|
687
|
+
<a name='L622'></a><a href='#L622'>622</a>
|
|
688
|
+
<a name='L623'></a><a href='#L623'>623</a>
|
|
689
|
+
<a name='L624'></a><a href='#L624'>624</a>
|
|
690
|
+
<a name='L625'></a><a href='#L625'>625</a>
|
|
691
|
+
<a name='L626'></a><a href='#L626'>626</a>
|
|
692
|
+
<a name='L627'></a><a href='#L627'>627</a>
|
|
693
|
+
<a name='L628'></a><a href='#L628'>628</a>
|
|
694
|
+
<a name='L629'></a><a href='#L629'>629</a>
|
|
695
|
+
<a name='L630'></a><a href='#L630'>630</a>
|
|
696
|
+
<a name='L631'></a><a href='#L631'>631</a>
|
|
697
|
+
<a name='L632'></a><a href='#L632'>632</a>
|
|
698
|
+
<a name='L633'></a><a href='#L633'>633</a>
|
|
699
|
+
<a name='L634'></a><a href='#L634'>634</a>
|
|
700
|
+
<a name='L635'></a><a href='#L635'>635</a>
|
|
701
|
+
<a name='L636'></a><a href='#L636'>636</a>
|
|
702
|
+
<a name='L637'></a><a href='#L637'>637</a>
|
|
703
|
+
<a name='L638'></a><a href='#L638'>638</a>
|
|
704
|
+
<a name='L639'></a><a href='#L639'>639</a>
|
|
705
|
+
<a name='L640'></a><a href='#L640'>640</a>
|
|
706
|
+
<a name='L641'></a><a href='#L641'>641</a>
|
|
707
|
+
<a name='L642'></a><a href='#L642'>642</a>
|
|
708
|
+
<a name='L643'></a><a href='#L643'>643</a>
|
|
709
|
+
<a name='L644'></a><a href='#L644'>644</a>
|
|
710
|
+
<a name='L645'></a><a href='#L645'>645</a>
|
|
711
|
+
<a name='L646'></a><a href='#L646'>646</a>
|
|
712
|
+
<a name='L647'></a><a href='#L647'>647</a>
|
|
713
|
+
<a name='L648'></a><a href='#L648'>648</a>
|
|
714
|
+
<a name='L649'></a><a href='#L649'>649</a>
|
|
715
|
+
<a name='L650'></a><a href='#L650'>650</a>
|
|
716
|
+
<a name='L651'></a><a href='#L651'>651</a>
|
|
717
|
+
<a name='L652'></a><a href='#L652'>652</a>
|
|
718
|
+
<a name='L653'></a><a href='#L653'>653</a>
|
|
719
|
+
<a name='L654'></a><a href='#L654'>654</a>
|
|
720
|
+
<a name='L655'></a><a href='#L655'>655</a>
|
|
721
|
+
<a name='L656'></a><a href='#L656'>656</a>
|
|
722
|
+
<a name='L657'></a><a href='#L657'>657</a>
|
|
723
|
+
<a name='L658'></a><a href='#L658'>658</a>
|
|
724
|
+
<a name='L659'></a><a href='#L659'>659</a>
|
|
725
|
+
<a name='L660'></a><a href='#L660'>660</a>
|
|
726
|
+
<a name='L661'></a><a href='#L661'>661</a>
|
|
727
|
+
<a name='L662'></a><a href='#L662'>662</a>
|
|
728
|
+
<a name='L663'></a><a href='#L663'>663</a>
|
|
729
|
+
<a name='L664'></a><a href='#L664'>664</a>
|
|
730
|
+
<a name='L665'></a><a href='#L665'>665</a>
|
|
731
|
+
<a name='L666'></a><a href='#L666'>666</a>
|
|
732
|
+
<a name='L667'></a><a href='#L667'>667</a>
|
|
733
|
+
<a name='L668'></a><a href='#L668'>668</a>
|
|
734
|
+
<a name='L669'></a><a href='#L669'>669</a>
|
|
735
|
+
<a name='L670'></a><a href='#L670'>670</a>
|
|
736
|
+
<a name='L671'></a><a href='#L671'>671</a>
|
|
737
|
+
<a name='L672'></a><a href='#L672'>672</a>
|
|
738
|
+
<a name='L673'></a><a href='#L673'>673</a>
|
|
739
|
+
<a name='L674'></a><a href='#L674'>674</a>
|
|
740
|
+
<a name='L675'></a><a href='#L675'>675</a>
|
|
741
|
+
<a name='L676'></a><a href='#L676'>676</a>
|
|
742
|
+
<a name='L677'></a><a href='#L677'>677</a>
|
|
743
|
+
<a name='L678'></a><a href='#L678'>678</a>
|
|
744
|
+
<a name='L679'></a><a href='#L679'>679</a>
|
|
745
|
+
<a name='L680'></a><a href='#L680'>680</a>
|
|
746
|
+
<a name='L681'></a><a href='#L681'>681</a>
|
|
747
|
+
<a name='L682'></a><a href='#L682'>682</a>
|
|
748
|
+
<a name='L683'></a><a href='#L683'>683</a>
|
|
749
|
+
<a name='L684'></a><a href='#L684'>684</a>
|
|
750
|
+
<a name='L685'></a><a href='#L685'>685</a>
|
|
751
|
+
<a name='L686'></a><a href='#L686'>686</a>
|
|
752
|
+
<a name='L687'></a><a href='#L687'>687</a>
|
|
753
|
+
<a name='L688'></a><a href='#L688'>688</a>
|
|
754
|
+
<a name='L689'></a><a href='#L689'>689</a>
|
|
755
|
+
<a name='L690'></a><a href='#L690'>690</a>
|
|
756
|
+
<a name='L691'></a><a href='#L691'>691</a>
|
|
757
|
+
<a name='L692'></a><a href='#L692'>692</a>
|
|
758
|
+
<a name='L693'></a><a href='#L693'>693</a>
|
|
759
|
+
<a name='L694'></a><a href='#L694'>694</a>
|
|
760
|
+
<a name='L695'></a><a href='#L695'>695</a>
|
|
761
|
+
<a name='L696'></a><a href='#L696'>696</a>
|
|
762
|
+
<a name='L697'></a><a href='#L697'>697</a>
|
|
763
|
+
<a name='L698'></a><a href='#L698'>698</a>
|
|
764
|
+
<a name='L699'></a><a href='#L699'>699</a>
|
|
765
|
+
<a name='L700'></a><a href='#L700'>700</a>
|
|
766
|
+
<a name='L701'></a><a href='#L701'>701</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
652
767
|
<span class="cline-any cline-yes">1x</span>
|
|
653
768
|
<span class="cline-any cline-neutral"> </span>
|
|
654
769
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -694,6 +809,8 @@
|
|
|
694
809
|
<span class="cline-any cline-neutral"> </span>
|
|
695
810
|
<span class="cline-any cline-neutral"> </span>
|
|
696
811
|
<span class="cline-any cline-neutral"> </span>
|
|
812
|
+
<span class="cline-any cline-neutral"> </span>
|
|
813
|
+
<span class="cline-any cline-neutral"> </span>
|
|
697
814
|
<span class="cline-any cline-yes">1x</span>
|
|
698
815
|
<span class="cline-any cline-yes">1x</span>
|
|
699
816
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -711,27 +828,27 @@
|
|
|
711
828
|
<span class="cline-any cline-neutral"> </span>
|
|
712
829
|
<span class="cline-any cline-neutral"> </span>
|
|
713
830
|
<span class="cline-any cline-neutral"> </span>
|
|
714
|
-
<span class="cline-any cline-yes">
|
|
831
|
+
<span class="cline-any cline-yes">6x</span>
|
|
715
832
|
<span class="cline-any cline-neutral"> </span>
|
|
716
|
-
<span class="cline-any cline-yes">
|
|
717
|
-
<span class="cline-any cline-yes">
|
|
833
|
+
<span class="cline-any cline-yes">6x</span>
|
|
834
|
+
<span class="cline-any cline-yes">6x</span>
|
|
718
835
|
<span class="cline-any cline-neutral"> </span>
|
|
719
836
|
<span class="cline-any cline-neutral"> </span>
|
|
720
|
-
<span class="cline-any cline-yes">
|
|
837
|
+
<span class="cline-any cline-yes">16x</span>
|
|
721
838
|
<span class="cline-any cline-no"> </span>
|
|
722
839
|
<span class="cline-any cline-neutral"> </span>
|
|
723
840
|
<span class="cline-any cline-neutral"> </span>
|
|
724
841
|
<span class="cline-any cline-neutral"> </span>
|
|
725
842
|
<span class="cline-any cline-neutral"> </span>
|
|
726
|
-
<span class="cline-any cline-yes">
|
|
727
|
-
<span class="cline-any cline-yes">
|
|
843
|
+
<span class="cline-any cline-yes">247x</span>
|
|
844
|
+
<span class="cline-any cline-yes">247x</span>
|
|
728
845
|
<span class="cline-any cline-neutral"> </span>
|
|
729
|
-
<span class="cline-any cline-yes">
|
|
846
|
+
<span class="cline-any cline-yes">247x</span>
|
|
730
847
|
<span class="cline-any cline-yes">34x</span>
|
|
731
|
-
<span class="cline-any cline-yes">
|
|
848
|
+
<span class="cline-any cline-yes">213x</span>
|
|
732
849
|
<span class="cline-any cline-yes">32x</span>
|
|
733
|
-
<span class="cline-any cline-yes">
|
|
734
|
-
<span class="cline-any cline-yes">
|
|
850
|
+
<span class="cline-any cline-yes">181x</span>
|
|
851
|
+
<span class="cline-any cline-yes">54x</span>
|
|
735
852
|
<span class="cline-any cline-yes">127x</span>
|
|
736
853
|
<span class="cline-any cline-yes">2x</span>
|
|
737
854
|
<span class="cline-any cline-yes">125x</span>
|
|
@@ -740,36 +857,44 @@
|
|
|
740
857
|
<span class="cline-any cline-yes">85x</span>
|
|
741
858
|
<span class="cline-any cline-neutral"> </span>
|
|
742
859
|
<span class="cline-any cline-neutral"> </span>
|
|
743
|
-
<span class="cline-any cline-yes">
|
|
860
|
+
<span class="cline-any cline-yes">247x</span>
|
|
744
861
|
<span class="cline-any cline-no"> </span>
|
|
745
862
|
<span class="cline-any cline-neutral"> </span>
|
|
746
863
|
<span class="cline-any cline-neutral"> </span>
|
|
747
|
-
<span class="cline-any cline-yes">
|
|
864
|
+
<span class="cline-any cline-yes">247x</span>
|
|
748
865
|
<span class="cline-any cline-neutral"> </span>
|
|
749
866
|
<span class="cline-any cline-neutral"> </span>
|
|
750
867
|
<span class="cline-any cline-neutral"> </span>
|
|
751
|
-
<span class="cline-any cline-no"> </span>
|
|
752
|
-
<span class="cline-any cline-no"> </span>
|
|
753
868
|
<span class="cline-any cline-neutral"> </span>
|
|
754
869
|
<span class="cline-any cline-neutral"> </span>
|
|
755
|
-
<span class="cline-any cline-no"> </span>
|
|
756
870
|
<span class="cline-any cline-neutral"> </span>
|
|
871
|
+
<span class="cline-any cline-yes">3x</span>
|
|
872
|
+
<span class="cline-any cline-neutral"> </span>
|
|
873
|
+
<span class="cline-any cline-yes">3x</span>
|
|
757
874
|
<span class="cline-any cline-no"> </span>
|
|
875
|
+
<span class="cline-any cline-neutral"> </span>
|
|
876
|
+
<span class="cline-any cline-neutral"> </span>
|
|
877
|
+
<span class="cline-any cline-yes">3x</span>
|
|
758
878
|
<span class="cline-any cline-no"> </span>
|
|
759
|
-
<span class="cline-any cline-no"> </span>
|
|
760
879
|
<span class="cline-any cline-neutral"> </span>
|
|
761
880
|
<span class="cline-any cline-neutral"> </span>
|
|
881
|
+
<span class="cline-any cline-yes">3x</span>
|
|
882
|
+
<span class="cline-any cline-yes">3x</span>
|
|
883
|
+
<span class="cline-any cline-neutral"> </span>
|
|
762
884
|
<span class="cline-any cline-neutral"> </span>
|
|
763
885
|
<span class="cline-any cline-neutral"> </span>
|
|
764
|
-
<span class="cline-any cline-yes">
|
|
886
|
+
<span class="cline-any cline-yes">1x</span>
|
|
765
887
|
<span class="cline-any cline-neutral"> </span>
|
|
766
888
|
<span class="cline-any cline-neutral"> </span>
|
|
767
889
|
<span class="cline-any cline-neutral"> </span>
|
|
768
890
|
<span class="cline-any cline-neutral"> </span>
|
|
769
891
|
<span class="cline-any cline-neutral"> </span>
|
|
892
|
+
<span class="cline-any cline-yes">1x</span>
|
|
893
|
+
<span class="cline-any cline-yes">1x</span>
|
|
770
894
|
<span class="cline-any cline-neutral"> </span>
|
|
771
895
|
<span class="cline-any cline-neutral"> </span>
|
|
772
896
|
<span class="cline-any cline-neutral"> </span>
|
|
897
|
+
<span class="cline-any cline-yes">2x</span>
|
|
773
898
|
<span class="cline-any cline-neutral"> </span>
|
|
774
899
|
<span class="cline-any cline-neutral"> </span>
|
|
775
900
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -782,36 +907,43 @@
|
|
|
782
907
|
<span class="cline-any cline-neutral"> </span>
|
|
783
908
|
<span class="cline-any cline-neutral"> </span>
|
|
784
909
|
<span class="cline-any cline-neutral"> </span>
|
|
910
|
+
<span class="cline-any cline-yes">3x</span>
|
|
911
|
+
<span class="cline-any cline-yes">2x</span>
|
|
785
912
|
<span class="cline-any cline-neutral"> </span>
|
|
786
913
|
<span class="cline-any cline-yes">1x</span>
|
|
914
|
+
<span class="cline-any cline-yes">1x</span>
|
|
787
915
|
<span class="cline-any cline-neutral"> </span>
|
|
788
916
|
<span class="cline-any cline-neutral"> </span>
|
|
789
917
|
<span class="cline-any cline-neutral"> </span>
|
|
918
|
+
<span class="cline-any cline-yes">1x</span>
|
|
790
919
|
<span class="cline-any cline-neutral"> </span>
|
|
920
|
+
<span class="cline-any cline-no"> </span>
|
|
791
921
|
<span class="cline-any cline-neutral"> </span>
|
|
792
922
|
<span class="cline-any cline-neutral"> </span>
|
|
793
923
|
<span class="cline-any cline-neutral"> </span>
|
|
924
|
+
<span class="cline-any cline-no"> </span>
|
|
925
|
+
<span class="cline-any cline-no"> </span>
|
|
794
926
|
<span class="cline-any cline-neutral"> </span>
|
|
795
927
|
<span class="cline-any cline-neutral"> </span>
|
|
796
|
-
<span class="cline-any cline-yes">1x</span>
|
|
797
928
|
<span class="cline-any cline-no"> </span>
|
|
929
|
+
<span class="cline-any cline-neutral"> </span>
|
|
798
930
|
<span class="cline-any cline-no"> </span>
|
|
799
931
|
<span class="cline-any cline-no"> </span>
|
|
800
932
|
<span class="cline-any cline-no"> </span>
|
|
801
933
|
<span class="cline-any cline-neutral"> </span>
|
|
802
|
-
<span class="cline-any cline-no"> </span>
|
|
803
934
|
<span class="cline-any cline-neutral"> </span>
|
|
804
935
|
<span class="cline-any cline-neutral"> </span>
|
|
805
936
|
<span class="cline-any cline-neutral"> </span>
|
|
937
|
+
<span class="cline-any cline-yes">6x</span>
|
|
938
|
+
<span class="cline-any cline-neutral"> </span>
|
|
939
|
+
<span class="cline-any cline-neutral"> </span>
|
|
806
940
|
<span class="cline-any cline-neutral"> </span>
|
|
807
941
|
<span class="cline-any cline-neutral"> </span>
|
|
808
942
|
<span class="cline-any cline-neutral"> </span>
|
|
809
943
|
<span class="cline-any cline-neutral"> </span>
|
|
810
944
|
<span class="cline-any cline-neutral"> </span>
|
|
811
945
|
<span class="cline-any cline-neutral"> </span>
|
|
812
|
-
<span class="cline-any cline-no"> </span>
|
|
813
946
|
<span class="cline-any cline-neutral"> </span>
|
|
814
|
-
<span class="cline-any cline-no"> </span>
|
|
815
947
|
<span class="cline-any cline-neutral"> </span>
|
|
816
948
|
<span class="cline-any cline-neutral"> </span>
|
|
817
949
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -820,11 +952,29 @@
|
|
|
820
952
|
<span class="cline-any cline-neutral"> </span>
|
|
821
953
|
<span class="cline-any cline-neutral"> </span>
|
|
822
954
|
<span class="cline-any cline-neutral"> </span>
|
|
955
|
+
<span class="cline-any cline-neutral"> </span>
|
|
956
|
+
<span class="cline-any cline-neutral"> </span>
|
|
957
|
+
<span class="cline-any cline-neutral"> </span>
|
|
958
|
+
<span class="cline-any cline-neutral"> </span>
|
|
959
|
+
<span class="cline-any cline-yes">1x</span>
|
|
960
|
+
<span class="cline-any cline-neutral"> </span>
|
|
961
|
+
<span class="cline-any cline-neutral"> </span>
|
|
962
|
+
<span class="cline-any cline-neutral"> </span>
|
|
963
|
+
<span class="cline-any cline-neutral"> </span>
|
|
964
|
+
<span class="cline-any cline-neutral"> </span>
|
|
965
|
+
<span class="cline-any cline-neutral"> </span>
|
|
966
|
+
<span class="cline-any cline-neutral"> </span>
|
|
967
|
+
<span class="cline-any cline-neutral"> </span>
|
|
968
|
+
<span class="cline-any cline-neutral"> </span>
|
|
969
|
+
<span class="cline-any cline-yes">1x</span>
|
|
823
970
|
<span class="cline-any cline-no"> </span>
|
|
824
971
|
<span class="cline-any cline-no"> </span>
|
|
825
972
|
<span class="cline-any cline-no"> </span>
|
|
826
973
|
<span class="cline-any cline-no"> </span>
|
|
827
974
|
<span class="cline-any cline-neutral"> </span>
|
|
975
|
+
<span class="cline-any cline-no"> </span>
|
|
976
|
+
<span class="cline-any cline-neutral"> </span>
|
|
977
|
+
<span class="cline-any cline-neutral"> </span>
|
|
828
978
|
<span class="cline-any cline-neutral"> </span>
|
|
829
979
|
<span class="cline-any cline-neutral"> </span>
|
|
830
980
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -835,10 +985,14 @@
|
|
|
835
985
|
<span class="cline-any cline-neutral"> </span>
|
|
836
986
|
<span class="cline-any cline-yes">1x</span>
|
|
837
987
|
<span class="cline-any cline-neutral"> </span>
|
|
988
|
+
<span class="cline-any cline-neutral"> </span>
|
|
989
|
+
<span class="cline-any cline-neutral"> </span>
|
|
990
|
+
<span class="cline-any cline-neutral"> </span>
|
|
991
|
+
<span class="cline-any cline-neutral"> </span>
|
|
838
992
|
<span class="cline-any cline-yes">1x</span>
|
|
839
993
|
<span class="cline-any cline-yes">1x</span>
|
|
840
994
|
<span class="cline-any cline-neutral"> </span>
|
|
841
|
-
<span class="cline-any cline-
|
|
995
|
+
<span class="cline-any cline-yes">1x</span>
|
|
842
996
|
<span class="cline-any cline-neutral"> </span>
|
|
843
997
|
<span class="cline-any cline-neutral"> </span>
|
|
844
998
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -850,15 +1004,35 @@
|
|
|
850
1004
|
<span class="cline-any cline-yes">1x</span>
|
|
851
1005
|
<span class="cline-any cline-no"> </span>
|
|
852
1006
|
<span class="cline-any cline-no"> </span>
|
|
1007
|
+
<span class="cline-any cline-no"> </span>
|
|
1008
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1009
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1010
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1011
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1012
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1013
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1014
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1015
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1016
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1017
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1018
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1019
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1020
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1021
|
+
<span class="cline-any cline-neutral"> </span>
|
|
853
1022
|
<span class="cline-any cline-neutral"> </span>
|
|
854
1023
|
<span class="cline-any cline-neutral"> </span>
|
|
855
1024
|
<span class="cline-any cline-neutral"> </span>
|
|
1025
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1026
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1027
|
+
<span class="cline-any cline-neutral"> </span>
|
|
856
1028
|
<span class="cline-any cline-yes">4x</span>
|
|
857
1029
|
<span class="cline-any cline-neutral"> </span>
|
|
858
1030
|
<span class="cline-any cline-yes">4x</span>
|
|
859
|
-
<span class="cline-any cline-
|
|
860
|
-
<span class="cline-any cline-
|
|
861
|
-
<span class="cline-any cline-
|
|
1031
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1032
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1033
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1034
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1035
|
+
<span class="cline-any cline-neutral"> </span>
|
|
862
1036
|
<span class="cline-any cline-neutral"> </span>
|
|
863
1037
|
<span class="cline-any cline-neutral"> </span>
|
|
864
1038
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -866,6 +1040,62 @@
|
|
|
866
1040
|
<span class="cline-any cline-yes">4x</span>
|
|
867
1041
|
<span class="cline-any cline-neutral"> </span>
|
|
868
1042
|
<span class="cline-any cline-yes">4x</span>
|
|
1043
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1044
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1045
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1046
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1047
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1048
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1049
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1050
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1051
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1052
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1053
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1054
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1055
|
+
<span class="cline-any cline-no"> </span>
|
|
1056
|
+
<span class="cline-any cline-no"> </span>
|
|
1057
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1058
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1059
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1060
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1061
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1062
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1063
|
+
<span class="cline-any cline-no"> </span>
|
|
1064
|
+
<span class="cline-any cline-no"> </span>
|
|
1065
|
+
<span class="cline-any cline-no"> </span>
|
|
1066
|
+
<span class="cline-any cline-no"> </span>
|
|
1067
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1068
|
+
<span class="cline-any cline-no"> </span>
|
|
1069
|
+
<span class="cline-any cline-no"> </span>
|
|
1070
|
+
<span class="cline-any cline-no"> </span>
|
|
1071
|
+
<span class="cline-any cline-no"> </span>
|
|
1072
|
+
<span class="cline-any cline-no"> </span>
|
|
1073
|
+
<span class="cline-any cline-no"> </span>
|
|
1074
|
+
<span class="cline-any cline-no"> </span>
|
|
1075
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1076
|
+
<span class="cline-any cline-no"> </span>
|
|
1077
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1078
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1079
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1080
|
+
<span class="cline-any cline-no"> </span>
|
|
1081
|
+
<span class="cline-any cline-no"> </span>
|
|
1082
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1083
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1084
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1085
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1086
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1087
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1088
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1089
|
+
<span class="cline-any cline-no"> </span>
|
|
1090
|
+
<span class="cline-any cline-no"> </span>
|
|
1091
|
+
<span class="cline-any cline-no"> </span>
|
|
1092
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1093
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1094
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1095
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1096
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1097
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1098
|
+
<span class="cline-any cline-yes">6x</span>
|
|
869
1099
|
<span class="cline-any cline-yes">3x</span>
|
|
870
1100
|
<span class="cline-any cline-neutral"> </span>
|
|
871
1101
|
<span class="cline-any cline-no"> </span>
|
|
@@ -901,17 +1131,17 @@
|
|
|
901
1131
|
<span class="cline-any cline-neutral"> </span>
|
|
902
1132
|
<span class="cline-any cline-neutral"> </span>
|
|
903
1133
|
<span class="cline-any cline-neutral"> </span>
|
|
904
|
-
<span class="cline-any cline-yes">
|
|
1134
|
+
<span class="cline-any cline-yes">6x</span>
|
|
905
1135
|
<span class="cline-any cline-neutral"> </span>
|
|
906
1136
|
<span class="cline-any cline-neutral"> </span>
|
|
907
|
-
<span class="cline-any cline-yes">
|
|
908
|
-
<span class="cline-any cline-yes">
|
|
1137
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1138
|
+
<span class="cline-any cline-yes">6x</span>
|
|
909
1139
|
<span class="cline-any cline-neutral"> </span>
|
|
910
1140
|
<span class="cline-any cline-neutral"> </span>
|
|
911
1141
|
<span class="cline-any cline-neutral"> </span>
|
|
912
|
-
<span class="cline-any cline-yes">
|
|
1142
|
+
<span class="cline-any cline-yes">6x</span>
|
|
913
1143
|
<span class="cline-any cline-neutral"> </span>
|
|
914
|
-
<span class="cline-any cline-yes">
|
|
1144
|
+
<span class="cline-any cline-yes">6x</span>
|
|
915
1145
|
<span class="cline-any cline-yes">2x</span>
|
|
916
1146
|
<span class="cline-any cline-neutral"> </span>
|
|
917
1147
|
<span class="cline-any cline-yes">2x</span>
|
|
@@ -946,9 +1176,9 @@
|
|
|
946
1176
|
<span class="cline-any cline-neutral"> </span>
|
|
947
1177
|
<span class="cline-any cline-neutral"> </span>
|
|
948
1178
|
<span class="cline-any cline-neutral"> </span>
|
|
949
|
-
<span class="cline-any cline-yes">
|
|
950
|
-
<span class="cline-any cline-yes">
|
|
951
|
-
<span class="cline-any cline-yes">
|
|
1179
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1180
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1181
|
+
<span class="cline-any cline-yes">6x</span>
|
|
952
1182
|
<span class="cline-any cline-yes">80x</span>
|
|
953
1183
|
<span class="cline-any cline-yes">80x</span>
|
|
954
1184
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -957,8 +1187,8 @@
|
|
|
957
1187
|
<span class="cline-any cline-neutral"> </span>
|
|
958
1188
|
<span class="cline-any cline-neutral"> </span>
|
|
959
1189
|
<span class="cline-any cline-neutral"> </span>
|
|
960
|
-
<span class="cline-any cline-yes">
|
|
961
|
-
<span class="cline-any cline-yes">
|
|
1190
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1191
|
+
<span class="cline-any cline-yes">6x</span>
|
|
962
1192
|
<span class="cline-any cline-neutral"> </span>
|
|
963
1193
|
<span class="cline-any cline-neutral"> </span>
|
|
964
1194
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -968,17 +1198,17 @@
|
|
|
968
1198
|
<span class="cline-any cline-neutral"> </span>
|
|
969
1199
|
<span class="cline-any cline-neutral"> </span>
|
|
970
1200
|
<span class="cline-any cline-neutral"> </span>
|
|
1201
|
+
<span class="cline-any cline-yes">6x</span>
|
|
971
1202
|
<span class="cline-any cline-yes">4x</span>
|
|
972
|
-
<span class="cline-any cline-yes">2x</span>
|
|
973
1203
|
<span class="cline-any cline-neutral"> </span>
|
|
974
|
-
<span class="cline-any cline-yes">
|
|
975
|
-
<span class="cline-any cline-yes">
|
|
1204
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1205
|
+
<span class="cline-any cline-yes">4x</span>
|
|
976
1206
|
<span class="cline-any cline-neutral"> </span>
|
|
977
1207
|
<span class="cline-any cline-neutral"> </span>
|
|
978
|
-
<span class="cline-any cline-yes">
|
|
979
|
-
<span class="cline-any cline-yes">
|
|
1208
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1209
|
+
<span class="cline-any cline-yes">50x</span>
|
|
980
1210
|
<span class="cline-any cline-neutral"> </span>
|
|
981
|
-
<span class="cline-any cline-yes">
|
|
1211
|
+
<span class="cline-any cline-yes">50x</span>
|
|
982
1212
|
<span class="cline-any cline-no"> </span>
|
|
983
1213
|
<span class="cline-any cline-neutral"> </span>
|
|
984
1214
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -991,19 +1221,19 @@
|
|
|
991
1221
|
<span class="cline-any cline-neutral"> </span>
|
|
992
1222
|
<span class="cline-any cline-neutral"> </span>
|
|
993
1223
|
<span class="cline-any cline-neutral"> </span>
|
|
994
|
-
<span class="cline-any cline-yes">
|
|
995
|
-
<span class="cline-any cline-yes">
|
|
1224
|
+
<span class="cline-any cline-yes">50x</span>
|
|
1225
|
+
<span class="cline-any cline-yes">50x</span>
|
|
996
1226
|
<span class="cline-any cline-neutral"> </span>
|
|
997
|
-
<span class="cline-any cline-yes">
|
|
1227
|
+
<span class="cline-any cline-yes">49x</span>
|
|
998
1228
|
<span class="cline-any cline-neutral"> </span>
|
|
999
|
-
<span class="cline-any cline-yes">
|
|
1000
|
-
<span class="cline-any cline-
|
|
1229
|
+
<span class="cline-any cline-yes">49x</span>
|
|
1230
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1001
1231
|
<span class="cline-any cline-neutral"> </span>
|
|
1002
1232
|
<span class="cline-any cline-neutral"> </span>
|
|
1003
|
-
<span class="cline-any cline-
|
|
1233
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1004
1234
|
<span class="cline-any cline-neutral"> </span>
|
|
1005
1235
|
<span class="cline-any cline-neutral"> </span>
|
|
1006
|
-
<span class="cline-any cline-yes">
|
|
1236
|
+
<span class="cline-any cline-yes">50x</span>
|
|
1007
1237
|
<span class="cline-any cline-yes">2x</span>
|
|
1008
1238
|
<span class="cline-any cline-yes">2x</span>
|
|
1009
1239
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1020,10 +1250,10 @@
|
|
|
1020
1250
|
<span class="cline-any cline-neutral"> </span>
|
|
1021
1251
|
<span class="cline-any cline-neutral"> </span>
|
|
1022
1252
|
<span class="cline-any cline-neutral"> </span>
|
|
1023
|
-
<span class="cline-any cline-yes">
|
|
1024
|
-
<span class="cline-any cline-yes">
|
|
1253
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1254
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1025
1255
|
<span class="cline-any cline-neutral"> </span>
|
|
1026
|
-
<span class="cline-any cline-yes">
|
|
1256
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1027
1257
|
<span class="cline-any cline-yes">2x</span>
|
|
1028
1258
|
<span class="cline-any cline-neutral"> </span>
|
|
1029
1259
|
<span class="cline-any cline-yes">2x</span>
|
|
@@ -1077,9 +1307,9 @@
|
|
|
1077
1307
|
<span class="cline-any cline-neutral"> </span>
|
|
1078
1308
|
<span class="cline-any cline-neutral"> </span>
|
|
1079
1309
|
<span class="cline-any cline-neutral"> </span>
|
|
1080
|
-
<span class="cline-any cline-yes">
|
|
1310
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1081
1311
|
<span class="cline-any cline-neutral"> </span>
|
|
1082
|
-
<span class="cline-any cline-yes">
|
|
1312
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1083
1313
|
<span class="cline-any cline-yes">2x</span>
|
|
1084
1314
|
<span class="cline-any cline-neutral"> </span>
|
|
1085
1315
|
<span class="cline-any cline-yes">2x</span>
|
|
@@ -1115,15 +1345,15 @@
|
|
|
1115
1345
|
<span class="cline-any cline-neutral"> </span>
|
|
1116
1346
|
<span class="cline-any cline-neutral"> </span>
|
|
1117
1347
|
<span class="cline-any cline-neutral"> </span>
|
|
1118
|
-
<span class="cline-any cline-yes">
|
|
1348
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1119
1349
|
<span class="cline-any cline-neutral"> </span>
|
|
1120
|
-
<span class="cline-any cline-yes">
|
|
1350
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1121
1351
|
<span class="cline-any cline-neutral"> </span>
|
|
1122
1352
|
<span class="cline-any cline-neutral"> </span>
|
|
1123
1353
|
<span class="cline-any cline-neutral"> </span>
|
|
1124
1354
|
<span class="cline-any cline-neutral"> </span>
|
|
1125
1355
|
<span class="cline-any cline-neutral"> </span>
|
|
1126
|
-
<span class="cline-any cline-yes">
|
|
1356
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1127
1357
|
<span class="cline-any cline-yes">3x</span>
|
|
1128
1358
|
<span class="cline-any cline-neutral"> </span>
|
|
1129
1359
|
<span class="cline-any cline-yes">3x</span>
|
|
@@ -1158,7 +1388,7 @@
|
|
|
1158
1388
|
<span class="cline-any cline-neutral"> </span>
|
|
1159
1389
|
<span class="cline-any cline-neutral"> </span>
|
|
1160
1390
|
<span class="cline-any cline-neutral"> </span>
|
|
1161
|
-
<span class="cline-any cline-yes">
|
|
1391
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1162
1392
|
<span class="cline-any cline-neutral"> </span>
|
|
1163
1393
|
<span class="cline-any cline-neutral"> </span>
|
|
1164
1394
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1272,6 +1502,8 @@ export interface LintErrorItem {
|
|
|
1272
1502
|
path: (string | number)[];
|
|
1273
1503
|
code?: string;
|
|
1274
1504
|
value?: unknown;
|
|
1505
|
+
/** Present only when splitByEnvironment is true and the error is from an environment-specific file (rules/force/expose). */
|
|
1506
|
+
environment?: string;
|
|
1275
1507
|
}
|
|
1276
1508
|
|
|
1277
1509
|
export interface LintResult {
|
|
@@ -1331,6 +1563,62 @@ export async function lintProject(
|
|
|
1331
1563
|
|
|
1332
1564
|
return fullPath;
|
|
1333
1565
|
}
|
|
1566
|
+
|
|
1567
|
+
async function getFeaturePathFromIssuePath(
|
|
1568
|
+
featureKey: string,
|
|
1569
|
+
issuePath: (string | number)[] = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
|
|
1570
|
+
): Promise<string> {
|
|
1571
|
+
const defaultPath = getFullPathFromKey("feature", featureKey);
|
|
1572
|
+
|
|
1573
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!projectConfig.splitByEnvironment) {
|
|
1574
|
+
<span class="cstat-no" title="statement not covered" > return defaultPath;</span>
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(projectConfig.environments)) {
|
|
1578
|
+
<span class="cstat-no" title="statement not covered" > return defaultPath;</span>
|
|
1579
|
+
}
|
|
1580
|
+
|
|
1581
|
+
const [topLevelKey, environment] = issuePath;
|
|
1582
|
+
if (
|
|
1583
|
+
(topLevelKey === "rules" || topLevelKey === "force" || topLevelKey === "expose") &&
|
|
1584
|
+
typeof environment === "string"
|
|
1585
|
+
) {
|
|
1586
|
+
const sourcePath = await datasource.getFeaturePropertySourcePath(
|
|
1587
|
+
featureKey,
|
|
1588
|
+
topLevelKey,
|
|
1589
|
+
environment,
|
|
1590
|
+
);
|
|
1591
|
+
|
|
1592
|
+
if (sourcePath) {
|
|
1593
|
+
return sourcePath;
|
|
1594
|
+
}
|
|
1595
|
+
}
|
|
1596
|
+
|
|
1597
|
+
return defaultPath;
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1600
|
+
/**
|
|
1601
|
+
* When the error is from an environment-specific file (splitByEnvironment), the Zod path
|
|
1602
|
+
* is against the merged feature (e.g. rules.production.1.variables.foo). Return the path
|
|
1603
|
+
* as it appears in that file (e.g. rules.1.variables.foo) by stripping the environment segment.
|
|
1604
|
+
*/
|
|
1605
|
+
function getPathRelativeToFeatureFile(
|
|
1606
|
+
issuePath: (string | number)[],
|
|
1607
|
+
targetPath: string,
|
|
1608
|
+
defaultFeaturePath: string,
|
|
1609
|
+
): (string | number)[] {
|
|
1610
|
+
if (targetPath === defaultFeaturePath || issuePath.length < 2) {
|
|
1611
|
+
return issuePath;
|
|
1612
|
+
}
|
|
1613
|
+
const [topLevelKey, second] = issuePath;
|
|
1614
|
+
if (
|
|
1615
|
+
(topLevelKey === "rules" || <span class="branch-1 cbranch-no" title="branch not covered" >topLevelKey === "force" </span>|| <span class="branch-2 cbranch-no" title="branch not covered" >topLevelKey === "expose")</span> &&
|
|
1616
|
+
typeof second === "string"
|
|
1617
|
+
) {
|
|
1618
|
+
return [topLevelKey, ...issuePath.slice(2)];
|
|
1619
|
+
}
|
|
1620
|
+
<span class="cstat-no" title="statement not covered" > return issuePath;</span>
|
|
1621
|
+
}
|
|
1334
1622
|
|
|
1335
1623
|
async function <span class="fstat-no" title="function not covered" >printEntityHeader(</span>entityType: LintEntityType, key: string, fullPath: string) {
|
|
1336
1624
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isJsonMode) {</span>
|
|
@@ -1388,25 +1676,33 @@ export async function lintProject(
|
|
|
1388
1676
|
}
|
|
1389
1677
|
}
|
|
1390
1678
|
|
|
1391
|
-
async function
|
|
1679
|
+
async function reportThrownError(
|
|
1392
1680
|
entityType: LintEntityType,
|
|
1393
1681
|
key: string,
|
|
1394
1682
|
fullPath: string,
|
|
1395
1683
|
error: unknown,
|
|
1396
1684
|
) {
|
|
1397
|
-
const
|
|
1685
|
+
const pathFromError =
|
|
1686
|
+
error &&
|
|
1687
|
+
typeof error === "object" &&
|
|
1688
|
+
"featurevisorFilePath" in error &&
|
|
1689
|
+
typeof error.featurevisorFilePath === "string"
|
|
1690
|
+
? error.featurevisorFilePath
|
|
1691
|
+
: <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
|
|
1692
|
+
const targetPath = pathFromError || <span class="branch-1 cbranch-no" title="branch not covered" >fullPath;</span>
|
|
1693
|
+
const message = error instanceof Error ? error.message : <span class="branch-1 cbranch-no" title="branch not covered" >String(error);</span>
|
|
1398
1694
|
|
|
1399
|
-
|
|
1400
|
-
filePath: path.relative(process.cwd(),
|
|
1695
|
+
recordError({
|
|
1696
|
+
filePath: path.relative(process.cwd(), targetPath),
|
|
1401
1697
|
entityType,
|
|
1402
1698
|
key,
|
|
1403
1699
|
message,
|
|
1404
1700
|
path: [],
|
|
1405
|
-
code: error instanceof Error ? error.name : undefined
|
|
1701
|
+
code: error instanceof Error ? error.name : <span class="branch-1 cbranch-no" title="branch not covered" >undefined,</span>
|
|
1406
1702
|
});
|
|
1407
1703
|
|
|
1408
|
-
|
|
1409
|
-
<span class="cstat-no" title="statement not covered" > await printEntityHeader(entityType, key,
|
|
1704
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!isJsonMode) {
|
|
1705
|
+
<span class="cstat-no" title="statement not covered" > await printEntityHeader(entityType, key, targetPath);</span>
|
|
1410
1706
|
<span class="cstat-no" title="statement not covered" > console.log("");</span>
|
|
1411
1707
|
<span class="cstat-no" title="statement not covered" > console.log(error);</span>
|
|
1412
1708
|
}
|
|
@@ -1419,22 +1715,71 @@ export async function lintProject(
|
|
|
1419
1715
|
error: ZodError,
|
|
1420
1716
|
) {
|
|
1421
1717
|
const issues = getLintIssuesFromZodError(error);
|
|
1718
|
+
const defaultFeaturePath =
|
|
1719
|
+
entityType === "feature" ? getFullPathFromKey("feature", key) : fullPath;
|
|
1720
|
+
|
|
1721
|
+
const issuesWithTargetPath: {
|
|
1722
|
+
issue: (typeof issues)[0];
|
|
1723
|
+
targetPath: string;
|
|
1724
|
+
pathRelativeToFile: (string | number)[];
|
|
1725
|
+
}[] = [];
|
|
1726
|
+
for (const issue of issues) {
|
|
1727
|
+
const targetPath =
|
|
1728
|
+
entityType === "feature" ? await getFeaturePathFromIssuePath(key, issue.path) : fullPath;
|
|
1729
|
+
const pathRelativeToFile =
|
|
1730
|
+
entityType === "feature"
|
|
1731
|
+
? getPathRelativeToFeatureFile(issue.path, targetPath, defaultFeaturePath)
|
|
1732
|
+
: issue.path;
|
|
1733
|
+
const isFromEnvFile =
|
|
1734
|
+
entityType === "feature" &&
|
|
1735
|
+
targetPath !== defaultFeaturePath &&
|
|
1736
|
+
issue.path.length >= 2 &&
|
|
1737
|
+
(issue.path[0] === "rules" || <span class="branch-4 cbranch-no" title="branch not covered" >issue.path[0] === "force" </span>|| <span class="branch-5 cbranch-no" title="branch not covered" >issue.path[0] === "expose")</span> &&
|
|
1738
|
+
typeof issue.path[1] === "string";
|
|
1739
|
+
const environment = isFromEnvFile ? (issue.path[1] as string) : undefined;
|
|
1740
|
+
issuesWithTargetPath.push({ issue, targetPath, pathRelativeToFile });
|
|
1422
1741
|
|
|
1423
|
-
issues.forEach((issue) => {
|
|
1424
1742
|
recordError({
|
|
1425
|
-
filePath: path.relative(process.cwd(),
|
|
1743
|
+
filePath: path.relative(process.cwd(), targetPath),
|
|
1426
1744
|
entityType,
|
|
1427
1745
|
key,
|
|
1428
1746
|
message: issue.message,
|
|
1429
|
-
path:
|
|
1747
|
+
path: pathRelativeToFile,
|
|
1430
1748
|
code: issue.code,
|
|
1431
1749
|
value: issue.value,
|
|
1750
|
+
...(environment !== undefined && { environment }),
|
|
1432
1751
|
});
|
|
1433
|
-
}
|
|
1752
|
+
}
|
|
1434
1753
|
|
|
1435
1754
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (!isJsonMode) {
|
|
1436
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1437
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1755
|
+
<span class="cstat-no" title="statement not covered" > if (entityType === "feature" && issuesWithTargetPath.length > 0) {</span>
|
|
1756
|
+
const byPath = <span class="cstat-no" title="statement not covered" >new Map<</span>
|
|
1757
|
+
string,
|
|
1758
|
+
{
|
|
1759
|
+
issue: (typeof issuesWithTargetPath)[0]["issue"];
|
|
1760
|
+
pathRelativeToFile: (string | number)[];
|
|
1761
|
+
}[]
|
|
1762
|
+
>();
|
|
1763
|
+
<span class="cstat-no" title="statement not covered" > for (const { issue, targetPath, pathRelativeToFile } of issuesWithTargetPath) {</span>
|
|
1764
|
+
const pathKey = <span class="cstat-no" title="statement not covered" >targetPath;</span>
|
|
1765
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!byPath.has(pathKey)) <span class="cstat-no" title="statement not covered" >byPath.set(pathKey, []);</span></span>
|
|
1766
|
+
<span class="cstat-no" title="statement not covered" > byPath.get(pathKey)!.push({ issue, pathRelativeToFile });</span>
|
|
1767
|
+
}
|
|
1768
|
+
<span class="cstat-no" title="statement not covered" > for (const [targetPathKey, groupItems] of byPath) {</span>
|
|
1769
|
+
<span class="cstat-no" title="statement not covered" > await printEntityHeader(entityType, key, targetPathKey);</span>
|
|
1770
|
+
<span class="cstat-no" title="statement not covered" > for (const { issue, pathRelativeToFile } of groupItems) {</span>
|
|
1771
|
+
<span class="cstat-no" title="statement not covered" > console.log(CLI_FORMAT_RED, ` => Error: ${issue.message}`);</span>
|
|
1772
|
+
<span class="cstat-no" title="statement not covered" > console.log(" Path:", pathRelativeToFile.join("."));</span>
|
|
1773
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof issue.value !== "undefined" && issue.value !== "undefined") {</span>
|
|
1774
|
+
<span class="cstat-no" title="statement not covered" > console.log(" Value:", issue.value);</span>
|
|
1775
|
+
}
|
|
1776
|
+
<span class="cstat-no" title="statement not covered" > console.log("");</span>
|
|
1777
|
+
}
|
|
1778
|
+
}
|
|
1779
|
+
} else {
|
|
1780
|
+
<span class="cstat-no" title="statement not covered" > await printEntityHeader(entityType, key, fullPath);</span>
|
|
1781
|
+
<span class="cstat-no" title="statement not covered" > printZodError(error);</span>
|
|
1782
|
+
}
|
|
1438
1783
|
}
|
|
1439
1784
|
}
|
|
1440
1785
|
|
|
@@ -1581,11 +1926,11 @@ export async function lintProject(
|
|
|
1581
1926
|
|
|
1582
1927
|
const result = featureZodSchema.safeParse(parsed);
|
|
1583
1928
|
|
|
1584
|
-
|
|
1585
|
-
|
|
1929
|
+
if (!result.success && "error" in result) {
|
|
1930
|
+
await reportZodValidationError("feature", key, fullPath, result.error);
|
|
1586
1931
|
}
|
|
1587
1932
|
} catch (error) {
|
|
1588
|
-
|
|
1933
|
+
await reportThrownError("feature", key, fullPath, error);
|
|
1589
1934
|
}
|
|
1590
1935
|
|
|
1591
1936
|
if (parsed && parsed.required) {
|
|
@@ -1825,7 +2170,7 @@ export const lintPlugin: Plugin = {
|
|
|
1825
2170
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1826
2171
|
Code coverage generated by
|
|
1827
2172
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1828
|
-
at 2026-02-
|
|
2173
|
+
at 2026-02-26T22:05:09.172Z
|
|
1829
2174
|
</div>
|
|
1830
2175
|
<script src="../prettify.js"></script>
|
|
1831
2176
|
<script>
|