@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 config/projectConfig.ts</title>
6
+ <title>Code coverage report for src/config/projectConfig.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,34 +19,34 @@
19
19
  <body>
20
20
  <div class='wrapper'>
21
21
  <div class='pad1'>
22
- <h1><a href="../index.html">All files</a> / <a href="index.html">config</a> projectConfig.ts</h1>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/config</a> projectConfig.ts</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">72.41% </span>
26
+ <span class="strong">62.61% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>42/58</span>
28
+ <span class='fraction'>67/107</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">47.05% </span>
33
+ <span class="strong">75.51% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>8/17</span>
35
+ <span class='fraction'>37/49</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">40% </span>
40
+ <span class="strong">62.5% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/5</span>
42
+ <span class='fraction'>5/8</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">73.68% </span>
47
+ <span class="strong">78.31% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>42/57</span>
49
+ <span class='fraction'>65/83</span>
50
50
  </div>
51
51
 
52
52
 
@@ -57,11 +57,11 @@
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>
64
- <div class='status-line medium'></div>
64
+ <div class='status-line high'></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>
@@ -271,15 +271,88 @@
271
271
  <a name='L206'></a><a href='#L206'>206</a>
272
272
  <a name='L207'></a><a href='#L207'>207</a>
273
273
  <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">5x</span>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
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>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">5x</span>
275
347
  <span class="cline-any cline-neutral">&nbsp;</span>
276
348
  <span class="cline-any cline-neutral">&nbsp;</span>
277
349
  <span class="cline-any cline-yes">5x</span>
278
350
  <span class="cline-any cline-neutral">&nbsp;</span>
279
351
  <span class="cline-any cline-yes">5x</span>
280
352
  <span class="cline-any cline-neutral">&nbsp;</span>
353
+ <span class="cline-any cline-yes">5x</span>
281
354
  <span class="cline-any cline-neutral">&nbsp;</span>
282
- <span class="cline-any cline-neutral">&nbsp;</span>
355
+ <span class="cline-any cline-yes">5x</span>
283
356
  <span class="cline-any cline-yes">5x</span>
284
357
  <span class="cline-any cline-yes">5x</span>
285
358
  <span class="cline-any cline-yes">5x</span>
@@ -299,11 +372,10 @@
299
372
  <span class="cline-any cline-yes">5x</span>
300
373
  <span class="cline-any cline-yes">5x</span>
301
374
  <span class="cline-any cline-yes">5x</span>
302
- <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-yes">5x</span>
304
375
  <span class="cline-any cline-yes">5x</span>
305
376
  <span class="cline-any cline-neutral">&nbsp;</span>
306
377
  <span class="cline-any cline-yes">5x</span>
378
+ <span class="cline-any cline-yes">5x</span>
307
379
  <span class="cline-any cline-neutral">&nbsp;</span>
308
380
  <span class="cline-any cline-yes">5x</span>
309
381
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -349,10 +421,10 @@
349
421
  <span class="cline-any cline-neutral">&nbsp;</span>
350
422
  <span class="cline-any cline-neutral">&nbsp;</span>
351
423
  <span class="cline-any cline-neutral">&nbsp;</span>
424
+ <span class="cline-any cline-yes">52x</span>
425
+ <span class="cline-any cline-yes">52x</span>
352
426
  <span class="cline-any cline-neutral">&nbsp;</span>
353
427
  <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-yes">5x</span>
355
- <span class="cline-any cline-yes">14x</span>
356
428
  <span class="cline-any cline-neutral">&nbsp;</span>
357
429
  <span class="cline-any cline-neutral">&nbsp;</span>
358
430
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -389,46 +461,114 @@
389
461
  <span class="cline-any cline-neutral">&nbsp;</span>
390
462
  <span class="cline-any cline-neutral">&nbsp;</span>
391
463
  <span class="cline-any cline-neutral">&nbsp;</span>
392
- <span class="cline-any cline-yes">14x</span>
393
- <span class="cline-any cline-yes">14x</span>
464
+ <span class="cline-any cline-yes">52x</span>
465
+ <span class="cline-any cline-yes">52x</span>
394
466
  <span class="cline-any cline-neutral">&nbsp;</span>
