@featurevisor/core 2.13.0 → 2.15.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.
Files changed (121) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/coverage/clover.xml +1499 -1028
  3. package/coverage/coverage-final.json +21 -17
  4. package/coverage/lcov-report/builder/allocator.ts.html +1 -1
  5. package/coverage/lcov-report/builder/buildScopedConditions.ts.html +1 -1
  6. package/coverage/lcov-report/builder/buildScopedDatafile.ts.html +1 -1
  7. package/coverage/lcov-report/builder/buildScopedSegments.ts.html +1 -1
  8. package/coverage/lcov-report/builder/index.html +38 -8
  9. package/coverage/lcov-report/builder/mutateVariables.ts.html +400 -0
  10. package/coverage/lcov-report/builder/mutator.ts.html +796 -0
  11. package/coverage/lcov-report/builder/revision.ts.html +1 -1
  12. package/coverage/lcov-report/builder/traffic.ts.html +1 -1
  13. package/coverage/lcov-report/config/index.html +30 -15
  14. package/coverage/lcov-report/config/index.ts.html +88 -0
  15. package/coverage/lcov-report/config/projectConfig.ts.html +79 -46
  16. package/coverage/lcov-report/datasource/adapter.ts.html +74 -11
  17. package/coverage/lcov-report/datasource/datasource.ts.html +77 -26
  18. package/coverage/lcov-report/datasource/filesystemAdapter.ts.html +693 -69
  19. package/coverage/lcov-report/datasource/index.html +35 -35
  20. package/coverage/lcov-report/datasource/index.ts.html +1 -1
  21. package/coverage/lcov-report/index.html +53 -53
  22. package/coverage/lcov-report/linter/attributeSchema.ts.html +4 -4
  23. package/coverage/lcov-report/linter/checkCircularDependency.ts.html +1 -1
  24. package/coverage/lcov-report/linter/checkPercentageExceedingSlot.ts.html +1 -1
  25. package/coverage/lcov-report/linter/conditionSchema.ts.html +7 -7
  26. package/coverage/lcov-report/linter/featureSchema.ts.html +848 -389
  27. package/coverage/lcov-report/linter/groupSchema.ts.html +3 -3
  28. package/coverage/lcov-report/linter/index.html +50 -35
  29. package/coverage/lcov-report/linter/lintProject.ts.html +437 -92
  30. package/coverage/lcov-report/linter/mutationNotation.ts.html +1309 -0
  31. package/coverage/lcov-report/linter/printError.ts.html +9 -9
  32. package/coverage/lcov-report/linter/schema.ts.html +69 -69
  33. package/coverage/lcov-report/linter/segmentSchema.ts.html +3 -3
  34. package/coverage/lcov-report/linter/testSchema.ts.html +10 -10
  35. package/coverage/lcov-report/list/index.html +1 -1
  36. package/coverage/lcov-report/list/matrix.ts.html +1 -1
  37. package/coverage/lcov-report/parsers/index.html +1 -1
  38. package/coverage/lcov-report/parsers/index.ts.html +4 -4
  39. package/coverage/lcov-report/parsers/json.ts.html +2 -2
  40. package/coverage/lcov-report/parsers/yml.ts.html +6 -6
  41. package/coverage/lcov-report/tester/cliFormat.ts.html +1 -1
  42. package/coverage/lcov-report/tester/helpers.ts.html +1 -1
  43. package/coverage/lcov-report/tester/index.html +1 -1
  44. package/coverage/lcov-report/utils/git.ts.html +118 -16
  45. package/coverage/lcov-report/utils/index.html +14 -14
  46. package/coverage/lcov.info +2918 -1932
  47. package/lib/builder/buildDatafile.js +8 -3
  48. package/lib/builder/buildDatafile.js.map +1 -1
  49. package/lib/builder/mutateVariables.d.ts +14 -0
  50. package/lib/builder/mutateVariables.js +90 -0
  51. package/lib/builder/mutateVariables.js.map +1 -0
  52. package/lib/builder/mutateVariables.spec.d.ts +1 -0
  53. package/lib/builder/mutateVariables.spec.js +1045 -0
  54. package/lib/builder/mutateVariables.spec.js.map +1 -0
  55. package/lib/builder/mutator.d.ts +20 -0
  56. package/lib/builder/mutator.js +223 -0
  57. package/lib/builder/mutator.js.map +1 -0
  58. package/lib/builder/mutator.spec.d.ts +1 -0
  59. package/lib/builder/mutator.spec.js +368 -0
  60. package/lib/builder/mutator.spec.js.map +1 -0
  61. package/lib/config/projectConfig.d.ts +3 -0
  62. package/lib/config/projectConfig.js +7 -1
  63. package/lib/config/projectConfig.js.map +1 -1
  64. package/lib/config/projectConfig.spec.d.ts +1 -0
  65. package/lib/config/projectConfig.spec.js +24 -0
  66. package/lib/config/projectConfig.spec.js.map +1 -0
  67. package/lib/datasource/adapter.d.ts +7 -0
  68. package/lib/datasource/adapter.js +7 -0
  69. package/lib/datasource/adapter.js.map +1 -1
  70. package/lib/datasource/datasource.d.ts +3 -1
  71. package/lib/datasource/datasource.js +6 -0
  72. package/lib/datasource/datasource.js.map +1 -1
  73. package/lib/datasource/filesystemAdapter.d.ts +8 -0
  74. package/lib/datasource/filesystemAdapter.js +134 -7
  75. package/lib/datasource/filesystemAdapter.js.map +1 -1
  76. package/lib/datasource/filesystemAdapter.spec.d.ts +1 -0
  77. package/lib/datasource/filesystemAdapter.spec.js +88 -0
  78. package/lib/datasource/filesystemAdapter.spec.js.map +1 -0
  79. package/lib/linter/conditionSchema.spec.js +2 -0
  80. package/lib/linter/conditionSchema.spec.js.map +1 -1
  81. package/lib/linter/featureSchema.d.ts +7 -7
  82. package/lib/linter/featureSchema.js +176 -103
  83. package/lib/linter/featureSchema.js.map +1 -1
  84. package/lib/linter/featureSchema.spec.js +167 -0
  85. package/lib/linter/featureSchema.spec.js.map +1 -1
  86. package/lib/linter/lintProject.d.ts +2 -0
  87. package/lib/linter/lintProject.js +85 -8
  88. package/lib/linter/lintProject.js.map +1 -1
  89. package/lib/linter/lintProject.spec.js +37 -0
  90. package/lib/linter/lintProject.spec.js.map +1 -1
  91. package/lib/linter/mutationNotation.d.ts +47 -0
  92. package/lib/linter/mutationNotation.js +381 -0
  93. package/lib/linter/mutationNotation.js.map +1 -0
  94. package/lib/linter/mutationNotation.spec.d.ts +1 -0
  95. package/lib/linter/mutationNotation.spec.js +549 -0
  96. package/lib/linter/mutationNotation.spec.js.map +1 -0
  97. package/lib/linter/segmentSchema.spec.js +2 -0
  98. package/lib/linter/segmentSchema.spec.js.map +1 -1
  99. package/lib/utils/git.js +32 -7
  100. package/lib/utils/git.js.map +1 -1
  101. package/package.json +2 -2
  102. package/src/builder/buildDatafile.ts +29 -3
  103. package/src/builder/mutateVariables.spec.ts +1134 -0
  104. package/src/builder/mutateVariables.ts +105 -0
  105. package/src/builder/mutator.spec.ts +413 -0
  106. package/src/builder/mutator.ts +237 -0
  107. package/src/config/projectConfig.spec.ts +31 -0
  108. package/src/config/projectConfig.ts +11 -0
  109. package/src/datasource/adapter.ts +21 -0
  110. package/src/datasource/datasource.ts +18 -1
  111. package/src/datasource/filesystemAdapter.spec.ts +153 -0
  112. package/src/datasource/filesystemAdapter.ts +216 -8
  113. package/src/linter/conditionSchema.spec.ts +2 -0
  114. package/src/linter/featureSchema.spec.ts +203 -0
  115. package/src/linter/featureSchema.ts +320 -167
  116. package/src/linter/lintProject.spec.ts +74 -0
  117. package/src/linter/lintProject.ts +123 -8
  118. package/src/linter/mutationNotation.spec.ts +642 -0
  119. package/src/linter/mutationNotation.ts +408 -0
  120. package/src/linter/segmentSchema.spec.ts +2 -0
  121. package/src/utils/git.ts +41 -7
