@featurevisor/core 0.37.1 → 0.38.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,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">95.45% </span>
26
+ <span class="strong">95.55% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>168/176</span>
28
+ <span class='fraction'>172/180</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">82.66% </span>
33
+ <span class="strong">81.39% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>62/75</span>
35
+ <span class='fraction'>70/86</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">95.26% </span>
47
+ <span class="strong">95.37% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>161/169</span>
49
+ <span class='fraction'>165/173</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,32 +80,32 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file high" data-value="lib"><a href="lib/index.html">lib</a></td>
83
- <td data-value="95.74" class="pic high">
83
+ <td data-value="95.83" class="pic high">
84
84
  <div class="chart"><div class="cover-fill" style="width: 95%"></div><div class="cover-empty" style="width: 5%"></div></div>
85
85
  </td>
86
- <td data-value="95.74" class="pct high">95.74%</td>
87
- <td data-value="94" class="abs high">90/94</td>
88
- <td data-value="83.33" class="pct high">83.33%</td>
89
- <td data-value="42" class="abs high">35/42</td>
86
+ <td data-value="95.83" class="pct high">95.83%</td>
87
+ <td data-value="96" class="abs high">92/96</td>
88
+ <td data-value="81.25" class="pct high">81.25%</td>
89
+ <td data-value="48" class="abs high">39/48</td>
90
90
  <td data-value="100" class="pct high">100%</td>
91
91
  <td data-value="14" class="abs high">14/14</td>
92
- <td data-value="95.45" class="pct high">95.45%</td>
93
- <td data-value="88" class="abs high">84/88</td>
92
+ <td data-value="95.55" class="pct high">95.55%</td>
93
+ <td data-value="90" class="abs high">86/90</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
97
97
  <td class="file high" data-value="src"><a href="src/index.html">src</a></td>
98
- <td data-value="95.12" class="pic high">
98
+ <td data-value="95.23" class="pic high">
99
99
  <div class="chart"><div class="cover-fill" style="width: 95%"></div><div class="cover-empty" style="width: 5%"></div></div>
100
100
  </td>
101
- <td data-value="95.12" class="pct high">95.12%</td>
102
- <td data-value="82" class="abs high">78/82</td>
103
- <td data-value="81.81" class="pct high">81.81%</td>
104
- <td data-value="33" class="abs high">27/33</td>
101
+ <td data-value="95.23" class="pct high">95.23%</td>
102
+ <td data-value="84" class="abs high">80/84</td>
103
+ <td data-value="81.57" class="pct high">81.57%</td>
104
+ <td data-value="38" class="abs high">31/38</td>
105
105
  <td data-value="100" class="pct high">100%</td>
106
106
  <td data-value="14" class="abs high">14/14</td>
107
- <td data-value="95.06" class="pct high">95.06%</td>
108
- <td data-value="81" class="abs high">77/81</td>
107
+ <td data-value="95.18" class="pct high">95.18%</td>
108
+ <td data-value="83" class="abs high">79/83</td>
109
109
  </tr>
110
110
 
111
111
  </tbody>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2023-07-15T14:30:08.958Z
119
+ at 2023-07-16T19:53:44.899Z
120
120
  </div>
121
121
  <script src="prettify.js"></script>
122
122
  <script>
@@ -175,7 +175,7 @@ exports.getUpdatedAvailableRangesAfterFilling = getUpdatedAvailableRangesAfterFi
175
175
  <div class='footer quiet pad2 space-top1 center small'>
176
176
  Code coverage generated by
177
177
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
178
- at 2023-07-15T14:30:08.958Z
178
+ at 2023-07-16T19:53:44.899Z
179
179
  </div>
180
180
  <script src="../prettify.js"></script>
181
181
  <script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">95.74% </span>
26
+ <span class="strong">95.83% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>90/94</span>
28
+ <span class='fraction'>92/96</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">83.33% </span>
33
+ <span class="strong">81.25% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>35/42</span>
35
+ <span class='fraction'>39/48</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">95.45% </span>
47
+ <span class="strong">95.55% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>84/88</span>
49
+ <span class='fraction'>86/90</span>
50
50
  </div>
51
51
 
52
52
 
@@ -95,17 +95,17 @@
95
95
 
96
96
  <tr>
97
97
  <td class="file high" data-value="traffic.js"><a href="traffic.js.html">traffic.js</a></td>
