@featurevisor/core 2.26.1 → 3.0.1

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 (390) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/coverage/clover.xml +4991 -3130
  3. package/coverage/coverage-final.json +63 -39
  4. package/coverage/lcov-report/block-navigation.js +1 -1
  5. package/coverage/lcov-report/index.html +248 -98
  6. package/coverage/lcov-report/sorter.js +21 -7
  7. package/coverage/lcov-report/src/assess-distribution/index.html +116 -0
  8. package/coverage/lcov-report/src/assess-distribution/index.ts.html +754 -0
  9. package/coverage/lcov-report/{list → src/benchmark}/index.html +30 -30
  10. package/coverage/lcov-report/src/benchmark/index.ts.html +793 -0
  11. package/coverage/lcov-report/{builder → src/builder}/allocator.ts.html +38 -38
  12. package/coverage/lcov-report/{builder/buildScopedConditions.ts.html → src/builder/applyContextToConditions.ts.html} +80 -65
  13. package/coverage/lcov-report/{builder/buildScopedDatafile.ts.html → src/builder/applyContextToDatafile.ts.html} +92 -92
  14. package/coverage/lcov-report/{builder/buildScopedSegments.ts.html → src/builder/applyContextToSegments.ts.html} +103 -67
  15. package/coverage/lcov-report/{builder → src/builder}/buildDatafile.ts.html +336 -306
  16. package/coverage/lcov-report/src/builder/buildProject.ts.html +1117 -0
  17. package/coverage/lcov-report/src/builder/buildRuntimeDatafiles.ts.html +256 -0
  18. package/coverage/lcov-report/{builder → src/builder}/getFeatureRanges.ts.html +22 -22
  19. package/coverage/lcov-report/{builder → src/builder}/hashes.ts.html +50 -50
  20. package/coverage/lcov-report/{builder → src/builder}/index.html +114 -84
  21. package/coverage/lcov-report/{tester/cliFormat.ts.html → src/builder/index.ts.html} +17 -29
  22. package/coverage/lcov-report/{builder → src/builder}/mutateVariables.ts.html +55 -55
  23. package/coverage/lcov-report/{builder → src/builder}/mutator.ts.html +118 -118
  24. package/coverage/lcov-report/{builder → src/builder}/revision.ts.html +15 -15
  25. package/coverage/lcov-report/{builder → src/builder}/traffic.ts.html +86 -86
  26. package/coverage/lcov-report/src/cli/cli.ts.html +400 -0
  27. package/coverage/lcov-report/{tester → src/cli}/index.html +41 -41
  28. package/coverage/lcov-report/src/cli/plugins.ts.html +214 -0
  29. package/coverage/lcov-report/{config → src/config}/index.html +31 -31
  30. package/coverage/lcov-report/{config → src/config}/index.ts.html +12 -12
  31. package/coverage/lcov-report/{config → src/config}/projectConfig.ts.html +312 -96
  32. package/coverage/lcov-report/{datasource → src/datasource}/adapter.ts.html +28 -73
  33. package/coverage/lcov-report/{datasource → src/datasource}/datasource.ts.html +191 -104
  34. package/coverage/lcov-report/{datasource → src/datasource}/filesystemAdapter.ts.html +233 -635
  35. package/coverage/lcov-report/{datasource → src/datasource}/index.html +48 -48
  36. package/coverage/lcov-report/{datasource → src/datasource}/index.ts.html +14 -14
  37. package/coverage/lcov-report/src/evaluate/index.html +116 -0
  38. package/coverage/lcov-report/src/evaluate/index.ts.html +814 -0
  39. package/coverage/lcov-report/src/find-duplicate-segments/findDuplicateSegments.ts.html +313 -0
  40. package/coverage/lcov-report/src/find-duplicate-segments/index.html +131 -0
  41. package/coverage/lcov-report/src/find-duplicate-segments/index.ts.html +307 -0
  42. package/coverage/lcov-report/src/find-usage/index.html +116 -0
  43. package/coverage/lcov-report/src/find-usage/index.ts.html +1780 -0
  44. package/coverage/lcov-report/src/generate-code/index.html +131 -0
  45. package/coverage/lcov-report/src/generate-code/index.ts.html +403 -0
  46. package/coverage/lcov-report/{generate-code → src/generate-code}/typescript.ts.html +266 -1361
  47. package/coverage/lcov-report/{generate-code → src}/index.html +38 -23
  48. package/coverage/lcov-report/src/info/index.html +116 -0
  49. package/coverage/lcov-report/src/info/index.ts.html +472 -0
  50. package/coverage/lcov-report/src/init/index.html +116 -0
  51. package/coverage/lcov-report/src/init/index.ts.html +280 -0
  52. package/coverage/lcov-report/{linter → src/linter}/attributeSchema.ts.html +160 -157
  53. package/coverage/lcov-report/{linter → src/linter}/checkCircularDependency.ts.html +25 -25
  54. package/coverage/lcov-report/{linter → src/linter}/checkPercentageExceedingSlot.ts.html +42 -42
  55. package/coverage/lcov-report/{linter → src/linter}/conditionSchema.ts.html +207 -207
  56. package/coverage/lcov-report/{linter → src/linter}/featureSchema.ts.html +462 -471
  57. package/coverage/lcov-report/{linter → src/linter}/groupSchema.ts.html +25 -22
  58. package/coverage/lcov-report/{linter → src/linter}/index.html +129 -99
  59. package/coverage/lcov-report/src/linter/index.ts.html +88 -0
  60. package/coverage/lcov-report/{linter → src/linter}/lintProject.ts.html +740 -332
  61. package/coverage/lcov-report/{linter → src/linter}/mutationNotation.ts.html +130 -130
  62. package/coverage/lcov-report/{linter → src/linter}/printError.ts.html +27 -27
  63. package/coverage/lcov-report/{linter → src/linter}/schema.ts.html +153 -150
  64. package/coverage/lcov-report/{linter → src/linter}/segmentSchema.ts.html +18 -15
  65. package/coverage/lcov-report/src/linter/targetSchema.ts.html +223 -0
  66. package/coverage/lcov-report/{linter → src/linter}/testSchema.ts.html +54 -48
  67. package/coverage/lcov-report/{linter → src/linter}/zodHelpers.ts.html +17 -17
  68. package/coverage/lcov-report/src/list/index.html +131 -0
  69. package/coverage/lcov-report/src/list/index.ts.html +2065 -0
  70. package/coverage/lcov-report/{list → src/list}/matrix.ts.html +43 -58
  71. package/coverage/lcov-report/src/promoter/index.html +116 -0
  72. package/coverage/lcov-report/src/promoter/index.ts.html +3883 -0
  73. package/coverage/lcov-report/src/sets.ts.html +313 -0
  74. package/coverage/lcov-report/src/targeting.ts.html +403 -0
  75. package/coverage/lcov-report/src/tester/cliFormat.ts.html +133 -0
  76. package/coverage/lcov-report/{tester → src/tester}/helpers.ts.html +15 -15
  77. package/coverage/lcov-report/src/tester/index.html +206 -0
  78. package/coverage/lcov-report/src/tester/prettyDuration.ts.html +187 -0
  79. package/coverage/lcov-report/src/tester/printTestResult.ts.html +337 -0
  80. package/coverage/lcov-report/src/tester/testFeature.ts.html +1186 -0
  81. package/coverage/lcov-report/src/tester/testProject.ts.html +1018 -0
  82. package/coverage/lcov-report/src/tester/testSegment.ts.html +316 -0
  83. package/coverage/lcov-report/{utils → src/utils}/extractKeys.ts.html +68 -68
  84. package/coverage/lcov-report/{utils → src/utils}/git.ts.html +44 -68
  85. package/coverage/lcov-report/{utils → src/utils}/index.html +44 -44
  86. package/coverage/lcov-report/{utils → src/utils}/index.ts.html +14 -14
  87. package/coverage/lcov-report/{utils → src/utils}/pretty.ts.html +20 -20
  88. package/coverage/lcov.info +10121 -5723
  89. package/jest.config.js +13 -4
  90. package/lib/assess-distribution/index.d.ts +1 -1
  91. package/lib/assess-distribution/index.js +59 -40
  92. package/lib/assess-distribution/index.js.map +1 -1
  93. package/lib/benchmark/index.d.ts +8 -5
  94. package/lib/benchmark/index.js +82 -65
  95. package/lib/benchmark/index.js.map +1 -1
  96. package/lib/builder/applyContextToConditions.d.ts +5 -0
  97. package/lib/builder/{buildScopedConditions.js → applyContextToConditions.js} +19 -14
  98. package/lib/builder/applyContextToConditions.js.map +1 -0
  99. package/lib/builder/applyContextToDatafile.d.ts +2 -0
  100. package/lib/builder/{buildScopedDatafile.js → applyContextToDatafile.js} +26 -26
  101. package/lib/builder/applyContextToDatafile.js.map +1 -0
  102. package/lib/builder/applyContextToSegments.d.ts +5 -0
  103. package/lib/builder/{buildScopedSegments.js → applyContextToSegments.js} +19 -14
  104. package/lib/builder/applyContextToSegments.js.map +1 -0
  105. package/lib/builder/buildDatafile.d.ts +9 -6
  106. package/lib/builder/buildDatafile.js +86 -51
  107. package/lib/builder/buildDatafile.js.map +1 -1
  108. package/lib/builder/buildProject.d.ts +17 -3
  109. package/lib/builder/buildProject.js +151 -59
  110. package/lib/builder/buildProject.js.map +1 -1
  111. package/lib/builder/buildRuntimeDatafiles.d.ts +12 -0
  112. package/lib/builder/buildRuntimeDatafiles.js +35 -0
  113. package/lib/builder/buildRuntimeDatafiles.js.map +1 -0
  114. package/lib/builder/getFeatureRanges.js +34 -1
  115. package/lib/builder/getFeatureRanges.js.map +1 -1
  116. package/lib/builder/hashes.js +34 -1
  117. package/lib/builder/hashes.js.map +1 -1
  118. package/lib/builder/index.d.ts +0 -1
  119. package/lib/builder/index.js +0 -1
  120. package/lib/builder/index.js.map +1 -1
  121. package/lib/cli/cli.js +0 -4
  122. package/lib/cli/cli.js.map +1 -1
  123. package/lib/cli/plugins.js +7 -2
  124. package/lib/cli/plugins.js.map +1 -1
  125. package/lib/config/projectConfig.d.ts +17 -17
  126. package/lib/config/projectConfig.js +101 -15
  127. package/lib/config/projectConfig.js.map +1 -1
  128. package/lib/datasource/adapter.d.ts +7 -9
  129. package/lib/datasource/adapter.js +0 -7
  130. package/lib/datasource/adapter.js.map +1 -1
  131. package/lib/datasource/datasource.d.ts +15 -5
  132. package/lib/datasource/datasource.js +37 -9
  133. package/lib/datasource/datasource.js.map +1 -1
  134. package/lib/datasource/filesystemAdapter.d.ts +4 -10
  135. package/lib/datasource/filesystemAdapter.js +111 -149
  136. package/lib/datasource/filesystemAdapter.js.map +1 -1
  137. package/lib/evaluate/index.d.ts +1 -7
  138. package/lib/evaluate/index.js +81 -67
  139. package/lib/evaluate/index.js.map +1 -1
  140. package/lib/find-duplicate-segments/findDuplicateSegments.js +34 -1
  141. package/lib/find-duplicate-segments/findDuplicateSegments.js.map +1 -1
  142. package/lib/find-duplicate-segments/index.js +21 -13
  143. package/lib/find-duplicate-segments/index.js.map +1 -1
  144. package/lib/find-usage/index.js +57 -41
  145. package/lib/find-usage/index.js.map +1 -1
  146. package/lib/generate-code/index.d.ts +1 -1
  147. package/lib/generate-code/index.js +64 -21
  148. package/lib/generate-code/index.js.map +1 -1
  149. package/lib/generate-code/typescript.d.ts +1 -1
  150. package/lib/generate-code/typescript.js +59 -333
  151. package/lib/generate-code/typescript.js.map +1 -1
  152. package/lib/index.d.ts +2 -1
  153. package/lib/index.js +2 -1
  154. package/lib/index.js.map +1 -1
  155. package/lib/info/index.js +57 -16
  156. package/lib/info/index.js.map +1 -1
  157. package/lib/init/index.d.ts +2 -2
  158. package/lib/init/index.js +39 -3
  159. package/lib/init/index.js.map +1 -1
  160. package/lib/linter/attributeSchema.d.ts +1 -0
  161. package/lib/linter/attributeSchema.js +1 -0
  162. package/lib/linter/attributeSchema.js.map +1 -1
  163. package/lib/linter/conditionSchema.js +5 -5
  164. package/lib/linter/conditionSchema.js.map +1 -1
  165. package/lib/linter/featureSchema.d.ts +4 -1
  166. package/lib/linter/featureSchema.js +15 -13
  167. package/lib/linter/featureSchema.js.map +1 -1
  168. package/lib/linter/groupSchema.d.ts +1 -0
  169. package/lib/linter/groupSchema.js +1 -0
  170. package/lib/linter/groupSchema.js.map +1 -1
  171. package/lib/linter/lintProject.d.ts +1 -3
  172. package/lib/linter/lintProject.js +198 -68
  173. package/lib/linter/lintProject.js.map +1 -1
  174. package/lib/linter/schema.js +1 -0
  175. package/lib/linter/schema.js.map +1 -1
  176. package/lib/linter/segmentSchema.d.ts +1 -0
  177. package/lib/linter/segmentSchema.js +1 -0
  178. package/lib/linter/segmentSchema.js.map +1 -1
  179. package/lib/linter/targetSchema.d.ts +16 -0
  180. package/lib/linter/targetSchema.js +40 -0
  181. package/lib/linter/targetSchema.js.map +1 -0
  182. package/lib/linter/testSchema.d.ts +4 -3
  183. package/lib/linter/testSchema.js +9 -4
  184. package/lib/linter/testSchema.js.map +1 -1
  185. package/lib/list/index.d.ts +1 -0
  186. package/lib/list/index.js +131 -12
  187. package/lib/list/index.js.map +1 -1
  188. package/lib/list/matrix.js +3 -7
  189. package/lib/list/matrix.js.map +1 -1
  190. package/lib/promoter/index.d.ts +50 -0
  191. package/lib/promoter/index.js +880 -0
  192. package/lib/promoter/index.js.map +1 -0
  193. package/lib/sets.d.ts +11 -0
  194. package/lib/sets.js +81 -0
  195. package/lib/sets.js.map +1 -0
  196. package/lib/targeting.d.ts +14 -0
  197. package/lib/targeting.js +82 -0
  198. package/lib/targeting.js.map +1 -0
  199. package/lib/tester/cliFormat.d.ts +7 -1
  200. package/lib/tester/cliFormat.js +11 -2
  201. package/lib/tester/cliFormat.js.map +1 -1
  202. package/lib/tester/printTestResult.js +2 -2
  203. package/lib/tester/printTestResult.js.map +1 -1
  204. package/lib/tester/testFeature.d.ts +0 -1
  205. package/lib/tester/testFeature.js +8 -25
  206. package/lib/tester/testFeature.js.map +1 -1
  207. package/lib/tester/testProject.d.ts +2 -3
  208. package/lib/tester/testProject.js +93 -86
  209. package/lib/tester/testProject.js.map +1 -1
  210. package/lib/tester/testSegment.d.ts +1 -1
  211. package/lib/tester/testSegment.js +3 -21
  212. package/lib/tester/testSegment.js.map +1 -1
  213. package/lib/utils/git.js +45 -19
  214. package/lib/utils/git.js.map +1 -1
  215. package/package.json +12 -12
  216. package/src/assess-distribution/index.ts +72 -52
  217. package/src/benchmark/index.ts +124 -91
  218. package/src/builder/{buildScopedConditions.spec.ts → applyContextToConditions.spec.ts} +160 -142
  219. package/src/builder/{buildScopedConditions.ts → applyContextToConditions.ts} +19 -14
  220. package/src/builder/{buildScopedDatafile.spec.ts → applyContextToDatafile.spec.ts} +141 -81
  221. package/src/builder/{buildScopedDatafile.ts → applyContextToDatafile.ts} +33 -33
  222. package/src/builder/{buildScopedSegments.spec.ts → applyContextToSegments.spec.ts} +171 -151
  223. package/src/builder/{buildScopedSegments.ts → applyContextToSegments.ts} +26 -14
  224. package/src/builder/buildDatafile.spec.ts +192 -14
  225. package/src/builder/buildDatafile.ts +74 -64
  226. package/src/builder/buildProject.ts +171 -86
  227. package/src/builder/buildRuntimeDatafiles.ts +57 -0
  228. package/src/builder/index.ts +0 -1
  229. package/src/cli/cli.ts +0 -5
  230. package/src/cli/plugins.ts +7 -2
  231. package/src/config/projectConfig.spec.ts +171 -8
  232. package/src/config/projectConfig.ts +100 -28
  233. package/src/datasource/adapter.ts +8 -23
  234. package/src/datasource/datasource.ts +50 -21
  235. package/src/datasource/filesystemAdapter.spec.ts +133 -74
  236. package/src/datasource/filesystemAdapter.ts +93 -227
  237. package/src/evaluate/index.ts +109 -97
  238. package/src/find-duplicate-segments/index.ts +34 -16
  239. package/src/find-usage/index.ts +89 -44
  240. package/src/generate-code/index.ts +36 -24
  241. package/src/generate-code/typescript.spec.ts +106 -0
  242. package/src/generate-code/typescript.ts +33 -398
  243. package/src/index.ts +2 -1
  244. package/src/info/index.ts +72 -16
  245. package/src/init/index.ts +1 -1
  246. package/src/linter/attributeSchema.ts +1 -0
  247. package/src/linter/conditionSchema.spec.ts +23 -3
  248. package/src/linter/conditionSchema.ts +5 -5
  249. package/src/linter/featureSchema.spec.ts +107 -18
  250. package/src/linter/featureSchema.ts +25 -28
  251. package/src/linter/groupSchema.ts +1 -0
  252. package/src/linter/lintProject.spec.ts +131 -92
  253. package/src/linter/lintProject.ts +233 -97
  254. package/src/linter/schema.ts +1 -0
  255. package/src/linter/segmentSchema.spec.ts +5 -3
  256. package/src/linter/segmentSchema.ts +1 -0
  257. package/src/linter/targetSchema.spec.ts +159 -0
  258. package/src/linter/targetSchema.ts +46 -0
  259. package/src/linter/testSchema.spec.ts +70 -5
  260. package/src/linter/testSchema.ts +12 -10
  261. package/src/list/index.spec.ts +135 -0
  262. package/src/list/index.ts +188 -12
  263. package/src/list/matrix.ts +3 -8
  264. package/src/promoter/index.spec.ts +617 -0
  265. package/src/promoter/index.ts +1266 -0
  266. package/src/sets.ts +76 -0
  267. package/src/targeting.spec.ts +74 -0
  268. package/src/targeting.ts +106 -0
  269. package/src/tester/cliFormat.ts +11 -1
  270. package/src/tester/printTestResult.ts +12 -3
  271. package/src/tester/testFeature.ts +10 -36
  272. package/src/tester/testProject.spec.ts +50 -0
  273. package/src/tester/testProject.ts +89 -140
  274. package/src/tester/testSegment.ts +5 -22
  275. package/src/utils/git.ts +13 -21
  276. package/tsconfig.cjs.json +5 -1
  277. package/tsconfig.typecheck.json +9 -0
  278. package/coverage/lcov-report/builder/convertToV1.ts.html +0 -583
  279. package/lib/builder/allocator.spec.d.ts +0 -1
  280. package/lib/builder/allocator.spec.js +0 -85
  281. package/lib/builder/allocator.spec.js.map +0 -1
  282. package/lib/builder/buildDatafile.spec.d.ts +0 -1
  283. package/lib/builder/buildDatafile.spec.js +0 -233
  284. package/lib/builder/buildDatafile.spec.js.map +0 -1
  285. package/lib/builder/buildScopedConditions.d.ts +0 -5
  286. package/lib/builder/buildScopedConditions.js.map +0 -1
  287. package/lib/builder/buildScopedConditions.spec.d.ts +0 -1
  288. package/lib/builder/buildScopedConditions.spec.js +0 -2167
  289. package/lib/builder/buildScopedConditions.spec.js.map +0 -1
  290. package/lib/builder/buildScopedDatafile.d.ts +0 -2
  291. package/lib/builder/buildScopedDatafile.js.map +0 -1
  292. package/lib/builder/buildScopedDatafile.spec.d.ts +0 -1
  293. package/lib/builder/buildScopedDatafile.spec.js +0 -2277
  294. package/lib/builder/buildScopedDatafile.spec.js.map +0 -1
  295. package/lib/builder/buildScopedSegments.d.ts +0 -5
  296. package/lib/builder/buildScopedSegments.js.map +0 -1
  297. package/lib/builder/buildScopedSegments.spec.d.ts +0 -1
  298. package/lib/builder/buildScopedSegments.spec.js +0 -1062
  299. package/lib/builder/buildScopedSegments.spec.js.map +0 -1
  300. package/lib/builder/convertToV1.d.ts +0 -10
  301. package/lib/builder/convertToV1.js +0 -119
  302. package/lib/builder/convertToV1.js.map +0 -1
  303. package/lib/builder/mutateVariables.spec.d.ts +0 -1
  304. package/lib/builder/mutateVariables.spec.js +0 -1074
  305. package/lib/builder/mutateVariables.spec.js.map +0 -1
  306. package/lib/builder/mutator.spec.d.ts +0 -1
  307. package/lib/builder/mutator.spec.js +0 -368
  308. package/lib/builder/mutator.spec.js.map +0 -1
  309. package/lib/builder/revision.spec.d.ts +0 -1
  310. package/lib/builder/revision.spec.js +0 -21
  311. package/lib/builder/revision.spec.js.map +0 -1
  312. package/lib/builder/traffic.spec.d.ts +0 -1
  313. package/lib/builder/traffic.spec.js +0 -872
  314. package/lib/builder/traffic.spec.js.map +0 -1
  315. package/lib/config/projectConfig.spec.d.ts +0 -1
  316. package/lib/config/projectConfig.spec.js +0 -24
  317. package/lib/config/projectConfig.spec.js.map +0 -1
  318. package/lib/datasource/filesystemAdapter.spec.d.ts +0 -1
  319. package/lib/datasource/filesystemAdapter.spec.js +0 -88
  320. package/lib/datasource/filesystemAdapter.spec.js.map +0 -1
  321. package/lib/generate-code/typescript.spec.d.ts +0 -1
  322. package/lib/generate-code/typescript.spec.js +0 -78
  323. package/lib/generate-code/typescript.spec.js.map +0 -1
  324. package/lib/linter/attributeSchema.spec.d.ts +0 -1
  325. package/lib/linter/attributeSchema.spec.js +0 -266
  326. package/lib/linter/attributeSchema.spec.js.map +0 -1
  327. package/lib/linter/conditionSchema.spec.d.ts +0 -1
  328. package/lib/linter/conditionSchema.spec.js +0 -380
  329. package/lib/linter/conditionSchema.spec.js.map +0 -1
  330. package/lib/linter/featureSchema.spec.d.ts +0 -1
  331. package/lib/linter/featureSchema.spec.js +0 -1552
  332. package/lib/linter/featureSchema.spec.js.map +0 -1
  333. package/lib/linter/lintProject.spec.d.ts +0 -1
  334. package/lib/linter/lintProject.spec.js +0 -211
  335. package/lib/linter/lintProject.spec.js.map +0 -1
  336. package/lib/linter/mutationNotation.spec.d.ts +0 -1
  337. package/lib/linter/mutationNotation.spec.js +0 -598
  338. package/lib/linter/mutationNotation.spec.js.map +0 -1
  339. package/lib/linter/schema.spec.d.ts +0 -1
  340. package/lib/linter/schema.spec.js +0 -535
  341. package/lib/linter/schema.spec.js.map +0 -1
  342. package/lib/linter/segmentSchema.spec.d.ts +0 -1
  343. package/lib/linter/segmentSchema.spec.js +0 -303
  344. package/lib/linter/segmentSchema.spec.js.map +0 -1
  345. package/lib/linter/testSchema.spec.d.ts +0 -1
  346. package/lib/linter/testSchema.spec.js +0 -162
  347. package/lib/linter/testSchema.spec.js.map +0 -1
  348. package/lib/list/matrix.spec.d.ts +0 -1
  349. package/lib/list/matrix.spec.js +0 -42
  350. package/lib/list/matrix.spec.js.map +0 -1
  351. package/lib/site/exportSite.d.ts +0 -2
  352. package/lib/site/exportSite.js +0 -30
  353. package/lib/site/exportSite.js.map +0 -1
  354. package/lib/site/generateHistory.d.ts +0 -3
  355. package/lib/site/generateHistory.js +0 -31
  356. package/lib/site/generateHistory.js.map +0 -1
  357. package/lib/site/generateSiteSearchIndex.d.ts +0 -4
  358. package/lib/site/generateSiteSearchIndex.js +0 -195
  359. package/lib/site/generateSiteSearchIndex.js.map +0 -1
  360. package/lib/site/getLastModifiedFromHistory.d.ts +0 -2
  361. package/lib/site/getLastModifiedFromHistory.js +0 -18
  362. package/lib/site/getLastModifiedFromHistory.js.map +0 -1
  363. package/lib/site/getOwnerAndRepoFromUrl.d.ts +0 -4
  364. package/lib/site/getOwnerAndRepoFromUrl.js +0 -20
  365. package/lib/site/getOwnerAndRepoFromUrl.js.map +0 -1
  366. package/lib/site/getRelativePaths.d.ts +0 -6
  367. package/lib/site/getRelativePaths.js +0 -15
  368. package/lib/site/getRelativePaths.js.map +0 -1
  369. package/lib/site/getRepoDetails.d.ts +0 -8
  370. package/lib/site/getRepoDetails.js +0 -48
  371. package/lib/site/getRepoDetails.js.map +0 -1
  372. package/lib/site/index.d.ts +0 -2
  373. package/lib/site/index.js +0 -43
  374. package/lib/site/index.js.map +0 -1
  375. package/lib/site/serveSite.d.ts +0 -2
  376. package/lib/site/serveSite.js +0 -54
  377. package/lib/site/serveSite.js.map +0 -1
  378. package/lib/tester/helpers.spec.d.ts +0 -1
  379. package/lib/tester/helpers.spec.js +0 -115
  380. package/lib/tester/helpers.spec.js.map +0 -1
  381. package/src/builder/convertToV1.ts +0 -166
  382. package/src/site/exportSite.ts +0 -42
  383. package/src/site/generateHistory.ts +0 -40
  384. package/src/site/generateSiteSearchIndex.ts +0 -258
  385. package/src/site/getLastModifiedFromHistory.ts +0 -21
  386. package/src/site/getOwnerAndRepoFromUrl.ts +0 -17
  387. package/src/site/getRelativePaths.ts +0 -24
  388. package/src/site/getRepoDetails.ts +0 -62
  389. package/src/site/index.ts +0 -46
  390. package/src/site/serveSite.ts +0 -58
