@featurevisor/sdk 1.16.0 → 1.20.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.
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">89.68% </span>
26
+ <span class="strong">89.73% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>374/417</span>
28
+ <span class='fraction'>376/419</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.78% </span>
47
+ <span class="strong">89.83% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>369/411</span>
49
+ <span class='fraction'>371/413</span>
50
50
  </div>
51
51
 
52
52
 
@@ -1363,7 +1363,69 @@
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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>
1426
+ <a name='L1361'></a><a href='#L1361'>1361</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1427
+ <span class="cline-any cline-neutral">&nbsp;</span>
1428
+ <span class="cline-any cline-neutral">&nbsp;</span>
1367
1429
  <span class="cline-any cline-neutral">&nbsp;</span>
1368
1430
  <span class="cline-any cline-neutral">&nbsp;</span>
1369
1431
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1461,6 +1523,11 @@
1461
1523
  <span class="cline-any cline-yes">1x</span>
1462
1524
  <span class="cline-any cline-yes">1x</span>
1463
1525
  <span class="cline-any cline-yes">1x</span>
1526
+ <span class="cline-any cline-yes">1x</span>
1527
+ <span class="cline-any cline-neutral">&nbsp;</span>
1528
+ <span class="cline-any cline-neutral">&nbsp;</span>
1529
+ <span class="cline-any cline-neutral">&nbsp;</span>
1530
+ <span class="cline-any cline-neutral">&nbsp;</span>
1464
1531
  <span class="cline-any cline-neutral">&nbsp;</span>
1465
1532
  <span class="cline-any cline-neutral">&nbsp;</span>
1466
1533
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1734,6 +1801,9 @@
1734
1801
  <span class="cline-any cline-neutral">&nbsp;</span>
1735
1802
  <span class="cline-any cline-neutral">&nbsp;</span>
1736
1803
  <span class="cline-any cline-neutral">&nbsp;</span>
1804
+ <span class="cline-any cline-neutral">&nbsp;</span>
1805
+ <span class="cline-any cline-neutral">&nbsp;</span>
1806
+ <span class="cline-any cline-neutral">&nbsp;</span>
1737
1807
  <span class="cline-any cline-yes">95x</span>
1738
1808
  <span class="cline-any cline-neutral">&nbsp;</span>
1739
1809
  <span class="cline-any cline-yes">95x</span>
@@ -1741,6 +1811,11 @@
1741
1811
  <span class="cline-any cline-yes">95x</span>
1742
1812
  <span class="cline-any cline-yes">2x</span>
1743
1813
  <span class="cline-any cline-neutral">&nbsp;</span>
1814
+ <span class="cline-any cline-yes">2x</span>
1815
+ <span class="cline-any cline-neutral">&nbsp;</span>
1816
+ <span class="cline-any cline-neutral">&nbsp;</span>
1817
+ <span class="cline-any cline-neutral">&nbsp;</span>
1818
+ <span class="cline-any cline-neutral">&nbsp;</span>
1744
1819
  <span class="cline-any cline-neutral">&nbsp;</span>
1745
1820
  <span class="cline-any cline-yes">93x</span>
1746
1821
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1749,6 +1824,9 @@
1749
1824
  <span class="cline-any cline-neutral">&nbsp;</span>
1750
1825
  <span class="cline-any cline-neutral">&nbsp;</span>
1751
1826
  <span class="cline-any cline-neutral">&nbsp;</span>
1827
+ <span class="cline-any cline-neutral">&nbsp;</span>
1828
+ <span class="cline-any cline-neutral">&nbsp;</span>
1829
+ <span class="cline-any cline-neutral">&nbsp;</span>
1752
1830
  <span class="cline-any cline-yes">5x</span>
1753
1831
  <span class="cline-any cline-neutral">&nbsp;</span>
1754
1832
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1888,6 +1966,11 @@
1888
1966
  <span class="cline-any cline-neutral">&nbsp;</span>
1889
1967
  <span class="cline-any cline-yes">67x</span>
1890
1968
  <span class="cline-any cline-neutral">&nbsp;</span>
