@featurevisor/core 1.35.3 → 2.0.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/README.md +0 -6
- package/coverage/clover.xml +321 -237
- package/coverage/coverage-final.json +8 -8
- package/coverage/lcov-report/index.html +77 -47
- package/coverage/lcov-report/lib/builder/allocator.js.html +14 -14
- package/coverage/lcov-report/lib/builder/index.html +16 -16
- package/coverage/lcov-report/lib/builder/revision.js.html +3 -3
- package/coverage/lcov-report/lib/builder/traffic.js.html +88 -64
- package/coverage/lcov-report/lib/list/index.html +116 -0
- package/coverage/lcov-report/lib/{tester → list}/matrix.js.html +90 -66
- package/coverage/lcov-report/lib/tester/helpers.js.html +295 -0
- package/coverage/lcov-report/lib/tester/index.html +20 -35
- package/coverage/lcov-report/src/builder/allocator.ts.html +2 -2
- package/coverage/lcov-report/src/builder/index.html +15 -15
- package/coverage/lcov-report/src/builder/revision.ts.html +1 -1
- package/coverage/lcov-report/src/builder/traffic.ts.html +96 -24
- package/coverage/lcov-report/src/list/index.html +116 -0
- package/coverage/lcov-report/src/{tester → list}/matrix.ts.html +87 -21
- package/coverage/lcov-report/src/tester/helpers.ts.html +313 -0
- package/coverage/lcov-report/src/tester/index.html +20 -35
- package/coverage/lcov.info +592 -436
- package/lib/assess-distribution/index.d.ts +1 -1
- package/lib/assess-distribution/index.js +102 -162
- package/lib/assess-distribution/index.js.map +1 -1
- package/lib/benchmark/index.js +87 -143
- package/lib/benchmark/index.js.map +1 -1
- package/lib/builder/allocator.d.ts +1 -1
- package/lib/builder/allocator.js +12 -12
- package/lib/builder/allocator.js.map +1 -1
- package/lib/builder/allocator.spec.js +22 -22
- package/lib/builder/allocator.spec.js.map +1 -1
- package/lib/builder/buildDatafile.d.ts +4 -3
- package/lib/builder/buildDatafile.js +311 -388
- package/lib/builder/buildDatafile.js.map +1 -1
- package/lib/builder/buildProject.d.ts +2 -1
- package/lib/builder/buildProject.js +96 -183
- package/lib/builder/buildProject.js.map +1 -1
- package/lib/builder/convertToV1.d.ts +10 -0
- package/lib/builder/convertToV1.js +119 -0
- package/lib/builder/convertToV1.js.map +1 -0
- package/lib/builder/getFeatureRanges.d.ts +1 -1
- package/lib/builder/getFeatureRanges.js +32 -105
- package/lib/builder/getFeatureRanges.js.map +1 -1
- package/lib/builder/hashes.d.ts +4 -0
- package/lib/builder/hashes.js +70 -0
- package/lib/builder/hashes.js.map +1 -0
- package/lib/builder/revision.js +2 -2
- package/lib/builder/revision.js.map +1 -1
- package/lib/builder/revision.spec.js +1 -1
- package/lib/builder/revision.spec.js.map +1 -1
- package/lib/builder/traffic.d.ts +1 -1
- package/lib/builder/traffic.js +57 -49
- package/lib/builder/traffic.js.map +1 -1
- package/lib/builder/traffic.spec.js +14 -14
- package/lib/builder/traffic.spec.js.map +1 -1
- package/lib/cli/cli.js +60 -129
- package/lib/cli/cli.js.map +1 -1
- package/lib/cli/plugins.js +14 -16
- package/lib/cli/plugins.js.map +1 -1
- package/lib/config/parsers.js +1 -1
- package/lib/config/parsers.js.map +1 -1
- package/lib/config/projectConfig.d.ts +8 -6
- package/lib/config/projectConfig.js +31 -72
- package/lib/config/projectConfig.js.map +1 -1
- package/lib/datasource/adapter.d.ts +1 -1
- package/lib/datasource/adapter.js +2 -5
- package/lib/datasource/adapter.js.map +1 -1
- package/lib/datasource/datasource.d.ts +2 -1
- package/lib/datasource/datasource.js +107 -148
- package/lib/datasource/datasource.js.map +1 -1
- package/lib/datasource/filesystemAdapter.d.ts +1 -1
- package/lib/datasource/filesystemAdapter.js +224 -360
- package/lib/datasource/filesystemAdapter.js.map +1 -1
- package/lib/evaluate/index.d.ts +1 -1
- package/lib/evaluate/index.js +120 -188
- package/lib/evaluate/index.js.map +1 -1
- package/lib/find-duplicate-segments/findDuplicateSegments.d.ts +1 -1
- package/lib/find-duplicate-segments/findDuplicateSegments.js +40 -128
- package/lib/find-duplicate-segments/findDuplicateSegments.js.map +1 -1
- package/lib/find-duplicate-segments/index.js +27 -82
- package/lib/find-duplicate-segments/index.js.map +1 -1
- package/lib/find-usage/index.d.ts +7 -5
- package/lib/find-usage/index.js +333 -507
- package/lib/find-usage/index.js.map +1 -1
- package/lib/generate-code/index.js +36 -91
- package/lib/generate-code/index.js.map +1 -1
- package/lib/generate-code/typescript.js +117 -157
- package/lib/generate-code/typescript.js.map +1 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -1
- package/lib/index.js.map +1 -1
- package/lib/info/index.js +45 -133
- package/lib/info/index.js.map +1 -1
- package/lib/init/index.d.ts +1 -1
- package/lib/init/index.js +16 -64
- package/lib/init/index.js.map +1 -1
- package/lib/linter/attributeSchema.d.ts +21 -6
- package/lib/linter/attributeSchema.js +18 -4
- package/lib/linter/attributeSchema.js.map +1 -1
- package/lib/linter/checkCircularDependency.d.ts +1 -1
- package/lib/linter/checkCircularDependency.js +22 -80
- package/lib/linter/checkCircularDependency.js.map +1 -1
- package/lib/linter/checkPercentageExceedingSlot.d.ts +1 -1
- package/lib/linter/checkPercentageExceedingSlot.js +36 -76
- package/lib/linter/checkPercentageExceedingSlot.js.map +1 -1
- package/lib/linter/conditionSchema.d.ts +1 -1
- package/lib/linter/conditionSchema.js +89 -41
- package/lib/linter/conditionSchema.js.map +1 -1
- package/lib/linter/featureSchema.d.ts +345 -197
- package/lib/linter/featureSchema.js +313 -172
- package/lib/linter/featureSchema.js.map +1 -1
- package/lib/linter/groupSchema.js +6 -6
- package/lib/linter/groupSchema.js.map +1 -1
- package/lib/linter/lintProject.js +306 -480
- package/lib/linter/lintProject.js.map +1 -1
- package/lib/linter/printError.js +7 -7
- package/lib/linter/printError.js.map +1 -1
- package/lib/linter/segmentSchema.js +2 -2
- package/lib/linter/segmentSchema.js.map +1 -1
- package/lib/linter/testSchema.d.ts +155 -3
- package/lib/linter/testSchema.js +47 -17
- package/lib/linter/testSchema.js.map +1 -1
- package/lib/list/index.d.ts +1 -0
- package/lib/list/index.js +349 -517
- package/lib/list/index.js.map +1 -1
- package/lib/{tester → list}/matrix.d.ts +1 -1
- package/lib/{tester → list}/matrix.js +50 -42
- package/lib/list/matrix.js.map +1 -0
- package/lib/{tester → list}/matrix.spec.js +7 -7
- package/lib/list/matrix.spec.js.map +1 -0
- package/lib/site/exportSite.js +25 -71
- package/lib/site/exportSite.js.map +1 -1
- package/lib/site/generateHistory.d.ts +1 -1
- package/lib/site/generateHistory.js +26 -82
- package/lib/site/generateHistory.js.map +1 -1
- package/lib/site/generateSiteSearchIndex.d.ts +1 -1
- package/lib/site/generateSiteSearchIndex.js +182 -259
- package/lib/site/generateSiteSearchIndex.js.map +1 -1
- package/lib/site/getLastModifiedFromHistory.d.ts +1 -1
- package/lib/site/getLastModifiedFromHistory.js +2 -2
- package/lib/site/getLastModifiedFromHistory.js.map +1 -1
- package/lib/site/getOwnerAndRepoFromUrl.js +6 -6
- package/lib/site/getOwnerAndRepoFromUrl.js.map +1 -1
- package/lib/site/getRelativePaths.js +7 -7
- package/lib/site/getRelativePaths.js.map +1 -1
- package/lib/site/getRepoDetails.js +20 -20
- package/lib/site/getRepoDetails.js.map +1 -1
- package/lib/site/index.js +25 -73
- package/lib/site/index.js.map +1 -1
- package/lib/site/serveSite.js +10 -10
- package/lib/site/serveSite.js.map +1 -1
- package/lib/tester/helpers.d.ts +2 -0
- package/lib/tester/helpers.js +71 -0
- package/lib/tester/helpers.js.map +1 -0
- package/lib/tester/helpers.spec.js +115 -0
- package/lib/tester/helpers.spec.js.map +1 -0
- package/lib/tester/index.d.ts +0 -1
- package/lib/tester/index.js +0 -1
- package/lib/tester/index.js.map +1 -1
- package/lib/tester/prettyDuration.js +11 -11
- package/lib/tester/prettyDuration.js.map +1 -1
- package/lib/tester/printTestResult.d.ts +1 -1
- package/lib/tester/printTestResult.js +35 -15
- package/lib/tester/printTestResult.js.map +1 -1
- package/lib/tester/testFeature.d.ts +4 -2
- package/lib/tester/testFeature.js +264 -226
- package/lib/tester/testFeature.js.map +1 -1
- package/lib/tester/testProject.d.ts +3 -7
- package/lib/tester/testProject.js +145 -246
- package/lib/tester/testProject.js.map +1 -1
- package/lib/tester/testSegment.d.ts +5 -2
- package/lib/tester/testSegment.js +65 -102
- package/lib/tester/testSegment.js.map +1 -1
- package/lib/utils/extractKeys.d.ts +2 -1
- package/lib/utils/extractKeys.js +57 -12
- package/lib/utils/extractKeys.js.map +1 -1
- package/lib/utils/git.d.ts +1 -1
- package/lib/utils/git.js +23 -23
- package/lib/utils/git.js.map +1 -1
- package/lib/utils/pretty.js +2 -4
- package/lib/utils/pretty.js.map +1 -1
- package/package.json +5 -6
- package/src/assess-distribution/index.ts +3 -2
- package/src/benchmark/index.ts +3 -3
- package/src/builder/allocator.spec.ts +1 -1
- package/src/builder/allocator.ts +1 -1
- package/src/builder/buildDatafile.ts +161 -124
- package/src/builder/buildProject.ts +6 -3
- package/src/builder/convertToV1.ts +166 -0
- package/src/builder/getFeatureRanges.ts +1 -1
- package/src/builder/hashes.ts +109 -0
- package/src/builder/traffic.ts +40 -16
- package/src/cli/cli.ts +1 -1
- package/src/cli/plugins.ts +0 -2
- package/src/config/projectConfig.ts +13 -10
- package/src/datasource/adapter.ts +1 -1
- package/src/datasource/datasource.ts +23 -2
- package/src/datasource/filesystemAdapter.ts +11 -12
- package/src/evaluate/index.ts +7 -6
- package/src/find-duplicate-segments/findDuplicateSegments.ts +1 -1
- package/src/find-usage/index.ts +111 -44
- package/src/generate-code/index.ts +1 -3
- package/src/generate-code/typescript.ts +7 -29
- package/src/index.ts +0 -1
- package/src/info/index.ts +2 -2
- package/src/init/index.ts +2 -2
- package/src/linter/attributeSchema.ts +18 -2
- package/src/linter/checkCircularDependency.ts +1 -1
- package/src/linter/checkPercentageExceedingSlot.ts +28 -8
- package/src/linter/conditionSchema.ts +66 -10
- package/src/linter/featureSchema.ts +312 -116
- package/src/linter/lintProject.ts +9 -4
- package/src/linter/testSchema.ts +42 -3
- package/src/list/index.ts +18 -30
- package/src/{tester → list}/matrix.ts +33 -11
- package/src/site/exportSite.ts +2 -4
- package/src/site/generateHistory.ts +1 -1
- package/src/site/generateSiteSearchIndex.ts +58 -50
- package/src/site/getLastModifiedFromHistory.ts +1 -1
- package/src/tester/helpers.spec.ts +149 -0
- package/src/tester/helpers.ts +76 -0
- package/src/tester/index.ts +0 -1
- package/src/tester/printTestResult.ts +25 -3
- package/src/tester/testFeature.ts +270 -124
- package/src/tester/testProject.ts +28 -49
- package/src/tester/testSegment.ts +48 -40
- package/src/utils/extractKeys.ts +58 -1
- package/src/utils/git.ts +1 -1
- package/tsconfig.cjs.json +1 -0
- package/coverage/lcov-report/lib/tester/checkIfObjectsAreEqual.js.html +0 -151
- package/coverage/lcov-report/src/tester/checkIfObjectsAreEqual.ts.html +0 -157
- package/lib/restore/index.d.ts +0 -4
- package/lib/restore/index.js +0 -91
- package/lib/restore/index.js.map +0 -1
- package/lib/tester/checkIfArraysAreEqual.d.ts +0 -1
- package/lib/tester/checkIfArraysAreEqual.js +0 -18
- package/lib/tester/checkIfArraysAreEqual.js.map +0 -1
- package/lib/tester/checkIfObjectsAreEqual.d.ts +0 -1
- package/lib/tester/checkIfObjectsAreEqual.js +0 -23
- package/lib/tester/checkIfObjectsAreEqual.js.map +0 -1
- package/lib/tester/checkIfObjectsAreEqual.spec.js +0 -26
- package/lib/tester/checkIfObjectsAreEqual.spec.js.map +0 -1
- package/lib/tester/matrix.js.map +0 -1
- package/lib/tester/matrix.spec.js.map +0 -1
- package/src/restore/index.ts +0 -42
- package/src/tester/checkIfArraysAreEqual.ts +0 -16
- package/src/tester/checkIfObjectsAreEqual.spec.ts +0 -31
- package/src/tester/checkIfObjectsAreEqual.ts +0 -24
- /package/lib/{tester → list}/matrix.spec.d.ts +0 -0
- /package/lib/tester/{checkIfObjectsAreEqual.spec.d.ts → helpers.spec.d.ts} +0 -0
- /package/src/{tester → list}/matrix.spec.ts +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<html lang="en">
|
|
4
4
|
|
|
5
5
|
<head>
|
|
6
|
-
<title>Code coverage report for lib/
|
|
6
|
+
<title>Code coverage report for lib/list/matrix.js</title>
|
|
7
7
|
<meta charset="utf-8" />
|
|
8
8
|
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
9
|
<link rel="stylesheet" href="../../base.css" />
|
|
@@ -19,34 +19,34 @@
|
|
|
19
19
|
<body>
|
|
20
20
|
<div class='wrapper'>
|
|
21
21
|
<div class='pad1'>
|
|
22
|
-
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/
|
|
22
|
+
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/list</a> matrix.js</h1>
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">24.7% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>21/85</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">10.25% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>4/39</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">20% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>2/10</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">24.69% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>20/81</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -196,18 +196,15 @@
|
|
|
196
196
|
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
197
|
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
198
|
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
-
<a name='L134'></a><a href='#L134'>134</a
|
|
200
|
-
<
|
|
201
|
-
<
|
|
202
|
-
<
|
|
203
|
-
<
|
|
204
|
-
<
|
|
205
|
-
<
|
|
206
|
-
<
|
|
207
|
-
<span class="cline-any cline-
|
|
208
|
-
<span class="cline-any cline-neutral"> </span>
|
|
209
|
-
<span class="cline-any cline-yes">2x</span>
|
|
210
|
-
<span class="cline-any cline-neutral"> </span>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
211
208
|
<span class="cline-any cline-yes">1x</span>
|
|
212
209
|
<span class="cline-any cline-yes">1x</span>
|
|
213
210
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -216,7 +213,6 @@
|
|
|
216
213
|
<span class="cline-any cline-yes">1x</span>
|
|
217
214
|
<span class="cline-any cline-yes">1x</span>
|
|
218
215
|
<span class="cline-any cline-neutral"> </span>
|
|
219
|
-
<span class="cline-any cline-neutral"> </span>
|
|
220
216
|
<span class="cline-any cline-yes">10x</span>
|
|
221
217
|
<span class="cline-any cline-yes">10x</span>
|
|
222
218
|
<span class="cline-any cline-yes">10x</span>
|
|
@@ -284,14 +280,34 @@
|
|
|
284
280
|
<span class="cline-any cline-neutral"> </span>
|
|
285
281
|
<span class="cline-any cline-no"> </span>
|
|
286
282
|
<span class="cline-any cline-no"> </span>
|
|
283
|
+
<span class="cline-any cline-neutral"> </span>
|
|
284
|
+
<span class="cline-any cline-no"> </span>
|
|
285
|
+
<span class="cline-any cline-no"> </span>
|
|
286
|
+
<span class="cline-any cline-neutral"> </span>
|
|
287
|
+
<span class="cline-any cline-no"> </span>
|
|
288
|
+
<span class="cline-any cline-no"> </span>
|
|
289
|
+
<span class="cline-any cline-neutral"> </span>
|
|
290
|
+
<span class="cline-any cline-neutral"> </span>
|
|
291
|
+
<span class="cline-any cline-no"> </span>
|
|
292
|
+
<span class="cline-any cline-neutral"> </span>
|
|
293
|
+
<span class="cline-any cline-no"> </span>
|
|
294
|
+
<span class="cline-any cline-no"> </span>
|
|
295
|
+
<span class="cline-any cline-neutral"> </span>
|
|
296
|
+
<span class="cline-any cline-no"> </span>
|
|
297
|
+
<span class="cline-any cline-no"> </span>
|
|
298
|
+
<span class="cline-any cline-no"> </span>
|
|
287
299
|
<span class="cline-any cline-no"> </span>
|
|
288
300
|
<span class="cline-any cline-no"> </span>
|
|
289
301
|
<span class="cline-any cline-neutral"> </span>
|
|
290
302
|
<span class="cline-any cline-no"> </span>
|
|
291
303
|
<span class="cline-any cline-no"> </span>
|
|
304
|
+
<span class="cline-any cline-neutral"> </span>
|
|
292
305
|
<span class="cline-any cline-no"> </span>
|
|
293
306
|
<span class="cline-any cline-no"> </span>
|
|
307
|
+
<span class="cline-any cline-neutral"> </span>
|
|
308
|
+
<span class="cline-any cline-neutral"> </span>
|
|
294
309
|
<span class="cline-any cline-no"> </span>
|
|
310
|
+
<span class="cline-any cline-neutral"> </span>
|
|
295
311
|
<span class="cline-any cline-no"> </span>
|
|
296
312
|
<span class="cline-any cline-no"> </span>
|
|
297
313
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -330,17 +346,6 @@
|
|
|
330
346
|
<span class="cline-any cline-no"> </span>
|
|
331
347
|
<span class="cline-any cline-neutral"> </span>
|
|
332
348
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">"use strict";
|
|
333
|
-
var __assign = (this && this.__assign) || function () {
|
|
334
|
-
__assign = Object.assign || <span class="fstat-no" title="function not covered" ><span class="branch-1 cbranch-no" title="branch not covered" >fu</span>nction(t) {</span>
|
|
335
|
-
<span class="cstat-no" title="statement not covered" > for (var s, i = <span class="cstat-no" title="statement not covered" >1,</span> n = <span class="cstat-no" title="statement not covered" >arguments.length;</span> i < n; i++) {</span>
|
|
336
|
-
<span class="cstat-no" title="statement not covered" > s = arguments[i];</span>
|
|
337
|
-
<span class="cstat-no" title="statement not covered" > for (var p in s) <span class="cstat-no" title="statement not covered" >if (Object.prototype.hasOwnProperty.call(s, p))</span></span>
|
|
338
|
-
<span class="cstat-no" title="statement not covered" > t[p] = s[p];</span>
|
|
339
|
-
}
|
|
340
|
-
<span class="cstat-no" title="statement not covered" > return t;</span>
|
|
341
|
-
};
|
|
342
|
-
return __assign.apply(this, arguments);
|
|
343
|
-
};
|
|
344
349
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
345
350
|
exports.getMatrixCombinations = getMatrixCombinations;
|
|
346
351
|
exports.applyCombinationToValue = applyCombinationToValue;
|
|
@@ -349,11 +354,10 @@ exports.getFeatureAssertionsFromMatrix = getFeatureAssertionsFromMatrix;
|
|
|
349
354
|
exports.applyCombinationToSegmentAssertion = applyCombinationToSegmentAssertion;
|
|
350
355
|
exports.getSegmentAssertionsFromMatrix = getSegmentAssertionsFromMatrix;
|
|
351
356
|
function generateCombinations(keys, matrix, idx, prev, combinations) {
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
var combination = __assign(__assign({}, prev), (_a = {}, _a[key] = values[i], _a));
|
|
357
|
+
const key = keys[idx];
|
|
358
|
+
const values = matrix[key];
|
|
359
|
+
for (let i = 0; i < values.length; i++) {
|
|
360
|
+
const combination = { ...prev, [key]: values[i] };
|
|
357
361
|
if (idx === keys.length - 1) {
|
|
358
362
|
combinations.push(combination);
|
|
359
363
|
}
|
|
@@ -363,28 +367,28 @@ function generateCombinations(keys, matrix, idx, prev, combinations) {
|
|
|
363
367
|
}
|
|
364
368
|
}
|
|
365
369
|
function getMatrixCombinations(matrix) {
|
|
366
|
-
|
|
370
|
+
const keys = Object.keys(matrix);
|
|
367
371
|
if (!keys.length) {
|
|
368
372
|
return [];
|
|
369
373
|
}
|
|
370
|
-
|
|
374
|
+
const combinations = [];
|
|
371
375
|
generateCombinations(keys, matrix, 0, {}, combinations);
|
|
372
376
|
return combinations;
|
|
373
377
|
}
|
|
374
378
|
function <span class="fstat-no" title="function not covered" >applyCombinationToValue(</span>value, combination) {
|
|
375
379
|
<span class="cstat-no" title="statement not covered" > if (typeof value === "string") {</span>
|
|
376
|
-
|
|
380
|
+
const variableKeysInValue = <span class="cstat-no" title="statement not covered" >value.match(/\${{(.+?)}}/g);</span>
|
|
377
381
|
// no variables found
|
|
378
382
|
<span class="cstat-no" title="statement not covered" > if (!variableKeysInValue) {</span>
|
|
379
383
|
<span class="cstat-no" title="statement not covered" > return value;</span>
|
|
380
384
|
}
|
|
381
385
|
// only 1 variable found, so we can insert the value directly
|
|
382
386
|
<span class="cstat-no" title="statement not covered" > if (variableKeysInValue.length === 1 && value.startsWith("${{") && value.endsWith("}}")) {</span>
|
|
383
|
-
|
|
387
|
+
const key = <span class="cstat-no" title="statement not covered" >value.replace("${{", "").replace("}}", "").trim();</span>
|
|
384
388
|
<span class="cstat-no" title="statement not covered" > return combination[key];</span>
|
|
385
389
|
}
|
|
386
390
|
// multiple variables found, so we can replace each as a whole string
|
|
387
|
-
<span class="cstat-no" title="statement not covered" > return value.replace(/\${{(.+?)}}/g, <span class="fstat-no" title="function not covered" >
|
|
391
|
+
<span class="cstat-no" title="statement not covered" > return value.replace(/\${{(.+?)}}/g, <span class="fstat-no" title="function not covered" >(_</span>, key) => <span class="cstat-no" title="statement not covered" >combination[key.trim()])</span>;</span>
|
|
388
392
|
}
|
|
389
393
|
<span class="cstat-no" title="statement not covered" > return value;</span>
|
|
390
394
|
}
|
|
@@ -392,12 +396,12 @@ function <span class="fstat-no" title="function not covered" >applyCombinationTo
|
|
|
392
396
|
* Features
|
|
393
397
|
*/
|
|
394
398
|
function <span class="fstat-no" title="function not covered" >applyCombinationToFeatureAssertion(</span>combination, assertion) {
|
|
395
|
-
|
|
399
|
+
const flattenedAssertion = <span class="cstat-no" title="statement not covered" >{ ...assertion };</span>
|
|
396
400
|
// environment
|
|
397
401
|
<span class="cstat-no" title="statement not covered" > flattenedAssertion.environment = applyCombinationToValue(flattenedAssertion.environment, combination);</span>
|
|
398
402
|
// context
|
|
399
|
-
<span class="cstat-no" title="statement not covered" > flattenedAssertion.context = Object.keys(flattenedAssertion.context).reduce(<span class="fstat-no" title="function not covered" >
|
|
400
|
-
<span class="cstat-no" title="statement not covered" > acc[key] = applyCombinationToValue(flattenedAssertion.context[key], combination);</span>
|
|
403
|
+
<span class="cstat-no" title="statement not covered" > flattenedAssertion.context = Object.keys(flattenedAssertion.context || {}).reduce(<span class="fstat-no" title="function not covered" >(a</span>cc, key) => {</span>
|
|
404
|
+
<span class="cstat-no" title="statement not covered" > acc[key] = applyCombinationToValue(flattenedAssertion.context?.[key], combination);</span>
|
|
401
405
|
<span class="cstat-no" title="statement not covered" > return acc;</span>
|
|
402
406
|
}, {});
|
|
403
407
|
// at
|
|
@@ -416,16 +420,36 @@ function <span class="fstat-no" title="function not covered" >applyCombinationTo
|
|
|
416
420
|
}
|
|
417
421
|
function <span class="fstat-no" title="function not covered" >getFeatureAssertionsFromMatrix(</span>aIndex, assertionWithMatrix) {
|
|
418
422
|
<span class="cstat-no" title="statement not covered" > if (!assertionWithMatrix.matrix) {</span>
|
|
419
|
-
|
|
420
|
-
|
|
423
|
+
const assertion = <span class="cstat-no" title="statement not covered" >{ ...assertionWithMatrix };</span>
|
|
424
|
+
let suffix;
|
|
425
|
+
<span class="cstat-no" title="statement not covered" > if (assertion.environment) {</span>
|
|
426
|
+
<span class="cstat-no" title="statement not covered" > suffix = ` (${assertion.environment})`;</span>
|
|
427
|
+
}
|
|
428
|
+
<span class="cstat-no" title="statement not covered" > if (assertion.description) {</span>
|
|
429
|
+
<span class="cstat-no" title="statement not covered" > suffix = `: ${assertion.description}`;</span>
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
<span class="cstat-no" title="statement not covered" > suffix = `: at ${assertion.at}%`;</span>
|
|
433
|
+
}
|
|
434
|
+
<span class="cstat-no" title="statement not covered" > assertion.description = `Assertion #${aIndex + 1}${suffix}`;</span>
|
|
421
435
|
<span class="cstat-no" title="statement not covered" > return [assertion];</span>
|
|
422
436
|
}
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
<span class="cstat-no" title="statement not covered" > for (
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
437
|
+
const assertions = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
438
|
+
const combinations = <span class="cstat-no" title="statement not covered" >getMatrixCombinations(assertionWithMatrix.matrix);</span>
|
|
439
|
+
<span class="cstat-no" title="statement not covered" > for (let cIndex = <span class="cstat-no" title="statement not covered" >0;</span> cIndex < combinations.length; cIndex++) {</span>
|
|
440
|
+
const combination = <span class="cstat-no" title="statement not covered" >combinations[cIndex];</span>
|
|
441
|
+
const assertion = <span class="cstat-no" title="statement not covered" >applyCombinationToFeatureAssertion(combination, assertionWithMatrix);</span>
|
|
442
|
+
let suffix;
|
|
443
|
+
<span class="cstat-no" title="statement not covered" > if (assertion.environment) {</span>
|
|
444
|
+
<span class="cstat-no" title="statement not covered" > suffix = ` (${assertion.environment})`;</span>
|
|
445
|
+
}
|
|
446
|
+
<span class="cstat-no" title="statement not covered" > if (assertion.description) {</span>
|
|
447
|
+
<span class="cstat-no" title="statement not covered" > suffix = `: ${assertion.description}`;</span>
|
|
448
|
+
}
|
|
449
|
+
else {
|
|
450
|
+
<span class="cstat-no" title="statement not covered" > suffix = `: at ${assertion.at}%`;</span>
|
|
451
|
+
}
|
|
452
|
+
<span class="cstat-no" title="statement not covered" > assertion.description = `Assertion #${aIndex + 1}${suffix}`;</span>
|
|
429
453
|
<span class="cstat-no" title="statement not covered" > assertions.push(assertion);</span>
|
|
430
454
|
}
|
|
431
455
|
<span class="cstat-no" title="statement not covered" > return assertions;</span>
|
|
@@ -434,9 +458,9 @@ function <span class="fstat-no" title="function not covered" >getFeatureAssertio
|
|
|
434
458
|
* Segments
|
|
435
459
|
*/
|
|
436
460
|
function <span class="fstat-no" title="function not covered" >applyCombinationToSegmentAssertion(</span>combination, assertion) {
|
|
437
|
-
|
|
461
|
+
const flattenedAssertion = <span class="cstat-no" title="statement not covered" >{ ...assertion };</span>
|
|
438
462
|
// context
|
|
439
|
-
<span class="cstat-no" title="statement not covered" > flattenedAssertion.context = Object.keys(flattenedAssertion.context).reduce(<span class="fstat-no" title="function not covered" >
|
|
463
|
+
<span class="cstat-no" title="statement not covered" > flattenedAssertion.context = Object.keys(flattenedAssertion.context).reduce(<span class="fstat-no" title="function not covered" >(a</span>cc, key) => {</span>
|
|
440
464
|
<span class="cstat-no" title="statement not covered" > acc[key] = applyCombinationToValue(flattenedAssertion.context[key], combination);</span>
|
|
441
465
|
<span class="cstat-no" title="statement not covered" > return acc;</span>
|
|
442
466
|
}, {});
|
|
@@ -448,16 +472,16 @@ function <span class="fstat-no" title="function not covered" >applyCombinationTo
|
|
|
448
472
|
}
|
|
449
473
|
function <span class="fstat-no" title="function not covered" >getSegmentAssertionsFromMatrix(</span>aIndex, assertionWithMatrix) {
|
|
450
474
|
<span class="cstat-no" title="statement not covered" > if (!assertionWithMatrix.matrix) {</span>
|
|
451
|
-
|
|
452
|
-
<span class="cstat-no" title="statement not covered" > assertion.description =
|
|
475
|
+
const assertion = <span class="cstat-no" title="statement not covered" >{ ...assertionWithMatrix };</span>
|
|
476
|
+
<span class="cstat-no" title="statement not covered" > assertion.description = `Assertion #${aIndex + 1}${assertion.description ? `: ${assertion.description}` : ""}`;</span>
|
|
453
477
|
<span class="cstat-no" title="statement not covered" > return [assertion];</span>
|
|
454
478
|
}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
<span class="cstat-no" title="statement not covered" > for (
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
<span class="cstat-no" title="statement not covered" > assertion.description =
|
|
479
|
+
const assertions = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
480
|
+
const combinations = <span class="cstat-no" title="statement not covered" >getMatrixCombinations(assertionWithMatrix.matrix);</span>
|
|
481
|
+
<span class="cstat-no" title="statement not covered" > for (let cIndex = <span class="cstat-no" title="statement not covered" >0;</span> cIndex < combinations.length; cIndex++) {</span>
|
|
482
|
+
const combination = <span class="cstat-no" title="statement not covered" >combinations[cIndex];</span>
|
|
483
|
+
const assertion = <span class="cstat-no" title="statement not covered" >applyCombinationToSegmentAssertion(combination, assertionWithMatrix);</span>
|
|
484
|
+
<span class="cstat-no" title="statement not covered" > assertion.description = `Assertion #${aIndex + 1}: ${assertion.description || `#${aIndex + 1}`}`;</span>
|
|
461
485
|
<span class="cstat-no" title="statement not covered" > assertions.push(assertion);</span>
|
|
462
486
|
}
|
|
463
487
|
<span class="cstat-no" title="statement not covered" > return assertions;</span>
|
|
@@ -469,7 +493,7 @@ function <span class="fstat-no" title="function not covered" >getSegmentAssertio
|
|
|
469
493
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
470
494
|
Code coverage generated by
|
|
471
495
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
472
|
-
at 2025-
|
|
496
|
+
at 2025-07-13T22:32:10.637Z
|
|
473
497
|
</div>
|
|
474
498
|
<script src="../../prettify.js"></script>
|
|
475
499
|
<script>
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for lib/tester/helpers.js</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/tester</a> helpers.js</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">93.18% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>41/44</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">94% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>47/50</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>2/2</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">93.02% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>40/43</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input oninput="onInput()" type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
137
|
+
<span class="cline-any cline-yes">1x</span>
|
|
138
|
+
<span class="cline-any cline-yes">1x</span>
|
|
139
|
+
<span class="cline-any cline-yes">1x</span>
|
|
140
|
+
<span class="cline-any cline-neutral"> </span>
|
|
141
|
+
<span class="cline-any cline-yes">23x</span>
|
|
142
|
+
<span class="cline-any cline-no"> </span>
|
|
143
|
+
<span class="cline-any cline-neutral"> </span>
|
|
144
|
+
<span class="cline-any cline-yes">23x</span>
|
|
145
|
+
<span class="cline-any cline-no"> </span>
|
|
146
|
+
<span class="cline-any cline-neutral"> </span>
|
|
147
|
+
<span class="cline-any cline-yes">23x</span>
|
|
148
|
+
<span class="cline-any cline-yes">23x</span>
|
|
149
|
+
<span class="cline-any cline-yes">23x</span>
|
|
150
|
+
<span class="cline-any cline-yes">3x</span>
|
|
151
|
+
<span class="cline-any cline-neutral"> </span>
|
|
152
|
+
<span class="cline-any cline-yes">20x</span>
|
|
153
|
+
<span class="cline-any cline-yes">24x</span>
|
|
154
|
+
<span class="cline-any cline-yes">1x</span>
|
|
155
|
+
<span class="cline-any cline-neutral"> </span>
|
|
156
|
+
<span class="cline-any cline-yes">23x</span>
|
|
157
|
+
<span class="cline-any cline-yes">23x</span>
|
|
158
|
+
<span class="cline-any cline-yes">23x</span>
|
|
159
|
+
<span class="cline-any cline-yes">4x</span>
|
|
160
|
+
<span class="cline-any cline-yes">1x</span>
|
|
161
|
+
<span class="cline-any cline-neutral"> </span>
|
|
162
|
+
<span class="cline-any cline-neutral"> </span>
|
|
163
|
+
<span class="cline-any cline-yes">19x</span>
|
|
164
|
+
<span class="cline-any cline-yes">4x</span>
|
|
165
|
+
<span class="cline-any cline-yes">2x</span>
|
|
166
|
+
<span class="cline-any cline-neutral"> </span>
|
|
167
|
+
<span class="cline-any cline-neutral"> </span>
|
|
168
|
+
<span class="cline-any cline-yes">15x</span>
|
|
169
|
+
<span class="cline-any cline-yes">4x</span>
|
|
170
|
+
<span class="cline-any cline-neutral"> </span>
|
|
171
|
+
<span class="cline-any cline-neutral"> </span>
|
|
172
|
+
<span class="cline-any cline-yes">12x</span>
|
|
173
|
+
<span class="cline-any cline-neutral"> </span>
|
|
174
|
+
<span class="cline-any cline-neutral"> </span>
|
|
175
|
+
<span class="cline-any cline-yes">29x</span>
|
|
176
|
+
<span class="cline-any cline-no"> </span>
|
|
177
|
+
<span class="cline-any cline-neutral"> </span>
|
|
178
|
+
<span class="cline-any cline-yes">29x</span>
|
|
179
|
+
<span class="cline-any cline-yes">3x</span>
|
|
180
|
+
<span class="cline-any cline-neutral"> </span>
|
|
181
|
+
<span class="cline-any cline-yes">26x</span>
|
|
182
|
+
<span class="cline-any cline-yes">3x</span>
|
|
183
|
+
<span class="cline-any cline-neutral"> </span>
|
|
184
|
+
<span class="cline-any cline-yes">23x</span>
|
|
185
|
+
<span class="cline-any cline-yes">44x</span>
|
|
186
|
+
<span class="cline-any cline-yes">44x</span>
|
|
187
|
+
<span class="cline-any cline-yes">44x</span>
|
|
188
|
+
<span class="cline-any cline-yes">4x</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-yes">40x</span>
|
|
193
|
+
<span class="cline-any cline-neutral"> </span>
|
|
194
|
+
<span class="cline-any cline-neutral"> </span>
|
|
195
|
+
<span class="cline-any cline-neutral"> </span>
|
|
196
|
+
<span class="cline-any cline-yes">6x</span>
|
|
197
|
+
<span class="cline-any cline-yes">2x</span>
|
|
198
|
+
<span class="cline-any cline-neutral"> </span>
|
|
199
|
+
<span class="cline-any cline-neutral"> </span>
|
|
200
|
+
<span class="cline-any cline-yes">34x</span>
|
|
201
|
+
<span class="cline-any cline-yes">6x</span>
|
|
202
|
+
<span class="cline-any cline-neutral"> </span>
|
|
203
|
+
<span class="cline-any cline-neutral"> </span>
|
|
204
|
+
<span class="cline-any cline-yes">14x</span>
|
|
205
|
+
<span class="cline-any cline-neutral"> </span>
|
|
206
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">"use strict";
|
|
207
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
208
|
+
exports.checkIfObjectsAreEqual = checkIfObjectsAreEqual;
|
|
209
|
+
exports.checkIfArraysAreEqual = checkIfArraysAreEqual;
|
|
210
|
+
function checkIfObjectsAreEqual(obj1, obj2) {
|
|
211
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (obj1 === obj2) {
|
|
212
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
213
|
+
}
|
|
214
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (typeof obj1 !== "object" || obj1 === null || typeof obj2 !== "object" || obj2 === null) {
|
|
215
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
216
|
+
}
|
|
217
|
+
const keys1 = Object.keys(obj1);
|
|
218
|
+
const keys2 = Object.keys(obj2);
|
|
219
|
+
if (keys1.length !== keys2.length) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
for (const key of keys1) {
|
|
223
|
+
if (!keys2.includes(key)) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
const val1 = obj1[key];
|
|
227
|
+
const val2 = obj2[key];
|
|
228
|
+
if (Array.isArray(val1) && Array.isArray(val2)) {
|
|
229
|
+
if (!checkIfArraysAreEqual(val1, val2)) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else if (typeof val1 === "object" && typeof val2 === "object") {
|
|
234
|
+
if (!checkIfObjectsAreEqual(val1, val2)) {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else if (val1 !== val2) {
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
function checkIfArraysAreEqual(arr1, arr2) {
|
|
245
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (arr1 === arr2) {
|
|
246
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
247
|
+
}
|
|
248
|
+
if (!Array.isArray(arr1) || !Array.isArray(arr2)) {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
if (arr1.length !== arr2.length) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
for (let i = 0; i < arr1.length; i++) {
|
|
255
|
+
const val1 = arr1[i];
|
|
256
|
+
const val2 = arr2[i];
|
|
257
|
+
if (Array.isArray(val1) && Array.isArray(val2)) {
|
|
258
|
+
if (!checkIfArraysAreEqual(val1, val2)) {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else if (typeof val1 === "object" &&
|
|
263
|
+
typeof val2 === "object" &&
|
|
264
|
+
val1 !== null &&
|
|
265
|
+
val2 !== null) {
|
|
266
|
+
if (!checkIfObjectsAreEqual(val1, val2)) {
|
|
267
|
+
return false;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
else if (val1 !== val2) {
|
|
271
|
+
return false;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=helpers.js.map</pre></td></tr></table></pre>
|
|
277
|
+
|
|
278
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
279
|
+
</div><!-- /wrapper -->
|
|
280
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
281
|
+
Code coverage generated by
|
|
282
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
283
|
+
at 2025-07-13T22:32:10.637Z
|
|
284
|
+
</div>
|
|
285
|
+
<script src="../../prettify.js"></script>
|
|
286
|
+
<script>
|
|
287
|
+
window.onload = function () {
|
|
288
|
+
prettyPrint();
|
|
289
|
+
};
|
|
290
|
+
</script>
|
|
291
|
+
<script src="../../sorter.js"></script>
|
|
292
|
+
<script src="../../block-navigation.js"></script>
|
|
293
|
+
</body>
|
|
294
|
+
</html>
|
|
295
|
+
|