@@ -3,15 +3,15 @@
3
3
  <html lang="en">
4
4
 
5
5
  <head>
6
- <title>Code coverage report for builder/allocator.ts</title>
6
+ <title>Code coverage report for src/builder/allocator.ts</title>
7
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" />
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
11
  <meta name="viewport" content="width=device-width, initial-scale=1" />
12
12
  <style type='text/css'>
13
13
  .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
14
+ background-image: url(../../sort-arrow-sprite.png);
15
15
  }
16
16
  </style>
17
17
  </head>
@@ -19,7 +19,7 @@
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">builder</a> allocator.ts</h1>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/builder</a> allocator.ts</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
@@ -32,7 +32,7 @@
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>6/6</span>
35
+ <span class='fraction'>8/8</span>
36
36
  </div>
37
37
 
38
38
 
@@ -57,7 +57,7 @@
57
57
  <template id="filterTemplate">
58
58
  <div class="quiet">
59
59
  Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
60
+ <input type="search" id="fileSearch">
61
61
  </div>
62
62
  </template>
63
63
  </div>
@@ -110,48 +110,48 @@
110
110
  <a name='L45'></a><a href='#L45'>45</a>
111
111
  <a name='L46'></a><a href='#L46'>46</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
112
112
  <span class="cline-any cline-neutral">&nbsp;</span>
