@featurevisor/core 2.14.0 → 2.16.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 (101) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/coverage/clover.xml +774 -652
  3. package/coverage/coverage-final.json +19 -18
  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 +1 -1
  9. package/coverage/lcov-report/builder/mutateVariables.ts.html +1 -1
  10. package/coverage/lcov-report/builder/mutator.ts.html +1 -1
  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 +76 -25
  18. package/coverage/lcov-report/datasource/filesystemAdapter.ts.html +690 -66
  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 +43 -43
  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 +152 -164
  27. package/coverage/lcov-report/linter/groupSchema.ts.html +3 -3
  28. package/coverage/lcov-report/linter/index.html +34 -34
  29. package/coverage/lcov-report/linter/lintProject.ts.html +428 -83
  30. package/coverage/lcov-report/linter/mutationNotation.ts.html +3 -3
  31. package/coverage/lcov-report/linter/printError.ts.html +9 -9
  32. package/coverage/lcov-report/linter/schema.ts.html +4 -4
  33. package/coverage/lcov-report/linter/segmentSchema.ts.html +3 -3
  34. package/coverage/lcov-report/linter/testSchema.ts.html +6 -6
  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 +1374 -1107
  47. package/lib/config/projectConfig.d.ts +3 -0
  48. package/lib/config/projectConfig.js +7 -1
  49. package/lib/config/projectConfig.js.map +1 -1
  50. package/lib/config/projectConfig.spec.d.ts +1 -0
  51. package/lib/config/projectConfig.spec.js +24 -0
  52. package/lib/config/projectConfig.spec.js.map +1 -0
  53. package/lib/datasource/adapter.d.ts +7 -0
  54. package/lib/datasource/adapter.js +7 -0
  55. package/lib/datasource/adapter.js.map +1 -1
  56. package/lib/datasource/datasource.d.ts +3 -1
  57. package/lib/datasource/datasource.js +6 -0
  58. package/lib/datasource/datasource.js.map +1 -1
  59. package/lib/datasource/filesystemAdapter.d.ts +8 -0
  60. package/lib/datasource/filesystemAdapter.js +134 -7
  61. package/lib/datasource/filesystemAdapter.js.map +1 -1
  62. package/lib/datasource/filesystemAdapter.spec.d.ts +1 -0
  63. package/lib/datasource/filesystemAdapter.spec.js +88 -0
  64. package/lib/datasource/filesystemAdapter.spec.js.map +1 -0
  65. package/lib/generate-code/index.d.ts +3 -0
  66. package/lib/generate-code/index.js +16 -1
  67. package/lib/generate-code/index.js.map +1 -1
  68. package/lib/generate-code/typescript.d.ts +6 -1
  69. package/lib/generate-code/typescript.js +193 -42
  70. package/lib/generate-code/typescript.js.map +1 -1
  71. package/lib/linter/conditionSchema.spec.js +2 -0
  72. package/lib/linter/conditionSchema.spec.js.map +1 -1
  73. package/lib/linter/featureSchema.js +46 -49
  74. package/lib/linter/featureSchema.js.map +1 -1
  75. package/lib/linter/featureSchema.spec.js +17 -0
  76. package/lib/linter/featureSchema.spec.js.map +1 -1
  77. package/lib/linter/lintProject.d.ts +2 -0
  78. package/lib/linter/lintProject.js +85 -8
  79. package/lib/linter/lintProject.js.map +1 -1
  80. package/lib/linter/lintProject.spec.js +37 -0
  81. package/lib/linter/lintProject.spec.js.map +1 -1
  82. package/lib/linter/segmentSchema.spec.js +2 -0
  83. package/lib/linter/segmentSchema.spec.js.map +1 -1
  84. package/lib/utils/git.js +32 -7
  85. package/lib/utils/git.js.map +1 -1
  86. package/package.json +2 -2
  87. package/src/config/projectConfig.spec.ts +31 -0
  88. package/src/config/projectConfig.ts +11 -0
  89. package/src/datasource/adapter.ts +21 -0
  90. package/src/datasource/datasource.ts +18 -1
  91. package/src/datasource/filesystemAdapter.spec.ts +153 -0
  92. package/src/datasource/filesystemAdapter.ts +216 -8
  93. package/src/generate-code/index.ts +20 -1
  94. package/src/generate-code/typescript.ts +266 -64
  95. package/src/linter/conditionSchema.spec.ts +2 -0
  96. package/src/linter/featureSchema.spec.ts +21 -0
  97. package/src/linter/featureSchema.ts +84 -88
  98. package/src/linter/lintProject.spec.ts +74 -0
  99. package/src/linter/lintProject.ts +123 -8
  100. package/src/linter/segmentSchema.spec.ts +2 -0
  101. package/src/utils/git.ts +41 -7
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
26
+ <span class="strong">33.33% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>1/1</span>
28
+ <span class='fraction'>1/3</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/0</span>
42
+ <span class='fraction'>0/2</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
47
+ <span class="strong">33.33% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>1/1</span>
49
+ <span class='fraction'>1/3</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line high'></div>
64
+ <div class='status-line low'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -113,7 +113,38 @@
113
113
  <a name='L48'></a><a href='#L48'>48</a>