395
- <span class="cline-any cline-yes">14x</span>
467
+ <span class="cline-any cline-yes">52x</span>
396
468
  <span class="cline-any cline-neutral">&nbsp;</span>
397
- <span class="cline-any cline-yes">14x</span>
398
- <span class="cline-any cline-yes">392x</span>
469
+ <span class="cline-any cline-yes">52x</span>
470
+ <span class="cline-any cline-yes">1560x</span>
399
471
  <span class="cline-any cline-neutral">&nbsp;</span>
400
472
  <span class="cline-any cline-neutral">&nbsp;</span>
401
- <span class="cline-any cline-yes">392x</span>
473
+ <span class="cline-any cline-yes">1560x</span>
402
474
  <span class="cline-any cline-no">&nbsp;</span>
403
475
  <span class="cline-any cline-neutral">&nbsp;</span>
404
476
  <span class="cline-any cline-neutral">&nbsp;</span>
405
477
  <span class="cline-any cline-neutral">&nbsp;</span>
406
- <span class="cline-any cline-yes">14x</span>
478
+ <span class="cline-any cline-yes">52x</span>
407
479
  <span class="cline-any cline-neutral">&nbsp;</span>
408
- <span class="cline-any cline-yes">14x</span>
409
- <span class="cline-any cline-yes">14x</span>
410
- <span class="cline-any cline-yes">14x</span>
480
+ <span class="cline-any cline-yes">52x</span>
481
+ <span class="cline-any cline-yes">52x</span>
482
+ <span class="cline-any cline-yes">52x</span>
411
483
  <span class="cline-any cline-no">&nbsp;</span>
412
484
  <span class="cline-any cline-neutral">&nbsp;</span>
413
485
  <span class="cline-any cline-neutral">&nbsp;</span>
414
- <span class="cline-any cline-yes">14x</span>
486
+ <span class="cline-any cline-yes">52x</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-yes">52x</span>
490
+ <span class="cline-any cline-yes">1x</span>
491
+ <span class="cline-any cline-neutral">&nbsp;</span>
492
+ <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-yes">51x</span>
494
+ <span class="cline-any cline-yes">19x</span>
495
+ <span class="cline-any cline-yes">3x</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-yes">16x</span>
501
+ <span class="cline-any cline-yes">32x</span>
502
+ <span class="cline-any cline-yes">1x</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
415
506
  <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-yes">47x</span>
416
508
  <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-yes">14x</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-yes">2x</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-yes">45x</span>
517
+ <span class="cline-any cline-yes">8x</span>
418
518
  <span class="cline-any cline-yes">1x</span>
419
519
  <span class="cline-any cline-neutral">&nbsp;</span>
420
520
  <span class="cline-any cline-neutral">&nbsp;</span>
421
521
  <span class="cline-any cline-neutral">&nbsp;</span>
422
522
  <span class="cline-any cline-neutral">&nbsp;</span>
423
- <span class="cline-any cline-yes">13x</span>
523
+ <span class="cline-any cline-yes">7x</span>
524
+ <span class="cline-any cline-yes">8x</span>
525
+ <span class="cline-any cline-yes">1x</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
424
527
  <span class="cline-any cline-neutral">&nbsp;</span>
425
528
  <span class="cline-any cline-neutral">&nbsp;</span>
426
529
  <span class="cline-any cline-neutral">&nbsp;</span>
530
+ <span class="cline-any cline-yes">7x</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-yes">7x</span>
533
+ <span class="cline-any cline-yes">2x</span>
427
534
  <span class="cline-any cline-neutral">&nbsp;</span>
428
535
  <span class="cline-any cline-neutral">&nbsp;</span>
429
536
  <span class="cline-any cline-neutral">&nbsp;</span>
430
537
  <span class="cline-any cline-neutral">&nbsp;</span>
431
538
  <span class="cline-any cline-yes">5x</span>
539
+ <span class="cline-any cline-yes">1x</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-neutral">&nbsp;</span>
543
+ <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-yes">40x</span>
547
+ <span class="cline-any cline-neutral">&nbsp;</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-yes">44x</span>
550
+ <span class="cline-any cline-yes">44x</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-yes">44x</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-neutral">&nbsp;</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-neutral">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-neutral">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-neutral">&nbsp;</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-neutral">&nbsp;</span>
569
+ <span class="cline-any cline-neutral">&nbsp;</span>
570
+ <span class="cline-any cline-neutral">&nbsp;</span>
571
+ <span class="cline-any cline-no">&nbsp;</span>
432
572
  <span class="cline-any cline-neutral">&nbsp;</span>