@@ -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 2026-02-23T20:40:14.947Z
119
+ at 2026-02-25T22:03:15.189Z
120
120
  </div>
121
121
  <script src="../prettify.js"></script>
122
122
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">2.89% </span>
26
+ <span class="strong">2.59% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>2/69</span>
28
+ <span class='fraction'>2/77</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/34</span>
35
+ <span class='fraction'>0/48</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/5</span>
42
+ <span class='fraction'>0/6</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">2.89% </span>
47
+ <span class="strong">2.59% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>2/69</span>
49
+ <span class='fraction'>2/77</span>
50
50
  </div>
51
51
 
52
52
 
@@ -195,7 +195,41 @@
195
195
  <a name='L130'></a><a href='#L130'>130</a>
196
196
  <a name='L131'></a><a href='#L131'>131</a>
197
197
  <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
198
+ <a name='L133'></a><a href='#L133'>133</a>
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>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
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>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
199
233
  <span class="cline-any cline-neutral">&nbsp;</span>
200
234
  <span class="cline-any cline-neutral">&nbsp;</span>
201
235
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -209,6 +243,12 @@
209
243
  <span class="cline-any cline-neutral">&nbsp;</span>
210
244
  <span class="cline-any cline-neutral">&nbsp;</span>
211
245
  <span class="cline-any cline-neutral">&nbsp;</span>
