@featurevisor/sdk 1.16.0 → 1.17.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/.eslintcache +1 -1
- package/CHANGELOG.md +11 -0
- package/coverage/clover.xml +397 -390
- package/coverage/coverage-final.json +2 -2
- package/coverage/lcov-report/bucket.ts.html +1 -1
- package/coverage/lcov-report/conditions.ts.html +1 -1
- package/coverage/lcov-report/datafileReader.ts.html +1 -1
- package/coverage/lcov-report/emitter.ts.html +1 -1
- package/coverage/lcov-report/feature.ts.html +88 -22
- package/coverage/lcov-report/index.html +23 -23
- package/coverage/lcov-report/instance.ts.html +209 -32
- package/coverage/lcov-report/logger.ts.html +1 -1
- package/coverage/lcov-report/segments.ts.html +1 -1
- package/coverage/lcov.info +655 -646
- package/dist/index.js +1 -1
- package/dist/index.js.gz +0 -0
- package/dist/index.js.map +1 -1
- package/lib/feature.d.ts +5 -1
- package/lib/feature.js +19 -8
- package/lib/feature.js.map +1 -1
- package/lib/instance.d.ts +5 -1
- package/lib/instance.js +59 -25
- package/lib/instance.js.map +1 -1
- package/package.json +2 -2
- package/src/feature.ts +31 -9
- package/src/instance.ts +85 -26
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">89.
|
|
26
|
+
<span class="strong">89.71% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>375/418</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">89.
|
|
47
|
+
<span class="strong">89.8% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>370/412</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -1363,7 +1363,68 @@
|
|
|
1363
1363
|
<a name='L1298'></a><a href='#L1298'>1298</a>
|
|
1364
1364
|
<a name='L1299'></a><a href='#L1299'>1299</a>
|
|
1365
1365
|
<a name='L1300'></a><a href='#L1300'>1300</a>
|
|
1366
|
-
<a name='L1301'></a><a href='#L1301'>1301</a
|
|
1366
|
+
<a name='L1301'></a><a href='#L1301'>1301</a>
|
|
1367
|
+
<a name='L1302'></a><a href='#L1302'>1302</a>
|
|
1368
|
+
<a name='L1303'></a><a href='#L1303'>1303</a>
|
|
1369
|
+
<a name='L1304'></a><a href='#L1304'>1304</a>
|
|
1370
|
+
<a name='L1305'></a><a href='#L1305'>1305</a>
|
|
1371
|
+
<a name='L1306'></a><a href='#L1306'>1306</a>
|
|
1372
|
+
<a name='L1307'></a><a href='#L1307'>1307</a>
|
|
1373
|
+
<a name='L1308'></a><a href='#L1308'>1308</a>
|
|
1374
|
+
<a name='L1309'></a><a href='#L1309'>1309</a>
|
|
1375
|
+
<a name='L1310'></a><a href='#L1310'>1310</a>
|
|
1376
|
+
<a name='L1311'></a><a href='#L1311'>1311</a>
|
|
1377
|
+
<a name='L1312'></a><a href='#L1312'>1312</a>
|
|
1378
|
+
<a name='L1313'></a><a href='#L1313'>1313</a>
|
|
1379
|
+
<a name='L1314'></a><a href='#L1314'>1314</a>
|
|
1380
|
+
<a name='L1315'></a><a href='#L1315'>1315</a>
|
|
1381
|
+
<a name='L1316'></a><a href='#L1316'>1316</a>
|
|
1382
|
+
<a name='L1317'></a><a href='#L1317'>1317</a>
|
|
1383
|
+
<a name='L1318'></a><a href='#L1318'>1318</a>
|
|
1384
|
+
<a name='L1319'></a><a href='#L1319'>1319</a>
|
|
1385
|
+
<a name='L1320'></a><a href='#L1320'>1320</a>
|
|
1386
|
+
<a name='L1321'></a><a href='#L1321'>1321</a>
|
|
1387
|
+
<a name='L1322'></a><a href='#L1322'>1322</a>
|
|
1388
|
+
<a name='L1323'></a><a href='#L1323'>1323</a>
|
|
1389
|
+
<a name='L1324'></a><a href='#L1324'>1324</a>
|
|
1390
|
+
<a name='L1325'></a><a href='#L1325'>1325</a>
|
|
1391
|
+
<a name='L1326'></a><a href='#L1326'>1326</a>
|
|
1392
|
+
<a name='L1327'></a><a href='#L1327'>1327</a>
|
|
1393
|
+
<a name='L1328'></a><a href='#L1328'>1328</a>
|
|
1394
|
+
<a name='L1329'></a><a href='#L1329'>1329</a>
|
|
1395
|
+
<a name='L1330'></a><a href='#L1330'>1330</a>
|
|
1396
|
+
<a name='L1331'></a><a href='#L1331'>1331</a>
|
|
1397
|
+
<a name='L1332'></a><a href='#L1332'>1332</a>
|
|
1398
|
+
<a name='L1333'></a><a href='#L1333'>1333</a>
|
|
1399
|
+
<a name='L1334'></a><a href='#L1334'>1334</a>
|
|
1400
|
+
<a name='L1335'></a><a href='#L1335'>1335</a>
|
|
1401
|
+
<a name='L1336'></a><a href='#L1336'>1336</a>
|
|
1402
|
+
<a name='L1337'></a><a href='#L1337'>1337</a>
|
|
1403
|
+
<a name='L1338'></a><a href='#L1338'>1338</a>
|
|
1404
|
+
<a name='L1339'></a><a href='#L1339'>1339</a>
|
|
1405
|
+
<a name='L1340'></a><a href='#L1340'>1340</a>
|
|
1406
|
+
<a name='L1341'></a><a href='#L1341'>1341</a>
|
|
1407
|
+
<a name='L1342'></a><a href='#L1342'>1342</a>
|
|
1408
|
+
<a name='L1343'></a><a href='#L1343'>1343</a>
|
|
1409
|
+
<a name='L1344'></a><a href='#L1344'>1344</a>
|
|
1410
|
+
<a name='L1345'></a><a href='#L1345'>1345</a>
|
|
1411
|
+
<a name='L1346'></a><a href='#L1346'>1346</a>
|
|
1412
|
+
<a name='L1347'></a><a href='#L1347'>1347</a>
|
|
1413
|
+
<a name='L1348'></a><a href='#L1348'>1348</a>
|
|
1414
|
+
<a name='L1349'></a><a href='#L1349'>1349</a>
|
|
1415
|
+
<a name='L1350'></a><a href='#L1350'>1350</a>
|
|
1416
|
+
<a name='L1351'></a><a href='#L1351'>1351</a>
|
|
1417
|
+
<a name='L1352'></a><a href='#L1352'>1352</a>
|
|
1418
|
+
<a name='L1353'></a><a href='#L1353'>1353</a>
|
|
1419
|
+
<a name='L1354'></a><a href='#L1354'>1354</a>
|
|
1420
|
+
<a name='L1355'></a><a href='#L1355'>1355</a>
|
|
1421
|
+
<a name='L1356'></a><a href='#L1356'>1356</a>
|
|
1422
|
+
<a name='L1357'></a><a href='#L1357'>1357</a>
|
|
1423
|
+
<a name='L1358'></a><a href='#L1358'>1358</a>
|
|
1424
|
+
<a name='L1359'></a><a href='#L1359'>1359</a>
|
|
1425
|
+
<a name='L1360'></a><a href='#L1360'>1360</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
1426
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1427
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1367
1428
|
<span class="cline-any cline-neutral"> </span>
|
|
1368
1429
|
<span class="cline-any cline-neutral"> </span>
|
|
1369
1430
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1491,6 +1552,10 @@
|
|
|
1491
1552
|
<span class="cline-any cline-neutral"> </span>
|
|
1492
1553
|
<span class="cline-any cline-neutral"> </span>
|
|
1493
1554
|
<span class="cline-any cline-neutral"> </span>
|
|
1555
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1556
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1558
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1494
1559
|
<span class="cline-any cline-yes">5x</span>
|
|
1495
1560
|
<span class="cline-any cline-yes">5x</span>
|
|
1496
1561
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1734,6 +1799,9 @@
|
|
|
1734
1799
|
<span class="cline-any cline-neutral"> </span>
|
|
1735
1800
|
<span class="cline-any cline-neutral"> </span>
|
|
1736
1801
|
<span class="cline-any cline-neutral"> </span>
|
|
1802
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1803
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1804
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1737
1805
|
<span class="cline-any cline-yes">95x</span>
|
|
1738
1806
|
<span class="cline-any cline-neutral"> </span>
|
|
1739
1807
|
<span class="cline-any cline-yes">95x</span>
|
|
@@ -1741,6 +1809,11 @@
|
|
|
1741
1809
|
<span class="cline-any cline-yes">95x</span>
|
|
1742
1810
|
<span class="cline-any cline-yes">2x</span>
|
|
1743
1811
|
<span class="cline-any cline-neutral"> </span>
|
|
1812
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1813
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1814
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1815
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1816
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1744
1817
|
<span class="cline-any cline-neutral"> </span>
|
|
1745
1818
|
<span class="cline-any cline-yes">93x</span>
|
|
1746
1819
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1749,6 +1822,9 @@
|
|
|
1749
1822
|
<span class="cline-any cline-neutral"> </span>
|
|
1750
1823
|
<span class="cline-any cline-neutral"> </span>
|
|
1751
1824
|
<span class="cline-any cline-neutral"> </span>
|
|
1825
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1826
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1827
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1752
1828
|
<span class="cline-any cline-yes">5x</span>
|
|
1753
1829
|
<span class="cline-any cline-neutral"> </span>
|
|
1754
1830
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1888,6 +1964,11 @@
|
|
|
1888
1964
|
<span class="cline-any cline-neutral"> </span>
|
|
1889
1965
|
<span class="cline-any cline-yes">67x</span>
|
|
1890
1966
|
<span class="cline-any cline-neutral"> </span>
|
|
1967
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1968
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1969
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1970
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1971
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1891
1972
|
<span class="cline-any cline-yes">67x</span>
|
|
1892
1973
|
<span class="cline-any cline-yes">9x</span>
|
|
1893
1974
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1895,6 +1976,8 @@
|
|
|
1895
1976
|
<span class="cline-any cline-neutral"> </span>
|
|
1896
1977
|
<span class="cline-any cline-neutral"> </span>
|
|
1897
1978
|
<span class="cline-any cline-neutral"> </span>
|
|
1979
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1980
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1898
1981
|
<span class="cline-any cline-yes">9x</span>
|
|
1899
1982
|
<span class="cline-any cline-neutral"> </span>
|
|
1900
1983
|
<span class="cline-any cline-yes">9x</span>
|
|
@@ -1935,6 +2018,7 @@
|
|
|
1935
2018
|
<span class="cline-any cline-neutral"> </span>
|
|
1936
2019
|
<span class="cline-any cline-neutral"> </span>
|
|
1937
2020
|
<span class="cline-any cline-neutral"> </span>
|
|
2021
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1938
2022
|
<span class="cline-any cline-yes">2x</span>
|
|
1939
2023
|
<span class="cline-any cline-neutral"> </span>
|
|
1940
2024
|
<span class="cline-any cline-yes">2x</span>
|
|
@@ -1968,6 +2052,9 @@
|
|
|
1968
2052
|
<span class="cline-any cline-neutral"> </span>
|
|
1969
2053
|
<span class="cline-any cline-neutral"> </span>
|
|
1970
2054
|
<span class="cline-any cline-neutral"> </span>
|
|
2055
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2056
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2057
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1971
2058
|
<span class="cline-any cline-yes">1x</span>
|
|
1972
2059
|
<span class="cline-any cline-neutral"> </span>
|
|
1973
2060
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -1981,6 +2068,7 @@
|
|
|
1981
2068
|
<span class="cline-any cline-neutral"> </span>
|
|
1982
2069
|
<span class="cline-any cline-neutral"> </span>
|
|
1983
2070
|
<span class="cline-any cline-neutral"> </span>
|
|
2071
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1984
2072
|
<span class="cline-any cline-yes">1x</span>
|
|
1985
2073
|
<span class="cline-any cline-neutral"> </span>
|
|
1986
2074
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -1997,6 +2085,7 @@
|
|
|
1997
2085
|
<span class="cline-any cline-neutral"> </span>
|
|
1998
2086
|
<span class="cline-any cline-neutral"> </span>
|
|
1999
2087
|
<span class="cline-any cline-neutral"> </span>
|
|
2088
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2000
2089
|
<span class="cline-any cline-yes">1x</span>
|
|
2001
2090
|
<span class="cline-any cline-neutral"> </span>
|
|
2002
2091
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -2013,6 +2102,7 @@
|
|
|
2013
2102
|
<span class="cline-any cline-neutral"> </span>
|
|
2014
2103
|
<span class="cline-any cline-neutral"> </span>
|
|
2015
2104
|
<span class="cline-any cline-neutral"> </span>
|
|
2105
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2016
2106
|
<span class="cline-any cline-yes">48x</span>
|
|
2017
2107
|
<span class="cline-any cline-neutral"> </span>
|
|
2018
2108
|
<span class="cline-any cline-yes">48x</span>
|
|
@@ -2027,6 +2117,7 @@
|
|
|
2027
2117
|
<span class="cline-any cline-neutral"> </span>
|
|
2028
2118
|
<span class="cline-any cline-neutral"> </span>
|
|
2029
2119
|
<span class="cline-any cline-neutral"> </span>
|
|
2120
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2030
2121
|
<span class="cline-any cline-yes">5x</span>
|
|
2031
2122
|
<span class="cline-any cline-neutral"> </span>
|
|
2032
2123
|
<span class="cline-any cline-yes">5x</span>
|
|
@@ -2146,6 +2237,11 @@
|
|
|
2146
2237
|
<span class="cline-any cline-neutral"> </span>
|
|
2147
2238
|
<span class="cline-any cline-yes">18x</span>
|
|
2148
2239
|
<span class="cline-any cline-neutral"> </span>
|
|
2240
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2241
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2242
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2243
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2244
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2149
2245
|
<span class="cline-any cline-yes">18x</span>
|
|
2150
2246
|
<span class="cline-any cline-yes">1x</span>
|
|
2151
2247
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2156,6 +2252,8 @@
|
|
|
2156
2252
|
<span class="cline-any cline-neutral"> </span>
|
|
2157
2253
|
<span class="cline-any cline-neutral"> </span>
|
|
2158
2254
|
<span class="cline-any cline-neutral"> </span>
|
|
2255
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2256
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2159
2257
|
<span class="cline-any cline-yes">1x</span>
|
|
2160
2258
|
<span class="cline-any cline-neutral"> </span>
|
|
2161
2259
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -2187,6 +2285,8 @@
|
|
|
2187
2285
|
<span class="cline-any cline-neutral"> </span>
|
|
2188
2286
|
<span class="cline-any cline-neutral"> </span>
|
|
2189
2287
|
<span class="cline-any cline-neutral"> </span>
|
|
2288
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2289
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2190
2290
|
<span class="cline-any cline-yes">1x</span>
|
|
2191
2291
|
<span class="cline-any cline-neutral"> </span>
|
|
2192
2292
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -2205,6 +2305,9 @@
|
|
|
2205
2305
|
<span class="cline-any cline-neutral"> </span>
|
|
2206
2306
|
<span class="cline-any cline-neutral"> </span>
|
|
2207
2307
|
<span class="cline-any cline-neutral"> </span>
|
|
2308
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2309
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2310
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2208
2311
|
<span class="cline-any cline-yes">16x</span>
|
|
2209
2312
|
<span class="cline-any cline-neutral"> </span>
|
|
2210
2313
|
<span class="cline-any cline-yes">16x</span>
|
|
@@ -2219,6 +2322,7 @@
|
|
|
2219
2322
|
<span class="cline-any cline-neutral"> </span>
|
|
2220
2323
|
<span class="cline-any cline-neutral"> </span>
|
|
2221
2324
|
<span class="cline-any cline-neutral"> </span>
|
|
2325
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2222
2326
|
<span class="cline-any cline-no"> </span>
|
|
2223
2327
|
<span class="cline-any cline-neutral"> </span>
|
|
2224
2328
|
<span class="cline-any cline-no"> </span>
|
|
@@ -2413,6 +2517,11 @@
|
|
|
2413
2517
|
<span class="cline-any cline-neutral"> </span>
|
|
2414
2518
|
<span class="cline-any cline-yes">23x</span>
|
|
2415
2519
|
<span class="cline-any cline-neutral"> </span>
|
|
2520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2521
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2522
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2523
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2416
2525
|
<span class="cline-any cline-yes">23x</span>
|
|
2417
2526
|
<span class="cline-any cline-yes">1x</span>
|
|
2418
2527
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2422,6 +2531,8 @@
|
|
|
2422
2531
|
<span class="cline-any cline-neutral"> </span>
|
|
2423
2532
|
<span class="cline-any cline-neutral"> </span>
|
|
2424
2533
|
<span class="cline-any cline-neutral"> </span>
|
|
2534
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2535
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2425
2536
|
<span class="cline-any cline-yes">1x</span>
|
|
2426
2537
|
<span class="cline-any cline-neutral"> </span>
|
|
2427
2538
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -2454,6 +2565,8 @@
|
|
|
2454
2565
|
<span class="cline-any cline-neutral"> </span>
|
|
2455
2566
|
<span class="cline-any cline-neutral"> </span>
|
|
2456
2567
|
<span class="cline-any cline-neutral"> </span>
|
|
2568
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2569
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2457
2570
|
<span class="cline-any cline-yes">2x</span>
|
|
2458
2571
|
<span class="cline-any cline-neutral"> </span>
|
|
2459
2572
|
<span class="cline-any cline-yes">2x</span>
|
|
@@ -2508,6 +2621,8 @@
|
|
|
2508
2621
|
<span class="cline-any cline-neutral"> </span>
|
|
2509
2622
|
<span class="cline-any cline-neutral"> </span>
|
|
2510
2623
|
<span class="cline-any cline-neutral"> </span>
|
|
2624
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2625
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2511
2626
|
<span class="cline-any cline-yes">4x</span>
|
|
2512
2627
|
<span class="cline-any cline-neutral"> </span>
|
|
2513
2628
|
<span class="cline-any cline-yes">4x</span>
|
|
@@ -2525,6 +2640,8 @@
|
|
|
2525
2640
|
<span class="cline-any cline-neutral"> </span>
|
|
2526
2641
|
<span class="cline-any cline-neutral"> </span>
|
|
2527
2642
|
<span class="cline-any cline-neutral"> </span>
|
|
2643
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2644
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2528
2645
|
<span class="cline-any cline-yes">3x</span>
|
|
2529
2646
|
<span class="cline-any cline-neutral"> </span>
|
|
2530
2647
|
<span class="cline-any cline-yes">3x</span>
|
|
@@ -2544,6 +2661,7 @@
|
|
|
2544
2661
|
<span class="cline-any cline-neutral"> </span>
|
|
2545
2662
|
<span class="cline-any cline-neutral"> </span>
|
|
2546
2663
|
<span class="cline-any cline-neutral"> </span>
|
|
2664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2547
2665
|
<span class="cline-any cline-yes">13x</span>
|
|
2548
2666
|
<span class="cline-any cline-neutral"> </span>
|
|
2549
2667
|
<span class="cline-any cline-yes">13x</span>
|
|
@@ -2682,6 +2800,8 @@
|
|
|
2682
2800
|
RuleKey,
|
|
2683
2801
|
VariableKey,
|
|
2684
2802
|
VariableSchema,
|
|
2803
|
+
Force,
|
|
2804
|
+
Required,
|
|
2685
2805
|
} from "@featurevisor/types";
|
|
2686
2806
|
|
|
2687
2807
|
import { createLogger, Logger, LogLevel } from "./logger";
|
|
@@ -2769,11 +2889,15 @@ export interface Evaluation {
|
|
|
2769
2889
|
reason: EvaluationReason;
|
|
2770
2890
|
|
|
2771
2891
|
// common
|
|
2892
|
+
bucketKey?: BucketKey;
|
|
2772
2893
|
bucketValue?: BucketValue;
|
|
2773
2894
|
ruleKey?: RuleKey;
|
|
2774
2895
|
error?: Error;
|
|
2775
2896
|
enabled?: boolean;
|
|
2776
2897
|
traffic?: Traffic;
|
|
2898
|
+
forceIndex?: number;
|
|
2899
|
+
force?: Force;
|
|
2900
|
+
required?: Required[];
|
|
2777
2901
|
sticky?: OverrideFeature;
|
|
2778
2902
|
initial?: OverrideFeature;
|
|
2779
2903
|
|
|
@@ -3033,16 +3157,27 @@ export class FeaturevisorInstance {
|
|
|
3033
3157
|
return result;
|
|
3034
3158
|
}
|
|
3035
3159
|
|
|
3036
|
-
private getBucketValue(
|
|
3160
|
+
private getBucketValue(
|
|
3161
|
+
feature: Feature,
|
|
3162
|
+
context: Context,
|
|
3163
|
+
): { bucketKey: BucketKey; bucketValue: BucketValue } {
|
|
3037
3164
|
const bucketKey = this.getBucketKey(feature, context);
|
|
3038
3165
|
|
|
3039
3166
|
const value = getBucketedNumber(bucketKey);
|
|
3040
3167
|
|
|
3041
3168
|
if (this.configureBucketValue) {
|
|
3042
|
-
|
|
3169
|
+
const configuredValue = this.configureBucketValue(feature, context, value);
|
|
3170
|
+
|
|
3171
|
+
return {
|
|
3172
|
+
bucketKey,
|
|
3173
|
+
bucketValue: configuredValue,
|
|
3174
|
+
};
|
|
3043
3175
|
}
|
|
3044
3176
|
|
|
3045
|
-
return
|
|
3177
|
+
return {
|
|
3178
|
+
bucketKey,
|
|
3179
|
+
bucketValue: value,
|
|
3180
|
+
};
|
|
3046
3181
|
}
|
|
3047
3182
|
|
|
3048
3183
|
/**
|
|
@@ -3135,8 +3270,8 @@ export class FeaturevisorInstance {
|
|
|
3135
3270
|
evaluation = {
|
|
3136
3271
|
featureKey: key,
|
|
3137
3272
|
reason: EvaluationReason.STICKY,
|
|
3138
|
-
enabled: this.stickyFeatures[key].enabled,
|
|
3139
3273
|
sticky: this.stickyFeatures[key],
|
|
3274
|
+
enabled: this.stickyFeatures[key].enabled,
|
|
3140
3275
|
};
|
|
3141
3276
|
|
|
3142
3277
|
this.logger.debug("using sticky enabled", evaluation);
|
|
@@ -3155,8 +3290,8 @@ export class FeaturevisorInstance {
|
|
|
3155
3290
|
evaluation = {
|
|
3156
3291
|
featureKey: key,
|
|
3157
3292
|
reason: EvaluationReason.INITIAL,
|
|
3158
|
-
enabled: this.initialFeatures[key].enabled,
|
|
3159
3293
|
initial: this.initialFeatures[key],
|
|
3294
|
+
enabled: this.initialFeatures[key].enabled,
|
|
3160
3295
|
};
|
|
3161
3296
|
|
|
3162
3297
|
this.logger.debug("using initial enabled", evaluation);
|
|
@@ -3186,12 +3321,19 @@ export class FeaturevisorInstance {
|
|
|
3186
3321
|
const finalContext = this.interceptContext ? this.interceptContext(context) : context;
|
|
3187
3322
|
|
|
3188
3323
|
// forced
|
|
3189
|
-
const force = findForceFromFeature(
|
|
3324
|
+
const { force, forceIndex } = findForceFromFeature(
|
|
3325
|
+
feature,
|
|
3326
|
+
context,
|
|
3327
|
+
this.datafileReader,
|
|
3328
|
+
this.logger,
|
|
3329
|
+
);
|
|
3190
3330
|
|
|
3191
3331
|
if (force && typeof force.enabled !== "undefined") {
|
|
3192
3332
|
evaluation = {
|
|
3193
3333
|
featureKey: feature.key,
|
|
3194
3334
|
reason: EvaluationReason.FORCED,
|
|
3335
|
+
forceIndex,
|
|
3336
|
+
force,
|
|
3195
3337
|
enabled: force.enabled,
|
|
3196
3338
|
};
|
|
3197
3339
|
|
|
@@ -3232,6 +3374,7 @@ export class FeaturevisorInstance {
|
|
|
3232
3374
|
evaluation = {
|
|
3233
3375
|
featureKey: feature.key,
|
|
3234
3376
|
reason: EvaluationReason.REQUIRED,
|
|
3377
|
+
required: feature.required,
|
|
3235
3378
|
enabled: requiredFeaturesAreEnabled,
|
|
3236
3379
|
};
|
|
3237
3380
|
|
|
@@ -3242,7 +3385,7 @@ export class FeaturevisorInstance {
|
|
|
3242
3385
|
}
|
|
3243
3386
|
|
|
3244
3387
|
// bucketing
|
|
3245
|
-
const bucketValue = this.getBucketValue(feature, finalContext);
|
|
3388
|
+
const { bucketKey, bucketValue } = this.getBucketValue(feature, finalContext);
|
|
3246
3389
|
|
|
3247
3390
|
const matchedTraffic = getMatchedTraffic(
|
|
3248
3391
|
feature.traffic,
|
|
@@ -3263,9 +3406,12 @@ export class FeaturevisorInstance {
|
|
|
3263
3406
|
evaluation = {
|
|
3264
3407
|
featureKey: feature.key,
|
|
3265
3408
|
reason: EvaluationReason.ALLOCATED,
|
|
3409
|
+
bucketKey,
|
|
3410
|
+
bucketValue,
|
|
3411
|
+
ruleKey: matchedTraffic.key,
|
|
3412
|
+
traffic: matchedTraffic,
|
|
3266
3413
|
enabled:
|
|
3267
3414
|
typeof matchedTraffic.enabled === "undefined" ? true : <span class="branch-1 cbranch-no" title="branch not covered" >matchedTraffic.enabled,</span>
|
|
3268
|
-
bucketValue,
|
|
3269
3415
|
};
|
|
3270
3416
|
|
|
3271
3417
|
this.logger.debug("matched", evaluation);
|
|
@@ -3277,8 +3423,9 @@ export class FeaturevisorInstance {
|
|
|
3277
3423
|
evaluation = {
|
|
3278
3424
|
featureKey: feature.key,
|
|
3279
3425
|
reason: EvaluationReason.OUT_OF_RANGE,
|
|
3280
|
-
|
|
3426
|
+
bucketKey,
|
|
3281
3427
|
bucketValue,
|
|
3428
|
+
enabled: false,
|
|
3282
3429
|
};
|
|
3283
3430
|
|
|
3284
3431
|
this.logger.debug("not matched", evaluation);
|
|
@@ -3291,10 +3438,11 @@ export class FeaturevisorInstance {
|
|
|
3291
3438
|
evaluation = {
|
|
3292
3439
|
featureKey: feature.key,
|
|
3293
3440
|
reason: EvaluationReason.OVERRIDE,
|
|
3294
|
-
|
|
3441
|
+
bucketKey,
|
|
3295
3442
|
bucketValue,
|
|
3296
3443
|
ruleKey: matchedTraffic.key,
|
|
3297
3444
|
traffic: matchedTraffic,
|
|
3445
|
+
enabled: matchedTraffic.enabled,
|
|
3298
3446
|
};
|
|
3299
3447
|
|
|
3300
3448
|
this.logger.debug("override from rule", evaluation);
|
|
@@ -3307,10 +3455,11 @@ export class FeaturevisorInstance {
|
|
|
3307
3455
|
evaluation = {
|
|
3308
3456
|
featureKey: feature.key,
|
|
3309
3457
|
reason: EvaluationReason.RULE,
|
|
3310
|
-
|
|
3458
|
+
bucketKey,
|
|
3311
3459
|
bucketValue,
|
|
3312
3460
|
ruleKey: matchedTraffic.key,
|
|
3313
3461
|
traffic: matchedTraffic,
|
|
3462
|
+
enabled: true,
|
|
3314
3463
|
};
|
|
3315
3464
|
|
|
3316
3465
|
this.logger.debug("matched traffic", evaluation);
|
|
@@ -3322,9 +3471,10 @@ export class FeaturevisorInstance {
|
|
|
3322
3471
|
// nothing matched
|
|
3323
3472
|
evaluation = {
|
|
3324
3473
|
featureKey: feature.key,
|
|
3325
|
-
reason: EvaluationReason.ERROR,
|
|
3326
|
-
|
|
3474
|
+
reason: EvaluationReason.ERROR, // @TODO: any better reason?
|
|
3475
|
+
bucketKey,
|
|
3327
3476
|
bucketValue,
|
|
3477
|
+
enabled: false,
|
|
3328
3478
|
};
|
|
3329
3479
|
|
|
3330
3480
|
this.logger.debug("nothing matched", evaluation);
|
|
@@ -3444,7 +3594,12 @@ export class FeaturevisorInstance {
|
|
|
3444
3594
|
const finalContext = this.interceptContext ? this.interceptContext(context) : context;
|
|
3445
3595
|
|
|
3446
3596
|
// forced
|
|
3447
|
-
const force = findForceFromFeature(
|
|
3597
|
+
const { force, forceIndex } = findForceFromFeature(
|
|
3598
|
+
feature,
|
|
3599
|
+
context,
|
|
3600
|
+
this.datafileReader,
|
|
3601
|
+
this.logger,
|
|
3602
|
+
);
|
|
3448
3603
|
|
|
3449
3604
|
if (force && force.variation) {
|
|
3450
3605
|
const variation = feature.variations.find((v) => v.value === force.variation);
|
|
@@ -3453,6 +3608,8 @@ export class FeaturevisorInstance {
|
|
|
3453
3608
|
evaluation = {
|
|
3454
3609
|
featureKey: feature.key,
|
|
3455
3610
|
reason: EvaluationReason.FORCED,
|
|
3611
|
+
forceIndex,
|
|
3612
|
+
force,
|
|
3456
3613
|
variation,
|
|
3457
3614
|
};
|
|
3458
3615
|
|
|
@@ -3463,7 +3620,7 @@ export class FeaturevisorInstance {
|
|
|
3463
3620
|
}
|
|
3464
3621
|
|
|
3465
3622
|
// bucketing
|
|
3466
|
-
const bucketValue = this.getBucketValue(feature, finalContext);
|
|
3623
|
+
const { bucketKey, bucketValue } = this.getBucketValue(feature, finalContext);
|
|
3467
3624
|
|
|
3468
3625
|
const { matchedTraffic, matchedAllocation } = getMatchedTrafficAndAllocation(
|
|
3469
3626
|
feature.traffic,
|
|
@@ -3482,9 +3639,11 @@ export class FeaturevisorInstance {
|
|
|
3482
3639
|
evaluation = {
|
|
3483
3640
|
featureKey: feature.key,
|
|
3484
3641
|
reason: EvaluationReason.RULE,
|
|
3485
|
-
|
|
3642
|
+
bucketKey,
|
|
3486
3643
|
bucketValue,
|
|
3487
3644
|
ruleKey: matchedTraffic.key,
|
|
3645
|
+
traffic: matchedTraffic,
|
|
3646
|
+
variation,
|
|
3488
3647
|
};
|
|
3489
3648
|
|
|
3490
3649
|
this.logger.debug("override from rule", evaluation);
|
|
@@ -3501,7 +3660,10 @@ export class FeaturevisorInstance {
|
|
|
3501
3660
|
evaluation = {
|
|
3502
3661
|
featureKey: feature.key,
|
|
3503
3662
|
reason: EvaluationReason.ALLOCATED,
|
|
3663
|
+
bucketKey,
|
|
3504
3664
|
bucketValue,
|
|
3665
|
+
ruleKey: matchedTraffic.key,
|
|
3666
|
+
traffic: matchedTraffic,
|
|
3505
3667
|
variation,
|
|
3506
3668
|
};
|
|
3507
3669
|
|
|
@@ -3515,7 +3677,8 @@ export class FeaturevisorInstance {
|
|
|
3515
3677
|
// nothing matched
|
|
3516
3678
|
<span class="cstat-no" title="statement not covered" > evaluation = {</span>
|
|
3517
3679
|
featureKey: feature.key,
|
|
3518
|
-
reason: EvaluationReason.ERROR,
|
|
3680
|
+
reason: EvaluationReason.ERROR, // @TODO: any better reason?
|
|
3681
|
+
bucketKey,
|
|
3519
3682
|
bucketValue,
|
|
3520
3683
|
};
|
|
3521
3684
|
|
|
@@ -3711,12 +3874,19 @@ export class FeaturevisorInstance {
|
|
|
3711
3874
|
const finalContext = this.interceptContext ? <span class="branch-0 cbranch-no" title="branch not covered" >this.interceptContext(context) </span>: context;
|
|
3712
3875
|
|
|
3713
3876
|
// forced
|
|
3714
|
-
const force = findForceFromFeature(
|
|
3877
|
+
const { force, forceIndex } = findForceFromFeature(
|
|
3878
|
+
feature,
|
|
3879
|
+
context,
|
|
3880
|
+
this.datafileReader,
|
|
3881
|
+
this.logger,
|
|
3882
|
+
);
|
|
3715
3883
|
|
|
3716
3884
|
if (force && force.variables && typeof force.variables[variableKey] !== "undefined") {
|
|
3717
3885
|
evaluation = {
|
|
3718
3886
|
featureKey: feature.key,
|
|
3719
3887
|
reason: EvaluationReason.FORCED,
|
|
3888
|
+
forceIndex,
|
|
3889
|
+
force,
|
|
3720
3890
|
variableKey,
|
|
3721
3891
|
variableSchema,
|
|
3722
3892
|
variableValue: force.variables[variableKey],
|
|
@@ -3728,7 +3898,7 @@ export class FeaturevisorInstance {
|
|
|
3728
3898
|
}
|
|
3729
3899
|
|
|
3730
3900
|
// bucketing
|
|
3731
|
-
const bucketValue = this.getBucketValue(feature, finalContext);
|
|
3901
|
+
const { bucketKey, bucketValue } = this.getBucketValue(feature, finalContext);
|
|
3732
3902
|
|
|
3733
3903
|
const { matchedTraffic, matchedAllocation } = getMatchedTrafficAndAllocation(
|
|
3734
3904
|
feature.traffic,
|
|
@@ -3747,11 +3917,13 @@ export class FeaturevisorInstance {
|
|
|
3747
3917
|
evaluation = {
|
|
3748
3918
|
featureKey: feature.key,
|
|
3749
3919
|
reason: EvaluationReason.RULE,
|
|
3920
|
+
bucketKey,
|
|
3921
|
+
bucketValue,
|
|
3922
|
+
ruleKey: matchedTraffic.key,
|
|
3923
|
+
traffic: matchedTraffic,
|
|
3750
3924
|
variableKey,
|
|
3751
3925
|
variableSchema,
|
|
3752
3926
|
variableValue: matchedTraffic.variables[variableKey],
|
|
3753
|
-
bucketValue,
|
|
3754
|
-
ruleKey: matchedTraffic.key,
|
|
3755
3927
|
};
|
|
3756
3928
|
|
|
3757
3929
|
this.logger.debug("override from rule", evaluation);
|
|
@@ -3801,11 +3973,13 @@ export class FeaturevisorInstance {
|
|
|
3801
3973
|
evaluation = {
|
|
3802
3974
|
featureKey: feature.key,
|
|
3803
3975
|
reason: EvaluationReason.OVERRIDE,
|
|
3976
|
+
bucketKey,
|
|
3977
|
+
bucketValue,
|
|
3978
|
+
ruleKey: matchedTraffic.key,
|
|
3979
|
+
traffic: matchedTraffic,
|
|
3804
3980
|
variableKey,
|
|
3805
3981
|
variableSchema,
|
|
3806
3982
|
variableValue: override.value,
|
|
3807
|
-
bucketValue,
|
|
3808
|
-
ruleKey: matchedTraffic.key,
|
|
3809
3983
|
};
|
|
3810
3984
|
|
|
3811
3985
|
this.logger.debug("variable override", evaluation);
|
|
@@ -3818,11 +3992,13 @@ export class FeaturevisorInstance {
|
|
|
3818
3992
|
evaluation = {
|
|
3819
3993
|
featureKey: feature.key,
|
|
3820
3994
|
reason: EvaluationReason.ALLOCATED,
|
|
3995
|
+
bucketKey,
|
|
3996
|
+
bucketValue,
|
|
3997
|
+
ruleKey: matchedTraffic.key,
|
|
3998
|
+
traffic: matchedTraffic,
|
|
3821
3999
|
variableKey,
|
|
3822
4000
|
variableSchema,
|
|
3823
4001
|
variableValue: variableFromVariation.value,
|
|
3824
|
-
bucketValue,
|
|
3825
|
-
ruleKey: matchedTraffic.key,
|
|
3826
4002
|
};
|
|
3827
4003
|
|
|
3828
4004
|
this.logger.debug("allocated variable", evaluation);
|
|
@@ -3838,10 +4014,11 @@ export class FeaturevisorInstance {
|
|
|
3838
4014
|
evaluation = {
|
|
3839
4015
|
featureKey: feature.key,
|
|
3840
4016
|
reason: EvaluationReason.DEFAULTED,
|
|
4017
|
+
bucketKey,
|
|
4018
|
+
bucketValue,
|
|
3841
4019
|
variableKey,
|
|
3842
4020
|
variableSchema,
|
|
3843
4021
|
variableValue: variableSchema.defaultValue,
|
|
3844
|
-
bucketValue,
|
|
3845
4022
|
};
|
|
3846
4023
|
|
|
3847
4024
|
this.logger.debug("using default value", evaluation);
|
|
@@ -3970,7 +4147,7 @@ export function createInstance(options: InstanceOptions): FeaturevisorInstance {
|
|
|
3970
4147
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
3971
4148
|
Code coverage generated by
|
|
3972
4149
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
3973
|
-
at 2024-04-
|
|
4150
|
+
at 2024-04-07T21:40:20.948Z
|
|
3974
4151
|
</div>
|
|
3975
4152
|
<script src="prettify.js"></script>
|
|
3976
4153
|
<script>
|
|
@@ -340,7 +340,7 @@ export function createLogger(options: CreateLoggerOptions = {}): Logger {
|
|
|
340
340
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
341
341
|
Code coverage generated by
|
|
342
342
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
343
|
-
at 2024-04-
|
|
343
|
+
at 2024-04-07T21:40:20.948Z
|
|
344
344
|
</div>
|
|
345
345
|
<script src="prettify.js"></script>
|
|
346
346
|
<script>
|
|
@@ -244,7 +244,7 @@ export function allGroupSegmentsAreMatched(
|
|
|
244
244
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
245
245
|
Code coverage generated by
|
|
246
246
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
247
|
-
at 2024-04-
|
|
247
|
+
at 2024-04-07T21:40:20.948Z
|
|
248
248
|
</div>
|
|
249
249
|
<script src="prettify.js"></script>
|
|
250
250
|
<script>
|