433
573
  <span class="cline-any cline-neutral">&nbsp;</span>
434
574
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -441,6 +581,8 @@
441
581
  <span class="cline-any cline-neutral">&nbsp;</span>
442
582
  <span class="cline-any cline-neutral">&nbsp;</span>
443
583
  <span class="cline-any cline-no">&nbsp;</span>
584
+ <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-no">&nbsp;</span>
444
586
  <span class="cline-any cline-neutral">&nbsp;</span>
445
587
  <span class="cline-any cline-no">&nbsp;</span>
446
588
  <span class="cline-any cline-no">&nbsp;</span>
@@ -455,6 +597,8 @@
455
597
  <span class="cline-any cline-neutral">&nbsp;</span>
456
598
  <span class="cline-any cline-neutral">&nbsp;</span>
457
599
  <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-neutral">&nbsp;</span>
458
602
  <span class="cline-any cline-yes">5x</span>
459
603
  <span class="cline-any cline-neutral">&nbsp;</span>
460
604
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -481,65 +625,63 @@
481
625
  <span class="cline-any cline-neutral">&nbsp;</span>
482
626
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import * as path from "path";
483
627
  &nbsp;
484
- import type { BucketBy, Context, Tag } from "@featurevisor/types";
628
+ import type { BucketBy } from "@featurevisor/types";
485
629
  import { Parser, parsers } from "@featurevisor/parsers";
486
630
  &nbsp;
487
631
  import { FilesystemAdapter } from "../datasource/filesystemAdapter";
488
632
  import type { Plugin } from "../cli";