246
+ <span class="cline-any cline-no">&nbsp;</span>
247
+ <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
212
252
  <span class="cline-any cline-neutral">&nbsp;</span>
213
253
  <span class="cline-any cline-neutral">&nbsp;</span>
214
254
  <span class="cline-any cline-no">&nbsp;</span>
@@ -257,7 +297,7 @@
257
297
  <span class="cline-any cline-no">&nbsp;</span>
258
298
  <span class="cline-any cline-neutral">&nbsp;</span>
259
299
  <span class="cline-any cline-neutral">&nbsp;</span>
260
- <span class="cline-any cline-yes">1x</span>
300
+ <span class="cline-any cline-yes">3x</span>
261
301
  <span class="cline-any cline-neutral">&nbsp;</span>
262
302
  <span class="cline-any cline-neutral">&nbsp;</span>
263
303
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -287,27 +327,55 @@
287
327
  <span class="cline-any cline-no">&nbsp;</span>
288
328
  <span class="cline-any cline-no">&nbsp;</span>
289
329
  <span class="cline-any cline-no">&nbsp;</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-no">&nbsp;</span>
334
+ <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-no">&nbsp;</span>
290
336
  <span class="cline-any cline-no">&nbsp;</span>
291
337
  <span class="cline-any cline-no">&nbsp;</span>
292
338
  <span class="cline-any cline-no">&nbsp;</span>
293
339
  <span class="cline-any cline-no">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
294
342
  <span class="cline-any cline-no">&nbsp;</span>
295
343
  <span class="cline-any cline-neutral">&nbsp;</span>
296
344
  <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-no">&nbsp;</span>
297
347
  <span class="cline-any cline-no">&nbsp;</span>
298
348
  <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-no">&nbsp;</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
299
352
  <span class="cline-any cline-neutral">&nbsp;</span>
300
353
  <span class="cline-any cline-neutral">&nbsp;</span>
301
354
  <span class="cline-any cline-no">&nbsp;</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
302
356
  <span class="cline-any cline-no">&nbsp;</span>
303
357
  <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
361
  <span class="cline-any cline-no">&nbsp;</span>
305
362
  <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
306
368
  <span class="cline-any cline-no">&nbsp;</span>
369
+ <span class="cline-any cline-no">&nbsp;</span>
370
+ <span class="cline-any cline-neutral">&nbsp;</span>
307
371
  <span class="cline-any cline-neutral">&nbsp;</span>
308
372
  <span class="cline-any cline-neutral">&nbsp;</span>