1969
+ <span class="cline-any cline-neutral">&nbsp;</span>
1970
+ <span class="cline-any cline-neutral">&nbsp;</span>
1971
+ <span class="cline-any cline-neutral">&nbsp;</span>
1972
+ <span class="cline-any cline-neutral">&nbsp;</span>
1973
+ <span class="cline-any cline-neutral">&nbsp;</span>
1891
1974
  <span class="cline-any cline-yes">67x</span>
1892
1975
  <span class="cline-any cline-yes">9x</span>
1893
1976
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1895,6 +1978,8 @@
1895
1978
  <span class="cline-any cline-neutral">&nbsp;</span>
1896
1979
  <span class="cline-any cline-neutral">&nbsp;</span>
1897
1980
  <span class="cline-any cline-neutral">&nbsp;</span>
1981
+ <span class="cline-any cline-neutral">&nbsp;</span>
1982
+ <span class="cline-any cline-neutral">&nbsp;</span>
1898
1983
  <span class="cline-any cline-yes">9x</span>
1899
1984
  <span class="cline-any cline-neutral">&nbsp;</span>
1900
1985
  <span class="cline-any cline-yes">9x</span>
@@ -1935,6 +2020,7 @@
1935
2020
  <span class="cline-any cline-neutral">&nbsp;</span>
1936
2021
  <span class="cline-any cline-neutral">&nbsp;</span>
1937
2022
  <span class="cline-any cline-neutral">&nbsp;</span>
2023
+ <span class="cline-any cline-neutral">&nbsp;</span>
1938
2024
  <span class="cline-any cline-yes">2x</span>
1939
2025
  <span class="cline-any cline-neutral">&nbsp;</span>
1940
2026
  <span class="cline-any cline-yes">2x</span>
@@ -1968,6 +2054,9 @@
1968
2054
  <span class="cline-any cline-neutral">&nbsp;</span>
1969
2055
  <span class="cline-any cline-neutral">&nbsp;</span>
1970
2056
  <span class="cline-any cline-neutral">&nbsp;</span>
2057
+ <span class="cline-any cline-neutral">&nbsp;</span>
2058
+ <span class="cline-any cline-neutral">&nbsp;</span>
2059
+ <span class="cline-any cline-neutral">&nbsp;</span>
1971
2060
  <span class="cline-any cline-yes">1x</span>
1972
2061
  <span class="cline-any cline-neutral">&nbsp;</span>
1973
2062
  <span class="cline-any cline-yes">1x</span>
@@ -1981,6 +2070,7 @@
1981
2070
  <span class="cline-any cline-neutral">&nbsp;</span>
1982
2071
  <span class="cline-any cline-neutral">&nbsp;</span>
1983
2072
  <span class="cline-any cline-neutral">&nbsp;</span>
2073
+ <span class="cline-any cline-neutral">&nbsp;</span>
1984
2074
  <span class="cline-any cline-yes">1x</span>
1985
2075
  <span class="cline-any cline-neutral">&nbsp;</span>
1986
2076
  <span class="cline-any cline-yes">1x</span>
@@ -1997,6 +2087,7 @@
1997
2087
  <span class="cline-any cline-neutral">&nbsp;</span>
1998
2088
  <span class="cline-any cline-neutral">&nbsp;</span>
1999
2089
  <span class="cline-any cline-neutral">&nbsp;</span>
2090
+ <span class="cline-any cline-neutral">&nbsp;</span>
2000
2091
  <span class="cline-any cline-yes">1x</span>
2001
2092
  <span class="cline-any cline-neutral">&nbsp;</span>
2002
2093
  <span class="cline-any cline-yes">1x</span>
@@ -2013,6 +2104,7 @@
2013
2104
  <span class="cline-any cline-neutral">&nbsp;</span>
2014
2105
  <span class="cline-any cline-neutral">&nbsp;</span>
2015
2106
  <span class="cline-any cline-neutral">&nbsp;</span>
2107
+ <span class="cline-any cline-neutral">&nbsp;</span>
2016
2108
  <span class="cline-any cline-yes">48x</span>
2017
2109
  <span class="cline-any cline-neutral">&nbsp;</span>
2018
2110
  <span class="cline-any cline-yes">48x</span>
