@featurevisor/sdk 2.3.2 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -331,7 +331,7 @@ export function getBucketKey(options: GetBucketKeyOptions): BucketKey {
331
331
  <div class='footer quiet pad2 space-top1 center small'>
332
332
  Code coverage generated by
333
333
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
334
- at 2025-11-19T22:30:12.056Z
334
+ at 2026-01-25T22:19:25.612Z
335
335
  </div>
336
336
  <script src="prettify.js"></script>
337
337
  <script>
@@ -925,7 +925,7 @@ export class FeaturevisorChildInstance {
925
925
  <div class='footer quiet pad2 space-top1 center small'>
926
926
  Code coverage generated by
927
927
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
928
- at 2025-11-19T22:30:12.056Z
928
+ at 2026-01-25T22:19:25.612Z
929
929
  </div>
930
930
  <script src="prettify.js"></script>
931
931
  <script>
@@ -400,7 +400,7 @@ export function conditionIsMatched(
400
400
  <div class='footer quiet pad2 space-top1 center small'>
401
401
  Code coverage generated by
402
402
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
403
- at 2025-11-19T22:30:12.056Z
403
+ at 2026-01-25T22:19:25.612Z
404
404
  </div>
405
405
  <script src="prettify.js"></script>
406
406
  <script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">91.45% </span>
26
+ <span class="strong">93.16% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>107/117</span>
28
+ <span class='fraction'>109/117</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">93.33% </span>
33
+ <span class="strong">95% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>56/60</span>
35
+ <span class='fraction'>57/60</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">91.15% </span>
47
+ <span class="strong">92.92% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>103/113</span>
49
+ <span class='fraction'>105/113</span>
50
50
  </div>
51
51
 
52
52
 
@@ -455,10 +455,10 @@
455
455
  <span class="cline-any cline-neutral">&nbsp;</span>
456
456
  <span class="cline-any cline-neutral">&nbsp;</span>
457
457
  <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-yes">210x</span>
458
+ <span class="cline-any cline-yes">212x</span>
459
459
  <span class="cline-any cline-neutral">&nbsp;</span>
460
- <span class="cline-any cline-yes">210x</span>
461
- <span class="cline-any cline-yes">1x</span>
460
+ <span class="cline-any cline-yes">212x</span>
461
+ <span class="cline-any cline-yes">3x</span>
462
462
  <span class="cline-any cline-neutral">&nbsp;</span>
463
463
  <span class="cline-any cline-neutral">&nbsp;</span>
464
464
  <span class="cline-any cline-yes">209x</span>
@@ -471,7 +471,7 @@
471
471
  <span class="cline-any cline-neutral">&nbsp;</span>
472
472
  <span class="cline-any cline-neutral">&nbsp;</span>
473
473
  <span class="cline-any cline-neutral">&nbsp;</span>
474
- <span class="cline-any cline-yes">210x</span>
474
+ <span class="cline-any cline-yes">212x</span>
475
475
  <span class="cline-any cline-neutral">&nbsp;</span>
476
476
  <span class="cline-any cline-neutral">&nbsp;</span>
477
477
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -485,13 +485,13 @@
485
485
  <span class="cline-any cline-neutral">&nbsp;</span>
486
486
  <span class="cline-any cline-neutral">&nbsp;</span>
487
487
  <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-yes">4x</span>
488
+ <span class="cline-any cline-yes">6x</span>
489
489
  <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-yes">4x</span>
491
- <span class="cline-any cline-no">&nbsp;</span>
490
+ <span class="cline-any cline-yes">6x</span>
491
+ <span class="cline-any cline-yes">1x</span>
492
492
  <span class="cline-any cline-neutral">&nbsp;</span>
493
493
  <span class="cline-any cline-neutral">&nbsp;</span>
494
- <span class="cline-any cline-yes">4x</span>
494
+ <span class="cline-any cline-yes">5x</span>
495
495
  <span class="cline-any cline-neutral">&nbsp;</span>
496
496
  <span class="cline-any cline-neutral">&nbsp;</span>
497
497
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -571,24 +571,24 @@
571
571
  <span class="cline-any cline-neutral">&nbsp;</span>
572
572
  <span class="cline-any cline-neutral">&nbsp;</span>
573
573
  <span class="cline-any cline-neutral">&nbsp;</span>
574
- <span class="cline-any cline-yes">506x</span>
575
- <span class="cline-any cline-yes">100x</span>
574
+ <span class="cline-any cline-yes">510x</span>
575
+ <span class="cline-any cline-yes">101x</span>
576
576
  <span class="cline-any cline-neutral">&nbsp;</span>
577
577
  <span class="cline-any cline-neutral">&nbsp;</span>
578
- <span class="cline-any cline-yes">406x</span>
579
- <span class="cline-any cline-yes">207x</span>
578
+ <span class="cline-any cline-yes">409x</span>
579
+ <span class="cline-any cline-yes">209x</span>
580
580
  <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-yes">207x</span>
581
+ <span class="cline-any cline-yes">209x</span>
582
582
  <span class="cline-any cline-yes">207x</span>
583
583
  <span class="cline-any cline-neutral">&nbsp;</span>
584
584
  <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-yes">2x</span>
586
586
  <span class="cline-any cline-neutral">&nbsp;</span>
587
587
  <span class="cline-any cline-neutral">&nbsp;</span>
588
- <span class="cline-any cline-yes">199x</span>
589
- <span class="cline-any cline-yes">199x</span>
590
- <span class="cline-any cline-yes">15x</span>
591
- <span class="cline-any cline-yes">24x</span>
588
+ <span class="cline-any cline-yes">200x</span>
589
+ <span class="cline-any cline-yes">200x</span>
590
+ <span class="cline-any cline-yes">16x</span>
591
+ <span class="cline-any cline-yes">25x</span>
592
592
  <span class="cline-any cline-neutral">&nbsp;</span>
593
593
  <span class="cline-any cline-neutral">&nbsp;</span>
594
594
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -813,8 +813,8 @@ export class DatafileReader {
813
813
  hasVariations(featureKey: FeatureKey): boolean {
814
814
  const feature = this.getFeature(featureKey);
815
815
  &nbsp;
816
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!feature) {
817
- <span class="cstat-no" title="statement not covered" > return false;</span>
816
+ if (!feature) {
817
+ return false;
818
818
  }
819
819
  &nbsp;
820
820
  return Array.isArray(feature.variations) &amp;&amp; feature.variations.length &gt; 0;
@@ -908,7 +908,7 @@ export class DatafileReader {
908
908
  return this.segmentIsMatched(segment, context);
909
909
  }
910
910
  &nbsp;
911
- <span class="cstat-no" title="statement not covered" > return false;</span>
911
+ return false;
912
912
  }
913
913
  &nbsp;
914
914
  if (typeof groupSegments === "object") {
@@ -1048,7 +1048,7 @@ export class DatafileReader {
1048
1048
  <div class='footer quiet pad2 space-top1 center small'>
1049
1049
  Code coverage generated by
1050
1050
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1051
- at 2025-11-19T22:30:12.056Z
1051
+ at 2026-01-25T22:19:25.612Z
1052
1052
  </div>
1053
1053
  <script src="prettify.js"></script>
1054
1054
  <script>
@@ -247,7 +247,7 @@ export class Emitter {
247
247
  <div class='footer quiet pad2 space-top1 center small'>
248
248
  Code coverage generated by
249
249
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
250
- at 2025-11-19T22:30:12.056Z
250
+ at 2026-01-25T22:19:25.612Z
251
251
  </div>
252
252
  <script src="prettify.js"></script>
253
253
  <script>
@@ -2680,7 +2680,7 @@ export function evaluate(options: EvaluateOptions): Evaluation {
2680
2680
  <div class='footer quiet pad2 space-top1 center small'>
2681
2681
  Code coverage generated by
2682
2682
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2683
- at 2025-11-19T22:30:12.056Z
2683
+ at 2026-01-25T22:19:25.612Z
2684
2684
  </div>
2685
2685
  <script src="prettify.js"></script>
2686
2686
  <script>
@@ -319,7 +319,7 @@ export function getParamsForDatafileSetEvent(
319
319
  <div class='footer quiet pad2 space-top1 center small'>
320
320
  Code coverage generated by
321
321
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
322
- at 2025-11-19T22:30:12.056Z
322
+ at 2026-01-25T22:19:25.612Z
323
323
  </div>
324
324
  <script src="prettify.js"></script>
325
325
  <script>
@@ -154,7 +154,7 @@ export function getValueByType(value: ValueType, fieldType: FieldType): ValueTyp
154
154
  <div class='footer quiet pad2 space-top1 center small'>
155
155
  Code coverage generated by
156
156
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
157
- at 2025-11-19T22:30:12.056Z
157
+ at 2026-01-25T22:19:25.612Z
158
158
  </div>
159
159
  <script src="prettify.js"></script>
160
160
  <script>
@@ -337,7 +337,7 @@ export class HooksManager {
337
337
  <div class='footer quiet pad2 space-top1 center small'>
338
338
  Code coverage generated by
339
339
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
340
- at 2025-11-19T22:30:12.056Z
340
+ at 2026-01-25T22:19:25.612Z
341
341
  </div>
342
342
  <script src="prettify.js"></script>
343
343
  <script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">90.92% </span>
26
+ <span class="strong">91.2% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>641/705</span>
28
+ <span class='fraction'>643/705</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">84.93% </span>
33
+ <span class="strong">85.15% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>389/458</span>
35
+ <span class='fraction'>390/458</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">91.05% </span>
47
+ <span class="strong">91.34% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>631/693</span>
49
+ <span class='fraction'>633/693</span>
50
50
  </div>
51
51
 
52
52
 
@@ -125,17 +125,17 @@
125
125
 
126
126
  <tr>
127
127
  <td class="file high" data-value="datafileReader.ts"><a href="datafileReader.ts.html">datafileReader.ts</a></td>
128
- <td data-value="91.45" class="pic high">
129
- <div class="chart"><div class="cover-fill" style="width: 91%"></div><div class="cover-empty" style="width: 9%"></div></div>
128
+ <td data-value="93.16" class="pic high">
129
+ <div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
130
130
  </td>
131
- <td data-value="91.45" class="pct high">91.45%</td>
132
- <td data-value="117" class="abs high">107/117</td>
133
- <td data-value="93.33" class="pct high">93.33%</td>
134
- <td data-value="60" class="abs high">56/60</td>
131
+ <td data-value="93.16" class="pct high">93.16%</td>
132
+ <td data-value="117" class="abs high">109/117</td>
133
+ <td data-value="95" class="pct high">95%</td>
134
+ <td data-value="60" class="abs high">57/60</td>
135
135
  <td data-value="100" class="pct high">100%</td>
136
136
  <td data-value="27" class="abs high">27/27</td>
137
- <td data-value="91.15" class="pct high">91.15%</td>
138
- <td data-value="113" class="abs high">103/113</td>
137
+ <td data-value="92.92" class="pct high">92.92%</td>
138
+ <td data-value="113" class="abs high">105/113</td>
139
139
  </tr>
140
140
 
141
141
  <tr>
@@ -251,7 +251,7 @@
251
251
  <div class='footer quiet pad2 space-top1 center small'>
252
252
  Code coverage generated by
253
253
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
254
- at 2025-11-19T22:30:12.056Z
254
+ at 2026-01-25T22:19:25.612Z
255
255
  </div>
256
256
  <script src="prettify.js"></script>
257
257
  <script>
@@ -1402,7 +1402,7 @@ export function createInstance(options: InstanceOptions = <span class="branch-0
1402
1402
  <div class='footer quiet pad2 space-top1 center small'>
1403
1403
  Code coverage generated by
1404
1404
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1405
- at 2025-11-19T22:30:12.056Z
1405
+ at 2026-01-25T22:19:25.612Z
1406
1406
  </div>
1407
1407
  <script src="prettify.js"></script>
1408
1408
  <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 2025-11-19T22:30:12.056Z
343
+ at 2026-01-25T22:19:25.612Z
344
344
  </div>
345
345
  <script src="prettify.js"></script>
346
346
  <script>
@@ -371,11 +371,11 @@ FNH:27
371
371
  FNDA:47,(anonymous_0)
372
372
  FNDA:9,(anonymous_1)
373
373
  FNDA:1,(anonymous_2)
374
- FNDA:210,(anonymous_3)
374
+ FNDA:212,(anonymous_3)
375
375
  FNDA:10,(anonymous_4)
376
- FNDA:210,(anonymous_5)
376
+ FNDA:212,(anonymous_5)
377
377
  FNDA:6,(anonymous_6)
378
- FNDA:4,(anonymous_7)
378
+ FNDA:6,(anonymous_7)
379
379
  FNDA:18,(anonymous_8)
380
380
  FNDA:1506,(anonymous_9)
381
381
  FNDA:18,(anonymous_10)
@@ -384,8 +384,8 @@ FNDA:38,(anonymous_12)
384
384
  FNDA:9,(anonymous_13)
385
385
  FNDA:711,(anonymous_14)
386
386
  FNDA:207,(anonymous_15)
387
- FNDA:506,(anonymous_16)
388
- FNDA:24,(anonymous_17)
387
+ FNDA:510,(anonymous_16)
388
+ FNDA:25,(anonymous_17)
389
389
  FNDA:12,(anonymous_18)
390
390
  FNDA:10,(anonymous_19)
391
391
  FNDA:177,(anonymous_20)
@@ -406,21 +406,21 @@ DA:53,47
406
406
  DA:55,47
407
407
  DA:59,9
408
408
  DA:63,1
409
- DA:67,210
410
- DA:69,210
411
- DA:70,1
409
+ DA:67,212
410
+ DA:69,212
411
+ DA:70,3
412
412
  DA:73,209
413
413
  DA:75,209
414
414
  DA:79,10
415
- DA:83,210
415
+ DA:83,212
416
416
  DA:87,6
417
417
  DA:89,6
418
418
  DA:90,1
419
419
  DA:93,5
420
- DA:97,4
421
- DA:99,4
422
- DA:100,0
423
- DA:103,4
420
+ DA:97,6
421
+ DA:99,6
422
+ DA:100,1
423
+ DA:103,5
424
424
  DA:107,18
425
425
  DA:108,18
426
426
  DA:110,18
@@ -450,17 +450,17 @@ DA:168,708
450
450
  DA:169,711
451
451
  DA:172,0
452
452
  DA:176,207
453
- DA:183,506
454
- DA:184,100
455
- DA:187,406
456
- DA:188,207
457
- DA:190,207
453
+ DA:183,510
454
+ DA:184,101
455
+ DA:187,409
456
+ DA:188,209
457
+ DA:190,209
458
458
  DA:191,207
459
- DA:194,0
460
- DA:197,199
461
- DA:198,199
462
- DA:199,15
463
- DA:200,24
459
+ DA:194,2
460
+ DA:197,200
461
+ DA:198,200
462
+ DA:199,16
463
+ DA:200,25
464
464
  DA:204,184
465
465
  DA:205,8
466
466
  DA:206,12
@@ -509,13 +509,13 @@ DA:320,242
509
509
  DA:321,5
510
510
  DA:324,237
511
511
  LF:113
512
- LH:103
513
- BRDA:69,0,0,1
512
+ LH:105
513
+ BRDA:69,0,0,3
514
514
  BRDA:89,1,0,1
515
515
  BRDA:93,2,0,5
516
516
  BRDA:93,2,1,3
517
- BRDA:99,3,0,0
518
- BRDA:103,4,0,4
517
+ BRDA:99,3,0,1
518
+ BRDA:103,4,0,5
519
519
  BRDA:103,4,1,2
520
520
  BRDA:107,5,0,18
521
521
  BRDA:107,5,1,9
@@ -533,13 +533,13 @@ BRDA:156,14,0,6
533
533
  BRDA:156,15,0,714
534
534
  BRDA:156,15,1,6
535
535
  BRDA:168,16,0,708
536
- BRDA:183,17,0,100
537
- BRDA:187,18,0,207
536
+ BRDA:183,17,0,101
537
+ BRDA:187,18,0,209
538
538
  BRDA:190,19,0,207
539
- BRDA:197,20,0,199
540
- BRDA:198,21,0,15
541
- BRDA:198,22,0,199
542
- BRDA:198,22,1,15
539
+ BRDA:197,20,0,200
540
+ BRDA:198,21,0,16
541
+ BRDA:198,22,0,200
542
+ BRDA:198,22,1,16
543
543
  BRDA:204,23,0,8
544
544
  BRDA:204,24,0,184
545
545
  BRDA:204,24,1,8
@@ -571,7 +571,7 @@ BRDA:320,42,0,242
571
571
  BRDA:320,42,1,112
572
572
  BRDA:320,42,2,112
573
573
  BRF:60
574
- BRH:56
574
+ BRH:57
575
575
  end_of_record
576
576
  TN:
577
577
  SF:src/emitter.ts
package/dist/index.mjs.gz CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@featurevisor/sdk",
3
- "version": "2.3.2",
3
+ "version": "2.6.0",
4
4
  "description": "Featurevisor SDK for Node.js and the browser",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.mjs",
@@ -49,7 +49,7 @@
49
49
  },
50
50
  "license": "MIT",
51
51
  "dependencies": {
52
- "@featurevisor/types": "2.1.2"
52
+ "@featurevisor/types": "2.6.0"
53
53
  },
54
- "gitHead": "aa3daee9d3fcbc17d628eb7cf793c1fb7fc8ffc4"
54
+ "gitHead": "e5dafb8a51d7653e35fe17cacc0c14d7e95f69d0"
55
55
  }
@@ -66,6 +66,17 @@ describe("sdk: DatafileReader", function () {
66
66
  },
67
67
  ],
68
68
  },
69
+ testWithNoVariations: {
70
+ key: "testWithNoVariations",
71
+ bucketBy: "userId",
72
+ traffic: [
73
+ {
74
+ key: "1",
75
+ segments: "*",
76
+ percentage: 100000,
77
+ },
78
+ ],
79
+ },
69
80
  },
70
81
  };
71
82
 
@@ -79,10 +90,18 @@ describe("sdk: DatafileReader", function () {
79
90
  expect(reader.getSegment("netherlands")).toEqual(datafileJson.segments.netherlands);
80
91
  expect((reader.getSegment("germany") as any).conditions[0].value).toEqual("de");
81
92
  expect(reader.getSegment("belgium")).toEqual(undefined);
93
+
82
94
  expect(reader.getFeature("test")).toEqual(datafileJson.features.test);
83
95
  expect(reader.getVariableKeys("test")).toEqual([]);
84
96
  expect(reader.getFeature("test2")).toEqual(undefined);
85
97
  expect(reader.getVariableKeys("test2")).toEqual([]);
98
+
99
+ expect(reader.hasVariations("testWithNoVariations")).toEqual(false);
100
+ expect(reader.hasVariations("unknownFeature")).toEqual(false);
101
+
102
+ expect(reader.allSegmentsAreMatched("*", {})).toEqual(true);
103
+ expect(reader.allSegmentsAreMatched("unknownSegment", {})).toEqual(false);
104
+ expect(reader.allSegmentsAreMatched({ and: ["unknownSegment"] }, {})).toEqual(false);
86
105
  });
87
106
 
88
107
  describe("segments", function () {