@featurevisor/sdk 0.36.0 → 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.
- package/CHANGELOG.md +22 -0
- package/README.md +14 -14
- package/coverage/clover.xml +378 -315
- package/coverage/coverage-final.json +7 -7
- package/coverage/lcov-report/bucket.ts.html +4 -4
- package/coverage/lcov-report/conditions.ts.html +38 -38
- package/coverage/lcov-report/datafileReader.ts.html +4 -4
- package/coverage/lcov-report/emitter.ts.html +1 -1
- package/coverage/lcov-report/feature.ts.html +80 -20
- package/coverage/lcov-report/index.html +28 -28
- package/coverage/lcov-report/instance.ts.html +754 -220
- package/coverage/lcov-report/logger.ts.html +3 -3
- package/coverage/lcov-report/segments.ts.html +12 -12
- package/coverage/lcov.info +661 -559
- package/dist/index.js +1 -1
- package/dist/index.js.gz +0 -0
- package/dist/index.js.map +1 -1
- package/lib/conditions.d.ts +3 -3
- package/lib/conditions.js +35 -35
- package/lib/conditions.js.map +1 -1
- package/lib/feature.d.ts +4 -3
- package/lib/feature.js +13 -5
- package/lib/feature.js.map +1 -1
- package/lib/instance.d.ts +36 -27
- package/lib/instance.js +289 -148
- package/lib/instance.js.map +1 -1
- package/lib/segments.d.ts +3 -3
- package/lib/segments.js +8 -8
- package/lib/segments.js.map +1 -1
- package/package.json +3 -3
- package/src/conditions.ts +37 -37
- package/src/feature.ts +26 -6
- package/src/instance.spec.ts +64 -61
- package/src/instance.ts +325 -147
- package/src/segments.ts +9 -9
|
@@ -84,10 +84,10 @@
|
|
|
84
84
|
<span class="cline-any cline-yes">2x</span>
|
|
85
85
|
<span class="cline-any cline-neutral"> </span>
|
|
86
86
|
<span class="cline-any cline-yes">2x</span>
|
|
87
|
-
<span class="cline-any cline-yes">
|
|
88
|
-
<span class="cline-any cline-yes">
|
|
87
|
+
<span class="cline-any cline-yes">30x</span>
|
|
88
|
+
<span class="cline-any cline-yes">30x</span>
|
|
89
89
|
<span class="cline-any cline-neutral"> </span>
|
|
90
|
-
<span class="cline-any cline-yes">
|
|
90
|
+
<span class="cline-any cline-yes">30x</span>
|
|
91
91
|
<span class="cline-any cline-neutral"> </span>
|
|
92
92
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import * as murmurhash from "murmurhash";
|
|
93
93
|
|
|
@@ -109,7 +109,7 @@ export function getBucketedNumber(bucketKey: string): number {
|
|
|
109
109
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
110
110
|
Code coverage generated by
|
|
111
111
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
112
|
-
at 2023-07-
|
|
112
|
+
at 2023-07-16T19:53:34.344Z
|
|
113
113
|
</div>
|
|
114
114
|
<script src="prettify.js"></script>
|
|
115
115
|
<script>
|
|
@@ -281,72 +281,72 @@
|
|
|
281
281
|
<span class="cline-any cline-neutral"> </span>
|
|
282
282
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { compareVersions } from "compare-versions";
|
|
283
283
|
|
|
284
|
-
import {
|
|
284
|
+
import { Context, Condition, PlainCondition } from "@featurevisor/types";
|
|
285
285
|
|
|
286
|
-
export function conditionIsMatched(condition: PlainCondition,
|
|
286
|
+
export function conditionIsMatched(condition: PlainCondition, context: Context): boolean {
|
|
287
287
|
const { attribute, operator, value } = condition;
|
|
288
288
|
|
|
289
289
|
if (operator === "equals") {
|
|
290
|
-
return
|
|
290
|
+
return context[attribute] === value;
|
|
291
291
|
} else if (operator === "notEquals") {
|
|
292
|
-
return
|
|
292
|
+
return context[attribute] !== value;
|
|
293
293
|
} else if (operator === "before" || operator === "after") {
|
|
294
294
|
// date comparisons
|
|
295
|
-
const
|
|
295
|
+
const valueInContext = context[attribute] as string | Date;
|
|
296
296
|
|
|
297
|
-
const
|
|
298
|
-
|
|
297
|
+
const dateInContext =
|
|
298
|
+
valueInContext instanceof Date ? valueInContext : new Date(valueInContext);
|
|
299
299
|
const dateInCondition = value instanceof Date ? <span class="branch-0 cbranch-no" title="branch not covered" >value </span>: new Date(value as string);
|
|
300
300
|
|
|
301
301
|
return operator === "before"
|
|
302
|
-
?
|
|
303
|
-
:
|
|
304
|
-
} else <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof
|
|
302
|
+
? dateInContext < dateInCondition
|
|
303
|
+
: dateInContext > dateInCondition;
|
|
304
|
+
} else <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof context[attribute] === "string" && Array.isArray(value)) {
|
|
305
305
|
// array
|
|
306
|
-
const
|
|
306
|
+
const valueInContext = <span class="cstat-no" title="statement not covered" >context[attribute] as string;</span>
|
|
307
307
|
|
|
308
308
|
<span class="cstat-no" title="statement not covered" > if (operator === "in") {</span>
|
|
309
|
-
<span class="cstat-no" title="statement not covered" > return value.indexOf(
|
|
309
|
+
<span class="cstat-no" title="statement not covered" > return value.indexOf(valueInContext) !== -1;</span>
|
|
310
310
|
} else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (operator === "notIn") {</span>
|
|
311
|
-
<span class="cstat-no" title="statement not covered" > return value.indexOf(
|
|
311
|
+
<span class="cstat-no" title="statement not covered" > return value.indexOf(valueInContext) === -1;</span>
|
|
312
312
|
}
|
|
313
|
-
} else if (typeof
|
|
313
|
+
} else if (typeof context[attribute] === "string" && typeof value === "string") {
|
|
314
314
|
// string
|
|
315
|
-
const
|
|
315
|
+
const valueInContext = context[attribute] as string;
|
|
316
316
|
|
|
317
317
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (operator === "contains") {
|
|
318
|
-
<span class="cstat-no" title="statement not covered" > return
|
|
318
|
+
<span class="cstat-no" title="statement not covered" > return valueInContext.indexOf(value) !== -1;</span>
|
|
319
319
|
} else <span class="missing-if-branch" title="if path not taken" >I</span>if (operator === "notContains") {
|
|
320
|
-
<span class="cstat-no" title="statement not covered" > return
|
|
320
|
+
<span class="cstat-no" title="statement not covered" > return valueInContext.indexOf(value) === -1;</span>
|
|
321
321
|
} else <span class="missing-if-branch" title="if path not taken" >I</span>if (operator === "startsWith") {
|
|
322
|
-
<span class="cstat-no" title="statement not covered" > return
|
|
322
|
+
<span class="cstat-no" title="statement not covered" > return valueInContext.startsWith(value);</span>
|
|
323
323
|
} else <span class="missing-if-branch" title="if path not taken" >I</span>if (operator === "endsWith") {
|
|
324
|
-
<span class="cstat-no" title="statement not covered" > return
|
|
324
|
+
<span class="cstat-no" title="statement not covered" > return valueInContext.endsWith(value);</span>
|
|
325
325
|
} else if (operator === "semverEquals") {
|
|
326
|
-
return compareVersions(
|
|
326
|
+
return compareVersions(valueInContext, value) === 0;
|
|
327
327
|
} else if (operator === "semverNotEquals") {
|
|
328
|
-
return compareVersions(
|
|
328
|
+
return compareVersions(valueInContext, value) !== 0;
|
|
329
329
|
} else if (operator === "semverGreaterThan") {
|
|
330
|
-
return compareVersions(
|
|
330
|
+
return compareVersions(valueInContext, value) === 1;
|
|
331
331
|
} else if (operator === "semverGreaterThanOrEquals") {
|
|
332
|
-
return compareVersions(
|
|
332
|
+
return compareVersions(valueInContext, value) >= 0;
|
|
333
333
|
} else if (operator === "semverLessThan") {
|
|
334
|
-
return compareVersions(
|
|
334
|
+
return compareVersions(valueInContext, value) === -1;
|
|
335
335
|
} else if (operator === "semverLessThanOrEquals") {
|
|
336
|
-
return compareVersions(
|
|
336
|
+
return compareVersions(valueInContext, value) <= 0;
|
|
337
337
|
}
|
|
338
|
-
} else if (typeof
|
|
338
|
+
} else if (typeof context[attribute] === "number" && typeof value === "number") {
|
|
339
339
|
// numeric
|
|
340
|
-
const
|
|
340
|
+
const valueInContext = context[attribute] as number;
|
|
341
341
|
|
|
342
342
|
if (operator === "greaterThan") {
|
|
343
|
-
return
|
|
343
|
+
return valueInContext > value;
|
|
344
344
|
} else <span class="missing-if-branch" title="if path not taken" >I</span>if (operator === "greaterThanOrEquals") {
|
|
345
|
-
<span class="cstat-no" title="statement not covered" > return
|
|
345
|
+
<span class="cstat-no" title="statement not covered" > return valueInContext >= value;</span>
|
|
346
346
|
} else if (operator === "lessThan") {
|
|
347
|
-
return
|
|
347
|
+
return valueInContext < value;
|
|
348
348
|
} else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span><span class="missing-if-branch" title="else path not taken" >E</span>if (operator === "lessThanOrEquals") {</span>
|
|
349
|
-
<span class="cstat-no" title="statement not covered" > return
|
|
349
|
+
<span class="cstat-no" title="statement not covered" > return valueInContext <= value;</span>
|
|
350
350
|
}
|
|
351
351
|
}
|
|
352
352
|
|
|
@@ -355,18 +355,18 @@ export function conditionIsMatched(condition: PlainCondition, attributes: Attrib
|
|
|
355
355
|
|
|
356
356
|
export function allConditionsAreMatched(
|
|
357
357
|
conditions: Condition[] | Condition,
|
|
358
|
-
|
|
358
|
+
context: Context,
|
|
359
359
|
): boolean {
|
|
360
360
|
if ("attribute" in conditions) {
|
|
361
|
-
return conditionIsMatched(conditions,
|
|
361
|
+
return conditionIsMatched(conditions, context);
|
|
362
362
|
}
|
|
363
363
|
|
|
364
364
|
if ("and" in conditions && Array.isArray(conditions.and)) {
|
|
365
|
-
return conditions.and.every((c) => allConditionsAreMatched(c,
|
|
365
|
+
return conditions.and.every((c) => allConditionsAreMatched(c, context));
|
|
366
366
|
}
|
|
367
367
|
|
|
368
368
|
if ("or" in conditions && Array.isArray(conditions.or)) {
|
|
369
|
-
return conditions.or.some((c) => allConditionsAreMatched(c,
|
|
369
|
+
return conditions.or.some((c) => allConditionsAreMatched(c, context));
|
|
370
370
|
}
|
|
371
371
|
|
|
372
372
|
if ("not" in conditions && Array.isArray(conditions.not)) {
|
|
@@ -376,13 +376,13 @@ export function allConditionsAreMatched(
|
|
|
376
376
|
{
|
|
377
377
|
and: conditions.not,
|
|
378
378
|
},
|
|
379
|
-
|
|
379
|
+
context,
|
|
380
380
|
) === false,
|
|
381
381
|
);
|
|
382
382
|
}
|
|
383
383
|
|
|
384
384
|
if (Array.isArray(conditions)) {
|
|
385
|
-
return conditions.every((c) => allConditionsAreMatched(c,
|
|
385
|
+
return conditions.every((c) => allConditionsAreMatched(c, context));
|
|
386
386
|
}
|
|
387
387
|
|
|
388
388
|
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
@@ -394,7 +394,7 @@ export function allConditionsAreMatched(
|
|
|
394
394
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
395
395
|
Code coverage generated by
|
|
396
396
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
397
|
-
at 2023-07-
|
|
397
|
+
at 2023-07-16T19:53:34.344Z
|
|
398
398
|
</div>
|
|
399
399
|
<script src="prettify.js"></script>
|
|
400
400
|
<script>
|
|
@@ -200,13 +200,13 @@
|
|
|
200
200
|
<span class="cline-any cline-neutral"> </span>
|
|
201
201
|
<span class="cline-any cline-neutral"> </span>
|
|
202
202
|
<span class="cline-any cline-neutral"> </span>
|
|
203
|
-
<span class="cline-any cline-yes">
|
|
203
|
+
<span class="cline-any cline-yes">20x</span>
|
|
204
204
|
<span class="cline-any cline-neutral"> </span>
|
|
205
|
-
<span class="cline-any cline-yes">
|
|
205
|
+
<span class="cline-any cline-yes">20x</span>
|
|
206
206
|
<span class="cline-any cline-no"> </span>
|
|
207
207
|
<span class="cline-any cline-neutral"> </span>
|
|
208
208
|
<span class="cline-any cline-neutral"> </span>
|
|
209
|
-
<span class="cline-any cline-yes">
|
|
209
|
+
<span class="cline-any cline-yes">20x</span>
|
|
210
210
|
<span class="cline-any cline-neutral"> </span>
|
|
211
211
|
<span class="cline-any cline-neutral"> </span>
|
|
212
212
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import {
|
|
@@ -289,7 +289,7 @@ export class DatafileReader {
|
|
|
289
289
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
290
290
|
Code coverage generated by
|
|
291
291
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
292
|
-
at 2023-07-
|
|
292
|
+
at 2023-07-16T19:53:34.344Z
|
|
293
293
|
</div>
|
|
294
294
|
<script src="prettify.js"></script>
|
|
295
295
|
<script>
|
|
@@ -229,7 +229,7 @@ export class Emitter {
|
|
|
229
229
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
230
230
|
Code coverage generated by
|
|
231
231
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
232
|
-
at 2023-07-
|
|
232
|
+
at 2023-07-16T19:53:34.344Z
|
|
233
233
|
</div>
|
|
234
234
|
<script src="prettify.js"></script>
|
|
235
235
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">67.74% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>21/31</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">66.66% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>12/18</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">85.71% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>6/7</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">67.74% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>21/31</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -145,7 +145,27 @@
|
|
|
145
145
|
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
146
|
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
147
|
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
-
<a name='L83'></a><a href='#L83'>83</a
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
149
169
|
<span class="cline-any cline-neutral"> </span>
|
|
150
170
|
<span class="cline-any cline-yes">1x</span>
|
|
151
171
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -156,16 +176,36 @@
|
|
|
156
176
|
<span class="cline-any cline-neutral"> </span>
|
|
157
177
|
<span class="cline-any cline-neutral"> </span>
|
|
158
178
|
<span class="cline-any cline-yes">9x</span>
|
|
159
|
-
<span class="cline-any cline-yes">
|
|
179
|
+
<span class="cline-any cline-yes">11x</span>
|
|
160
180
|
<span class="cline-any cline-neutral"> </span>
|
|
181
|
+
<span class="cline-any cline-yes">11x</span>
|
|
161
182
|
<span class="cline-any cline-yes">9x</span>
|
|
162
|
-
<span class="cline-any cline-yes">9x</span>
|
|
163
183
|
<span class="cline-any cline-neutral"> </span>
|
|
164
184
|
<span class="cline-any cline-neutral"> </span>
|
|
165
185
|
<span class="cline-any cline-neutral"> </span>
|
|
166
186
|
<span class="cline-any cline-no"> </span>
|
|
167
187
|
<span class="cline-any cline-neutral"> </span>
|
|
168
188
|
<span class="cline-any cline-neutral"> </span>
|
|
189
|
+
<span class="cline-any cline-yes">1x</span>
|
|
190
|
+
<span class="cline-any cline-neutral"> </span>
|
|
191
|
+
<span class="cline-any cline-neutral"> </span>
|
|
192
|
+
<span class="cline-any cline-neutral"> </span>
|
|
193
|
+
<span class="cline-any cline-neutral"> </span>
|
|
194
|
+
<span class="cline-any cline-yes">11x</span>
|
|
195
|
+
<span class="cline-any cline-yes">11x</span>
|
|
196
|
+
<span class="cline-any cline-neutral"> </span>
|
|
197
|
+
<span class="cline-any cline-neutral"> </span>
|
|
198
|
+
<span class="cline-any cline-neutral"> </span>
|
|
199
|
+
<span class="cline-any cline-neutral"> </span>
|
|
200
|
+
<span class="cline-any cline-neutral"> </span>
|
|
201
|
+
<span class="cline-any cline-neutral"> </span>
|
|
202
|
+
<span class="cline-any cline-no"> </span>
|
|
203
|
+
<span class="cline-any cline-neutral"> </span>
|
|
204
|
+
<span class="cline-any cline-neutral"> </span>
|
|
205
|
+
<span class="cline-any cline-yes">11x</span>
|
|
206
|
+
<span class="cline-any cline-neutral"> </span>
|
|
207
|
+
<span class="cline-any cline-neutral"> </span>
|
|
208
|
+
<span class="cline-any cline-neutral"> </span>
|
|
169
209
|
<span class="cline-any cline-neutral"> </span>
|
|
170
210
|
<span class="cline-any cline-neutral"> </span>
|
|
171
211
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -211,8 +251,8 @@
|
|
|
211
251
|
<span class="cline-any cline-neutral"> </span>
|
|
212
252
|
<span class="cline-any cline-neutral"> </span>
|
|
213
253
|
<span class="cline-any cline-neutral"> </span>
|
|
214
|
-
<span class="cline-any cline-yes">
|
|
215
|
-
<span class="cline-any cline-yes">
|
|
254
|
+
<span class="cline-any cline-yes">20x</span>
|
|
255
|
+
<span class="cline-any cline-yes">20x</span>
|
|
216
256
|
<span class="cline-any cline-neutral"> </span>
|
|
217
257
|
<span class="cline-any cline-neutral"> </span>
|
|
218
258
|
<span class="cline-any cline-no"> </span>
|
|
@@ -227,7 +267,7 @@
|
|
|
227
267
|
<span class="cline-any cline-no"> </span>
|
|
228
268
|
<span class="cline-any cline-neutral"> </span>
|
|
229
269
|
<span class="cline-any cline-neutral"> </span>
|
|
230
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { Allocation,
|
|
270
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { Allocation, Context, Traffic, Feature, Force } from "@featurevisor/types";
|
|
231
271
|
import { DatafileReader } from "./datafileReader";
|
|
232
272
|
import { allGroupSegmentsAreMatched } from "./segments";
|
|
233
273
|
import { allConditionsAreMatched } from "./conditions";
|
|
@@ -248,6 +288,26 @@ export function getMatchedAllocation(
|
|
|
248
288
|
<span class="cstat-no" title="statement not covered" > return undefined;</span>
|
|
249
289
|
}
|
|
250
290
|
|
|
291
|
+
export function getMatchedTraffic(
|
|
292
|
+
traffic: Traffic[],
|
|
293
|
+
context: Context,
|
|
294
|
+
datafileReader: DatafileReader,
|
|
295
|
+
): Traffic | undefined {
|
|
296
|
+
return traffic.find((t) => {
|
|
297
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (
|
|
298
|
+
!allGroupSegmentsAreMatched(
|
|
299
|
+
typeof t.segments === "string" && t.segments !== "*" ? <span class="branch-0 cbranch-no" title="branch not covered" >JSON.parse(t.segments) </span>: t.segments,
|
|
300
|
+
context,
|
|
301
|
+
datafileReader,
|
|
302
|
+
)
|
|
303
|
+
) {
|
|
304
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
return true;
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
|
|
251
311
|
export interface MatchedTrafficAndAllocation {
|
|
252
312
|
matchedTraffic: Traffic | undefined;
|
|
253
313
|
matchedAllocation: Allocation | undefined;
|
|
@@ -255,7 +315,7 @@ export interface MatchedTrafficAndAllocation {
|
|
|
255
315
|
|
|
256
316
|
export function getMatchedTrafficAndAllocation(
|
|
257
317
|
traffic: Traffic[],
|
|
258
|
-
|
|
318
|
+
context: Context,
|
|
259
319
|
bucketValue: number,
|
|
260
320
|
datafileReader: DatafileReader,
|
|
261
321
|
logger: Logger,
|
|
@@ -266,7 +326,7 @@ export function getMatchedTrafficAndAllocation(
|
|
|
266
326
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (
|
|
267
327
|
!allGroupSegmentsAreMatched(
|
|
268
328
|
typeof t.segments === "string" && t.segments !== "*" ? <span class="branch-0 cbranch-no" title="branch not covered" >JSON.parse(t.segments) </span>: t.segments,
|
|
269
|
-
|
|
329
|
+
context,
|
|
270
330
|
datafileReader,
|
|
271
331
|
)
|
|
272
332
|
) {
|
|
@@ -290,7 +350,7 @@ export function getMatchedTrafficAndAllocation(
|
|
|
290
350
|
|
|
291
351
|
export function findForceFromFeature(
|
|
292
352
|
feature: Feature,
|
|
293
|
-
|
|
353
|
+
context: Context,
|
|
294
354
|
datafileReader: DatafileReader,
|
|
295
355
|
): Force | undefined {
|
|
296
356
|
if (!feature.force) {
|
|
@@ -299,11 +359,11 @@ export function findForceFromFeature(
|
|
|
299
359
|
|
|
300
360
|
<span class="cstat-no" title="statement not covered" > return feature.force.find(<span class="fstat-no" title="function not covered" >(f</span>: Force) => {</span>
|
|
301
361
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (f.conditions) {</span>
|
|
302
|
-
<span class="cstat-no" title="statement not covered" > return allConditionsAreMatched(f.conditions,
|
|
362
|
+
<span class="cstat-no" title="statement not covered" > return allConditionsAreMatched(f.conditions, context);</span>
|
|
303
363
|
}
|
|
304
364
|
|
|
305
365
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (f.segments) {</span>
|
|
306
|
-
<span class="cstat-no" title="statement not covered" > return allGroupSegmentsAreMatched(f.segments,
|
|
366
|
+
<span class="cstat-no" title="statement not covered" > return allGroupSegmentsAreMatched(f.segments, context, datafileReader);</span>
|
|
307
367
|
}
|
|
308
368
|
|
|
309
369
|
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
@@ -316,7 +376,7 @@ export function findForceFromFeature(
|
|
|
316
376
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
317
377
|
Code coverage generated by
|
|
318
378
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
319
|
-
at 2023-07-
|
|
379
|
+
at 2023-07-16T19:53:34.344Z
|
|
320
380
|
</div>
|
|
321
381
|
<script src="prettify.js"></script>
|
|
322
382
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">57.
|
|
26
|
+
<span class="strong">57.67% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>338/586</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">48.75% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>157/322</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">59.18% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>58/98</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">57.
|
|
47
|
+
<span class="strong">57.76% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>331/573</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -140,32 +140,32 @@
|
|
|
140
140
|
|
|
141
141
|
<tr>
|
|
142
142
|
<td class="file medium" data-value="feature.ts"><a href="feature.ts.html">feature.ts</a></td>
|
|
143
|
-
<td data-value="
|
|
144
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
143
|
+
<td data-value="67.74" class="pic medium">
|
|
144
|
+
<div class="chart"><div class="cover-fill" style="width: 67%"></div><div class="cover-empty" style="width: 33%"></div></div>
|
|
145
145
|
</td>
|
|
146
|
-
<td data-value="
|
|
147
|
-
<td data-value="
|
|
148
|
-
<td data-value="
|
|
149
|
-
<td data-value="
|
|
150
|
-
<td data-value="
|
|
151
|
-
<td data-value="
|
|
152
|
-
<td data-value="
|
|
153
|
-
<td data-value="
|
|
146
|
+
<td data-value="67.74" class="pct medium">67.74%</td>
|
|
147
|
+
<td data-value="31" class="abs medium">21/31</td>
|
|
148
|
+
<td data-value="66.66" class="pct medium">66.66%</td>
|
|
149
|
+
<td data-value="18" class="abs medium">12/18</td>
|
|
150
|
+
<td data-value="85.71" class="pct high">85.71%</td>
|
|
151
|
+
<td data-value="7" class="abs high">6/7</td>
|
|
152
|
+
<td data-value="67.74" class="pct medium">67.74%</td>
|
|
153
|
+
<td data-value="31" class="abs medium">21/31</td>
|
|
154
154
|
</tr>
|
|
155
155
|
|
|
156
156
|
<tr>
|
|
157
157
|
<td class="file medium" data-value="instance.ts"><a href="instance.ts.html">instance.ts</a></td>
|
|
158
|
-
<td data-value="50" class="pic medium">
|
|
158
|
+
<td data-value="50.9" class="pic medium">
|
|
159
159
|
<div class="chart"><div class="cover-fill" style="width: 50%"></div><div class="cover-empty" style="width: 50%"></div></div>
|
|
160
160
|
</td>
|
|
161
|
-
<td data-value="50" class="pct medium">50%</td>
|
|
162
|
-
<td data-value="
|
|
163
|
-
<td data-value="
|
|
164
|
-
<td data-value="
|
|
165
|
-
<td data-value="
|
|
166
|
-
<td data-value="
|
|
167
|
-
<td data-value="
|
|
168
|
-
<td data-value="
|
|
161
|
+
<td data-value="50.9" class="pct medium">50.9%</td>
|
|
162
|
+
<td data-value="387" class="abs medium">197/387</td>
|
|
163
|
+
<td data-value="37.43" class="pct low">37.43%</td>
|
|
164
|
+
<td data-value="203" class="abs low">76/203</td>
|
|
165
|
+
<td data-value="49.01" class="pct low">49.01%</td>
|
|
166
|
+
<td data-value="51" class="abs low">25/51</td>
|
|
167
|
+
<td data-value="51.44" class="pct medium">51.44%</td>
|
|
168
|
+
<td data-value="381" class="abs medium">196/381</td>
|
|
169
169
|
</tr>
|
|
170
170
|
|
|
171
171
|
<tr>
|
|
@@ -206,7 +206,7 @@
|
|
|
206
206
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
207
207
|
Code coverage generated by
|
|
208
208
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
209
|
-
at 2023-07-
|
|
209
|
+
at 2023-07-16T19:53:34.344Z
|
|
210
210
|
</div>
|
|
211
211
|
<script src="prettify.js"></script>
|
|
212
212
|
<script>
|