489
- import type { BuildTags } from "../builder/buildDatafile";
490
- &nbsp;
491
- export const FEATURES_DIRECTORY_NAME = "features";
492
- export const SEGMENTS_DIRECTORY_NAME = "segments";
493
- export const ATTRIBUTES_DIRECTORY_NAME = "attributes";
494
- export const GROUPS_DIRECTORY_NAME = "groups";
495
- export const SCHEMAS_DIRECTORY_NAME = "schemas";
496
- export const TESTS_DIRECTORY_NAME = "tests";
497
- export const STATE_DIRECTORY_NAME = ".featurevisor";
498
- export const DATAFILES_DIRECTORY_NAME = "datafiles";
499
- export const DATAFILE_NAME_PATTERN = "featurevisor-%s.json";
500
- export const REVISION_FILE_NAME = "REVISION";
501
- export const SITE_EXPORT_DIRECTORY_NAME = "out";
502
- export const ENVIRONMENTS_DIRECTORY_NAME = "environments";
503
- &nbsp;
504
- export const CONFIG_MODULE_NAME = "featurevisor.config.js";
505
- export const ROOT_DIR_PLACEHOLDER = "&lt;rootDir&gt;";
506
- &nbsp;
507
- export const DEFAULT_ENVIRONMENTS = ["staging", "production"];
508
- export const DEFAULT_TAGS = ["all"];
509
- export const DEFAULT_BUCKET_BY_ATTRIBUTE = "userId";
510
- &nbsp;
511
- export const DEFAULT_PRETTY_STATE = true;
512
- export const DEFAULT_PRETTY_DATAFILE = false;
513
- &nbsp;
514
- export const DEFAULT_PARSER: Parser = "yml";
515
- &nbsp;
516
- export const SCHEMA_VERSION = "2"; // default schema version
517
- &nbsp;
518
- export interface Scope {
519
- name: string;
520
- context: Context;
521
- tag?: Tag;
522
- tags?: BuildTags;
523
- }
633
+ import { CLI_COLOR_CYAN, CLI_FORMAT_BOLD, colorize } from "../tester/cliFormat";
634
+ &nbsp;
635
+ export const <span class="cstat-no" title="statement not covered" >FEATURES_DIRECTORY_NAME = "</span>features";
636
+ export const <span class="cstat-no" title="statement not covered" >SEGMENTS_DIRECTORY_NAME = "</span>segments";
637
+ export const <span class="cstat-no" title="statement not covered" >ATTRIBUTES_DIRECTORY_NAME = "</span>attributes";
638
+ export const <span class="cstat-no" title="statement not covered" >GROUPS_DIRECTORY_NAME = "</span>groups";
639
+ export const <span class="cstat-no" title="statement not covered" >SCHEMAS_DIRECTORY_NAME = "</span>schemas";
640
+ export const TARGETS_DIRECTORY_NAME = "targets";
641
+ export const <span class="cstat-no" title="statement not covered" >TESTS_DIRECTORY_NAME = "</span>tests";
642
+ export const <span class="cstat-no" title="statement not covered" >STATE_DIRECTORY_NAME = "</span>.featurevisor";
643
+ export const <span class="cstat-no" title="statement not covered" >DATAFILES_DIRECTORY_NAME = "</span>datafiles";
644
+ export const <span class="cstat-no" title="statement not covered" >DATAFILE_NAME_PATTERN = "</span>featurevisor-%s.json";
645
+ export const <span class="cstat-no" title="statement not covered" >REVISION_FILE_NAME = "</span>REVISION";
646
+ export const <span class="cstat-no" title="statement not covered" >CATALOG_DIRECTORY_NAME = "</span>catalog";
647
+ export const SETS_DIRECTORY_NAME = "sets";
648
+ &nbsp;
649
+ export const <span class="cstat-no" title="statement not covered" >CONFIG_MODULE_NAME = "</span>featurevisor.config.js";
650
+ export const <span class="cstat-no" title="statement not covered" >ROOT_DIR_PLACEHOLDER = "</span>&lt;rootDir&gt;";
651
+ &nbsp;
652
+ export const <span class="cstat-no" title="statement not covered" >DEFAULT_NAMESPACE_CHARACTER = "</span>.";
653
+ export const <span class="cstat-no" title="statement not covered" >DEFAULT_TAGS = [</span>"all"];
654
+ export const <span class="cstat-no" title="statement not covered" >DEFAULT_BUCKET_BY_ATTRIBUTE = "</span>userId";
655
+ export const <span class="cstat-no" title="statement not covered" >DEFAULT_SETS = f</span>alse;
656
+ &nbsp;
657
+ export const <span class="cstat-no" title="statement not covered" >DEFAULT_PRETTY_STATE = t</span>rue;
658
+ export const <span class="cstat-no" title="statement not covered" >DEFAULT_PRETTY_DATAFILE = f</span>alse;
659
+ &nbsp;
660
+ export const <span class="cstat-no" title="statement not covered" >DEFAULT_PARSER: Parser = "</span>yml";
524
661
  &nbsp;
