@featurevisor/core 2.27.0 → 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 (389) hide show
  1. package/coverage/clover.xml +4991 -3130
  2. package/coverage/coverage-final.json +63 -39
  3. package/coverage/lcov-report/block-navigation.js +1 -1
  4. package/coverage/lcov-report/index.html +248 -98
  5. package/coverage/lcov-report/sorter.js +21 -7
  6. package/coverage/lcov-report/src/assess-distribution/index.html +116 -0
  7. package/coverage/lcov-report/src/assess-distribution/index.ts.html +754 -0
  8. package/coverage/lcov-report/{list → src/benchmark}/index.html +30 -30
  9. package/coverage/lcov-report/src/benchmark/index.ts.html +793 -0
  10. package/coverage/lcov-report/{builder → src/builder}/allocator.ts.html +38 -38
  11. package/coverage/lcov-report/{builder/buildScopedConditions.ts.html → src/builder/applyContextToConditions.ts.html} +80 -65
  12. package/coverage/lcov-report/{builder/buildScopedDatafile.ts.html → src/builder/applyContextToDatafile.ts.html} +92 -92
  13. package/coverage/lcov-report/{builder/buildScopedSegments.ts.html → src/builder/applyContextToSegments.ts.html} +103 -67
  14. package/coverage/lcov-report/{builder → src/builder}/buildDatafile.ts.html +336 -306
  15. package/coverage/lcov-report/src/builder/buildProject.ts.html +1117 -0
  16. package/coverage/lcov-report/src/builder/buildRuntimeDatafiles.ts.html +256 -0
  17. package/coverage/lcov-report/{builder → src/builder}/getFeatureRanges.ts.html +22 -22
  18. package/coverage/lcov-report/{builder → src/builder}/hashes.ts.html +50 -50
  19. package/coverage/lcov-report/{builder → src/builder}/index.html +114 -84
  20. package/coverage/lcov-report/{tester/cliFormat.ts.html → src/builder/index.ts.html} +17 -29
  21. package/coverage/lcov-report/{builder → src/builder}/mutateVariables.ts.html +55 -55
  22. package/coverage/lcov-report/{builder → src/builder}/mutator.ts.html +118 -118
  23. package/coverage/lcov-report/{builder → src/builder}/revision.ts.html +15 -15
  24. package/coverage/lcov-report/{builder → src/builder}/traffic.ts.html +86 -86
  25. package/coverage/lcov-report/src/cli/cli.ts.html +400 -0
  26. package/coverage/lcov-report/{tester → src/cli}/index.html +41 -41
  27. package/coverage/lcov-report/src/cli/plugins.ts.html +214 -0
  28. package/coverage/lcov-report/{config → src/config}/index.html +31 -31
  29. package/coverage/lcov-report/{config → src/config}/index.ts.html +12 -12
  30. package/coverage/lcov-report/{config → src/config}/projectConfig.ts.html +312 -96
  31. package/coverage/lcov-report/{datasource → src/datasource}/adapter.ts.html +28 -73
  32. package/coverage/lcov-report/{datasource → src/datasource}/datasource.ts.html +191 -104
  33. package/coverage/lcov-report/{datasource → src/datasource}/filesystemAdapter.ts.html +233 -635
  34. package/coverage/lcov-report/{datasource → src/datasource}/index.html +48 -48
  35. package/coverage/lcov-report/{datasource → src/datasource}/index.ts.html +14 -14
  36. package/coverage/lcov-report/src/evaluate/index.html +116 -0
  37. package/coverage/lcov-report/src/evaluate/index.ts.html +814 -0
  38. package/coverage/lcov-report/src/find-duplicate-segments/findDuplicateSegments.ts.html +313 -0
  39. package/coverage/lcov-report/src/find-duplicate-segments/index.html +131 -0
  40. package/coverage/lcov-report/src/find-duplicate-segments/index.ts.html +307 -0
  41. package/coverage/lcov-report/src/find-usage/index.html +116 -0
  42. package/coverage/lcov-report/src/find-usage/index.ts.html +1780 -0
  43. package/coverage/lcov-report/src/generate-code/index.html +131 -0
  44. package/coverage/lcov-report/src/generate-code/index.ts.html +403 -0
  45. package/coverage/lcov-report/{generate-code → src/generate-code}/typescript.ts.html +266 -1361
  46. package/coverage/lcov-report/{generate-code → src}/index.html +38 -23
  47. package/coverage/lcov-report/src/info/index.html +116 -0
  48. package/coverage/lcov-report/src/info/index.ts.html +472 -0
  49. package/coverage/lcov-report/src/init/index.html +116 -0
  50. package/coverage/lcov-report/src/init/index.ts.html +280 -0
  51. package/coverage/lcov-report/{linter → src/linter}/attributeSchema.ts.html +160 -157
  52. package/coverage/lcov-report/{linter → src/linter}/checkCircularDependency.ts.html +25 -25
  53. package/coverage/lcov-report/{linter → src/linter}/checkPercentageExceedingSlot.ts.html +42 -42
  54. package/coverage/lcov-report/{linter → src/linter}/conditionSchema.ts.html +207 -207
  55. package/coverage/lcov-report/{linter → src/linter}/featureSchema.ts.html +462 -471
  56. package/coverage/lcov-report/{linter → src/linter}/groupSchema.ts.html +25 -22
  57. package/coverage/lcov-report/{linter → src/linter}/index.html +129 -99
  58. package/coverage/lcov-report/src/linter/index.ts.html +88 -0
  59. package/coverage/lcov-report/{linter → src/linter}/lintProject.ts.html +740 -332
  60. package/coverage/lcov-report/{linter → src/linter}/mutationNotation.ts.html +130 -130
  61. package/coverage/lcov-report/{linter → src/linter}/printError.ts.html +27 -27
  62. package/coverage/lcov-report/{linter → src/linter}/schema.ts.html +153 -150
  63. package/coverage/lcov-report/{linter → src/linter}/segmentSchema.ts.html +18 -15
  64. package/coverage/lcov-report/src/linter/targetSchema.ts.html +223 -0
  65. package/coverage/lcov-report/{linter → src/linter}/testSchema.ts.html +54 -48
  66. package/coverage/lcov-report/{linter → src/linter}/zodHelpers.ts.html +17 -17
  67. package/coverage/lcov-report/src/list/index.html +131 -0
  68. package/coverage/lcov-report/src/list/index.ts.html +2065 -0
  69. package/coverage/lcov-report/{list → src/list}/matrix.ts.html +43 -58
  70. package/coverage/lcov-report/src/promoter/index.html +116 -0
  71. package/coverage/lcov-report/src/promoter/index.ts.html +3883 -0
  72. package/coverage/lcov-report/src/sets.ts.html +313 -0
  73. package/coverage/lcov-report/src/targeting.ts.html +403 -0
  74. package/coverage/lcov-report/src/tester/cliFormat.ts.html +133 -0
  75. package/coverage/lcov-report/{tester → src/tester}/helpers.ts.html +15 -15
  76. package/coverage/lcov-report/src/tester/index.html +206 -0
  77. package/coverage/lcov-report/src/tester/prettyDuration.ts.html +187 -0
  78. package/coverage/lcov-report/src/tester/printTestResult.ts.html +337 -0
  79. package/coverage/lcov-report/src/tester/testFeature.ts.html +1186 -0
  80. package/coverage/lcov-report/src/tester/testProject.ts.html +1018 -0
  81. package/coverage/lcov-report/src/tester/testSegment.ts.html +316 -0
  82. package/coverage/lcov-report/{utils → src/utils}/extractKeys.ts.html +68 -68
  83. package/coverage/lcov-report/{utils → src/utils}/git.ts.html +44 -68
  84. package/coverage/lcov-report/{utils → src/utils}/index.html +44 -44
  85. package/coverage/lcov-report/{utils → src/utils}/index.ts.html +14 -14
  86. package/coverage/lcov-report/{utils → src/utils}/pretty.ts.html +20 -20
  87. package/coverage/lcov.info +10121 -5723
  88. package/jest.config.js +13 -4
  89. package/lib/assess-distribution/index.d.ts +1 -1
  90. package/lib/assess-distribution/index.js +59 -40
  91. package/lib/assess-distribution/index.js.map +1 -1
  92. package/lib/benchmark/index.d.ts +8 -5
  93. package/lib/benchmark/index.js +82 -65
  94. package/lib/benchmark/index.js.map +1 -1
  95. package/lib/builder/applyContextToConditions.d.ts +5 -0
  96. package/lib/builder/{buildScopedConditions.js → applyContextToConditions.js} +19 -14
  97. package/lib/builder/applyContextToConditions.js.map +1 -0
  98. package/lib/builder/applyContextToDatafile.d.ts +2 -0
  99. package/lib/builder/{buildScopedDatafile.js → applyContextToDatafile.js} +26 -26
  100. package/lib/builder/applyContextToDatafile.js.map +1 -0
  101. package/lib/builder/applyContextToSegments.d.ts +5 -0
  102. package/lib/builder/{buildScopedSegments.js → applyContextToSegments.js} +19 -14
  103. package/lib/builder/applyContextToSegments.js.map +1 -0
  104. package/lib/builder/buildDatafile.d.ts +9 -6
  105. package/lib/builder/buildDatafile.js +86 -51
  106. package/lib/builder/buildDatafile.js.map +1 -1
  107. package/lib/builder/buildProject.d.ts +17 -3
  108. package/lib/builder/buildProject.js +151 -59
  109. package/lib/builder/buildProject.js.map +1 -1
  110. package/lib/builder/buildRuntimeDatafiles.d.ts +12 -0
  111. package/lib/builder/buildRuntimeDatafiles.js +35 -0
  112. package/lib/builder/buildRuntimeDatafiles.js.map +1 -0
  113. package/lib/builder/getFeatureRanges.js +34 -1
  114. package/lib/builder/getFeatureRanges.js.map +1 -1
  115. package/lib/builder/hashes.js +34 -1
  116. package/lib/builder/hashes.js.map +1 -1
  117. package/lib/builder/index.d.ts +0 -1
  118. package/lib/builder/index.js +0 -1
  119. package/lib/builder/index.js.map +1 -1
  120. package/lib/cli/cli.js +0 -4
  121. package/lib/cli/cli.js.map +1 -1
  122. package/lib/cli/plugins.js +7 -2
  123. package/lib/cli/plugins.js.map +1 -1
  124. package/lib/config/projectConfig.d.ts +17 -17
  125. package/lib/config/projectConfig.js +101 -15
  126. package/lib/config/projectConfig.js.map +1 -1
  127. package/lib/datasource/adapter.d.ts +7 -9
  128. package/lib/datasource/adapter.js +0 -7
  129. package/lib/datasource/adapter.js.map +1 -1
  130. package/lib/datasource/datasource.d.ts +15 -5
  131. package/lib/datasource/datasource.js +37 -9
  132. package/lib/datasource/datasource.js.map +1 -1
  133. package/lib/datasource/filesystemAdapter.d.ts +4 -10
  134. package/lib/datasource/filesystemAdapter.js +111 -149
  135. package/lib/datasource/filesystemAdapter.js.map +1 -1
  136. package/lib/evaluate/index.d.ts +1 -7
  137. package/lib/evaluate/index.js +81 -67
  138. package/lib/evaluate/index.js.map +1 -1
  139. package/lib/find-duplicate-segments/findDuplicateSegments.js +34 -1
  140. package/lib/find-duplicate-segments/findDuplicateSegments.js.map +1 -1
  141. package/lib/find-duplicate-segments/index.js +21 -13
  142. package/lib/find-duplicate-segments/index.js.map +1 -1
  143. package/lib/find-usage/index.js +57 -41
  144. package/lib/find-usage/index.js.map +1 -1
  145. package/lib/generate-code/index.d.ts +1 -1
  146. package/lib/generate-code/index.js +64 -21
  147. package/lib/generate-code/index.js.map +1 -1
  148. package/lib/generate-code/typescript.d.ts +1 -1
  149. package/lib/generate-code/typescript.js +59 -333
  150. package/lib/generate-code/typescript.js.map +1 -1
  151. package/lib/index.d.ts +2 -1
  152. package/lib/index.js +2 -1
  153. package/lib/index.js.map +1 -1
  154. package/lib/info/index.js +57 -16
  155. package/lib/info/index.js.map +1 -1
  156. package/lib/init/index.d.ts +2 -2
  157. package/lib/init/index.js +39 -3
  158. package/lib/init/index.js.map +1 -1
  159. package/lib/linter/attributeSchema.d.ts +1 -0
  160. package/lib/linter/attributeSchema.js +1 -0
  161. package/lib/linter/attributeSchema.js.map +1 -1
  162. package/lib/linter/conditionSchema.js +5 -5
  163. package/lib/linter/conditionSchema.js.map +1 -1
  164. package/lib/linter/featureSchema.d.ts +4 -1
  165. package/lib/linter/featureSchema.js +15 -13
  166. package/lib/linter/featureSchema.js.map +1 -1
  167. package/lib/linter/groupSchema.d.ts +1 -0
  168. package/lib/linter/groupSchema.js +1 -0
  169. package/lib/linter/groupSchema.js.map +1 -1
  170. package/lib/linter/lintProject.d.ts +1 -3
  171. package/lib/linter/lintProject.js +198 -68
  172. package/lib/linter/lintProject.js.map +1 -1
  173. package/lib/linter/schema.js +1 -0
  174. package/lib/linter/schema.js.map +1 -1
  175. package/lib/linter/segmentSchema.d.ts +1 -0
  176. package/lib/linter/segmentSchema.js +1 -0
  177. package/lib/linter/segmentSchema.js.map +1 -1
  178. package/lib/linter/targetSchema.d.ts +16 -0
  179. package/lib/linter/targetSchema.js +40 -0
  180. package/lib/linter/targetSchema.js.map +1 -0
  181. package/lib/linter/testSchema.d.ts +4 -3
  182. package/lib/linter/testSchema.js +9 -4
  183. package/lib/linter/testSchema.js.map +1 -1
  184. package/lib/list/index.d.ts +1 -0
  185. package/lib/list/index.js +131 -12
  186. package/lib/list/index.js.map +1 -1
  187. package/lib/list/matrix.js +3 -7
  188. package/lib/list/matrix.js.map +1 -1
  189. package/lib/promoter/index.d.ts +50 -0
  190. package/lib/promoter/index.js +880 -0
  191. package/lib/promoter/index.js.map +1 -0
  192. package/lib/sets.d.ts +11 -0
  193. package/lib/sets.js +81 -0
  194. package/lib/sets.js.map +1 -0
  195. package/lib/targeting.d.ts +14 -0
  196. package/lib/targeting.js +82 -0
  197. package/lib/targeting.js.map +1 -0
  198. package/lib/tester/cliFormat.d.ts +7 -1
  199. package/lib/tester/cliFormat.js +11 -2
  200. package/lib/tester/cliFormat.js.map +1 -1
  201. package/lib/tester/printTestResult.js +2 -2
  202. package/lib/tester/printTestResult.js.map +1 -1
  203. package/lib/tester/testFeature.d.ts +0 -1
  204. package/lib/tester/testFeature.js +8 -25
  205. package/lib/tester/testFeature.js.map +1 -1
  206. package/lib/tester/testProject.d.ts +2 -3
  207. package/lib/tester/testProject.js +93 -86
  208. package/lib/tester/testProject.js.map +1 -1
  209. package/lib/tester/testSegment.d.ts +1 -1
  210. package/lib/tester/testSegment.js +3 -21
  211. package/lib/tester/testSegment.js.map +1 -1
  212. package/lib/utils/git.js +45 -19
  213. package/lib/utils/git.js.map +1 -1
  214. package/package.json +12 -12
  215. package/src/assess-distribution/index.ts +72 -52
  216. package/src/benchmark/index.ts +124 -91
  217. package/src/builder/{buildScopedConditions.spec.ts → applyContextToConditions.spec.ts} +160 -142
  218. package/src/builder/{buildScopedConditions.ts → applyContextToConditions.ts} +19 -14
  219. package/src/builder/{buildScopedDatafile.spec.ts → applyContextToDatafile.spec.ts} +141 -81
  220. package/src/builder/{buildScopedDatafile.ts → applyContextToDatafile.ts} +33 -33
  221. package/src/builder/{buildScopedSegments.spec.ts → applyContextToSegments.spec.ts} +171 -151
  222. package/src/builder/{buildScopedSegments.ts → applyContextToSegments.ts} +26 -14
  223. package/src/builder/buildDatafile.spec.ts +192 -14
  224. package/src/builder/buildDatafile.ts +74 -64
  225. package/src/builder/buildProject.ts +171 -86
  226. package/src/builder/buildRuntimeDatafiles.ts +57 -0
  227. package/src/builder/index.ts +0 -1
  228. package/src/cli/cli.ts +0 -5
  229. package/src/cli/plugins.ts +7 -2
  230. package/src/config/projectConfig.spec.ts +171 -8
  231. package/src/config/projectConfig.ts +100 -28
  232. package/src/datasource/adapter.ts +8 -23
  233. package/src/datasource/datasource.ts +50 -21
  234. package/src/datasource/filesystemAdapter.spec.ts +133 -74
  235. package/src/datasource/filesystemAdapter.ts +93 -227
  236. package/src/evaluate/index.ts +109 -97
  237. package/src/find-duplicate-segments/index.ts +34 -16
  238. package/src/find-usage/index.ts +89 -44
  239. package/src/generate-code/index.ts +36 -24
  240. package/src/generate-code/typescript.spec.ts +106 -0
  241. package/src/generate-code/typescript.ts +33 -398
  242. package/src/index.ts +2 -1
  243. package/src/info/index.ts +72 -16
  244. package/src/init/index.ts +1 -1
  245. package/src/linter/attributeSchema.ts +1 -0
  246. package/src/linter/conditionSchema.spec.ts +23 -3
  247. package/src/linter/conditionSchema.ts +5 -5
  248. package/src/linter/featureSchema.spec.ts +107 -18
  249. package/src/linter/featureSchema.ts +25 -28
  250. package/src/linter/groupSchema.ts +1 -0
  251. package/src/linter/lintProject.spec.ts +131 -92
  252. package/src/linter/lintProject.ts +233 -97
  253. package/src/linter/schema.ts +1 -0
  254. package/src/linter/segmentSchema.spec.ts +5 -3
  255. package/src/linter/segmentSchema.ts +1 -0
  256. package/src/linter/targetSchema.spec.ts +159 -0
  257. package/src/linter/targetSchema.ts +46 -0
  258. package/src/linter/testSchema.spec.ts +70 -5
  259. package/src/linter/testSchema.ts +12 -10
  260. package/src/list/index.spec.ts +135 -0
  261. package/src/list/index.ts +188 -12
  262. package/src/list/matrix.ts +3 -8
  263. package/src/promoter/index.spec.ts +617 -0
  264. package/src/promoter/index.ts +1266 -0
  265. package/src/sets.ts +76 -0
  266. package/src/targeting.spec.ts +74 -0
  267. package/src/targeting.ts +106 -0
  268. package/src/tester/cliFormat.ts +11 -1
  269. package/src/tester/printTestResult.ts +12 -3
  270. package/src/tester/testFeature.ts +10 -36
  271. package/src/tester/testProject.spec.ts +50 -0
  272. package/src/tester/testProject.ts +89 -140
  273. package/src/tester/testSegment.ts +5 -22
  274. package/src/utils/git.ts +13 -21
  275. package/tsconfig.cjs.json +5 -1
  276. package/tsconfig.typecheck.json +9 -0
  277. package/coverage/lcov-report/builder/convertToV1.ts.html +0 -583
  278. package/lib/builder/allocator.spec.d.ts +0 -1
  279. package/lib/builder/allocator.spec.js +0 -85
  280. package/lib/builder/allocator.spec.js.map +0 -1
  281. package/lib/builder/buildDatafile.spec.d.ts +0 -1
  282. package/lib/builder/buildDatafile.spec.js +0 -233
  283. package/lib/builder/buildDatafile.spec.js.map +0 -1
  284. package/lib/builder/buildScopedConditions.d.ts +0 -5
  285. package/lib/builder/buildScopedConditions.js.map +0 -1
  286. package/lib/builder/buildScopedConditions.spec.d.ts +0 -1
  287. package/lib/builder/buildScopedConditions.spec.js +0 -2167
  288. package/lib/builder/buildScopedConditions.spec.js.map +0 -1
  289. package/lib/builder/buildScopedDatafile.d.ts +0 -2
  290. package/lib/builder/buildScopedDatafile.js.map +0 -1
  291. package/lib/builder/buildScopedDatafile.spec.d.ts +0 -1
  292. package/lib/builder/buildScopedDatafile.spec.js +0 -2277
  293. package/lib/builder/buildScopedDatafile.spec.js.map +0 -1
  294. package/lib/builder/buildScopedSegments.d.ts +0 -5
  295. package/lib/builder/buildScopedSegments.js.map +0 -1
  296. package/lib/builder/buildScopedSegments.spec.d.ts +0 -1
  297. package/lib/builder/buildScopedSegments.spec.js +0 -1062
  298. package/lib/builder/buildScopedSegments.spec.js.map +0 -1
  299. package/lib/builder/convertToV1.d.ts +0 -10
  300. package/lib/builder/convertToV1.js +0 -119
  301. package/lib/builder/convertToV1.js.map +0 -1
  302. package/lib/builder/mutateVariables.spec.d.ts +0 -1
  303. package/lib/builder/mutateVariables.spec.js +0 -1074
  304. package/lib/builder/mutateVariables.spec.js.map +0 -1
  305. package/lib/builder/mutator.spec.d.ts +0 -1
  306. package/lib/builder/mutator.spec.js +0 -368
  307. package/lib/builder/mutator.spec.js.map +0 -1
  308. package/lib/builder/revision.spec.d.ts +0 -1
  309. package/lib/builder/revision.spec.js +0 -21
  310. package/lib/builder/revision.spec.js.map +0 -1
  311. package/lib/builder/traffic.spec.d.ts +0 -1
  312. package/lib/builder/traffic.spec.js +0 -872
  313. package/lib/builder/traffic.spec.js.map +0 -1
  314. package/lib/config/projectConfig.spec.d.ts +0 -1
  315. package/lib/config/projectConfig.spec.js +0 -24
  316. package/lib/config/projectConfig.spec.js.map +0 -1
  317. package/lib/datasource/filesystemAdapter.spec.d.ts +0 -1
  318. package/lib/datasource/filesystemAdapter.spec.js +0 -88
  319. package/lib/datasource/filesystemAdapter.spec.js.map +0 -1
  320. package/lib/generate-code/typescript.spec.d.ts +0 -1
  321. package/lib/generate-code/typescript.spec.js +0 -78
  322. package/lib/generate-code/typescript.spec.js.map +0 -1
  323. package/lib/linter/attributeSchema.spec.d.ts +0 -1
  324. package/lib/linter/attributeSchema.spec.js +0 -266
  325. package/lib/linter/attributeSchema.spec.js.map +0 -1
  326. package/lib/linter/conditionSchema.spec.d.ts +0 -1
  327. package/lib/linter/conditionSchema.spec.js +0 -380
  328. package/lib/linter/conditionSchema.spec.js.map +0 -1
  329. package/lib/linter/featureSchema.spec.d.ts +0 -1
  330. package/lib/linter/featureSchema.spec.js +0 -1552
  331. package/lib/linter/featureSchema.spec.js.map +0 -1
  332. package/lib/linter/lintProject.spec.d.ts +0 -1
  333. package/lib/linter/lintProject.spec.js +0 -211
  334. package/lib/linter/lintProject.spec.js.map +0 -1
  335. package/lib/linter/mutationNotation.spec.d.ts +0 -1
  336. package/lib/linter/mutationNotation.spec.js +0 -598
  337. package/lib/linter/mutationNotation.spec.js.map +0 -1
  338. package/lib/linter/schema.spec.d.ts +0 -1
  339. package/lib/linter/schema.spec.js +0 -535
  340. package/lib/linter/schema.spec.js.map +0 -1
  341. package/lib/linter/segmentSchema.spec.d.ts +0 -1
  342. package/lib/linter/segmentSchema.spec.js +0 -303
  343. package/lib/linter/segmentSchema.spec.js.map +0 -1
  344. package/lib/linter/testSchema.spec.d.ts +0 -1
  345. package/lib/linter/testSchema.spec.js +0 -162
  346. package/lib/linter/testSchema.spec.js.map +0 -1
  347. package/lib/list/matrix.spec.d.ts +0 -1
  348. package/lib/list/matrix.spec.js +0 -42
  349. package/lib/list/matrix.spec.js.map +0 -1
  350. package/lib/site/exportSite.d.ts +0 -2
  351. package/lib/site/exportSite.js +0 -30
  352. package/lib/site/exportSite.js.map +0 -1
  353. package/lib/site/generateHistory.d.ts +0 -3
  354. package/lib/site/generateHistory.js +0 -31
  355. package/lib/site/generateHistory.js.map +0 -1
  356. package/lib/site/generateSiteSearchIndex.d.ts +0 -4
  357. package/lib/site/generateSiteSearchIndex.js +0 -195
  358. package/lib/site/generateSiteSearchIndex.js.map +0 -1
  359. package/lib/site/getLastModifiedFromHistory.d.ts +0 -2
  360. package/lib/site/getLastModifiedFromHistory.js +0 -18
  361. package/lib/site/getLastModifiedFromHistory.js.map +0 -1
  362. package/lib/site/getOwnerAndRepoFromUrl.d.ts +0 -4
  363. package/lib/site/getOwnerAndRepoFromUrl.js +0 -20
  364. package/lib/site/getOwnerAndRepoFromUrl.js.map +0 -1
  365. package/lib/site/getRelativePaths.d.ts +0 -6
  366. package/lib/site/getRelativePaths.js +0 -15
  367. package/lib/site/getRelativePaths.js.map +0 -1
  368. package/lib/site/getRepoDetails.d.ts +0 -8
  369. package/lib/site/getRepoDetails.js +0 -48
  370. package/lib/site/getRepoDetails.js.map +0 -1
  371. package/lib/site/index.d.ts +0 -2
  372. package/lib/site/index.js +0 -43
  373. package/lib/site/index.js.map +0 -1
  374. package/lib/site/serveSite.d.ts +0 -2
  375. package/lib/site/serveSite.js +0 -54
  376. package/lib/site/serveSite.js.map +0 -1
  377. package/lib/tester/helpers.spec.d.ts +0 -1
  378. package/lib/tester/helpers.spec.js +0 -115
  379. package/lib/tester/helpers.spec.js.map +0 -1
  380. package/src/builder/convertToV1.ts +0 -166
  381. package/src/site/exportSite.ts +0 -42
  382. package/src/site/generateHistory.ts +0 -40
  383. package/src/site/generateSiteSearchIndex.ts +0 -258
  384. package/src/site/getLastModifiedFromHistory.ts +0 -21
  385. package/src/site/getOwnerAndRepoFromUrl.ts +0 -17
  386. package/src/site/getRelativePaths.ts +0 -24
  387. package/src/site/getRepoDetails.ts +0 -62
  388. package/src/site/index.ts +0 -46
  389. 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 linter/segmentSchema.ts</title>