@@ -2027,6 +2119,7 @@
2027
2119
  <span class="cline-any cline-neutral">&nbsp;</span>
2028
2120
  <span class="cline-any cline-neutral">&nbsp;</span>
2029
2121
  <span class="cline-any cline-neutral">&nbsp;</span>
2122
+ <span class="cline-any cline-neutral">&nbsp;</span>
2030
2123
  <span class="cline-any cline-yes">5x</span>
2031
2124
  <span class="cline-any cline-neutral">&nbsp;</span>
2032
2125
  <span class="cline-any cline-yes">5x</span>
@@ -2146,6 +2239,11 @@
2146
2239
  <span class="cline-any cline-neutral">&nbsp;</span>
2147
2240
  <span class="cline-any cline-yes">18x</span>
2148
2241
  <span class="cline-any cline-neutral">&nbsp;</span>
2242
+ <span class="cline-any cline-neutral">&nbsp;</span>
2243
+ <span class="cline-any cline-neutral">&nbsp;</span>
2244
+ <span class="cline-any cline-neutral">&nbsp;</span>
2245
+ <span class="cline-any cline-neutral">&nbsp;</span>
2246
+ <span class="cline-any cline-neutral">&nbsp;</span>
2149
2247
  <span class="cline-any cline-yes">18x</span>
2150
2248
  <span class="cline-any cline-yes">1x</span>
2151
2249
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2156,6 +2254,8 @@
2156
2254
  <span class="cline-any cline-neutral">&nbsp;</span>
2157
2255
  <span class="cline-any cline-neutral">&nbsp;</span>
2158
2256
  <span class="cline-any cline-neutral">&nbsp;</span>
2257
+ <span class="cline-any cline-neutral">&nbsp;</span>
2258
+ <span class="cline-any cline-neutral">&nbsp;</span>
2159
2259
  <span class="cline-any cline-yes">1x</span>
2160
2260
  <span class="cline-any cline-neutral">&nbsp;</span>
2161
2261
  <span class="cline-any cline-yes">1x</span>
@@ -2187,6 +2287,8 @@
2187
2287
  <span class="cline-any cline-neutral">&nbsp;</span>
2188
2288
  <span class="cline-any cline-neutral">&nbsp;</span>
2189
2289
  <span class="cline-any cline-neutral">&nbsp;</span>
2290
+ <span class="cline-any cline-neutral">&nbsp;</span>
2291
+ <span class="cline-any cline-neutral">&nbsp;</span>
2190
2292
  <span class="cline-any cline-yes">1x</span>
2191
2293
  <span class="cline-any cline-neutral">&nbsp;</span>
2192
2294
  <span class="cline-any cline-yes">1x</span>
@@ -2205,6 +2307,9 @@
2205
2307
  <span class="cline-any cline-neutral">&nbsp;</span>
2206
2308
  <span class="cline-any cline-neutral">&nbsp;</span>
2207
2309
  <span class="cline-any cline-neutral">&nbsp;</span>
2310
+ <span class="cline-any cline-neutral">&nbsp;</span>
2311
+ <span class="cline-any cline-neutral">&nbsp;</span>
2312
+ <span class="cline-any cline-neutral">&nbsp;</span>
2208
2313
  <span class="cline-any cline-yes">16x</span>
2209
2314
  <span class="cline-any cline-neutral">&nbsp;</span>
2210
2315
  <span class="cline-any cline-yes">16x</span>
@@ -2219,6 +2324,7 @@
2219
2324
  <span class="cline-any cline-neutral">&nbsp;</span>
2220
2325
  <span class="cline-any cline-neutral">&nbsp;</span>
2221
2326
  <span class="cline-any cline-neutral">&nbsp;</span>
2327
+ <span class="cline-any cline-neutral">&nbsp;</span>
2222
2328
  <span class="cline-any cline-no">&nbsp;</span>
2223
2329
  <span class="cline-any cline-neutral">&nbsp;</span>
2224
2330
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2413,6 +2519,11 @@
2413
2519
  <span class="cline-any cline-neutral">&nbsp;</span>
2414
2520
  <span class="cline-any cline-yes">23x</span>