113
- <span class="cline-any cline-yes">3x</span>
114
- <span class="cline-any cline-yes">40x</span>
113
+ <span class="cline-any cline-yes">46x</span>
114
+ <span class="cline-any cline-yes">45x</span>
115
115
  <span class="cline-any cline-neutral">&nbsp;</span>
116
- <span class="cline-any cline-yes">40x</span>
117
- <span class="cline-any cline-yes">40x</span>
118
- <span class="cline-any cline-yes">40x</span>
119
- <span class="cline-any cline-yes">42x</span>
120
- <span class="cline-any cline-yes">42x</span>
116
+ <span class="cline-any cline-yes">45x</span>
117
+ <span class="cline-any cline-yes">45x</span>
118
+ <span class="cline-any cline-yes">45x</span>
119
+ <span class="cline-any cline-yes">46x</span>
120
+ <span class="cline-any cline-yes">46x</span>
121
121
  <span class="cline-any cline-neutral">&nbsp;</span>
122
- <span class="cline-any cline-yes">42x</span>
123
- <span class="cline-any cline-yes">42x</span>
124
- <span class="cline-any cline-yes">42x</span>
125
- <span class="cline-any cline-yes">42x</span>
122
+ <span class="cline-any cline-yes">46x</span>
123
+ <span class="cline-any cline-yes">46x</span>
124
+ <span class="cline-any cline-yes">46x</span>
125
+ <span class="cline-any cline-yes">46x</span>
126
126
  <span class="cline-any cline-neutral">&nbsp;</span>