6
+ <title>Code coverage report for src/linter/segmentSchema.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">linter</a> segmentSchema.ts</h1>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/linter</a> segmentSchema.ts</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
@@ -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>
@@ -80,12 +80,14 @@
80
80
  <a name='L15'></a><a href='#L15'>15</a>
81
81
  <a name='L16'></a><a href='#L16'>16</a>
82
82
  <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
84
85
  <span class="cline-any cline-neutral">&nbsp;</span>
85
86
  <span class="cline-any cline-neutral">&nbsp;</span>
86
87
  <span class="cline-any cline-neutral">&nbsp;</span>
87
- <span class="cline-any cline-yes">2x</span>
88
- <span class="cline-any cline-yes">28x</span>
88
+ <span class="cline-any cline-yes">66x</span>
89
+ <span class="cline-any cline-yes">66x</span>
90
+ <span class="cline-any cline-neutral">&nbsp;</span>
89
91
  <span class="cline-any cline-neutral">&nbsp;</span>
90
92
  <span class="cline-any cline-neutral">&nbsp;</span>
91
93
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -95,7 +97,7 @@
95
97
  <span class="cline-any cline-neutral">&nbsp;</span>
96
98
  <span class="cline-any cline-neutral">&nbsp;</span>
97
99
  <span class="cline-any cline-neutral">&nbsp;</span>