98
- <td data-value="93.84" class="pic high">
99
- <div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
98
+ <td data-value="94.02" class="pic high">
99
+ <div class="chart"><div class="cover-fill" style="width: 94%"></div><div class="cover-empty" style="width: 6%"></div></div>
100
100
  </td>
101
- <td data-value="93.84" class="pct high">93.84%</td>
102
- <td data-value="65" class="abs high">61/65</td>
103
- <td data-value="80.55" class="pct high">80.55%</td>
104
- <td data-value="36" class="abs high">29/36</td>
101
+ <td data-value="94.02" class="pct high">94.02%</td>
102
+ <td data-value="67" class="abs high">63/67</td>
103
+ <td data-value="78.57" class="pct medium">78.57%</td>
104
+ <td data-value="42" class="abs medium">33/42</td>
105
105
  <td data-value="100" class="pct high">100%</td>
106
106
  <td data-value="12" class="abs high">12/12</td>
107
- <td data-value="93.44" class="pct high">93.44%</td>
108
- <td data-value="61" class="abs high">57/61</td>
107
+ <td data-value="93.65" class="pct high">93.65%</td>
108
+ <td data-value="63" class="abs high">59/63</td>
109
109
  </tr>
110
110
 
111
111
  </tbody>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2023-07-15T14:30:08.958Z
119
+ at 2023-07-16T19:53:44.899Z
120
120
  </div>
121
121
  <script src="../prettify.js"></script>
122
122
  <script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">93.84% </span>
26
+ <span class="strong">94.02% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>61/65</span>
28
+ <span class='fraction'>63/67</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">80.55% </span>
33
+ <span class="strong">78.57% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>29/36</span>
35
+ <span class='fraction'>33/42</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">93.44% </span>
47
+ <span class="strong">93.65% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>57/61</span>
49
+ <span class='fraction'>59/63</span>
50
50
  </div>
51
51
 
52
52
 
@@ -182,7 +182,12 @@
182
182
  <a name='L117'></a><a href='#L117'>117</a>
183
183
  <a name='L118'></a><a href='#L118'>118</a>
184
184
  <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
186
191
  <span class="cline-any cline-yes">1x</span>
187
192
  <span class="cline-any cline-yes">1x</span>
188
193
  <span class="cline-any cline-yes">1x</span>
@@ -193,15 +198,18 @@
193
198
  <span class="cline-any cline-yes">3x</span>
194
199
  <span class="cline-any cline-neutral">&nbsp;</span>
195
200
  <span class="cline-any cline-yes">6x</span>
201
+ <span class="cline-any cline-neutral">&nbsp;</span>
202
+ <span class="cline-any cline-yes">15x</span>
203
+ <span class="cline-any cline-yes">15x</span>
204
+ <span class="cline-any cline-neutral">&nbsp;</span>
205
+ <span class="cline-any cline-neutral">&nbsp;</span>
206
+ <span class="cline-any cline-yes">6x</span>
196
207
  <span class="cline-any cline-yes">16x</span>
197
208
  <span class="cline-any cline-yes">16x</span>
198
209
  <span class="cline-any cline-neutral">&nbsp;</span>
199
210
  <span class="cline-any cline-neutral">&nbsp;</span>
200
211
  <span class="cline-any cline-neutral">&nbsp;</span>
201
212
  <span class="cline-any cline-neutral">&nbsp;</span>
202
- <span class="cline-any cline-yes">15x</span>
203
- <span class="cline-any cline-yes">15x</span>
204
- <span class="cline-any cline-neutral">&nbsp;</span>
205
213
  <span class="cline-any cline-neutral">&nbsp;</span>
206
214
  <span class="cline-any cline-yes">1x</span>
207
215
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -276,6 +284,7 @@
276
284
  <span class="cline-any cline-yes">1x</span>
277
285
  <span class="cline-any cline-neutral">&nbsp;</span>
278
286
  <span class="cline-any cline-yes">9x</span>
287
+ <span class="cline-any cline-yes">9x</span>
279
288
  <span class="cline-any cline-yes">22x</span>
280
289
  <span class="cline-any cline-yes">22x</span>
281
290
  <span class="cline-any cline-yes">22x</span>
@@ -290,6 +299,7 @@
290
299
  <span class="cline-any cline-neutral">&nbsp;</span>
291
300
  <span class="cline-any cline-yes">22x</span>
292
301
  <span class="cline-any cline-neutral">&nbsp;</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
293
303
  <span class="cline-any cline-yes">9x</span>
294
304
  <span class="cline-any cline-yes">23x</span>