525
662
  export interface ProjectConfig {
663
+ promotionFlows?: Array&lt;{
664
+ from: string;
665
+ to: string;
666
+ }&gt;;
667
+ namespaceCharacter: string;
526
668
  featuresDirectoryPath: string;
527
669
  segmentsDirectoryPath: string;
528
670
  attributesDirectoryPath: string;
529
671
  groupsDirectoryPath: string;
530
672
  schemasDirectoryPath: string;
673
+ targetsDirectoryPath: string;
531
674
  testsDirectoryPath: string;
532
675
  stateDirectoryPath: string;
533
676
  datafilesDirectoryPath: string;
534
677
  datafileNamePattern: string;
535
678
  revisionFileName: string;
536
- siteExportDirectoryPath: string;
537
- environmentsDirectoryPath: string;
679
+ catalogDirectoryPath: string;
680
+ setsDirectoryPath: string;
538
681
  &nbsp;
539
- environments: string[] | false;
540
- splitByEnvironment: boolean;
682
+ environments?: string[];
683
+ sets: boolean;
541
684
  tags: string[];
542
- scopes?: Scope[];
543
685
  &nbsp;
544
686
  adapter: any; // @NOTE: type this properly later
545
687
  plugins: Plugin[];
@@ -561,9 +703,11 @@ export interface ProjectConfig {
561
703
  // rootDirectoryPath: path to the root directory of the project (without ending with a slash)
562
704
  export function getProjectConfig(rootDirectoryPath: string): ProjectConfig {
563
705
  const baseConfig: ProjectConfig = {
564
- environments: DEFAULT_ENVIRONMENTS,
706
+ environments: undefined,
707
+ sets: DEFAULT_SETS,
708
+ promotionFlows: undefined,
709
+ namespaceCharacter: DEFAULT_NAMESPACE_CHARACTER,
565
710
  tags: DEFAULT_TAGS,
566
- scopes: [],
567
711
  defaultBucketBy: "userId",
568
712
  &nbsp;
569
713
  parser: DEFAULT_PARSER,
@@ -575,21 +719,21 @@ export function getProjectConfig(rootDirectoryPath: string): ProjectConfig {
575
719
  adapter: FilesystemAdapter,
576
720
  &nbsp;
577
721
  featuresDirectoryPath: path.join(rootDirectoryPath, FEATURES_DIRECTORY_NAME),
578
- environmentsDirectoryPath: path.join(rootDirectoryPath, ENVIRONMENTS_DIRECTORY_NAME),
722
+ setsDirectoryPath: path.join(rootDirectoryPath, SETS_DIRECTORY_NAME),
579
723
  segmentsDirectoryPath: path.join(rootDirectoryPath, SEGMENTS_DIRECTORY_NAME),
580
724
  attributesDirectoryPath: path.join(rootDirectoryPath, ATTRIBUTES_DIRECTORY_NAME),
581
725
  groupsDirectoryPath: path.join(rootDirectoryPath, GROUPS_DIRECTORY_NAME),
582
726
  schemasDirectoryPath: path.join(rootDirectoryPath, SCHEMAS_DIRECTORY_NAME),
727
+ targetsDirectoryPath: path.join(rootDirectoryPath, TARGETS_DIRECTORY_NAME),
583
728
  testsDirectoryPath: path.join(rootDirectoryPath, TESTS_DIRECTORY_NAME),
584
729
  stateDirectoryPath: path.join(rootDirectoryPath, STATE_DIRECTORY_NAME),
585
730
  datafilesDirectoryPath: path.join(rootDirectoryPath, DATAFILES_DIRECTORY_NAME),
586
731
  datafileNamePattern: DATAFILE_NAME_PATTERN,
587
732
  revisionFileName: REVISION_FILE_NAME,
588
- siteExportDirectoryPath: path.join(rootDirectoryPath, SITE_EXPORT_DIRECTORY_NAME),
733
+ catalogDirectoryPath: path.join(rootDirectoryPath, CATALOG_DIRECTORY_NAME),
589
734
  &nbsp;
590
735
  enforceCatchAllRule: false,
591
736
  plugins: [],
592
- splitByEnvironment: false,
593
737
  &nbsp;
594
738
  maxVariableStringLength: undefined,
595
739
  maxVariableArrayStringifiedLength: undefined,
@@ -613,7 +757,7 @@ export function getProjectConfig(rootDirectoryPath: string): ProjectConfig {
613
757
  &nbsp;
614
758
  const finalConfig = mergedConfig as ProjectConfig;
615
759
  &nbsp;
616
- if (typeof finalConfig.parser === "string") {
760
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof finalConfig.parser === "string") {
617
761
  const allowedParsers = Object.keys(parsers);
618
762
  <span class="missing-if-branch" title="if path not taken" >I</span>if (allowedParsers.indexOf(finalConfig.parser) === -1) {
619
763
  <span class="cstat-no" title="statement not covered" > throw new Error(`Invalid parser: ${finalConfig.parser}`);</span>
@@ -622,25 +766,93 @@ export function getProjectConfig(rootDirectoryPath: string): ProjectConfig {
622
766
  finalConfig.parser = parsers[finalConfig.parser];
623
767
  }
624
768
  &nbsp;
625
- if (finalConfig.splitByEnvironment &amp;&amp; finalConfig.environments === false) {
769
+ if (typeof finalConfig.sets !== "boolean") {
770
+ throw new Error(`Invalid sets: ${finalConfig.sets}. It must be a boolean.`);
771
+ }
772
+ &nbsp;
773
+ if (typeof finalConfig.environments !== "undefined") {
774
+ if (!Array.isArray(finalConfig.environments)) {
775
+ throw new Error(
776
+ `Invalid environments: ${finalConfig.environments}. It must be an array of strings when defined.`,
777
+ );
778
+ }
779
+ &nbsp;
780
+ finalConfig.environments.forEach((environment: unknown, index: number) =&gt; {
781
+ if (typeof environment !== "string") {
782
+ throw new Error(`Invalid environments[${index}]: ${environment}. It must be a string.`);
783
+ }
784
+ });
785
+ }
786
+ &nbsp;
787
+ if (
788
+ typeof finalConfig.namespaceCharacter !== "string" ||
789
+ finalConfig.namespaceCharacter.length === 0
790
+ ) {
626
791
  throw new Error(
627
- "Invalid configuration: splitByEnvironment=true requires environments to be an array",
792
+ `Invalid namespaceCharacter: ${finalConfig.namespaceCharacter}. It must be a non-empty string.`,
628
793
  );
629
794
  }
795
+ &nbsp;
796
+ if (typeof finalConfig.promotionFlows !== "undefined") {
797
+ if (!Array.isArray(finalConfig.promotionFlows)) {
798
+ throw new Error(
799
+ `Invalid promotionFlows: ${finalConfig.promotionFlows}. It must be an array.`,
800
+ );
801
+ }
802
+ &nbsp;
803
+ finalConfig.promotionFlows.forEach((entry: any, index: number) =&gt; {
804
+ if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
805
+ throw new Error(
806
+ `Invalid promotionFlows[${index}]: ${entry}. Each entry must be an object with exactly "from" and "to" string fields.`,
807
+ );
808
+ }
809
+ &nbsp;
810
+ const keys = Object.keys(entry).sort();
811
+ &nbsp;
812
+ if (keys.length !== 2 || keys[0] !== "from" || keys[1] !== "to") {
813
+ throw new Error(
814
+ `Invalid promotionFlows[${index}]: ${JSON.stringify(entry)}. Each entry must contain exactly "from" and "to".`,
815
+ );
816
+ }
817
+ &nbsp;
818
+ if (typeof entry.from !== "string" || typeof entry.to !== "string") {
819
+ throw new Error(
820
+ `Invalid promotionFlows[${index}]: ${JSON.stringify(entry)}. "from" and "to" must be strings.`,
821
+ );
822
+ }
823
+ });
824
+ }
630
825
  &nbsp;
631
826
  return finalConfig as ProjectConfig;
632
827
  }
633
828
  &nbsp;
829
+ export function getProjectConfigForSet(projectConfig: ProjectConfig, set: string): ProjectConfig {
830
+ const setRootDirectoryPath = path.join(projectConfig.setsDirectoryPath, set);
831
+ &nbsp;
832
+ return {
833
+ ...projectConfig,
834
+ featuresDirectoryPath: path.join(setRootDirectoryPath, FEATURES_DIRECTORY_NAME),
835
+ segmentsDirectoryPath: path.join(setRootDirectoryPath, SEGMENTS_DIRECTORY_NAME),
836
+ attributesDirectoryPath: path.join(setRootDirectoryPath, ATTRIBUTES_DIRECTORY_NAME),
837
+ groupsDirectoryPath: path.join(setRootDirectoryPath, GROUPS_DIRECTORY_NAME),
838
+ schemasDirectoryPath: path.join(setRootDirectoryPath, SCHEMAS_DIRECTORY_NAME),
839
+ targetsDirectoryPath: path.join(setRootDirectoryPath, TARGETS_DIRECTORY_NAME),
840
+ testsDirectoryPath: path.join(setRootDirectoryPath, TESTS_DIRECTORY_NAME),
841
+ stateDirectoryPath: path.join(projectConfig.stateDirectoryPath, SETS_DIRECTORY_NAME, set),
842
+ datafilesDirectoryPath: path.join(projectConfig.datafilesDirectoryPath, set),
843
+ };
844
+ }
845
+ &nbsp;
634
846
  export interface ShowProjectConfigOptions {
635
847
  json?: boolean;
636
848
  pretty?: boolean;
637
849
  }
638
850
  &nbsp;
639
- export function <span class="fstat-no" title="function not covered" >showProjectConfig(</span>
851
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >showProjectConfig(</span></span>
640
852
  projectConfig: ProjectConfig,
641
853
  options: ShowProjectConfigOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span>
642
854
  ) {
643
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.json) {</span>
855
+ <span class="cstat-no" title="statement not covered" > if (options.json) {</span>
644
856
  <span class="cstat-no" title="statement not covered" > console.log(</span>
645
857
  options.pretty ? JSON.stringify(projectConfig, null, 2) : JSON.stringify(projectConfig),
646
858
  );
@@ -648,24 +860,28 @@ export function <span class="fstat-no" title="function not covered" >showProject
648
860
  <span class="cstat-no" title="statement not covered" > return;</span>
649
861
  }
650
862
  &nbsp;
651
- <span class="cstat-no" title="statement not covered" > console.log("\nProject configuration:\n");</span>
863
+ <span class="cstat-no" title="statement not covered" > console.log("");</span>
864
+ <span class="cstat-no" title="statement not covered" > console.log(CLI_FORMAT_BOLD, "Project configuration");</span>
865
+ <span class="cstat-no" title="statement not covered" > console.log("");</span>
652
866
  &nbsp;
653
867
  const keys = <span class="cstat-no" title="statement not covered" >Object.keys(projectConfig);</span>
654
- const longestKeyLength = <span class="cstat-no" title="statement not covered" >keys.reduce(<span class="fstat-no" title="function not covered" >(a</span>cc, key) =&gt; (<span class="cstat-no" title="statement not covered" >key.length &gt; acc ? key.length : acc)</span>, 0);</span>
868
+ const longestKeyLength = <span class="cstat-no" title="statement not covered" >keys.reduce(<span class="fstat-no" title="function not covered" >(a</span>cc, key) =&gt; (<span class="cstat-no" title="statement not covered" >key.length &gt; acc ? key.length : acc), 0</span>);</span>
655
869
  const ignoreKeys = <span class="cstat-no" title="statement not covered" >["adapter", "parser"];</span>
656
870
  &nbsp;
657
871
  <span class="cstat-no" title="statement not covered" > for (const key of keys) {</span>
658
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ignoreKeys.indexOf(key) !== -1) {</span>
872
+ <span class="cstat-no" title="statement not covered" > if (ignoreKeys.indexOf(key) !== -1) {</span>
659
873
  <span class="cstat-no" title="statement not covered" > continue;</span>
660
874
  }
661
875
  &nbsp;
662
- <span class="cstat-no" title="statement not covered" > console.log(` - ${key.padEnd(longestKeyLength, " ")}: ${projectConfig[key]}`);</span>
876
+ <span class="cstat-no" title="statement not covered" > console.log(</span>
877
+ ` ${colorize(key.padEnd(longestKeyLength, " "), CLI_COLOR_CYAN)}: ${projectConfig[key]}`,
878
+ );
663
879
  }
664
880
  }
665
881
  &nbsp;
666
- export const configPlugin: Plugin = {
882
+ export const <span class="cstat-no" title="statement not covered" >configPlugin: Plugin = {</span>
667
883
  command: "config",
668
- handler: <span class="fstat-no" title="function not covered" >async </span>({ rootDirectoryPath, parsed }) =&gt; {
884
+ handler: <span class="fstat-no" title="function not covered" >async ({</span> rootDirectoryPath, parsed }) =&gt; {
669
885
  const projectConfig = <span class="cstat-no" title="statement not covered" >getProjectConfig(rootDirectoryPath);</span>
670
886
  <span class="cstat-no" title="statement not covered" > showProjectConfig(projectConfig, {</span>
671
887
  json: parsed.json,
@@ -694,16 +910,16 @@ export const configPlugin: Plugin = {
694
910
  <div class='footer quiet pad2 space-top1 center small'>
695
911
  Code coverage generated by
696
912
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
697
- at 2026-04-26T16:47:51.164Z
913
+ at 2026-07-12T20:35:50.655Z
698
914
  </div>
699
- <script src="../prettify.js"></script>
915
+ <script src="../../prettify.js"></script>
700
916
  <script>
701
917
  window.onload = function () {
702
918
  prettyPrint();
703
919
  };
704
920
  </script>
705
- <script src="../sorter.js"></script>
706
- <script src="../block-navigation.js"></script>
921
+ <script src="../../sorter.js"></script>
922
+ <script src="../../block-navigation.js"></script>
707
923
  </body>
708
924
  </html>
709
925