114
114
  <a name='L49'></a><a href='#L49'>49</a>
115
115
  <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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>
137
+ <a name='L72'></a><a href='#L72'>72</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
138
+ <span class="cline-any cline-neutral">&nbsp;</span>
139
+ <span class="cline-any cline-neutral">&nbsp;</span>
140
+ <span class="cline-any cline-neutral">&nbsp;</span>
141
+ <span class="cline-any cline-neutral">&nbsp;</span>
142
+ <span class="cline-any cline-neutral">&nbsp;</span>
143
+ <span class="cline-any cline-neutral">&nbsp;</span>
144
+ <span class="cline-any cline-neutral">&nbsp;</span>
145
+ <span class="cline-any cline-neutral">&nbsp;</span>
146
+ <span class="cline-any cline-neutral">&nbsp;</span>
147
+ <span class="cline-any cline-neutral">&nbsp;</span>
117
148
  <span class="cline-any cline-neutral">&nbsp;</span>
118
149
  <span class="cline-any cline-neutral">&nbsp;</span>
119
150
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -130,9 +161,9 @@
130
161
  <span class="cline-any cline-neutral">&nbsp;</span>
131
162
  <span class="cline-any cline-neutral">&nbsp;</span>
132
163
  <span class="cline-any cline-neutral">&nbsp;</span>
164
+ <span class="cline-any cline-yes">3x</span>
133
165
  <span class="cline-any cline-neutral">&nbsp;</span>
134
166
  <span class="cline-any cline-neutral">&nbsp;</span>
135
- <span class="cline-any cline-yes">1x</span>
136
167
  <span class="cline-any cline-neutral">&nbsp;</span>
137
168
  <span class="cline-any cline-neutral">&nbsp;</span>
138
169
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -163,7 +194,19 @@
163
194
  <span class="cline-any cline-neutral">&nbsp;</span>
164
195
  <span class="cline-any cline-neutral">&nbsp;</span>
165
196
  <span class="cline-any cline-neutral">&nbsp;</span>