127
127
  <span class="cline-any cline-neutral">&nbsp;</span>
128
- <span class="cline-any cline-yes">40x</span>
128
+ <span class="cline-any cline-yes">45x</span>
129
129
  <span class="cline-any cline-neutral">&nbsp;</span>
130
130
  <span class="cline-any cline-neutral">&nbsp;</span>
131
- <span class="cline-any cline-yes">3x</span>
131
+ <span class="cline-any cline-yes">48x</span>
132
132
  <span class="cline-any cline-neutral">&nbsp;</span>
133
133
  <span class="cline-any cline-neutral">&nbsp;</span>
134
134
  <span class="cline-any cline-neutral">&nbsp;</span>
135
- <span class="cline-any cline-yes">41x</span>
136
- <span class="cline-any cline-yes">4x</span>
135
+ <span class="cline-any cline-yes">47x</span>
136
+ <span class="cline-any cline-yes">5x</span>
137
137
  <span class="cline-any cline-neutral">&nbsp;</span>
138
138
  <span class="cline-any cline-neutral">&nbsp;</span>
139
- <span class="cline-any cline-yes">37x</span>
139
+ <span class="cline-any cline-yes">42x</span>
140
140
  <span class="cline-any cline-neutral">&nbsp;</span>
141
- <span class="cline-any cline-yes">37x</span>
142
- <span class="cline-any cline-yes">37x</span>
143
- <span class="cline-any cline-yes">37x</span>
144
- <span class="cline-any cline-yes">43x</span>
145
- <span class="cline-any cline-yes">43x</span>
146
- <span class="cline-any cline-yes">43x</span>
147
- <span class="cline-any cline-yes">43x</span>
141
+ <span class="cline-any cline-yes">42x</span>
142
+ <span class="cline-any cline-yes">42x</span>
143
+ <span class="cline-any cline-yes">42x</span>
144
+ <span class="cline-any cline-yes">48x</span>
145
+ <span class="cline-any cline-yes">48x</span>
146
+ <span class="cline-any cline-yes">48x</span>
147
+ <span class="cline-any cline-yes">48x</span>
148
148
  <span class="cline-any cline-yes">27x</span>