295
305
  <span class="cline-any cline-no">&nbsp;</span>
@@ -308,19 +318,22 @@ var sdk_1 = require("@featurevisor/sdk");
308
318
  var allocator_1 = require("./allocator");
309
319
  function detectIfVariationsChanged(yamlVariations, // as exists in latest YAML
310
320
  existingFeature) {
311
- if (!existingFeature) {
321
+ if (!existingFeature || typeof existingFeature.variations === "undefined") {
312
322
  return false;
313
323
  }
324
+ var checkVariations = Array.isArray(yamlVariations)
325
+ ? JSON.stringify(yamlVariations.map(function (_a) {
326
+ var value = _a.value, weight = _a.weight;
327
+ return ({ value: value, weight: weight });
328
+ }))
329
+ : <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
314
330
  return (JSON.stringify(existingFeature.variations.map(function (_a) {
315
331
  var value = _a.value, weight = _a.weight;
316
332
  return ({
317
333
  value: value,
318
334
  weight: weight,
319
335
  });
320
- })) !== JSON.stringify(yamlVariations.map(function (_a) {
321
- var value = _a.value, weight = _a.weight;
322
- return ({ value: value, weight: weight });
323
- })));
336
+ })) !== checkVariations);
324
337
  }
325
338
  exports.detectIfVariationsChanged = detectIfVariationsChanged;
326
339
  function getRulePercentageDiff(trafficPercentage, // 0 to 100k
@@ -394,21 +407,23 @@ ranges) {
394
407
  });
395
408
  updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(availableRanges, existingSum_1);
396
409
  }