2415
2521
  <span class="cline-any cline-neutral">&nbsp;</span>
2522
+ <span class="cline-any cline-neutral">&nbsp;</span>
2523
+ <span class="cline-any cline-neutral">&nbsp;</span>
2524
+ <span class="cline-any cline-neutral">&nbsp;</span>
2525
+ <span class="cline-any cline-neutral">&nbsp;</span>
2526
+ <span class="cline-any cline-neutral">&nbsp;</span>
2416
2527
  <span class="cline-any cline-yes">23x</span>
2417
2528
  <span class="cline-any cline-yes">1x</span>
2418
2529
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2422,6 +2533,8 @@
2422
2533
  <span class="cline-any cline-neutral">&nbsp;</span>
2423
2534
  <span class="cline-any cline-neutral">&nbsp;</span>
2424
2535
  <span class="cline-any cline-neutral">&nbsp;</span>
2536
+ <span class="cline-any cline-neutral">&nbsp;</span>
2537
+ <span class="cline-any cline-neutral">&nbsp;</span>
2425
2538
  <span class="cline-any cline-yes">1x</span>
2426
2539
  <span class="cline-any cline-neutral">&nbsp;</span>
2427
2540
  <span class="cline-any cline-yes">1x</span>
@@ -2454,6 +2567,8 @@
2454
2567
  <span class="cline-any cline-neutral">&nbsp;</span>
2455
2568
  <span class="cline-any cline-neutral">&nbsp;</span>
2456
2569
  <span class="cline-any cline-neutral">&nbsp;</span>
2570
+ <span class="cline-any cline-neutral">&nbsp;</span>
2571
+ <span class="cline-any cline-neutral">&nbsp;</span>
2457
2572
  <span class="cline-any cline-yes">2x</span>
2458
2573
  <span class="cline-any cline-neutral">&nbsp;</span>
2459
2574
  <span class="cline-any cline-yes">2x</span>
@@ -2508,6 +2623,8 @@
2508
2623
  <span class="cline-any cline-neutral">&nbsp;</span>
2509
2624
  <span class="cline-any cline-neutral">&nbsp;</span>
2510
2625
  <span class="cline-any cline-neutral">&nbsp;</span>
2626
+ <span class="cline-any cline-neutral">&nbsp;</span>
2627
+ <span class="cline-any cline-neutral">&nbsp;</span>
2511
2628
  <span class="cline-any cline-yes">4x</span>
2512
2629
  <span class="cline-any cline-neutral">&nbsp;</span>
2513
2630
  <span class="cline-any cline-yes">4x</span>
@@ -2525,6 +2642,8 @@
2525
2642
  <span class="cline-any cline-neutral">&nbsp;</span>
2526
2643
  <span class="cline-any cline-neutral">&nbsp;</span>
2527
2644
  <span class="cline-any cline-neutral">&nbsp;</span>
2645
+ <span class="cline-any cline-neutral">&nbsp;</span>
2646
+ <span class="cline-any cline-neutral">&nbsp;</span>
2528
2647
  <span class="cline-any cline-yes">3x</span>
2529
2648
  <span class="cline-any cline-neutral">&nbsp;</span>
2530
2649
  <span class="cline-any cline-yes">3x</span>
@@ -2544,6 +2663,7 @@
2544
2663
  <span class="cline-any cline-neutral">&nbsp;</span>
2545
2664
  <span class="cline-any cline-neutral">&nbsp;</span>
2546
2665
  <span class="cline-any cline-neutral">&nbsp;</span>
2666
+ <span class="cline-any cline-neutral">&nbsp;</span>
2547
2667
  <span class="cline-any cline-yes">13x</span>
2548
2668
  <span class="cline-any cline-neutral">&nbsp;</span>
2549
2669
  <span class="cline-any cline-yes">13x</span>
@@ -2682,6 +2802,8 @@
2682
2802
  RuleKey,
2683
2803
  VariableKey,
2684
2804
  VariableSchema,
2805
+ Force,
2806
+ Required,
2685
2807
  } from "@featurevisor/types";
2686
2808
  &nbsp;