149
149
  <span class="cline-any cline-neutral">&nbsp;</span>
150
- <span class="cline-any cline-yes">43x</span>
151
- <span class="cline-any cline-yes">43x</span>
150
+ <span class="cline-any cline-yes">48x</span>
151
+ <span class="cline-any cline-yes">48x</span>
152
152
  <span class="cline-any cline-neutral">&nbsp;</span>
153
153
  <span class="cline-any cline-neutral">&nbsp;</span>
154
- <span class="cline-any cline-yes">37x</span>
154
+ <span class="cline-any cline-yes">42x</span>
155
155
  <span class="cline-any cline-neutral">&nbsp;</span>
156
156
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { Range, Percentage } from "@featurevisor/types";
157
157
  &nbsp;
@@ -205,16 +205,16 @@ export function getUpdatedAvailableRangesAfterFilling(
205
205
  <div class='footer quiet pad2 space-top1 center small'>
206
206
  Code coverage generated by
207
207
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
208
- at 2026-04-26T16:47:51.164Z
208
+ at 2026-07-12T20:35:50.655Z
209
209
  </div>
210
- <script src="../prettify.js"></script>
210
+ <script src="../../prettify.js"></script>
211
211
  <script>
212
212
  window.onload = function () {
213
213
  prettyPrint();
214
214
  };
215
215
  </script>
216
- <script src="../sorter.js"></script>
217
- <script src="../block-navigation.js"></script>
216
+ <script src="../../sorter.js"></script>
217
+ <script src="../../block-navigation.js"></script>
218
218
  </body>
219
219
  </html>
220
220
 
@@ -3,15 +3,15 @@
3
3
  <html lang="en">
4
4
 
5
5
  <head>
6
- <title>Code coverage report for builder/buildScopedConditions.ts</title>
6
+ <title>Code coverage report for src/builder/applyContextToConditions.ts</title>
7
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" />
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
11
  <meta name="viewport" content="width=device-width, initial-scale=1" />
12
12
  <style type='text/css'>
13
13
  .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
14
+ background-image: url(../../sort-arrow-sprite.png);
15
15
  }