397
- variations.forEach(function (variation) {
398
- var weight = variation.weight;
399
- var percentage = weight * (sdk_1.MAX_BUCKETED_NUMBER / 100);
400
- var toFillValue = needsRebucketing
401
- ? percentage * (rulePercentage / 100) // whole value
402
- : (weight / 100) * rulePercentageDiff; // incrementing
403
- var rangesToFill = (0, allocator_1.getAllocation)(updatedAvailableRanges, toFillValue);
404
- rangesToFill.forEach(function (range) {
405
- traffic.allocation.push({
406
- variation: variation.value,
407
- range: range,
410
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (Array.isArray(variations)) {
411
+ variations.forEach(function (variation) {
412
+ var weight = variation.weight;
413
+ var percentage = weight * (sdk_1.MAX_BUCKETED_NUMBER / 100);
414
+ var toFillValue = needsRebucketing
415
+ ? percentage * (rulePercentage / 100) // whole value
416
+ : (weight / 100) * rulePercentageDiff; // incrementing
417
+ var rangesToFill = (0, allocator_1.getAllocation)(updatedAvailableRanges, toFillValue);
418
+ rangesToFill.forEach(function (range) {
419
+ traffic.allocation.push({
420
+ variation: variation.value,
421
+ range: range,
422
+ });
408
423
  });
424
+ updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(updatedAvailableRanges, toFillValue);
409
425
  });
410
- updatedAvailableRanges = (0, allocator_1.getUpdatedAvailableRangesAfterFilling)(updatedAvailableRanges, toFillValue);
411
- });
426
+ }
412
427
  traffic.allocation = traffic.allocation.filter(function (a) {
413
428
  <span class="missing-if-branch" title="if path not taken" >I</span>if (a.range &amp;&amp; a.range[0] === a.range[1]) {
414
429
  <span class="cstat-no" title="statement not covered" > return false;</span>
@@ -427,7 +442,7 @@ exports.getTraffic = getTraffic;
427
442
  <div class='footer quiet pad2 space-top1 center small'>
428
443
  Code coverage generated by
429
444
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
430
- at 2023-07-15T14:30:08.958Z
445
+ at 2023-07-16T19:53:44.899Z
431
446
  </div>
432
447
  <script src="../prettify.js"></script>
433
448
  <script>
@@ -193,7 +193,7 @@ export function getUpdatedAvailableRangesAfterFilling(
193
193
  <div class='footer quiet pad2 space-top1 center small'>
194
194
  Code coverage generated by
195
195
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
196
- at 2023-07-15T14:30:08.958Z
196
+ at 2023-07-16T19:53:44.899Z
197
197
  </div>
198
198
  <script src="../prettify.js"></script>
199
199
  <script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">95.12% </span>
26
+ <span class="strong">95.23% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>78/82</span>
28
+ <span class='fraction'>80/84</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">81.81% </span>
33
+ <span class="strong">81.57% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>27/33</span>
35
+ <span class='fraction'>31/38</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">95.06% </span>
47
+ <span class="strong">95.18% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>77/81</span>
49
+ <span class='fraction'>79/83</span>
50
50
  </div>
51
51
 
52
52
 
@@ -95,17 +95,17 @@
95
95
 
96
96
  <tr>
97
97
  <td class="file high" data-value="traffic.ts"><a href="traffic.ts.html">traffic.ts</a></td>
98
- <td data-value="92.98" class="pic high">
99
- <div class="chart"><div class="cover-fill" style="width: 92%"></div><div class="cover-empty" style="width: 8%"></div></div>
98
+ <td data-value="93.22" class="pic high">
99
+ <div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
100
100
  </td>
101
- <td data-value="92.98" class="pct high">92.98%</td>
102
- <td data-value="57" class="abs high">53/57</td>
103
- <td data-value="78.57" class="pct medium">78.57%</td>
104
- <td data-value="28" class="abs medium">22/28</td>
101
+ <td data-value="93.22" class="pct high">93.22%</td>
102
+ <td data-value="59" class="abs high">55/59</td>
103
+ <td data-value="78.78" class="pct medium">78.78%</td>
104
+ <td data-value="33" class="abs medium">26/33</td>
105
105
  <td data-value="100" class="pct high">100%</td>
106
106
  <td data-value="12" class="abs high">12/12</td>
107
- <td data-value="92.85" class="pct high">92.85%</td>
108
- <td data-value="56" class="abs high">52/56</td>
107
+ <td data-value="93.1" class="pct high">93.1%</td>
108
+ <td data-value="58" class="abs high">54/58</td>
109
109
  </tr>
110
110
 
111
111
  </tbody>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2023-07-15T14:30:08.958Z
119
+ at 2023-07-16T19:53:44.899Z
120
120
  </div>
121
121
  <script src="../prettify.js"></script>
122
122
  <script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">92.98% </span>
26
+ <span class="strong">93.22% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>53/57</span>
28
+ <span class='fraction'>55/59</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">78.57% </span>
33
+ <span class="strong">78.78% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>22/28</span>
35
+ <span class='fraction'>26/33</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">92.85% </span>
47
+ <span class="strong">93.1% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>52/56</span>
49
+ <span class='fraction'>54/58</span>
50
50
  </div>
51
51
 
52
52
 
@@ -218,7 +218,13 @@
218
218
  <a name='L153'></a><a href='#L153'>153</a>
219
219
  <a name='L154'></a><a href='#L154'>154</a>
220
220
  <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
222
228
  <span class="cline-any cline-yes">1x</span>
223
229
  <span class="cline-any cline-neutral">&nbsp;</span>
224
230
  <span class="cline-any cline-yes">1x</span>
@@ -232,12 +238,16 @@
232
238
  <span class="cline-any cline-neutral">&nbsp;</span>
233
239
  <span class="cline-any cline-neutral">&nbsp;</span>
234
240
  <span class="cline-any cline-yes">6x</span>
241
+ <span class="cline-any cline-yes">15x</span>
242
+ <span class="cline-any cline-neutral">&nbsp;</span>
243
+ <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-yes">6x</span>
235
245
  <span class="cline-any cline-neutral">&nbsp;</span>
236
246
  <span class="cline-any cline-yes">16x</span>
237
247
  <span class="cline-any cline-neutral">&nbsp;</span>
238
248
  <span class="cline-any cline-neutral">&nbsp;</span>
239
249
  <span class="cline-any cline-neutral">&nbsp;</span>
240
- <span class="cline-any cline-yes">15x</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
241
251
  <span class="cline-any cline-neutral">&nbsp;</span>
242
252
  <span class="cline-any cline-neutral">&nbsp;</span>
243
253
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -339,6 +349,7 @@
339
349
  <span class="cline-any cline-neutral">&nbsp;</span>
340
350
  <span class="cline-any cline-neutral">&nbsp;</span>
341
351
  <span class="cline-any cline-yes">9x</span>
352
+ <span class="cline-any cline-yes">9x</span>
342
353
  <span class="cline-any cline-yes">22x</span>
343
354
  <span class="cline-any cline-yes">22x</span>
344
355
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -360,6 +371,7 @@
360
371
  <span class="cline-any cline-neutral">&nbsp;</span>
361
372
  <span class="cline-any cline-neutral">&nbsp;</span>
362
373
  <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
375
  <span class="cline-any cline-yes">9x</span>
364
376
  <span class="cline-any cline-yes">23x</span>
365
377
  <span class="cline-any cline-no">&nbsp;</span>
@@ -379,12 +391,16 @@ import { MAX_BUCKETED_NUMBER } from "@featurevisor/sdk";
379
391
  import { getAllocation, getUpdatedAvailableRangesAfterFilling } from "./allocator";
380
392
  &nbsp;
381
393
  export function detectIfVariationsChanged(
382
- yamlVariations: Variation[], // as exists in latest YAML
394
+ yamlVariations: Variation[] | undefined, // as exists in latest YAML
383
395
  existingFeature?: ExistingFeature, // from state file
384
396
  ): boolean {
385
- if (!existingFeature) {
397
+ if (!existingFeature || typeof existingFeature.variations === "undefined") {
386
398
  return false;
387
399
  }
400
+ &nbsp;
401
+ const checkVariations = Array.isArray(yamlVariations)
402
+ ? JSON.stringify(yamlVariations.map(({ value, weight }) =&gt; ({ value, weight })))
403
+ : <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
388
404
  &nbsp;
389
405
  return (
390
406
  JSON.stringify(
@@ -392,7 +408,7 @@ export function detectIfVariationsChanged(
392
408
  value,
393
409
  weight,
394
410
  })),
395
- ) !== JSON.stringify(yamlVariations.map(({ value, weight }) =&gt; ({ value, weight })))
411
+ ) !== checkVariations
396
412
  );
397
413
  }
398
414
  &nbsp;
@@ -426,7 +442,7 @@ export function detectIfRangesChanged(
426
442
  &nbsp;
427
443
  export function getTraffic(
428
444
  // from current YAML
429
- variations: Variation[],
445
+ variations: Variation[] | undefined,
430
446
  parsedRules: Rule[],
431
447
  // from previous release
432
448
  existingFeature: ExistingFeature | undefined,
@@ -493,27 +509,29 @@ export function getTraffic(
493
509
  updatedAvailableRanges = getUpdatedAvailableRangesAfterFilling(availableRanges, existingSum);
494
510
  }
495
511
  &nbsp;
496
- variations.forEach(function (variation) {
497
- const weight = variation.weight as number;
498
- const percentage = weight * (MAX_BUCKETED_NUMBER / 100);
512
+ if (Array.isArray(variations)) {
513
+ variations.forEach(function (variation) {
514
+ const weight = variation.weight as number;
515
+ const percentage = weight * (MAX_BUCKETED_NUMBER / 100);
499
516
  &nbsp;
500
- let toFillValue = needsRebucketing
501
- ? percentage * (rulePercentage / 100) // whole value
502
- : (weight / 100) * rulePercentageDiff; // incrementing
503
- const rangesToFill = getAllocation(updatedAvailableRanges, toFillValue);
517
+ let toFillValue = needsRebucketing
518
+ ? percentage * (rulePercentage / 100) // whole value
519
+ : (weight / 100) * rulePercentageDiff; // incrementing
520
+ const rangesToFill = getAllocation(updatedAvailableRanges, toFillValue);
504
521
  &nbsp;
505
- rangesToFill.forEach(function (range) {
506
- traffic.allocation.push({
507
- variation: variation.value,
508
- range,
522
+ rangesToFill.forEach(function (range) {
523
+ traffic.allocation.push({
524
+ variation: variation.value,
525
+ range,
526
+ });
509
527
  });
510
- });
511
528
  &nbsp;
512
- updatedAvailableRanges = getUpdatedAvailableRangesAfterFilling(
513
- updatedAvailableRanges,
514
- toFillValue,
515
- );
516
- });
529
+ updatedAvailableRanges = getUpdatedAvailableRangesAfterFilling(
530
+ updatedAvailableRanges,
531
+ toFillValue,
532
+ );
533
+ });
534
+ }
517
535
  &nbsp;
518
536
  traffic.allocation = traffic.allocation.filter((a) =&gt; {
519
537
  <span class="missing-if-branch" title="if path not taken" >I</span>if (a.range &amp;&amp; a.range[0] === a.range[1]) {
@@ -535,7 +553,7 @@ export function getTraffic(
535
553
  <div class='footer quiet pad2 space-top1 center small'>
536
554
  Code coverage generated by
537
555
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
538
- at 2023-07-15T14:30:08.958Z
556
+ at 2023-07-16T19:53:44.899Z
539
557
  </div>
540
558
  <script src="../prettify.js"></script>
541
559
  <script>