98
- <span class="cline-any cline-yes">28x</span>
100
+ <span class="cline-any cline-yes">66x</span>
99
101
  <span class="cline-any cline-neutral">&nbsp;</span>
100
102
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { z } from "zod";
101
103
  &nbsp;
@@ -105,6 +107,7 @@ export function getSegmentZodSchema(projectConfig: ProjectConfig, conditionsZodS
105
107
  const segmentZodSchema = z
106
108
  .object({
107
109
  archived: z.boolean().optional(),
110
+ promotable: z.boolean().optional(),
108
111
  description: z.string({
109
112
  error: (issue) =&gt; (issue.input === undefined ? "Required" : undefined),
110
113
  }),
@@ -121,16 +124,16 @@ export function getSegmentZodSchema(projectConfig: ProjectConfig, conditionsZodS
121
124
  <div class='footer quiet pad2 space-top1 center small'>
122
125
  Code coverage generated by
123
126
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
124
- at 2026-05-19T16:53:22.863Z
127
+ at 2026-07-12T20:35:50.655Z
125
128
  </div>
126
- <script src="../prettify.js"></script>
129
+ <script src="../../prettify.js"></script>
127
130
  <script>
128
131
  window.onload = function () {
129
132
  prettyPrint();
130
133
  };
131
134
  </script>
132
- <script src="../sorter.js"></script>
133
- <script src="../block-navigation.js"></script>
135
+ <script src="../../sorter.js"></script>
136
+ <script src="../../block-navigation.js"></script>
134
137
  </body>
135
138
  </html>
136
139
 
@@ -0,0 +1,223 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/linter/targetSchema.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/linter</a> targetSchema.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">100% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>15/15</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">75% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>3/4</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>8/8</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">100% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>15/15</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
113
+ <span class="cline-any cline-neutral">&nbsp;</span>
114
+ <span class="cline-any cline-neutral">&nbsp;</span>
115
+ <span class="cline-any cline-yes">3x</span>
116
+ <span class="cline-any cline-neutral">&nbsp;</span>
117
+ <span class="cline-any cline-yes">3x</span>
118
+ <span class="cline-any cline-yes">64x</span>
119
+ <span class="cline-any cline-neutral">&nbsp;</span>
120
+ <span class="cline-any cline-yes">24x</span>
121
+ <span class="cline-any cline-yes">2x</span>
122
+ <span class="cline-any cline-neutral">&nbsp;</span>
123
+ <span class="cline-any cline-neutral">&nbsp;</span>
124
+ <span class="cline-any cline-yes">64x</span>
125
+ <span class="cline-any cline-yes">64x</span>
126
+ <span class="cline-any cline-yes">64x</span>
127
+ <span class="cline-any cline-neutral">&nbsp;</span>
128
+ <span class="cline-any cline-neutral">&nbsp;</span>
129
+ <span class="cline-any cline-yes">8x</span>
130
+ <span class="cline-any cline-yes">8x</span>
131
+ <span class="cline-any cline-yes">64x</span>
132
+ <span class="cline-any cline-neutral">&nbsp;</span>
133
+ <span class="cline-any cline-yes">64x</span>
134
+ <span class="cline-any cline-neutral">&nbsp;</span>
135
+ <span class="cline-any cline-neutral">&nbsp;</span>
136
+ <span class="cline-any cline-neutral">&nbsp;</span>
137
+ <span class="cline-any cline-neutral">&nbsp;</span>
138
+ <span class="cline-any cline-yes">1x</span>
139
+ <span class="cline-any cline-neutral">&nbsp;</span>
140
+ <span class="cline-any cline-neutral">&nbsp;</span>
141
+ <span class="cline-any cline-neutral">&nbsp;</span>
142
+ <span class="cline-any cline-neutral">&nbsp;</span>
143
+ <span class="cline-any cline-neutral">&nbsp;</span>
144
+ <span class="cline-any cline-neutral">&nbsp;</span>
145
+ <span class="cline-any cline-neutral">&nbsp;</span>
146
+ <span class="cline-any cline-neutral">&nbsp;</span>
147
+ <span class="cline-any cline-neutral">&nbsp;</span>
148
+ <span class="cline-any cline-neutral">&nbsp;</span>
149
+ <span class="cline-any cline-neutral">&nbsp;</span>
150
+ <span class="cline-any cline-neutral">&nbsp;</span>
151
+ <span class="cline-any cline-neutral">&nbsp;</span>
152
+ <span class="cline-any cline-neutral">&nbsp;</span>
153
+ <span class="cline-any cline-yes">30x</span>
154
+ <span class="cline-any cline-neutral">&nbsp;</span>
155
+ <span class="cline-any cline-neutral">&nbsp;</span>
156
+ <span class="cline-any cline-neutral">&nbsp;</span>
157
+ <span class="cline-any cline-neutral">&nbsp;</span>
158
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { z } from "zod";
159
+ &nbsp;
160
+ import type { ProjectConfig } from "../config";
161
+ import { refineWithMessage } from "./zodHelpers";
162
+ &nbsp;
163
+ const targetTagSchema = (projectConfig: ProjectConfig) =&gt;
164
+ refineWithMessage(
165
+ z.string(),
166
+ (value) =&gt; projectConfig.tags.includes(value),
167
+ (value) =&gt; `Unknown tag "${value}"`,
168
+ );
169
+ &nbsp;
170
+ export function getTargetZodSchema(projectConfig: ProjectConfig) {
171
+ const tagSchema = targetTagSchema(projectConfig);
172
+ const featurePatternSchema = z
173
+ .string()
174
+ .min(1)
175
+ .refine((value) =&gt; value.trim() === value, "Feature patterns cannot have surrounding spaces")
176
+ .refine((value) =&gt; !value.includes("**"), 'Use "*" for glob-like wildcard matching');
177
+ const featurePatternsSchema = z.union([z.literal("*"), z.array(featurePatternSchema).min(1)]);
178
+ &nbsp;
179
+ return z
180
+ .object({
181
+ key: z.string().optional(),
182
+ promotable: z.boolean().optional(),
183
+ description: z.string({
184
+ error: (issue) =&gt; (issue.input === undefined ? "Required" : <span class="branch-1 cbranch-no" title="branch not covered" >undefined),</span>
185
+ }),
186
+ tag: tagSchema.optional(),
187
+ tags: z
188
+ .union([
189
+ z.array(tagSchema).min(1),
190
+ z.object({ or: z.array(tagSchema).min(1) }).strict(),
191
+ z.object({ and: z.array(tagSchema).min(1) }).strict(),
192
+ ])
193
+ .optional(),
194
+ includeFeatures: featurePatternsSchema.optional(),
195
+ excludeFeatures: featurePatternsSchema.optional(),
196
+ context: z.record(z.string(), z.unknown()).optional(),
197
+ })
198
+ .strict()
199
+ .refine((target) =&gt; !(target.tag &amp;&amp; target.tags), {
200
+ message: 'Only one of "tag" or "tags" can be defined',
201
+ path: ["tags"],
202
+ });
203
+ }
204
+ &nbsp;</pre></td></tr></table></pre>
205
+
206
+ <div class='push'></div><!-- for sticky footer -->
207
+ </div><!-- /wrapper -->
208
+ <div class='footer quiet pad2 space-top1 center small'>
209
+ Code coverage generated by
210
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
211
+ at 2026-07-12T20:35:50.655Z
212
+ </div>
213
+ <script src="../../prettify.js"></script>
214
+ <script>
215
+ window.onload = function () {
216
+ prettyPrint();
217
+ };
218
+ </script>
219
+ <script src="../../sorter.js"></script>
220
+ <script src="../../block-navigation.js"></script>
221
+ </body>
222
+ </html>
223
+
@@ -3,15 +3,15 @@
3
3
  <html lang="en">
4
4
 
5
5
  <head>
6
- <title>Code coverage report for linter/testSchema.ts</title>
6
+ <title>Code coverage report for src/linter/testSchema.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">linter</a> testSchema.ts</h1>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/linter</a> testSchema.ts</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">82.6% </span>
26
+ <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>19/23</span>
28
+ <span class='fraction'>21/21</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">87.5% </span>
33
+ <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>7/8</span>
35
+ <span class='fraction'>10/10</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">66.66% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>8/12</span>
42
+ <span class='fraction'>9/9</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">86.36% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>19/22</span>
49
+ <span class='fraction'>21/21</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>
@@ -209,19 +209,21 @@
209
209
  <a name='L144'></a><a href='#L144'>144</a>
210
210
  <a name='L145'></a><a href='#L145'>145</a>
211
211
  <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
213
215
  <span class="cline-any cline-neutral">&nbsp;</span>
214
216
  <span class="cline-any cline-neutral">&nbsp;</span>
215
- <span class="cline-any cline-yes">2x</span>
217
+ <span class="cline-any cline-yes">3x</span>
218
+ <span class="cline-any cline-neutral">&nbsp;</span>
219
+ <span class="cline-any cline-yes">54x</span>
216
220
  <span class="cline-any cline-neutral">&nbsp;</span>
217
- <span class="cline-any cline-yes">2x</span>
218
221
  <span class="cline-any cline-neutral">&nbsp;</span>
219
222
  <span class="cline-any cline-neutral">&nbsp;</span>
220
223
  <span class="cline-any cline-neutral">&nbsp;</span>
221
224
  <span class="cline-any cline-neutral">&nbsp;</span>
222
- <span class="cline-any cline-yes">13x</span>
225
+ <span class="cline-any cline-yes">54x</span>
223
226
  <span class="cline-any cline-neutral">&nbsp;</span>
224
- <span class="cline-any cline-yes">13x</span>
225
227
  <span class="cline-any cline-neutral">&nbsp;</span>
226
228
  <span class="cline-any cline-neutral">&nbsp;</span>
227
229
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -233,12 +235,12 @@
233
235
  <span class="cline-any cline-neutral">&nbsp;</span>
234
236
  <span class="cline-any cline-neutral">&nbsp;</span>
235
237
  <span class="cline-any cline-neutral">&nbsp;</span>
238
+ <span class="cline-any cline-yes">54x</span>
236
239
  <span class="cline-any cline-neutral">&nbsp;</span>
237
- <span class="cline-any cline-yes">13x</span>
238
240
  <span class="cline-any cline-neutral">&nbsp;</span>
239
241
  <span class="cline-any cline-neutral">&nbsp;</span>
240
242
  <span class="cline-any cline-neutral">&nbsp;</span>
241
- <span class="cline-any cline-yes">45x</span>
243
+ <span class="cline-any cline-yes">123x</span>
242
244
  <span class="cline-any cline-yes">1x</span>
243
245
  <span class="cline-any cline-neutral">&nbsp;</span>
244
246
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -254,12 +256,13 @@
254
256
  <span class="cline-any cline-neutral">&nbsp;</span>
255
257
  <span class="cline-any cline-neutral">&nbsp;</span>
256
258
  <span class="cline-any cline-neutral">&nbsp;</span>
257
- <span class="cline-any cline-yes">13x</span>
259
+ <span class="cline-any cline-yes">54x</span>
258
260
  <span class="cline-any cline-neutral">&nbsp;</span>
259
261
  <span class="cline-any cline-neutral">&nbsp;</span>
260
262
  <span class="cline-any cline-neutral">&nbsp;</span>
261
- <span class="cline-any cline-yes">102x</span>
262
- <span class="cline-any cline-yes">1x</span>
263
+ <span class="cline-any cline-neutral">&nbsp;</span>
264
+ <span class="cline-any cline-yes">237x</span>
265
+ <span class="cline-any cline-yes">2x</span>
263
266
  <span class="cline-any cline-neutral">&nbsp;</span>
264
267
  <span class="cline-any cline-neutral">&nbsp;</span>
265
268
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -276,17 +279,17 @@
276
279
  <span class="cline-any cline-neutral">&nbsp;</span>
277
280
  <span class="cline-any cline-neutral">&nbsp;</span>
278
281
  <span class="cline-any cline-neutral">&nbsp;</span>
279
- <span class="cline-any cline-yes">549x</span>
282
+ <span class="cline-any cline-yes">1111x</span>
280
283
  <span class="cline-any cline-neutral">&nbsp;</span>
281
- <span class="cline-any cline-yes">5x</span>
284
+ <span class="cline-any cline-yes">9x</span>
282
285
  <span class="cline-any cline-neutral">&nbsp;</span>
283
286
  <span class="cline-any cline-neutral">&nbsp;</span>
284
287
  <span class="cline-any cline-neutral">&nbsp;</span>
285
- <span class="cline-any cline-yes">544x</span>
288
+ <span class="cline-any cline-yes">1102x</span>
286
289
  <span class="cline-any cline-neutral">&nbsp;</span>
287
290
  <span class="cline-any cline-neutral">&nbsp;</span>
288
291
  <span class="cline-any cline-neutral">&nbsp;</span>
289
- <span class="cline-any cline-yes">542x</span>
292
+ <span class="cline-any cline-yes">1100x</span>
290
293
  <span class="cline-any cline-neutral">&nbsp;</span>
291
294
  <span class="cline-any cline-neutral">&nbsp;</span>
292
295
  <span class="cline-any cline-yes">2x</span>
@@ -296,13 +299,14 @@
296
299
  <span class="cline-any cline-neutral">&nbsp;</span>
297
300
  <span class="cline-any cline-neutral">&nbsp;</span>
298
301
  <span class="cline-any cline-neutral">&nbsp;</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
303
+ <span class="cline-any cline-yes">19x</span>
299
304
  <span class="cline-any cline-yes">1x</span>
300
- <span class="cline-any cline-no">&nbsp;</span>
301
305
  <span class="cline-any cline-neutral">&nbsp;</span>
302
306
  <span class="cline-any cline-neutral">&nbsp;</span>
307
+ <span class="cline-any cline-yes">18x</span>
303
308
  <span class="cline-any cline-neutral">&nbsp;</span>
304
- <span class="cline-any cline-no">&nbsp;</span>
305
- <span class="cline-any cline-no">&nbsp;</span>
309
+ <span class="cline-any cline-yes">1x</span>
306
310
  <span class="cline-any cline-neutral">&nbsp;</span>
307
311
  <span class="cline-any cline-neutral">&nbsp;</span>
308
312
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -353,7 +357,7 @@
353
357
  <span class="cline-any cline-neutral">&nbsp;</span>
354
358
  <span class="cline-any cline-neutral">&nbsp;</span>
355
359
  <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-yes">13x</span>
360
+ <span class="cline-any cline-yes">54x</span>
357
361
  <span class="cline-any cline-neutral">&nbsp;</span>
358
362
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { z } from "zod";
359
363
  &nbsp;
@@ -364,9 +368,8 @@ export function getTestsZodSchema(
364
368
  projectConfig: ProjectConfig,
365
369
  availableFeatureKeys: [string, ...string[]],
366
370
  availableSegmentKeys: [string, ...string[]],
371
+ availableTargetKeys: [string, ...string[]],
367
372
  ) {
368
- const scopeNames = projectConfig.scopes ? projectConfig.scopes.map(<span class="fstat-no" title="function not covered" >(s</span>cope) =&gt; <span class="cstat-no" title="statement not covered" >scope.name)</span> : [];
369
- &nbsp;
370
373
  const matrixZodSchema = z.record(
371
374
  z.string(),
372
375
  z.array(
@@ -382,6 +385,7 @@ export function getTestsZodSchema(
382
385
  &nbsp;
383
386
  const segmentTestZodSchema = z
384
387
  .object({
388
+ promotable: z.boolean().optional(),
385
389
  segment: refineWithMessage(
386
390
  z.string(),
387
391
  (value) =&gt; availableSegmentKeys.includes(value),
@@ -402,6 +406,7 @@ export function getTestsZodSchema(
402
406
  &nbsp;
403
407
  const featureTestZodSchema = z
404
408
  .object({
409
+ promotable: z.boolean().optional(),
405
410
  feature: refineWithMessage(
406
411
  z.string(),
407
412
  (value) =&gt; availableFeatureKeys.includes(value),
@@ -439,16 +444,17 @@ export function getTestsZodSchema(
439
444
  },
440
445
  (value) =&gt; `Unknown environment "${value}"`,
441
446
  )
442
- : <span class="branch-1 cbranch-no" title="branch not covered" >z.never().optional(),</span>
443
- tag: refineWithMessage(
447
+ : z.never().optional(),
448
+ target: refineWithMessage(
444
449
  z.string(),
445
- (value) =&gt; projectConfig.tags.includes(value),
446
- <span class="fstat-no" title="function not covered" > (v</span>alue) =&gt; <span class="cstat-no" title="statement not covered" >`Unknown tag "${value}"`,</span>
447
- ).optional(),
448
- scope: refineWithMessage(
449
- z.string(),
450
- <span class="fstat-no" title="function not covered" > (v</span>alue) =&gt; <span class="cstat-no" title="statement not covered" >scopeNames.includes(value),</span>
451
- <span class="fstat-no" title="function not covered" > (v</span>alue) =&gt; <span class="cstat-no" title="statement not covered" >`Unknown scope "${value}"`,</span>
450
+ (value) =&gt; {
451
+ if (value.indexOf("${{") === 0) {
452
+ return true;
453
+ }
454
+ &nbsp;
455
+ return availableTargetKeys.includes(value);
456
+ },
457
+ (value) =&gt; `Unknown target "${value}"`,
452
458
  ).optional(),
453
459
  &nbsp;
454
460
  // parent
@@ -508,16 +514,16 @@ export function getTestsZodSchema(
508
514
  <div class='footer quiet pad2 space-top1 center small'>
509
515
  Code coverage generated by
510
516
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
511
- at 2026-05-19T16:53:22.863Z
517
+ at 2026-07-12T20:35:50.655Z
512
518
  </div>
513
- <script src="../prettify.js"></script>
519
+ <script src="../../prettify.js"></script>
514
520
  <script>
515
521
  window.onload = function () {
516
522
  prettyPrint();
517
523
  };
518
524
  </script>
519
- <script src="../sorter.js"></script>
520
- <script src="../block-navigation.js"></script>
525
+ <script src="../../sorter.js"></script>
526
+ <script src="../../block-navigation.js"></script>
521
527
  </body>
522
528
  </html>
523
529