16
16
  </style>
17
17
  </head>
@@ -19,20 +19,20 @@
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">builder</a> buildScopedConditions.ts</h1>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/builder</a> applyContextToConditions.ts</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>62/62</span>
28
+ <span class='fraction'>63/63</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">94.44% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>18/18</span>
35
+ <span class='fraction'>34/36</span>
36
36
  </div>
37
37
 
38
38
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>53/53</span>
49
+ <span class='fraction'>54/54</span>
50
50
  </div>
51
51
 
52
52
 
@@ -57,7 +57,7 @@
57
57
  <template id="filterTemplate">
58
58
  <div class="quiet">
59
59
  Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
60
+ <input type="search" id="fileSearch">
61
61
  </div>
62
62
  </template>
63
63
  </div>
@@ -197,50 +197,56 @@
197
197
  <a name='L132'></a><a href='#L132'>132</a>
198
198
  <a name='L133'></a><a href='#L133'>133</a>
199
199
  <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
201
206
  <span class="cline-any cline-neutral">&nbsp;</span>
202
207
  <span class="cline-any cline-neutral">&nbsp;</span>
203
208
  <span class="cline-any cline-neutral">&nbsp;</span>
204
209
  <span class="cline-any cline-neutral">&nbsp;</span>
205
210
  <span class="cline-any cline-neutral">&nbsp;</span>
206
211
  <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-yes">4x</span>
207
213
  <span class="cline-any cline-neutral">&nbsp;</span>
208
214
  <span class="cline-any cline-neutral">&nbsp;</span>
209
- <span class="cline-any cline-yes">2x</span>
215
+ <span class="cline-any cline-yes">143x</span>
210
216
  <span class="cline-any cline-neutral">&nbsp;</span>
211
217
  <span class="cline-any cline-neutral">&nbsp;</span>
212
218
  <span class="cline-any cline-neutral">&nbsp;</span>
213
219
  <span class="cline-any cline-neutral">&nbsp;</span>
214
- <span class="cline-any cline-yes">134x</span>
215
- <span class="cline-any cline-yes">134x</span>
220
+ <span class="cline-any cline-yes">142x</span>
221
+ <span class="cline-any cline-yes">142x</span>
216
222
  <span class="cline-any cline-neutral">&nbsp;</span>
217
- <span class="cline-any cline-yes">134x</span>
223
+ <span class="cline-any cline-yes">142x</span>
218
224
  <span class="cline-any cline-neutral">&nbsp;</span>
219
225
  <span class="cline-any cline-neutral">&nbsp;</span>
220
- <span class="cline-any cline-yes">2x</span>
226
+ <span class="cline-any cline-yes">28x</span>
221
227
  <span class="cline-any cline-neutral">&nbsp;</span>
222
228
  <span class="cline-any cline-neutral">&nbsp;</span>
223
- <span class="cline-any cline-yes">480x</span>
224
- <span class="cline-any cline-yes">213x</span>
229
+ <span class="cline-any cline-yes">496x</span>
230
+ <span class="cline-any cline-yes">219x</span>
225
231
  <span class="cline-any cline-neutral">&nbsp;</span>
226
232
  <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-yes">267x</span>
233
+ <span class="cline-any cline-yes">277x</span>
228
234
  <span class="cline-any cline-neutral">&nbsp;</span>
229
- <span class="cline-any cline-yes">121x</span>
235
+ <span class="cline-any cline-yes">129x</span>
230
236
  <span class="cline-any cline-neutral">&nbsp;</span>
