@featurevisor/core 1.35.3 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.md +0 -6
- package/coverage/clover.xml +321 -237
- package/coverage/coverage-final.json +8 -8
- package/coverage/lcov-report/index.html +77 -47
- package/coverage/lcov-report/lib/builder/allocator.js.html +14 -14
- package/coverage/lcov-report/lib/builder/index.html +16 -16
- package/coverage/lcov-report/lib/builder/revision.js.html +3 -3
- package/coverage/lcov-report/lib/builder/traffic.js.html +88 -64
- package/coverage/lcov-report/lib/list/index.html +116 -0
- package/coverage/lcov-report/lib/{tester → list}/matrix.js.html +90 -66
- package/coverage/lcov-report/lib/tester/helpers.js.html +295 -0
- package/coverage/lcov-report/lib/tester/index.html +20 -35
- package/coverage/lcov-report/src/builder/allocator.ts.html +2 -2
- package/coverage/lcov-report/src/builder/index.html +15 -15
- package/coverage/lcov-report/src/builder/revision.ts.html +1 -1
- package/coverage/lcov-report/src/builder/traffic.ts.html +96 -24
- package/coverage/lcov-report/src/list/index.html +116 -0
- package/coverage/lcov-report/src/{tester → list}/matrix.ts.html +87 -21
- package/coverage/lcov-report/src/tester/helpers.ts.html +313 -0
- package/coverage/lcov-report/src/tester/index.html +20 -35
- package/coverage/lcov.info +592 -436
- package/lib/assess-distribution/index.d.ts +1 -1
- package/lib/assess-distribution/index.js +102 -162
- package/lib/assess-distribution/index.js.map +1 -1
- package/lib/benchmark/index.js +87 -143
- package/lib/benchmark/index.js.map +1 -1
- package/lib/builder/allocator.d.ts +1 -1
- package/lib/builder/allocator.js +12 -12
- package/lib/builder/allocator.js.map +1 -1
- package/lib/builder/allocator.spec.js +22 -22
- package/lib/builder/allocator.spec.js.map +1 -1
- package/lib/builder/buildDatafile.d.ts +4 -3
- package/lib/builder/buildDatafile.js +311 -388
- package/lib/builder/buildDatafile.js.map +1 -1
- package/lib/builder/buildProject.d.ts +2 -1
- package/lib/builder/buildProject.js +96 -183
- package/lib/builder/buildProject.js.map +1 -1
- package/lib/builder/convertToV1.d.ts +10 -0
- package/lib/builder/convertToV1.js +119 -0
- package/lib/builder/convertToV1.js.map +1 -0
- package/lib/builder/getFeatureRanges.d.ts +1 -1
- package/lib/builder/getFeatureRanges.js +32 -105
- package/lib/builder/getFeatureRanges.js.map +1 -1
- package/lib/builder/hashes.d.ts +4 -0
- package/lib/builder/hashes.js +70 -0
- package/lib/builder/hashes.js.map +1 -0
- package/lib/builder/revision.js +2 -2
- package/lib/builder/revision.js.map +1 -1
- package/lib/builder/revision.spec.js +1 -1
- package/lib/builder/revision.spec.js.map +1 -1
- package/lib/builder/traffic.d.ts +1 -1
- package/lib/builder/traffic.js +57 -49
- package/lib/builder/traffic.js.map +1 -1
- package/lib/builder/traffic.spec.js +14 -14
- package/lib/builder/traffic.spec.js.map +1 -1
- package/lib/cli/cli.js +60 -129
- package/lib/cli/cli.js.map +1 -1
- package/lib/cli/plugins.js +14 -16
- package/lib/cli/plugins.js.map +1 -1
- package/lib/config/parsers.js +1 -1
- package/lib/config/parsers.js.map +1 -1
- package/lib/config/projectConfig.d.ts +8 -6
- package/lib/config/projectConfig.js +31 -72
- package/lib/config/projectConfig.js.map +1 -1
- package/lib/datasource/adapter.d.ts +1 -1
- package/lib/datasource/adapter.js +2 -5
- package/lib/datasource/adapter.js.map +1 -1
- package/lib/datasource/datasource.d.ts +2 -1
- package/lib/datasource/datasource.js +107 -148
- package/lib/datasource/datasource.js.map +1 -1
- package/lib/datasource/filesystemAdapter.d.ts +1 -1
- package/lib/datasource/filesystemAdapter.js +224 -360
- package/lib/datasource/filesystemAdapter.js.map +1 -1
- package/lib/evaluate/index.d.ts +1 -1
- package/lib/evaluate/index.js +120 -188
- package/lib/evaluate/index.js.map +1 -1
- package/lib/find-duplicate-segments/findDuplicateSegments.d.ts +1 -1
- package/lib/find-duplicate-segments/findDuplicateSegments.js +40 -128
- package/lib/find-duplicate-segments/findDuplicateSegments.js.map +1 -1
- package/lib/find-duplicate-segments/index.js +27 -82
- package/lib/find-duplicate-segments/index.js.map +1 -1
- package/lib/find-usage/index.d.ts +7 -5
- package/lib/find-usage/index.js +333 -507
- package/lib/find-usage/index.js.map +1 -1
- package/lib/generate-code/index.js +36 -91
- package/lib/generate-code/index.js.map +1 -1
- package/lib/generate-code/typescript.js +117 -157
- package/lib/generate-code/typescript.js.map +1 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -1
- package/lib/index.js.map +1 -1
- package/lib/info/index.js +45 -133
- package/lib/info/index.js.map +1 -1
- package/lib/init/index.d.ts +1 -1
- package/lib/init/index.js +16 -64
- package/lib/init/index.js.map +1 -1
- package/lib/linter/attributeSchema.d.ts +21 -6
- package/lib/linter/attributeSchema.js +18 -4
- package/lib/linter/attributeSchema.js.map +1 -1
- package/lib/linter/checkCircularDependency.d.ts +1 -1
- package/lib/linter/checkCircularDependency.js +22 -80
- package/lib/linter/checkCircularDependency.js.map +1 -1
- package/lib/linter/checkPercentageExceedingSlot.d.ts +1 -1
- package/lib/linter/checkPercentageExceedingSlot.js +36 -76
- package/lib/linter/checkPercentageExceedingSlot.js.map +1 -1
- package/lib/linter/conditionSchema.d.ts +1 -1
- package/lib/linter/conditionSchema.js +89 -41
- package/lib/linter/conditionSchema.js.map +1 -1
- package/lib/linter/featureSchema.d.ts +345 -197
- package/lib/linter/featureSchema.js +313 -172
- package/lib/linter/featureSchema.js.map +1 -1
- package/lib/linter/groupSchema.js +6 -6
- package/lib/linter/groupSchema.js.map +1 -1
- package/lib/linter/lintProject.js +306 -480
- package/lib/linter/lintProject.js.map +1 -1
- package/lib/linter/printError.js +7 -7
- package/lib/linter/printError.js.map +1 -1
- package/lib/linter/segmentSchema.js +2 -2
- package/lib/linter/segmentSchema.js.map +1 -1
- package/lib/linter/testSchema.d.ts +155 -3
- package/lib/linter/testSchema.js +47 -17
- package/lib/linter/testSchema.js.map +1 -1
- package/lib/list/index.d.ts +1 -0
- package/lib/list/index.js +349 -517
- package/lib/list/index.js.map +1 -1
- package/lib/{tester → list}/matrix.d.ts +1 -1
- package/lib/{tester → list}/matrix.js +50 -42
- package/lib/list/matrix.js.map +1 -0
- package/lib/{tester → list}/matrix.spec.js +7 -7
- package/lib/list/matrix.spec.js.map +1 -0
- package/lib/site/exportSite.js +25 -71
- package/lib/site/exportSite.js.map +1 -1
- package/lib/site/generateHistory.d.ts +1 -1
- package/lib/site/generateHistory.js +26 -82
- package/lib/site/generateHistory.js.map +1 -1
- package/lib/site/generateSiteSearchIndex.d.ts +1 -1
- package/lib/site/generateSiteSearchIndex.js +182 -259
- package/lib/site/generateSiteSearchIndex.js.map +1 -1
- package/lib/site/getLastModifiedFromHistory.d.ts +1 -1
- package/lib/site/getLastModifiedFromHistory.js +2 -2
- package/lib/site/getLastModifiedFromHistory.js.map +1 -1
- package/lib/site/getOwnerAndRepoFromUrl.js +6 -6
- package/lib/site/getOwnerAndRepoFromUrl.js.map +1 -1
- package/lib/site/getRelativePaths.js +7 -7
- package/lib/site/getRelativePaths.js.map +1 -1
- package/lib/site/getRepoDetails.js +20 -20
- package/lib/site/getRepoDetails.js.map +1 -1
- package/lib/site/index.js +25 -73
- package/lib/site/index.js.map +1 -1
- package/lib/site/serveSite.js +10 -10
- package/lib/site/serveSite.js.map +1 -1
- package/lib/tester/helpers.d.ts +2 -0
- package/lib/tester/helpers.js +71 -0
- package/lib/tester/helpers.js.map +1 -0
- package/lib/tester/helpers.spec.js +115 -0
- package/lib/tester/helpers.spec.js.map +1 -0
- package/lib/tester/index.d.ts +0 -1
- package/lib/tester/index.js +0 -1
- package/lib/tester/index.js.map +1 -1
- package/lib/tester/prettyDuration.js +11 -11
- package/lib/tester/prettyDuration.js.map +1 -1
- package/lib/tester/printTestResult.d.ts +1 -1
- package/lib/tester/printTestResult.js +35 -15
- package/lib/tester/printTestResult.js.map +1 -1
- package/lib/tester/testFeature.d.ts +4 -2
- package/lib/tester/testFeature.js +264 -226
- package/lib/tester/testFeature.js.map +1 -1
- package/lib/tester/testProject.d.ts +3 -7
- package/lib/tester/testProject.js +145 -246
- package/lib/tester/testProject.js.map +1 -1
- package/lib/tester/testSegment.d.ts +5 -2
- package/lib/tester/testSegment.js +65 -102
- package/lib/tester/testSegment.js.map +1 -1
- package/lib/utils/extractKeys.d.ts +2 -1
- package/lib/utils/extractKeys.js +57 -12
- package/lib/utils/extractKeys.js.map +1 -1
- package/lib/utils/git.d.ts +1 -1
- package/lib/utils/git.js +23 -23
- package/lib/utils/git.js.map +1 -1
- package/lib/utils/pretty.js +2 -4
- package/lib/utils/pretty.js.map +1 -1
- package/package.json +5 -6
- package/src/assess-distribution/index.ts +3 -2
- package/src/benchmark/index.ts +3 -3
- package/src/builder/allocator.spec.ts +1 -1
- package/src/builder/allocator.ts +1 -1
- package/src/builder/buildDatafile.ts +161 -124
- package/src/builder/buildProject.ts +6 -3
- package/src/builder/convertToV1.ts +166 -0
- package/src/builder/getFeatureRanges.ts +1 -1
- package/src/builder/hashes.ts +109 -0
- package/src/builder/traffic.ts +40 -16
- package/src/cli/cli.ts +1 -1
- package/src/cli/plugins.ts +0 -2
- package/src/config/projectConfig.ts +13 -10
- package/src/datasource/adapter.ts +1 -1
- package/src/datasource/datasource.ts +23 -2
- package/src/datasource/filesystemAdapter.ts +11 -12
- package/src/evaluate/index.ts +7 -6
- package/src/find-duplicate-segments/findDuplicateSegments.ts +1 -1
- package/src/find-usage/index.ts +111 -44
- package/src/generate-code/index.ts +1 -3
- package/src/generate-code/typescript.ts +7 -29
- package/src/index.ts +0 -1
- package/src/info/index.ts +2 -2
- package/src/init/index.ts +2 -2
- package/src/linter/attributeSchema.ts +18 -2
- package/src/linter/checkCircularDependency.ts +1 -1
- package/src/linter/checkPercentageExceedingSlot.ts +28 -8
- package/src/linter/conditionSchema.ts +66 -10
- package/src/linter/featureSchema.ts +312 -116
- package/src/linter/lintProject.ts +9 -4
- package/src/linter/testSchema.ts +42 -3
- package/src/list/index.ts +18 -30
- package/src/{tester → list}/matrix.ts +33 -11
- package/src/site/exportSite.ts +2 -4
- package/src/site/generateHistory.ts +1 -1
- package/src/site/generateSiteSearchIndex.ts +58 -50
- package/src/site/getLastModifiedFromHistory.ts +1 -1
- package/src/tester/helpers.spec.ts +149 -0
- package/src/tester/helpers.ts +76 -0
- package/src/tester/index.ts +0 -1
- package/src/tester/printTestResult.ts +25 -3
- package/src/tester/testFeature.ts +270 -124
- package/src/tester/testProject.ts +28 -49
- package/src/tester/testSegment.ts +48 -40
- package/src/utils/extractKeys.ts +58 -1
- package/src/utils/git.ts +1 -1
- package/tsconfig.cjs.json +1 -0
- package/coverage/lcov-report/lib/tester/checkIfObjectsAreEqual.js.html +0 -151
- package/coverage/lcov-report/src/tester/checkIfObjectsAreEqual.ts.html +0 -157
- package/lib/restore/index.d.ts +0 -4
- package/lib/restore/index.js +0 -91
- package/lib/restore/index.js.map +0 -1
- package/lib/tester/checkIfArraysAreEqual.d.ts +0 -1
- package/lib/tester/checkIfArraysAreEqual.js +0 -18
- package/lib/tester/checkIfArraysAreEqual.js.map +0 -1
- package/lib/tester/checkIfObjectsAreEqual.d.ts +0 -1
- package/lib/tester/checkIfObjectsAreEqual.js +0 -23
- package/lib/tester/checkIfObjectsAreEqual.js.map +0 -1
- package/lib/tester/checkIfObjectsAreEqual.spec.js +0 -26
- package/lib/tester/checkIfObjectsAreEqual.spec.js.map +0 -1
- package/lib/tester/matrix.js.map +0 -1
- package/lib/tester/matrix.spec.js.map +0 -1
- package/src/restore/index.ts +0 -42
- package/src/tester/checkIfArraysAreEqual.ts +0 -16
- package/src/tester/checkIfObjectsAreEqual.spec.ts +0 -31
- package/src/tester/checkIfObjectsAreEqual.ts +0 -24
- /package/lib/{tester → list}/matrix.spec.d.ts +0 -0
- /package/lib/tester/{checkIfObjectsAreEqual.spec.d.ts → helpers.spec.d.ts} +0 -0
- /package/src/{tester → list}/matrix.spec.ts +0 -0
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">89.7% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>61/68</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">73.07% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>38/52</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">
|
|
47
|
+
<span class="strong">89.39% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>59/
|
|
49
|
+
<span class='fraction'>59/66</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -191,7 +191,15 @@
|
|
|
191
191
|
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
192
|
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
193
|
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
-
<a name='L129'></a><a href='#L129'>129</a
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
195
203
|
<span class="cline-any cline-yes">1x</span>
|
|
196
204
|
<span class="cline-any cline-yes">1x</span>
|
|
197
205
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -211,15 +219,9 @@
|
|
|
211
219
|
<span class="cline-any cline-no"> </span>
|
|
212
220
|
<span class="cline-any cline-neutral"> </span>
|
|
213
221
|
<span class="cline-any cline-yes">9x</span>
|
|
214
|
-
<span class="cline-any cline-neutral"> </span>
|
|
215
|
-
<span class="cline-any cline-yes">21x</span>
|
|
216
222
|
<span class="cline-any cline-yes">21x</span>
|
|
217
223
|
<span class="cline-any cline-neutral"> </span>
|
|
218
|
-
<span class="cline-any cline-neutral"> </span>
|
|
219
|
-
<span class="cline-any cline-yes">9x</span>
|
|
220
224
|
<span class="cline-any cline-yes">22x</span>
|
|
221
|
-
<span class="cline-any cline-yes">22x</span>
|
|
222
|
-
<span class="cline-any cline-neutral"> </span>
|
|
223
225
|
<span class="cline-any cline-neutral"> </span>
|
|
224
226
|
<span class="cline-any cline-neutral"> </span>
|
|
225
227
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -261,6 +263,7 @@
|
|
|
261
263
|
<span class="cline-any cline-neutral"> </span>
|
|
262
264
|
<span class="cline-any cline-neutral"> </span>
|
|
263
265
|
<span class="cline-any cline-neutral"> </span>
|
|
266
|
+
<span class="cline-any cline-neutral"> </span>
|
|
264
267
|
<span class="cline-any cline-yes">13x</span>
|
|
265
268
|
<span class="cline-any cline-no"> </span>
|
|
266
269
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -276,13 +279,16 @@
|
|
|
276
279
|
<span class="cline-any cline-neutral"> </span>
|
|
277
280
|
<span class="cline-any cline-neutral"> </span>
|
|
278
281
|
<span class="cline-any cline-neutral"> </span>
|
|
282
|
+
<span class="cline-any cline-neutral"> </span>
|
|
283
|
+
<span class="cline-any cline-neutral"> </span>
|
|
284
|
+
<span class="cline-any cline-neutral"> </span>
|
|
285
|
+
<span class="cline-any cline-neutral"> </span>
|
|
279
286
|
<span class="cline-any cline-yes">13x</span>
|
|
280
287
|
<span class="cline-any cline-yes">13x</span>
|
|
281
288
|
<span class="cline-any cline-neutral"> </span>
|
|
282
289
|
<span class="cline-any cline-yes">1x</span>
|
|
283
290
|
<span class="cline-any cline-yes">1x</span>
|
|
284
291
|
<span class="cline-any cline-yes">2x</span>
|
|
285
|
-
<span class="cline-any cline-yes">2x</span>
|
|
286
292
|
<span class="cline-any cline-neutral"> </span>
|
|
287
293
|
<span class="cline-any cline-neutral"> </span>
|
|
288
294
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -295,12 +301,18 @@
|
|
|
295
301
|
<span class="cline-any cline-yes">13x</span>
|
|
296
302
|
<span class="cline-any cline-yes">30x</span>
|
|
297
303
|
<span class="cline-any cline-yes">30x</span>
|
|
304
|
+
<span class="cline-any cline-neutral"> </span>
|
|
305
|
+
<span class="cline-any cline-no"> </span>
|
|
306
|
+
<span class="cline-any cline-neutral"> </span>
|
|
307
|
+
<span class="cline-any cline-yes">30x</span>
|
|
298
308
|
<span class="cline-any cline-yes">30x</span>
|
|
299
309
|
<span class="cline-any cline-neutral"> </span>
|
|
300
310
|
<span class="cline-any cline-neutral"> </span>
|
|
301
311
|
<span class="cline-any cline-yes">30x</span>
|
|
302
312
|
<span class="cline-any cline-yes">30x</span>
|
|
303
313
|
<span class="cline-any cline-yes">26x</span>
|
|
314
|
+
<span class="cline-any cline-yes">26x</span>
|
|
315
|
+
<span class="cline-any cline-neutral"> </span>
|
|
304
316
|
<span class="cline-any cline-neutral"> </span>
|
|
305
317
|
<span class="cline-any cline-neutral"> </span>
|
|
306
318
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -309,11 +321,15 @@
|
|
|
309
321
|
<span class="cline-any cline-neutral"> </span>
|
|
310
322
|
<span class="cline-any cline-neutral"> </span>
|
|
311
323
|
<span class="cline-any cline-yes">13x</span>
|
|
324
|
+
<span class="cline-any cline-yes">13x</span>
|
|
312
325
|
<span class="cline-any cline-yes">28x</span>
|
|
313
326
|
<span class="cline-any cline-no"> </span>
|
|
314
327
|
<span class="cline-any cline-neutral"> </span>
|
|
315
328
|
<span class="cline-any cline-yes">28x</span>
|
|
316
329
|
<span class="cline-any cline-neutral"> </span>
|
|
330
|
+
<span class="cline-any cline-yes">13x</span>
|
|
331
|
+
<span class="cline-any cline-no"> </span>
|
|
332
|
+
<span class="cline-any cline-neutral"> </span>
|
|
317
333
|
<span class="cline-any cline-neutral"> </span>
|
|
318
334
|
<span class="cline-any cline-yes">13x</span>
|
|
319
335
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -325,8 +341,8 @@ exports.detectIfVariationsChanged = detectIfVariationsChanged;
|
|
|
325
341
|
exports.getRulePercentageDiff = getRulePercentageDiff;
|
|
326
342
|
exports.detectIfRangesChanged = detectIfRangesChanged;
|
|
327
343
|
exports.getTraffic = getTraffic;
|
|
328
|
-
|
|
329
|
-
|
|
344
|
+
const sdk_1 = require("@featurevisor/sdk");
|
|
345
|
+
const allocator_1 = require("./allocator");
|
|
330
346
|
function detectIfVariationsChanged(yamlVariations, // as exists in latest YAML
|
|
331
347
|
existingFeature) {
|
|
332
348
|
if (!existingFeature || typeof existingFeature.variations === "undefined") {
|
|
@@ -338,26 +354,20 @@ existingFeature) {
|
|
|
338
354
|
// variations didn't exist before, and not even now
|
|
339
355
|
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
340
356
|
}
|
|
341
|
-
|
|
342
|
-
? JSON.stringify(yamlVariations.map(
|
|
343
|
-
var value = _a.value, weight = _a.weight;
|
|
344
|
-
return ({ value: value, weight: weight });
|
|
345
|
-
}))
|
|
357
|
+
const checkVariations = Array.isArray(yamlVariations)
|
|
358
|
+
? JSON.stringify(yamlVariations.map(({ value, weight }) => ({ value, weight })))
|
|
346
359
|
: <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
|
|
347
|
-
return (JSON.stringify(existingFeature.variations.map(
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
weight: weight,
|
|
352
|
-
});
|
|
353
|
-
})) !== checkVariations);
|
|
360
|
+
return (JSON.stringify(existingFeature.variations.map(({ value, weight }) => ({
|
|
361
|
+
value,
|
|
362
|
+
weight,
|
|
363
|
+
}))) !== checkVariations);
|
|
354
364
|
}
|
|
355
365
|
function getRulePercentageDiff(trafficPercentage, // 0 to 100k
|
|
356
366
|
existingTrafficRule) {
|
|
357
367
|
if (!existingTrafficRule) {
|
|
358
368
|
return 0;
|
|
359
369
|
}
|
|
360
|
-
|
|
370
|
+
const existingPercentage = existingTrafficRule.percentage;
|
|
361
371
|
return trafficPercentage - existingPercentage;
|
|
362
372
|
}
|
|
363
373
|
function detectIfRangesChanged(availableRanges, // as exists in latest YAML
|
|
@@ -377,16 +387,17 @@ variations, parsedRules,
|
|
|
377
387
|
existingFeature,
|
|
378
388
|
// ranges from group slots
|
|
379
389
|
ranges) {
|
|
380
|
-
|
|
381
|
-
// @
|
|
382
|
-
|
|
390
|
+
const result = [];
|
|
391
|
+
// @NOTE: may be pass from builder directly?
|
|
392
|
+
const availableRanges = ranges && <span class="branch-1 cbranch-no" title="branch not covered" >ranges.length > 0 </span>? <span class="branch-0 cbranch-no" title="branch not covered" >ranges </span>: [[0, sdk_1.MAX_BUCKETED_NUMBER]];
|
|
383
393
|
parsedRules.forEach(function (parsedRule) {
|
|
384
|
-
|
|
385
|
-
|
|
394
|
+
const rulePercentage = parsedRule.percentage; // 0 - 100
|
|
395
|
+
const traffic = {
|
|
386
396
|
key: parsedRule.key,
|
|
387
397
|
segments: parsedRule.segments,
|
|
388
398
|
percentage: rulePercentage * (sdk_1.MAX_BUCKETED_NUMBER / 100),
|
|
389
399
|
allocation: [],
|
|
400
|
+
variationWeights: parsedRule.variationWeights,
|
|
390
401
|
};
|
|
391
402
|
// overrides
|
|
392
403
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (parsedRule.variables) {
|
|
@@ -396,53 +407,66 @@ ranges) {
|
|
|
396
407
|
<span class="cstat-no" title="statement not covered" > traffic.variation = parsedRule.variation;</span>
|
|
397
408
|
}
|
|
398
409
|
// detect changes
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
410
|
+
const variationsChanged = detectIfVariationsChanged(variations, existingFeature);
|
|
411
|
+
const existingTrafficRule = existingFeature?.traffic.find((t) => t.key === parsedRule.key);
|
|
412
|
+
const rulePercentageDiff = getRulePercentageDiff(traffic.percentage, existingTrafficRule);
|
|
413
|
+
const rangesChanged = detectIfRangesChanged(availableRanges, existingFeature);
|
|
414
|
+
const needsRebucketing = !existingTrafficRule || // new rule
|
|
404
415
|
variationsChanged || // variations changed
|
|
405
416
|
rulePercentageDiff < 0 || // percentage decreased
|
|
406
|
-
rangesChanged
|
|
407
|
-
|
|
408
|
-
|
|
417
|
+
rangesChanged || // belongs to a group, and group ranges changed
|
|
418
|
+
// @NOTE: this means, if variationWeights is present, it will always rebucket.
|
|
419
|
+
// worth checking if we can maintain consistent bucketing for this use case as well.
|
|
420
|
+
// but this use case is unlikely to hit in practice because it doesn't matter if the feature itself is 100% rolled out.
|
|
421
|
+
traffic.variationWeights; // variation weights overridden
|
|
422
|
+
let updatedAvailableRanges = JSON.parse(JSON.stringify(availableRanges));
|
|
423
|
+
if (existingTrafficRule && existingTrafficRule.allocation && !needsRebucketing) {
|
|
409
424
|
// increase: build on top of existing allocations
|
|
410
|
-
|
|
411
|
-
traffic.allocation = existingTrafficRule.allocation.map(function (
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
variation: variation,
|
|
425
|
+
let existingSum = 0;
|
|
426
|
+
traffic.allocation = existingTrafficRule.allocation.map(function ({ variation, range }) {
|
|
427
|
+
const result = {
|
|
428
|
+
variation,
|
|
415
429
|
range: range,
|
|
416
430
|
};
|
|
417
|
-
|
|
431
|
+
existingSum += range[1] - range[0];
|
|
418
432
|
return result;
|
|
419
433
|
});
|
|
420
|
-
updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(availableRanges,
|
|
434
|
+
updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(availableRanges, existingSum);
|
|
421
435
|
}
|
|
422
436
|
<span class="missing-if-branch" title="else path not taken" >E</span>if (Array.isArray(variations)) {
|
|
423
437
|
variations.forEach(function (variation) {
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
438
|
+
let weight = variation.weight;
|
|
439
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (traffic.variationWeights && <span class="branch-1 cbranch-no" title="branch not covered" >traffic.variationWeights[variation.value])</span> {
|
|
440
|
+
// override weight from rule
|
|
441
|
+
<span class="cstat-no" title="statement not covered" > weight = traffic.variationWeights[variation.value];</span>
|
|
442
|
+
}
|
|
443
|
+
const percentage = weight * (sdk_1.MAX_BUCKETED_NUMBER / 100);
|
|
444
|
+
const toFillValue = needsRebucketing
|
|
427
445
|
? percentage * (rulePercentage / 100) // whole value
|
|
428
446
|
: (weight / 100) * rulePercentageDiff; // incrementing
|
|
429
|
-
|
|
447
|
+
const rangesToFill = (0, allocator_1.getAllocation)(updatedAvailableRanges, toFillValue);
|
|
430
448
|
rangesToFill.forEach(function (range) {
|
|
431
|
-
traffic.allocation
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
449
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (traffic.allocation) {
|
|
450
|
+
traffic.allocation.push({
|
|
451
|
+
variation: variation.value,
|
|
452
|
+
range,
|
|
453
|
+
});
|
|
454
|
+
}
|
|
435
455
|
});
|
|
436
456
|
updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(updatedAvailableRanges, toFillValue);
|
|
437
457
|
});
|
|
438
458
|
}
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
<span class="
|
|
459
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (traffic.allocation) {
|
|
460
|
+
traffic.allocation = traffic.allocation.filter((a) => {
|
|
461
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (a.range && a.range[0] === a.range[1]) {
|
|
462
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
463
|
+
}
|
|
464
|
+
return true;
|
|
465
|
+
});
|
|
466
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (traffic.allocation.length === 0) {
|
|
467
|
+
<span class="cstat-no" title="statement not covered" > delete traffic.allocation;</span>
|
|
442
468
|
}
|
|
443
|
-
|
|
444
|
-
});
|
|
445
|
-
// @TODO: in v2, remove "allocation" property if an empty array
|
|
469
|
+
}
|
|
446
470
|
result.push(traffic);
|
|
447
471
|
});
|
|
448
472
|
return result;
|
|
@@ -454,7 +478,7 @@ ranges) {
|
|
|
454
478
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
455
479
|
Code coverage generated by
|
|
456
480
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
457
|
-
at 2025-
|
|
481
|
+
at 2025-07-19T20:24:47.780Z
|
|
458
482
|
</div>
|
|
459
483
|
<script src="../../prettify.js"></script>
|
|
460
484
|
<script>
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for lib/list</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../index.html">All files</a> lib/list</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">24.7% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>21/85</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">10.25% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>4/39</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">20% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>2/10</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">24.69% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>20/81</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input oninput="onInput()" type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line low'></div>
|
|
65
|
+
<div class="pad1">
|
|
66
|
+
<table class="coverage-summary">
|
|
67
|
+
<thead>
|
|
68
|
+
<tr>
|
|
69
|
+
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
|
70
|
+
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
|
71
|
+
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
|
72
|
+
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
73
|
+
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
|
74
|
+
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
75
|
+
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
|
76
|
+
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
77
|
+
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
|
78
|
+
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
79
|
+
</tr>
|
|
80
|
+
</thead>
|
|
81
|
+
<tbody><tr>
|
|
82
|
+
<td class="file low" data-value="matrix.js"><a href="matrix.js.html">matrix.js</a></td>
|
|
83
|
+
<td data-value="24.7" class="pic low">
|
|
84
|
+
<div class="chart"><div class="cover-fill" style="width: 24%"></div><div class="cover-empty" style="width: 76%"></div></div>
|
|
85
|
+
</td>
|
|
86
|
+
<td data-value="24.7" class="pct low">24.7%</td>
|
|
87
|
+
<td data-value="85" class="abs low">21/85</td>
|
|
88
|
+
<td data-value="10.25" class="pct low">10.25%</td>
|
|
89
|
+
<td data-value="39" class="abs low">4/39</td>
|
|
90
|
+
<td data-value="20" class="pct low">20%</td>
|
|
91
|
+
<td data-value="10" class="abs low">2/10</td>
|
|
92
|
+
<td data-value="24.69" class="pct low">24.69%</td>
|
|
93
|
+
<td data-value="81" class="abs low">20/81</td>
|
|
94
|
+
</tr>
|
|
95
|
+
|
|
96
|
+
</tbody>
|
|
97
|
+
</table>
|
|
98
|
+
</div>
|
|
99
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
100
|
+
</div><!-- /wrapper -->
|
|
101
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
|
+
Code coverage generated by
|
|
103
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
+
at 2025-07-19T20:24:47.780Z
|
|
105
|
+
</div>
|
|
106
|
+
<script src="../../prettify.js"></script>
|
|
107
|
+
<script>
|
|
108
|
+
window.onload = function () {
|
|
109
|
+
prettyPrint();
|
|
110
|
+
};
|
|
111
|
+
</script>
|
|
112
|
+
<script src="../../sorter.js"></script>
|
|
113
|
+
<script src="../../block-navigation.js"></script>
|
|
114
|
+
</body>
|
|
115
|
+
</html>
|
|
116
|
+
|