166
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type {
197
+ <span class="cline-any cline-no">&nbsp;</span>
198
+ <span class="cline-any cline-neutral">&nbsp;</span>
199
+ <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-neutral">&nbsp;</span>
201
+ <span class="cline-any cline-neutral">&nbsp;</span>
202
+ <span class="cline-any cline-neutral">&nbsp;</span>
203
+ <span class="cline-any cline-neutral">&nbsp;</span>
204
+ <span class="cline-any cline-neutral">&nbsp;</span>
205
+ <span class="cline-any cline-no">&nbsp;</span>
206
+ <span class="cline-any cline-neutral">&nbsp;</span>
207
+ <span class="cline-any cline-neutral">&nbsp;</span>
208
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/* eslint-disable @typescript-eslint/no-unused-vars */
209
+ import type {
167
210
  DatafileContent,
168
211
  EnvironmentKey,
169
212
  ExistingState,
@@ -182,6 +225,13 @@ export interface DatafileOptions {
182
225
  datafilesDir?: string;
183
226
  }
184
227
  &nbsp;
228
+ export type FeatureEnvironmentProperty = "rules" | "force" | "expose";
229
+ &nbsp;
230
+ export interface FeatureSourcePaths {
231
+ baseFilePath: string;
232
+ environmentFilePaths: Record&lt;string, string&gt;;
233
+ }
234
+ &nbsp;
185
235
  export abstract class Adapter {
186
236
  // entities
187
237
  abstract listEntities(entityType: EntityType): Promise&lt;string[]&gt;;
@@ -212,6 +262,19 @@ export abstract class Adapter {
212
262
  entityType?: EntityType,
213
263
  entityKey?: string,
214
264
  ): Promise&lt;Commit&gt;;
265
+ &nbsp;
266
+ // feature source helpers (used by lint/history attribution)
267
+ <span class="fstat-no" title="function not covered" > async </span>getFeatureSourcePaths(_featureKey: string): Promise&lt;FeatureSourcePaths | undefined&gt; {
268
+ <span class="cstat-no" title="statement not covered" > return undefined;</span>
269
+ }
270
+ &nbsp;
271
+ <span class="fstat-no" title="function not covered" > async </span>getFeaturePropertySourcePath(
272
+ _featureKey: string,
273
+ _property: FeatureEnvironmentProperty,
274
+ _environment?: string,
275
+ ): Promise&lt;string | undefined&gt; {
276
+ <span class="cstat-no" title="statement not covered" > return undefined;</span>
277
+ }
215
278
  }
216
279
  &nbsp;</pre></td></tr></table></pre>
217
280
 
@@ -220,7 +283,7 @@ export abstract class Adapter {
220
283
  <div class='footer quiet pad2 space-top1 center small'>
221
284
  Code coverage generated by
222
285
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
223
- at 2026-02-24T19:50:30.107Z
286
+ at 2026-02-26T22:05:09.172Z
224
287
  </div>
225
288
  <script src="../prettify.js"></script>
226
289
  <script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">43.07% </span>
26
+ <span class="strong">43.28% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>28/65</span>
28
+ <span class='fraction'>29/67</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">38.09% </span>
40
+ <span class="strong">38.63% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>16/42</span>
42
+ <span class='fraction'>17/44</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">43.07% </span>
47
+ <span class="strong">43.28% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>28/65</span>
49
+ <span class='fraction'>29/67</span>
50
50
  </div>
51
51
 
52
52
 
@@ -322,7 +322,24 @@
322
322
  <a name='L257'></a><a href='#L257'>257</a>
323
323
  <a name='L258'></a><a href='#L258'>258</a>
324
324
  <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
326
343
  <span class="cline-any cline-neutral">&nbsp;</span>
327
344
  <span class="cline-any cline-neutral">&nbsp;</span>
328
345
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -344,19 +361,24 @@
344
361
  <span class="cline-any cline-neutral">&nbsp;</span>
345
362
  <span class="cline-any cline-neutral">&nbsp;</span>
346
363
  <span class="cline-any cline-neutral">&nbsp;</span>
347
- <span class="cline-any cline-yes">1x</span>
348
364
  <span class="cline-any cline-neutral">&nbsp;</span>
349
365
  <span class="cline-any cline-neutral">&nbsp;</span>
350
366
  <span class="cline-any cline-neutral">&nbsp;</span>
351
- <span class="cline-any cline-yes">4x</span>
352
- <span class="cline-any cline-yes">4x</span>
353
367
  <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-yes">4x</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span>
369
+ <span class="cline-any cline-yes">2x</span>
370
+ <span class="cline-any cline-neutral">&nbsp;</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-yes">10x</span>
374
+ <span class="cline-any cline-yes">10x</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-yes">10x</span>
355
377
  <span class="cline-any cline-neutral">&nbsp;</span>
356
378
  <span class="cline-any cline-neutral">&nbsp;</span>
357
379
  <span class="cline-any cline-neutral">&nbsp;</span>
358
380
  <span class="cline-any cline-neutral">&nbsp;</span>
359
- <span class="cline-any cline-yes">241x</span>
381
+ <span class="cline-any cline-yes">247x</span>
360
382
  <span class="cline-any cline-neutral">&nbsp;</span>
361
383
  <span class="cline-any cline-neutral">&nbsp;</span>
362
384
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -398,7 +420,7 @@
398
420
  <span class="cline-any cline-neutral">&nbsp;</span>
399
421
  <span class="cline-any cline-neutral">&nbsp;</span>
400
422
  <span class="cline-any cline-neutral">&nbsp;</span>
401
- <span class="cline-any cline-yes">4x</span>
423
+ <span class="cline-any cline-yes">6x</span>
402
424
  <span class="cline-any cline-neutral">&nbsp;</span>
403
425
  <span class="cline-any cline-neutral">&nbsp;</span>
404
426
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -406,7 +428,11 @@
406
428
  <span class="cline-any cline-neutral">&nbsp;</span>
407
429
  <span class="cline-any cline-neutral">&nbsp;</span>
408
430
  <span class="cline-any cline-neutral">&nbsp;</span>
409
- <span class="cline-any cline-yes">54x</span>
431
+ <span class="cline-any cline-yes">60x</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-no">&nbsp;</span>
410
436
  <span class="cline-any cline-neutral">&nbsp;</span>
411
437
  <span class="cline-any cline-neutral">&nbsp;</span>
412
438
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -421,6 +447,14 @@
421
447
  <span class="cline-any cline-neutral">&nbsp;</span>
422
448
  <span class="cline-any cline-neutral">&nbsp;</span>
423
449
  <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-yes">1x</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-neutral">&nbsp;</span>
455
+ <span class="cline-any cline-neutral">&nbsp;</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-neutral">&nbsp;</span>
424
458
  <span class="cline-any cline-no">&nbsp;</span>
425
459
  <span class="cline-any cline-neutral">&nbsp;</span>
426
460
  <span class="cline-any cline-no">&nbsp;</span>
@@ -448,7 +482,7 @@
448
482
  <span class="cline-any cline-neutral">&nbsp;</span>
449
483
  <span class="cline-any cline-neutral">&nbsp;</span>
450
484
  <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-yes">4x</span>
485
+ <span class="cline-any cline-yes">6x</span>
452
486
  <span class="cline-any cline-neutral">&nbsp;</span>
453
487
  <span class="cline-any cline-neutral">&nbsp;</span>
454
488
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -469,14 +503,14 @@
469
503
  <span class="cline-any cline-neutral">&nbsp;</span>
470
504
  <span class="cline-any cline-neutral">&nbsp;</span>
471
505
  <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-yes">8x</span>
506
+ <span class="cline-any cline-yes">12x</span>
473
507
  <span class="cline-any cline-neutral">&nbsp;</span>
474
508
  <span class="cline-any cline-neutral">&nbsp;</span>
475
509
  <span class="cline-any cline-neutral">&nbsp;</span>
476
- <span class="cline-any cline-yes">4x</span>
477
- <span class="cline-any cline-yes">4x</span>
510
+ <span class="cline-any cline-yes">6x</span>
511
+ <span class="cline-any cline-yes">6x</span>
478
512
  <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-yes">4x</span>
513
+ <span class="cline-any cline-yes">6x</span>
480
514
  <span class="cline-any cline-yes">45x</span>
481
515
  <span class="cline-any cline-neutral">&nbsp;</span>
482
516
  <span class="cline-any cline-yes">45x</span>
@@ -490,7 +524,7 @@
490
524
  <span class="cline-any cline-neutral">&nbsp;</span>
491
525
  <span class="cline-any cline-neutral">&nbsp;</span>
492
526
  <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-yes">4x</span>
527
+ <span class="cline-any cline-yes">6x</span>
494
528
  <span class="cline-any cline-neutral">&nbsp;</span>
495
529
  <span class="cline-any cline-neutral">&nbsp;</span>
496
530
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -511,7 +545,7 @@
511
545
  <span class="cline-any cline-neutral">&nbsp;</span>
512
546
  <span class="cline-any cline-neutral">&nbsp;</span>
513
547
  <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-yes">4x</span>
548
+ <span class="cline-any cline-yes">6x</span>
515
549
  <span class="cline-any cline-neutral">&nbsp;</span>
516
550
  <span class="cline-any cline-neutral">&nbsp;</span>
517
551
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -532,7 +566,7 @@
532
566
  <span class="cline-any cline-neutral">&nbsp;</span>
533
567
  <span class="cline-any cline-neutral">&nbsp;</span>
534
568
  <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-yes">4x</span>
569
+ <span class="cline-any cline-yes">6x</span>
536
570
  <span class="cline-any cline-neutral">&nbsp;</span>
537
571
  <span class="cline-any cline-neutral">&nbsp;</span>
538
572
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -553,7 +587,7 @@
553
587
  <span class="cline-any cline-neutral">&nbsp;</span>
554
588
  <span class="cline-any cline-neutral">&nbsp;</span>
555
589
  <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-yes">4x</span>
590
+ <span class="cline-any cline-yes">6x</span>
557
591
  <span class="cline-any cline-neutral">&nbsp;</span>
558
592
  <span class="cline-any cline-neutral">&nbsp;</span>
559
593
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -601,7 +635,12 @@
601
635
  import { ProjectConfig } from "../config";
602
636
  import { CustomParser } from "../parsers";
603
637
  &nbsp;
604
- import { Adapter, DatafileOptions } from "./adapter";
638
+ import {
639
+ Adapter,
640
+ DatafileOptions,
641
+ FeatureEnvironmentProperty,
642
+ FeatureSourcePaths,
643
+ } from "./adapter";
605
644
  &nbsp;
606
645
  export class Datasource {
607
646
  private adapter: Adapter;
@@ -676,6 +715,18 @@ export class Datasource {
676
715
  <span class="cstat-no" title="statement not covered" > return this.adapter.deleteEntity("feature", featureKey);</span>
677
716
  }
678
717
  &nbsp;
718
+ <span class="fstat-no" title="function not covered" > getFeatureSourcePaths(</span>featureKey: FeatureKey): Promise&lt;FeatureSourcePaths | undefined&gt; {
719
+ <span class="cstat-no" title="statement not covered" > return this.adapter.getFeatureSourcePaths(featureKey);</span>
720
+ }
721
+ &nbsp;
722
+ getFeaturePropertySourcePath(
723
+ featureKey: FeatureKey,
724
+ property: FeatureEnvironmentProperty,
725
+ environment?: string,
726
+ ): Promise&lt;string | undefined&gt; {
727
+ return this.adapter.getFeaturePropertySourcePath(featureKey, property, environment);
728
+ }
729
+ &nbsp;
679
730
  <span class="fstat-no" title="function not covered" > async </span>getRequiredFeaturesChain(
680
731
  featureKey: FeatureKey,
681
732
  chain = <span class="branch-0 cbranch-no" title="branch not covered" >new Set&lt;FeatureKey&gt;(),</span>
@@ -847,7 +898,7 @@ export class Datasource {
847
898
  <div class='footer quiet pad2 space-top1 center small'>
848
899
  Code coverage generated by
849
900
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
850
- at 2026-02-24T19:50:30.107Z
901
+ at 2026-02-26T22:05:09.172Z
851
902
  </div>
852
903
  <script src="../prettify.js"></script>
853
904
  <script>