231
237
  <span class="cline-any cline-neutral">&nbsp;</span>
232
- <span class="cline-any cline-yes">121x</span>
238
+ <span class="cline-any cline-yes">129x</span>
233
239
  <span class="cline-any cline-neutral">&nbsp;</span>
234
240
  <span class="cline-any cline-neutral">&nbsp;</span>
235
- <span class="cline-any cline-yes">102x</span>
236
- <span class="cline-any cline-yes">67x</span>
241
+ <span class="cline-any cline-yes">110x</span>
242
+ <span class="cline-any cline-yes">73x</span>
237
243
  <span class="cline-any cline-neutral">&nbsp;</span>
238
244
  <span class="cline-any cline-neutral">&nbsp;</span>
239
- <span class="cline-any cline-yes">35x</span>
245
+ <span class="cline-any cline-yes">37x</span>
240
246
  <span class="cline-any cline-neutral">&nbsp;</span>
241
247
  <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-yes">165x</span>
243
- <span class="cline-any cline-yes">165x</span>
248
+ <span class="cline-any cline-yes">167x</span>
249
+ <span class="cline-any cline-yes">167x</span>
244
250
  <span class="cline-any cline-yes">99x</span>
245
251
  <span class="cline-any cline-yes">99x</span>
246
252
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -254,7 +260,7 @@
254
260
  <span class="cline-any cline-neutral">&nbsp;</span>
255
261
  <span class="cline-any cline-neutral">&nbsp;</span>
256
262
  <span class="cline-any cline-neutral">&nbsp;</span>
257
- <span class="cline-any cline-yes">126x</span>
263
+ <span class="cline-any cline-yes">128x</span>
258
264
  <span class="cline-any cline-yes">69x</span>
259
265
  <span class="cline-any cline-yes">69x</span>
260
266
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -268,68 +274,72 @@
268
274
  <span class="cline-any cline-neutral">&nbsp;</span>
269
275
  <span class="cline-any cline-neutral">&nbsp;</span>
270
276
  <span class="cline-any cline-neutral">&nbsp;</span>
271
- <span class="cline-any cline-yes">98x</span>
277
+ <span class="cline-any cline-yes">100x</span>
272
278
  <span class="cline-any cline-yes">30x</span>
273
279
  <span class="cline-any cline-yes">30x</span>
274
280
  <span class="cline-any cline-neutral">&nbsp;</span>
275
281
  <span class="cline-any cline-neutral">&nbsp;</span>
282
+ <span class="cline-any cline-neutral">&nbsp;</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
276
284
  <span class="cline-any cline-yes">13x</span>
277
- <span class="cline-any cline-yes">7x</span>
285
+ <span class="cline-any cline-yes">5x</span>
286
+ <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
288
  <span class="cline-any cline-neutral">&nbsp;</span>
279
289
  <span class="cline-any cline-neutral">&nbsp;</span>
280
- <span class="cline-any cline-yes">6x</span>
290
+ <span class="cline-any cline-yes">8x</span>
281
291
  <span class="cline-any cline-neutral">&nbsp;</span>
282
292
  <span class="cline-any cline-neutral">&nbsp;</span>
283
293
  <span class="cline-any cline-neutral">&nbsp;</span>
284
294
  <span class="cline-any cline-neutral">&nbsp;</span>
285
295
  <span class="cline-any cline-neutral">&nbsp;</span>
286
- <span class="cline-any cline-yes">85x</span>
296
+ <span class="cline-any cline-yes">87x</span>
287
297
  <span class="cline-any cline-neutral">&nbsp;</span>
288
298
  <span class="cline-any cline-neutral">&nbsp;</span>
289
- <span class="cline-any cline-yes">2x</span>
299
+ <span class="cline-any cline-yes">33x</span>
290
300
  <span class="cline-any cline-neutral">&nbsp;</span>
291
301
  <span class="cline-any cline-neutral">&nbsp;</span>
292
302
  <span class="cline-any cline-neutral">&nbsp;</span>
293
303
  <span class="cline-any cline-neutral">&nbsp;</span>
294
- <span class="cline-any cline-yes">422x</span>
304
+ <span class="cline-any cline-yes">438x</span>
295
305
  <span class="cline-any cline-yes">7x</span>
296
306
  <span class="cline-any cline-neutral">&nbsp;</span>
297
307
  <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-yes">415x</span>
299
- <span class="cline-any cline-yes">116x</span>
308
+ <span class="cline-any cline-yes">431x</span>
309
+ <span class="cline-any cline-yes">124x</span>
300
310
  <span class="cline-any cline-neutral">&nbsp;</span>
301
311
  <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-yes">311x</span>
312
+ <span class="cline-any cline-yes">319x</span>
303
313
  <span class="cline-any cline-neutral">&nbsp;</span>
304
- <span class="cline-any cline-yes">311x</span>
305
- <span class="cline-any cline-yes">233x</span>
314
+ <span class="cline-any cline-yes">319x</span>
315
+ <span class="cline-any cline-yes">241x</span>
306
316
  <span class="cline-any cline-neutral">&nbsp;</span>
307
- <span class="cline-any cline-yes">233x</span>
308
- <span class="cline-any cline-yes">154x</span>
317
+ <span class="cline-any cline-yes">241x</span>
318
+ <span class="cline-any cline-yes">160x</span>
309
319
  <span class="cline-any cline-neutral">&nbsp;</span>
310
320
  <span class="cline-any cline-neutral">&nbsp;</span>
311
321
  <span class="cline-any cline-neutral">&nbsp;</span>
312
322
  <span class="cline-any cline-neutral">&nbsp;</span>
313
- <span class="cline-any cline-yes">157x</span>
323
+ <span class="cline-any cline-yes">159x</span>
314
324
  <span class="cline-any cline-yes">37x</span>
315
325
  <span class="cline-any cline-yes">70x</span>
316
326
  <span class="cline-any cline-neutral">&nbsp;</span>
317
327
  <span class="cline-any cline-neutral">&nbsp;</span>
318
328
  <span class="cline-any cline-neutral">&nbsp;</span>
319
- <span class="cline-any cline-yes">120x</span>
329
+ <span class="cline-any cline-yes">122x</span>
320
330
  <span class="cline-any cline-yes">29x</span>
321
331
  <span class="cline-any cline-yes">54x</span>