309
373
  <span class="cline-any cline-no">&nbsp;</span>
310
374
  <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
379
  <span class="cline-any cline-no">&nbsp;</span>
312
380
  <span class="cline-any cline-neutral">&nbsp;</span>
313
381
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -334,6 +402,12 @@ import type { Commit, EntityDiff, EntityType } from "@featurevisor/types";
334
402
  import { ProjectConfig } from "../config";
335
403
  import { CustomParser } from "../parsers";
336
404
  &nbsp;
405
+ function <span class="fstat-no" title="function not covered" >isWithinDirectory(</span>directoryPath: string, fileDirectoryPath: string): boolean {
406
+ <span class="cstat-no" title="statement not covered" > return (</span>
407
+ fileDirectoryPath === directoryPath || fileDirectoryPath.startsWith(directoryPath + path.sep)
408
+ );
409
+ }
410
+ &nbsp;
337
411
  function <span class="fstat-no" title="function not covered" >parseGitCommitShowOutput(</span>gitShowOutput: string) {
338
412
  const result = <span class="cstat-no" title="statement not covered" >{</span>
339
413
  hash: "",
@@ -412,17 +486,22 @@ export function <span class="fstat-no" title="function not covered" >getCommit(<
412
486
  &nbsp;
413
487
  // get entity type
414
488
  let type: EntityType = <span class="cstat-no" title="statement not covered" >"attribute";</span>
415
- <span class="cstat-no" title="statement not covered" > if (relativeDir === projectConfig.attributesDirectoryPath) {</span>
489
+ <span class="cstat-no" title="statement not covered" > if (isWithinDirectory(projectConfig.attributesDirectoryPath, relativeDir)) {</span>
416
490
  <span class="cstat-no" title="statement not covered" > type = "attribute";</span>
417
- } else <span class="cstat-no" title="statement not covered" >if (relativeDir === projectConfig.segmentsDirectoryPath) {</span>
491
+ } else <span class="cstat-no" title="statement not covered" >if (isWithinDirectory(projectConfig.segmentsDirectoryPath, relativeDir)) {</span>
418
492
  <span class="cstat-no" title="statement not covered" > type = "segment";</span>
419
- } else <span class="cstat-no" title="statement not covered" >if (relativeDir === projectConfig.featuresDirectoryPath) {</span>
493
+ } else <span class="cstat-no" title="statement not covered" >if (isWithinDirectory(projectConfig.featuresDirectoryPath, relativeDir)) {</span>
494
+ <span class="cstat-no" title="statement not covered" > type = "feature";</span>
495
+ } else <span class="cstat-no" title="statement not covered" >if (</span>
496
+ projectConfig.splitByEnvironment &amp;&amp;
497
+ isWithinDirectory(projectConfig.environmentsDirectoryPath, relativeDir)
498
+ ) {
420
499
  <span class="cstat-no" title="statement not covered" > type = "feature";</span>
421
- } else <span class="cstat-no" title="statement not covered" >if (relativeDir === projectConfig.groupsDirectoryPath) {</span>
500
+ } else <span class="cstat-no" title="statement not covered" >if (isWithinDirectory(projectConfig.groupsDirectoryPath, relativeDir)) {</span>
422
501
  <span class="cstat-no" title="statement not covered" > type = "group";</span>
423
- } else <span class="cstat-no" title="statement not covered" >if (relativeDir === projectConfig.schemasDirectoryPath) {</span>
502
+ } else <span class="cstat-no" title="statement not covered" >if (isWithinDirectory(projectConfig.schemasDirectoryPath, relativeDir)) {</span>
424
503
  <span class="cstat-no" title="statement not covered" > type = "schema";</span>
425
- } else <span class="cstat-no" title="statement not covered" >if (relativeDir === projectConfig.testsDirectoryPath) {</span>
504
+ } else <span class="cstat-no" title="statement not covered" >if (isWithinDirectory(projectConfig.testsDirectoryPath, relativeDir)) {</span>
426
505
  <span class="cstat-no" title="statement not covered" > type = "test";</span>
427
506
  } else {
428
507
  // unknown type
@@ -438,7 +517,30 @@ export function <span class="fstat-no" title="function not covered" >getCommit(<
438
517
  <span class="cstat-no" title="statement not covered" > return;</span>
439
518
  }
440
519
  &nbsp;
441
- const key = <span class="cstat-no" title="statement not covered" >fileName.replace(extensionWithDot, "");</span>
520
+ let key = <span class="cstat-no" title="statement not covered" >fileName.replace(extensionWithDot, "");</span>
521
+ &nbsp;
522
+ <span class="cstat-no" title="statement not covered" > if (</span>
523
+ type === "feature" &amp;&amp;
524
+ projectConfig.splitByEnvironment &amp;&amp;
525
+ absolutePath.startsWith(projectConfig.environmentsDirectoryPath + path.sep)
526
+ ) {
527
+ const featureRelativePath = <span class="cstat-no" title="statement not covered" >absolutePath</span>
528
+ .replace(projectConfig.environmentsDirectoryPath + path.sep, "")
529
+ .split(path.sep)
530
+ .slice(1)
531
+ .join(path.sep)
532
+ .replace(extensionWithDot, "");
533
+ &nbsp;
534
+ <span class="cstat-no" title="statement not covered" > key = featureRelativePath.replace(/\\/g, "/");</span>
535
+ } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
536
+ type === "feature" &amp;&amp;
537
+ absolutePath.startsWith(projectConfig.featuresDirectoryPath + path.sep)
538
+ ) {
539
+ <span class="cstat-no" title="statement not covered" > key = absolutePath</span>
540
+ .replace(projectConfig.featuresDirectoryPath + path.sep, "")
541
+ .replace(extensionWithDot, "")
542
+ .replace(/\\/g, "/");
543
+ }
442
544
  &nbsp;
443
545
  const entityDiff: EntityDiff = <span class="cstat-no" title="statement not covered" >{</span>
444
546
  type,
@@ -466,7 +568,7 @@ export function <span class="fstat-no" title="function not covered" >getCommit(<
466
568
  <div class='footer quiet pad2 space-top1 center small'>
467
569
  Code coverage generated by
468
570
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
469
- at 2026-02-23T20:40:14.947Z
571
+ at 2026-02-25T22:03:15.189Z
470
572
  </div>
471
573
  <script src="../prettify.js"></script>
472
574
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">2.89% </span>
26
+ <span class="strong">2.59% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>2/69</span>
28
+ <span class='fraction'>2/77</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/34</span>
35
+ <span class='fraction'>0/48</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/5</span>
42
+ <span class='fraction'>0/6</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">2.89% </span>
47
+ <span class="strong">2.59% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>2/69</span>
49
+ <span class='fraction'>2/77</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,17 +80,17 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file low" data-value="git.ts"><a href="git.ts.html">git.ts</a></td>
83
- <td data-value="2.89" class="pic low">
83
+ <td data-value="2.59" class="pic low">
84
84
  <div class="chart"><div class="cover-fill" style="width: 2%"></div><div class="cover-empty" style="width: 98%"></div></div>
85
85
  </td>
86
- <td data-value="2.89" class="pct low">2.89%</td>
87
- <td data-value="69" class="abs low">2/69</td>
86
+ <td data-value="2.59" class="pct low">2.59%</td>
87
+ <td data-value="77" class="abs low">2/77</td>
88
88
  <td data-value="0" class="pct low">0%</td>
89
- <td data-value="34" class="abs low">0/34</td>
89
+ <td data-value="48" class="abs low">0/48</td>
90
90
  <td data-value="0" class="pct low">0%</td>
91
- <td data-value="5" class="abs low">0/5</td>
92
- <td data-value="2.89" class="pct low">2.89%</td>
93
- <td data-value="69" class="abs low">2/69</td>
91
+ <td data-value="6" class="abs low">0/6</td>
92
+ <td data-value="2.59" class="pct low">2.59%</td>
93
+ <td data-value="77" class="abs low">2/77</td>
94
94
  </tr>
95
95
 
96
96
  </tbody>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2026-02-23T20:40:14.947Z
104
+ at 2026-02-25T22:03:15.189Z
105
105
  </div>
106
106
  <script src="../prettify.js"></script>
107
107
  <script>