2687
2809
  import { createLogger, Logger, LogLevel } from "./logger";
@@ -2750,6 +2872,7 @@ export type DatafileFetchHandler = (datafileUrl: string) =&gt; Promise&lt;Datafi
2750
2872
  export enum EvaluationReason {
2751
2873
  NOT_FOUND = "not_found",
2752
2874
  NO_VARIATIONS = "no_variations",
2875
+ NO_MATCH = "no_match",
2753
2876
  DISABLED = "disabled",
2754
2877
  REQUIRED = "required",
2755
2878
  OUT_OF_RANGE = "out_of_range",
@@ -2769,11 +2892,15 @@ export interface Evaluation {
2769
2892
  reason: EvaluationReason;
2770
2893
  &nbsp;
2771
2894
  // common
2895
+ bucketKey?: BucketKey;
2772
2896
  bucketValue?: BucketValue;
2773
2897
  ruleKey?: RuleKey;
2774
2898
  error?: Error;
2775
2899
  enabled?: boolean;
2776
2900
  traffic?: Traffic;
2901
+ forceIndex?: number;
2902
+ force?: Force;
2903
+ required?: Required[];
2777
2904
  sticky?: OverrideFeature;
2778
2905
  initial?: OverrideFeature;
2779
2906
  &nbsp;
@@ -3033,16 +3160,27 @@ export class FeaturevisorInstance {
3033
3160
  return result;
3034
3161
  }
3035
3162
  &nbsp;
3036
- private getBucketValue(feature: Feature, context: Context): BucketValue {
3163
+ private getBucketValue(
3164
+ feature: Feature,
3165
+ context: Context,
3166
+ ): { bucketKey: BucketKey; bucketValue: BucketValue } {
3037
3167
  const bucketKey = this.getBucketKey(feature, context);
3038
3168
  &nbsp;
3039
3169
  const value = getBucketedNumber(bucketKey);
3040
3170
  &nbsp;
3041
3171
  if (this.configureBucketValue) {
3042
- return this.configureBucketValue(feature, context, value);
3172
+ const configuredValue = this.configureBucketValue(feature, context, value);
3173
+ &nbsp;
3174
+ return {
3175
+ bucketKey,
3176
+ bucketValue: configuredValue,
3177
+ };
3043
3178
  }
3044
3179
  &nbsp;
3045
- return value;
3180
+ return {
3181
+ bucketKey,
3182
+ bucketValue: value,
3183
+ };
3046
3184
  }
3047
3185
  &nbsp;
3048
3186
  /**
@@ -3135,8 +3273,8 @@ export class FeaturevisorInstance {
3135
3273
  evaluation = {
3136
3274
  featureKey: key,
3137
3275
  reason: EvaluationReason.STICKY,
3138
- enabled: this.stickyFeatures[key].enabled,
3139
3276
  sticky: this.stickyFeatures[key],
3277
+ enabled: this.stickyFeatures[key].enabled,
3140
3278
  };
3141
3279
  &nbsp;
3142
3280
  this.logger.debug("using sticky enabled", evaluation);
@@ -3155,8 +3293,8 @@ export class FeaturevisorInstance {
3155
3293
  evaluation = {
3156
3294
  featureKey: key,
3157
3295
  reason: EvaluationReason.INITIAL,
3158
- enabled: this.initialFeatures[key].enabled,
3159
3296
  initial: this.initialFeatures[key],
3297
+ enabled: this.initialFeatures[key].enabled,
3160
3298
  };
3161
3299
  &nbsp;
3162
3300
  this.logger.debug("using initial enabled", evaluation);
@@ -3186,12 +3324,19 @@ export class FeaturevisorInstance {
3186
3324
  const finalContext = this.interceptContext ? this.interceptContext(context) : context;
3187
3325
  &nbsp;
3188
3326
  // forced
3189
- const force = findForceFromFeature(feature, context, this.datafileReader, this.logger);
3327
+ const { force, forceIndex } = findForceFromFeature(
3328
+ feature,
3329
+ context,
3330
+ this.datafileReader,
3331
+ this.logger,
3332
+ );
3190
3333
  &nbsp;
3191
3334
  if (force &amp;&amp; typeof force.enabled !== "undefined") {
3192
3335
  evaluation = {
3193
3336
  featureKey: feature.key,
3194
3337
  reason: EvaluationReason.FORCED,
3338
+ forceIndex,
3339
+ force,
3195
3340
  enabled: force.enabled,
3196
3341
  };
3197
3342
  &nbsp;
@@ -3232,6 +3377,7 @@ export class FeaturevisorInstance {
3232
3377
  evaluation = {
3233
3378
  featureKey: feature.key,
3234
3379
  reason: EvaluationReason.REQUIRED,
3380
+ required: feature.required,
3235
3381
  enabled: requiredFeaturesAreEnabled,
3236
3382
  };
3237
3383
  &nbsp;
@@ -3242,7 +3388,7 @@ export class FeaturevisorInstance {
3242
3388
  }
3243
3389
  &nbsp;
3244
3390
  // bucketing
3245
- const bucketValue = this.getBucketValue(feature, finalContext);
3391
+ const { bucketKey, bucketValue } = this.getBucketValue(feature, finalContext);
3246
3392
  &nbsp;
3247
3393
  const matchedTraffic = getMatchedTraffic(
3248
3394
  feature.traffic,
@@ -3263,9 +3409,12 @@ export class FeaturevisorInstance {
3263
3409
  evaluation = {
3264
3410
  featureKey: feature.key,
3265
3411
  reason: EvaluationReason.ALLOCATED,
3412
+ bucketKey,
3413
+ bucketValue,
3414
+ ruleKey: matchedTraffic.key,
3415
+ traffic: matchedTraffic,
3266
3416
  enabled:
3267
3417
  typeof matchedTraffic.enabled === "undefined" ? true : <span class="branch-1 cbranch-no" title="branch not covered" >matchedTraffic.enabled,</span>
3268
- bucketValue,
3269
3418
  };
3270
3419
  &nbsp;
3271
3420
  this.logger.debug("matched", evaluation);
@@ -3277,8 +3426,9 @@ export class FeaturevisorInstance {
3277
3426
  evaluation = {
3278
3427
  featureKey: feature.key,
3279
3428
  reason: EvaluationReason.OUT_OF_RANGE,
3280
- enabled: false,
3429
+ bucketKey,
3281
3430
  bucketValue,
3431
+ enabled: false,
3282
3432
  };
3283
3433
  &nbsp;
3284
3434
  this.logger.debug("not matched", evaluation);
@@ -3291,10 +3441,11 @@ export class FeaturevisorInstance {
3291
3441
  evaluation = {
3292
3442
  featureKey: feature.key,
3293
3443
  reason: EvaluationReason.OVERRIDE,
3294
- enabled: matchedTraffic.enabled,
3444
+ bucketKey,
3295
3445
  bucketValue,
3296
3446
  ruleKey: matchedTraffic.key,
3297
3447
  traffic: matchedTraffic,
3448
+ enabled: matchedTraffic.enabled,
3298
3449
  };
3299
3450
  &nbsp;
3300
3451
  this.logger.debug("override from rule", evaluation);
@@ -3307,10 +3458,11 @@ export class FeaturevisorInstance {
3307
3458
  evaluation = {
3308
3459
  featureKey: feature.key,
3309
3460
  reason: EvaluationReason.RULE,
3310
- enabled: true,
3461
+ bucketKey,
3311
3462
  bucketValue,
3312
3463
  ruleKey: matchedTraffic.key,
3313
3464
  traffic: matchedTraffic,
3465
+ enabled: true,
3314
3466
  };
3315
3467
  &nbsp;
3316
3468
  this.logger.debug("matched traffic", evaluation);
@@ -3322,9 +3474,10 @@ export class FeaturevisorInstance {
3322
3474
  // nothing matched
3323
3475
  evaluation = {
3324
3476
  featureKey: feature.key,
3325
- reason: EvaluationReason.ERROR,
3326
- enabled: false,
3477
+ reason: EvaluationReason.NO_MATCH,
3478
+ bucketKey,
3327
3479
  bucketValue,
3480
+ enabled: false,
3328
3481
  };
3329
3482
  &nbsp;
3330
3483
  this.logger.debug("nothing matched", evaluation);
@@ -3444,7 +3597,12 @@ export class FeaturevisorInstance {
3444
3597
  const finalContext = this.interceptContext ? this.interceptContext(context) : context;
3445
3598
  &nbsp;
3446
3599
  // forced
3447
- const force = findForceFromFeature(feature, context, this.datafileReader, this.logger);
3600
+ const { force, forceIndex } = findForceFromFeature(
3601
+ feature,
3602
+ context,
3603
+ this.datafileReader,
3604
+ this.logger,
3605
+ );
3448
3606
  &nbsp;
3449
3607
  if (force &amp;&amp; force.variation) {
3450
3608
  const variation = feature.variations.find((v) =&gt; v.value === force.variation);
@@ -3453,6 +3611,8 @@ export class FeaturevisorInstance {
3453
3611
  evaluation = {
3454
3612
  featureKey: feature.key,
3455
3613
  reason: EvaluationReason.FORCED,
3614
+ forceIndex,
3615
+ force,
3456
3616
  variation,
3457
3617
  };
3458
3618
  &nbsp;
@@ -3463,7 +3623,7 @@ export class FeaturevisorInstance {
3463
3623
  }
3464
3624
  &nbsp;
3465
3625
  // bucketing
3466
- const bucketValue = this.getBucketValue(feature, finalContext);
3626
+ const { bucketKey, bucketValue } = this.getBucketValue(feature, finalContext);
3467
3627
  &nbsp;
3468
3628
  const { matchedTraffic, matchedAllocation } = getMatchedTrafficAndAllocation(
3469
3629
  feature.traffic,
@@ -3482,9 +3642,11 @@ export class FeaturevisorInstance {
3482
3642
  evaluation = {
3483
3643
  featureKey: feature.key,
3484
3644
  reason: EvaluationReason.RULE,
3485
- variation,
3645
+ bucketKey,
3486
3646
  bucketValue,
3487
3647
  ruleKey: matchedTraffic.key,
3648
+ traffic: matchedTraffic,
3649
+ variation,
3488
3650
  };
3489
3651
  &nbsp;
3490
3652
  this.logger.debug("override from rule", evaluation);
@@ -3501,7 +3663,10 @@ export class FeaturevisorInstance {
3501
3663
  evaluation = {
3502
3664
  featureKey: feature.key,
3503
3665
  reason: EvaluationReason.ALLOCATED,
3666
+ bucketKey,
3504
3667
  bucketValue,
3668
+ ruleKey: matchedTraffic.key,
3669
+ traffic: matchedTraffic,
3505
3670
  variation,
3506
3671
  };
3507
3672
  &nbsp;
@@ -3515,7 +3680,8 @@ export class FeaturevisorInstance {
3515
3680
  // nothing matched
3516
3681
  <span class="cstat-no" title="statement not covered" > evaluation = {</span>
3517
3682
  featureKey: feature.key,
3518
- reason: EvaluationReason.ERROR,
3683
+ reason: EvaluationReason.NO_MATCH,
3684
+ bucketKey,
3519
3685
  bucketValue,
3520
3686
  };
3521
3687
  &nbsp;
@@ -3711,12 +3877,19 @@ export class FeaturevisorInstance {
3711
3877
  const finalContext = this.interceptContext ? <span class="branch-0 cbranch-no" title="branch not covered" >this.interceptContext(context) </span>: context;
3712
3878
  &nbsp;
3713
3879
  // forced
3714
- const force = findForceFromFeature(feature, context, this.datafileReader, this.logger);
3880
+ const { force, forceIndex } = findForceFromFeature(
3881
+ feature,
3882
+ context,
3883
+ this.datafileReader,
3884
+ this.logger,
3885
+ );
3715
3886
  &nbsp;
3716
3887
  if (force &amp;&amp; force.variables &amp;&amp; typeof force.variables[variableKey] !== "undefined") {
3717
3888
  evaluation = {
3718
3889
  featureKey: feature.key,
3719
3890
  reason: EvaluationReason.FORCED,
3891
+ forceIndex,
3892
+ force,
3720
3893
  variableKey,
3721
3894
  variableSchema,
3722
3895
  variableValue: force.variables[variableKey],
@@ -3728,7 +3901,7 @@ export class FeaturevisorInstance {
3728
3901
  }
3729
3902
  &nbsp;
3730
3903
  // bucketing
3731
- const bucketValue = this.getBucketValue(feature, finalContext);
3904
+ const { bucketKey, bucketValue } = this.getBucketValue(feature, finalContext);
3732
3905
  &nbsp;
3733
3906
  const { matchedTraffic, matchedAllocation } = getMatchedTrafficAndAllocation(
3734
3907
  feature.traffic,
@@ -3747,11 +3920,13 @@ export class FeaturevisorInstance {
3747
3920
  evaluation = {
3748
3921
  featureKey: feature.key,
3749
3922
  reason: EvaluationReason.RULE,
3923
+ bucketKey,
3924
+ bucketValue,
3925
+ ruleKey: matchedTraffic.key,
3926
+ traffic: matchedTraffic,
3750
3927
  variableKey,
3751
3928
  variableSchema,
3752
3929
  variableValue: matchedTraffic.variables[variableKey],
3753
- bucketValue,
3754
- ruleKey: matchedTraffic.key,
3755
3930
  };
3756
3931
  &nbsp;
3757
3932
  this.logger.debug("override from rule", evaluation);
@@ -3801,11 +3976,13 @@ export class FeaturevisorInstance {
3801
3976
  evaluation = {
3802
3977
  featureKey: feature.key,
3803
3978
  reason: EvaluationReason.OVERRIDE,
3979
+ bucketKey,
3980
+ bucketValue,
3981
+ ruleKey: matchedTraffic.key,
3982
+ traffic: matchedTraffic,
3804
3983
  variableKey,
3805
3984
  variableSchema,
3806
3985
  variableValue: override.value,
3807
- bucketValue,
3808
- ruleKey: matchedTraffic.key,
3809
3986
  };
3810
3987
  &nbsp;
3811
3988
  this.logger.debug("variable override", evaluation);
@@ -3818,11 +3995,13 @@ export class FeaturevisorInstance {
3818
3995
  evaluation = {
3819
3996
  featureKey: feature.key,
3820
3997
  reason: EvaluationReason.ALLOCATED,
3998
+ bucketKey,
3999
+ bucketValue,
4000
+ ruleKey: matchedTraffic.key,
4001
+ traffic: matchedTraffic,
3821
4002
  variableKey,
3822
4003
  variableSchema,
3823
4004
  variableValue: variableFromVariation.value,
3824
- bucketValue,
3825
- ruleKey: matchedTraffic.key,
3826
4005
  };
3827
4006
  &nbsp;
3828
4007
  this.logger.debug("allocated variable", evaluation);
@@ -3838,10 +4017,11 @@ export class FeaturevisorInstance {
3838
4017
  evaluation = {
3839
4018
  featureKey: feature.key,
3840
4019
  reason: EvaluationReason.DEFAULTED,
4020
+ bucketKey,
4021
+ bucketValue,
3841
4022
  variableKey,
3842
4023
  variableSchema,
3843
4024
  variableValue: variableSchema.defaultValue,
3844
- bucketValue,
3845
4025
  };
3846
4026
  &nbsp;
3847
4027
  this.logger.debug("using default value", evaluation);
@@ -3970,7 +4150,7 @@ export function createInstance(options: InstanceOptions): FeaturevisorInstance {
3970
4150
  <div class='footer quiet pad2 space-top1 center small'>
3971
4151
  Code coverage generated by
3972
4152
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3973
- at 2024-04-05T16:04:58.225Z
4153
+ at 2024-04-30T18:08:48.599Z
3974
4154
  </div>
3975
4155
  <script src="prettify.js"></script>
3976
4156
  <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-05T16:04:58.225Z
343
+ at 2024-04-30T18:08:48.599Z
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-05T16:04:58.225Z
247
+ at 2024-04-30T18:08:48.599Z
248
248
  </div>
249
249
  <script src="prettify.js"></script>
250
250
  <script>