322
332
  <span class="cline-any cline-neutral">&nbsp;</span>
323
333
  <span class="cline-any cline-neutral">&nbsp;</span>
324
334
  <span class="cline-any cline-neutral">&nbsp;</span>
325
- <span class="cline-any cline-yes">91x</span>
335
+ <span class="cline-any cline-yes">93x</span>
326
336
  <span class="cline-any cline-yes">12x</span>
327
337
  <span class="cline-any cline-yes">16x</span>
328
338
  <span class="cline-any cline-neutral">&nbsp;</span>
329
339
  <span class="cline-any cline-neutral">&nbsp;</span>
330
340
  <span class="cline-any cline-neutral">&nbsp;</span>
331
341
  <span class="cline-any cline-neutral">&nbsp;</span>
332
- <span class="cline-any cline-yes">79x</span>
342
+ <span class="cline-any cline-yes">81x</span>
333
343
  <span class="cline-any cline-neutral">&nbsp;</span>
334
344
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type {
335
345
  Condition,
@@ -338,15 +348,16 @@
338
348
  NotCondition,
339
349
  Context,
340
350
  } from "@featurevisor/types";
341
- import type { DatafileReader } from "@featurevisor/sdk";
351
+ import { allConditionsAreMatched } from "@featurevisor/sdk";
352
+ import type { Featurevisor } from "@featurevisor/sdk";
342
353
  &nbsp;
343
- export function buildScopedConditions(
344
- datafileReader: DatafileReader,
354
+ export function applyContextToConditions(
355
+ featurevisor: Featurevisor,
345
356
  conditions: Condition | Condition[],
346
357
  context: Context,
347
358
  ): Condition | Condition[] {
348
- const scoped = buildScopedCondition(datafileReader, conditions, context);
349
- const removed = removeRedundantConditions(scoped);
359
+ const withContextApplied = applyContextToCondition(featurevisor, conditions, context);
360
+ const removed = removeRedundantConditions(withContextApplied);
350
361
  &nbsp;
351
362
  return removed;
352
363
  }
@@ -373,7 +384,7 @@ export function removeRedundantConditions(
373
384
  return filtered;
374
385
  }
375
386
  &nbsp;
376
- if (typeof conditions === "object") {
387
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof conditions === "object") {
377
388
  if ("and" in conditions) {
378
389
  const processed = conditions.and.map((c) =&gt; removeRedundantConditions(c)) as Condition[];
379
390
  const filtered = processed.filter((c) =&gt; c !== "*");
@@ -406,9 +417,13 @@ export function removeRedundantConditions(
406
417
  const processed = conditions.not.map((c) =&gt; removeRedundantConditions(c)) as Condition[];
407
418
  const filtered = processed.filter((c) =&gt; c !== "*");
408
419
  &nbsp;
409
- // If all were "*", return "*"
420
+ // `not` negates the implicit AND of its children. Matched children are true
421
+ // and can be removed: not(true &amp;&amp; X) becomes not(X). If every child was
422
+ // true, keep not("*") so it remains an always-false expression.
410
423
  if (filtered.length === 0) {
411
- return "*";
424
+ return {
425
+ not: ["*"],
426
+ } as NotCondition;
412
427
  }
413
428
  &nbsp;
414
429
  return {
@@ -420,8 +435,8 @@ export function removeRedundantConditions(
420
435
  return conditions;
421
436
  }
422
437
  &nbsp;
423
- export function buildScopedCondition(
424
- datafileReader: DatafileReader,
438
+ export function applyContextToCondition(
439
+ featurevisor: Featurevisor,
425
440
  condition: Condition | Condition[],
426
441
  context: Context,
427
442
  ): Condition | Condition[] {
@@ -430,13 +445,13 @@ export function buildScopedCondition(
430
445
  }
431
446
  &nbsp;
432
447
  if (Array.isArray(condition)) {
433
- return condition.map((c) =&gt; buildScopedCondition(datafileReader, c, context)) as Condition[];
448
+ return condition.map((c) =&gt; applyContextToCondition(featurevisor, c, context)) as Condition[];
434
449
  }
435
450
  &nbsp;
436
- if (typeof condition === "object") {
451
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof condition === "object") {
437
452
  // plain condition
438
453
  if ("attribute" in condition) {
439
- const matched = datafileReader.allConditionsAreMatched(condition, context);
454
+ const matched = allConditionsAreMatched(condition, context);
440
455
  &nbsp;
441
456
  if (matched) {
442
457
  return "*";
@@ -446,19 +461,19 @@ export function buildScopedCondition(
446
461
  // AND, OR, NOT conditions
447
462
  if ("and" in condition) {
448
463
  return {
449
- and: condition.and.map((c) =&gt; buildScopedCondition(datafileReader, c, context)),
464
+ and: condition.and.map((c) =&gt; applyContextToCondition(featurevisor, c, context)),
450
465
  } as AndCondition;
451
466
  }
452
467
  &nbsp;
453
468
  if ("or" in condition) {
454
469
  return {
455
- or: condition.or.map((c) =&gt; buildScopedCondition(datafileReader, c, context)),
470
+ or: condition.or.map((c) =&gt; applyContextToCondition(featurevisor, c, context)),
456
471
  } as OrCondition;
457
472
  }
458
473
  &nbsp;
459
474
  if ("not" in condition) {
460
475
  return {
461
- not: condition.not.map((c) =&gt; buildScopedCondition(datafileReader, c, context)),
476
+ not: condition.not.map((c) =&gt; applyContextToCondition(featurevisor, c, context)),
462
477
  } as NotCondition;
463
478
  }
464
479
  }
@@ -472,16 +487,16 @@ export function buildScopedCondition(
472
487
  <div class='footer quiet pad2 space-top1 center small'>
473
488
  Code coverage generated by
474
489
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
475
- at 2026-04-26T16:47:51.164Z
490
+ at 2026-07-12T20:35:50.655Z
476
491
  </div>
477
- <script src="../prettify.js"></script>
492
+ <script src="../../prettify.js"></script>
478
493
  <script>
479
494
  window.onload = function () {
480
495
  prettyPrint();
481
496
  };
482
497
  </script>
483
- <script src="../sorter.js"></script>
484
- <script src="../block-navigation.js"></script>
498
+ <script src="../../sorter.js"></script>
499
+ <script src="../../block-navigation.js"></script>
485
500
  </body>
486
501
  </html>
487
502