@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
package/jest.config.js CHANGED
@@ -1,13 +1,22 @@
1
1
  module.exports = {
2
- preset: "ts-jest",
3
2
  bail: true,
4
3
  transform: {
5
- "^.+\\.ts$": [
6
- "ts-jest",
4
+ "^.+\\.[tj]sx?$": [
5
+ "@swc/jest",
7
6
  {
8
- tsconfig: "<rootDir>/tsconfig.cjs.json",
7
+ jsc: { parser: { syntax: "typescript", tsx: true } },
8
+ module: { type: "commonjs" },
9
9
  },
10
10
  ],
11
11
  },
12
12
  testMatch: ["<rootDir>/src/**/*.spec.ts"],
13
+ collectCoverageFrom: ["src/**/*.ts", "!src/**/*.spec.ts"],
14
+ coverageThreshold: {
15
+ global: {
16
+ statements: 58,
17
+ branches: 59,
18
+ functions: 63,
19
+ lines: 59,
20
+ },
21
+ },
13
22
  };
@@ -6,10 +6,10 @@ export interface AssessDistributionOptions {
6
6
  feature: FeatureKey;
7
7
  context: Context;
8
8
  n: number;
9
- schemaVersion?: string;
10
9
  inflate?: number;
11
10
  populateUuid?: AttributeKey[];
12
11
  verbose?: boolean;
12
+ target?: string | string[];
13
13
  }
14
14
  export declare function assessDistribution(deps: Dependencies, options: AssessDistributionOptions): Promise<void>;
15
15
  export declare const assessDistributionPlugin: Plugin;
@@ -4,9 +4,10 @@ exports.assessDistributionPlugin = void 0;
4
4
  exports.assessDistribution = assessDistribution;
5
5
  const crypto_1 = require("crypto");
6
6
  const sdk_1 = require("@featurevisor/sdk");
7
- const builder_1 = require("../builder");
8
- const config_1 = require("../config");
7
+ const buildRuntimeDatafiles_1 = require("../builder/buildRuntimeDatafiles");
9
8
  const utils_1 = require("../utils");
9
+ const sets_1 = require("../sets");
10
+ const cliFormat_1 = require("../tester/cliFormat");
10
11
  const UUID_LENGTHS = [4, 2, 2, 2, 6];
11
12
  function generateUUID() {
12
13
  return UUID_LENGTHS.map((len) => (0, crypto_1.randomBytes)(len).toString("hex")).join("-");
@@ -28,7 +29,7 @@ function printCounts(evaluations, n, sort = true) {
28
29
  const highestCount = Object.values(evaluations).reduce((acc, curr) => (curr > acc ? curr : acc), 0);
29
30
  const prettyHighestCountLength = (0, utils_1.prettyNumber)(highestCount).length;
30
31
  for (const [value, count] of entries) {
31
- console.log(` - ${value}:`.padEnd(longestValueLength + 5, " "), `\t${(0, utils_1.prettyNumber)(count).padStart(prettyHighestCountLength, " ")}`, `\t${(0, utils_1.prettyPercentage)(count, n).padStart(7, " ")}`);
32
+ console.log(` ${(0, cliFormat_1.colorize)("•", cliFormat_1.CLI_COLOR_CYAN)} ${value}:`.padEnd(longestValueLength + 14, " "), `\t${(0, utils_1.prettyNumber)(count).padStart(prettyHighestCountLength, " ")}`, `\t${(0, utils_1.prettyPercentage)(count, n).padStart(7, " ")}`);
32
33
  }
33
34
  }
34
35
  function createContext(providedContext, populateUuid) {
@@ -40,31 +41,23 @@ function createContext(providedContext, populateUuid) {
40
41
  }
41
42
  return context;
42
43
  }
43
- async function assessDistribution(deps, options) {
44
- const { projectConfig, datasource } = deps;
45
- console.log(`\nAssessing distribution for feature: "${options.feature}"...`);
46
- /**
47
- * Prepare datafile
48
- */
49
- const datafileBuildStart = Date.now();
50
- console.log(`\n\nBuilding datafile containing all features for "${options.environment}"...`);
51
- const existingState = await datasource.readState(options.environment || false);
52
- const datafileContent = await (0, builder_1.buildDatafile)(projectConfig, datasource, {
53
- schemaVersion: options.schemaVersion || config_1.SCHEMA_VERSION,
54
- revision: "include-all-features",
55
- environment: options.environment || false,
56
- inflate: options.inflate,
57
- }, existingState);
58
- const datafileBuildDuration = Date.now() - datafileBuildStart;
59
- console.log(`Datafile build duration: ${datafileBuildDuration}ms`);
44
+ async function assessDistributionWithDatafile(datafileContent, options, target) {
45
+ console.log("");
46
+ console.log(cliFormat_1.CLI_FORMAT_BOLD, "Assess Featurevisor distribution");
47
+ console.log(` ${(0, cliFormat_1.colorize)("Feature", cliFormat_1.CLI_COLOR_CYAN)}: ${options.feature}`);
48
+ console.log(` ${(0, cliFormat_1.colorize)("Environment", cliFormat_1.CLI_COLOR_CYAN)}: ${options.environment || false}`);
49
+ if (target)
50
+ console.log(` ${(0, cliFormat_1.colorize)("Target", cliFormat_1.CLI_COLOR_CYAN)}: ${target}`);
51
+ console.log(` ${(0, cliFormat_1.colorize)("Iterations", cliFormat_1.CLI_COLOR_CYAN)}: ${(0, utils_1.prettyNumber)(options.n)}`);
60
52
  /**
61
53
  * Initialize SDK
62
54
  */
63
- const f = (0, sdk_1.createInstance)({
55
+ const f = (0, sdk_1.createFeaturevisor)({
64
56
  datafile: datafileContent,
65
57
  logLevel: "warn",
66
58
  });
67
- console.log("\n\n...SDK initialized\n");
59
+ console.log("");
60
+ console.log(cliFormat_1.CLI_FORMAT_GREEN, "SDK initialized");
68
61
  /**
69
62
  * Evaluations
70
63
  */
@@ -78,7 +71,8 @@ async function assessDistribution(deps, options) {
78
71
  disabled: 0,
79
72
  };
80
73
  const variationEvaluations = {};
81
- console.log(`\nEvaluating ${(0, utils_1.prettyNumber)(options.n)} times...`);
74
+ console.log("");
75
+ console.log(`Evaluating ${(0, utils_1.prettyNumber)(options.n)} times...`);
82
76
  for (let i = 0; i < options.n; i++) {
83
77
  const context = createContext(options.context, options.populateUuid);
84
78
  if (options.verbose) {
@@ -104,31 +98,56 @@ async function assessDistribution(deps, options) {
104
98
  /**
105
99
  * Print results
106
100
  */
107
- console.log("\n\nFlag evaluations:\n");
101
+ console.log("");
102
+ console.log(cliFormat_1.CLI_FORMAT_BOLD, "Flag evaluations");
103
+ console.log("");
108
104
  printCounts(flagEvaluations, options.n);
109
105
  if (hasVariations) {
110
- console.log("\n\nVariation evaluations:\n");
106
+ console.log("");
107
+ console.log(cliFormat_1.CLI_FORMAT_BOLD, "Variation evaluations");
108
+ console.log("");
111
109
  printCounts(variationEvaluations, options.n);
112
110
  }
113
111
  }
112
+ async function assessDistribution(deps, options) {
113
+ const datafileBuildStart = Date.now();
114
+ const datafiles = await (0, buildRuntimeDatafiles_1.buildRuntimeDatafiles)(deps, {
115
+ environment: options.environment || false,
116
+ target: options.target,
117
+ revision: "include-all-features",
118
+ inflate: options.inflate,
119
+ });
120
+ const datafileBuildDuration = Date.now() - datafileBuildStart;
121
+ console.log("");
122
+ console.log(`Building ${datafiles.length} datafile${datafiles.length === 1 ? "" : "s"}...`);
123
+ console.log(` ${(0, cliFormat_1.colorize)("Build duration", cliFormat_1.CLI_COLOR_CYAN)}: ${datafileBuildDuration}ms`);
124
+ for (const entry of datafiles) {
125
+ await assessDistributionWithDatafile(entry.datafile, options, entry.target);
126
+ }
127
+ }
114
128
  exports.assessDistributionPlugin = {
115
129
  command: "assess-distribution",
116
130
  handler: async ({ rootDirectoryPath, projectConfig, datasource, parsed }) => {
117
- await assessDistribution({
118
- rootDirectoryPath,
119
- projectConfig,
120
- datasource,
121
- options: parsed,
122
- }, {
123
- environment: parsed.environment,
124
- feature: parsed.feature,
125
- n: parseInt(parsed.n, 10) || 1,
126
- context: parsed.context ? JSON.parse(parsed.context) : {},
127
- populateUuid: Array.isArray(parsed.populateUuid)
128
- ? parsed.populateUuid
129
- : [parsed.populateUuid].filter(Boolean),
130
- verbose: parsed.verbose,
131
- });
131
+ const executions = await (0, sets_1.getProjectSetExecutions)(projectConfig, datasource, parsed.set);
132
+ for (const execution of executions) {
133
+ (0, sets_1.printSetHeader)(projectConfig, execution.set);
134
+ await assessDistribution({
135
+ rootDirectoryPath,
136
+ projectConfig: execution.projectConfig,
137
+ datasource: execution.datasource,
138
+ options: parsed,
139
+ }, {
140
+ environment: parsed.environment,
141
+ feature: parsed.feature,
142
+ n: parseInt(parsed.n, 10) || 1,
143
+ context: parsed.context ? JSON.parse(parsed.context) : {},
144
+ populateUuid: Array.isArray(parsed.populateUuid)
145
+ ? parsed.populateUuid
146
+ : [parsed.populateUuid].filter(Boolean),
147
+ verbose: parsed.verbose,
148
+ target: parsed.target,
149
+ });
150
+ }
132
151
  },
133
152
  examples: [
134
153
  {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assess-distribution/index.ts"],"names":[],"mappings":";;;AAgFA,gDA2FC;AA3KD,mCAAqC;AAGrC,2CAAmD;AAGnD,wCAA2C;AAC3C,sCAA2C;AAC3C,oCAA0D;AAG1D,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAErC,SAAS,YAAY;IACnB,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,oBAAW,EAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/E,CAAC;AAID,SAAS,WAAW,CAAC,WAA6B,EAAE,CAAS,EAAE,IAAI,GAAG,IAAI;IACxE,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1C,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9B,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChB,OAAO,CAAC,CAAC,CAAC;YACZ,CAAC;YAED,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChB,OAAO,CAAC,CAAC;YACX,CAAC;YAED,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CACxD,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EACtD,CAAC,CACF,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CACpD,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EACxC,CAAC,CACF,CAAC;IACF,MAAM,wBAAwB,GAAG,IAAA,oBAAY,EAAC,YAAY,CAAC,CAAC,MAAM,CAAC;IAEnE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,GAAG,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,EAAE,GAAG,CAAC,EACnD,KAAK,IAAA,oBAAY,EAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wBAAwB,EAAE,GAAG,CAAC,EAAE,EAClE,KAAK,IAAA,wBAAgB,EAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACnD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,eAAwB,EAAE,YAA6B;IAC5E,MAAM,OAAO,GAAG,EAAE,GAAG,eAAe,EAAE,CAAC;IAEvC,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAcM,KAAK,UAAU,kBAAkB,CAAC,IAAkB,EAAE,OAAkC;IAC7F,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,0CAA0C,OAAO,CAAC,OAAO,MAAM,CAAC,CAAC;IAE7E;;OAEG;IACH,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,sDAAsD,OAAO,CAAC,WAAW,MAAM,CAAC,CAAC;IAC7F,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC;IAC/E,MAAM,eAAe,GAAG,MAAM,IAAA,uBAAa,EACzC,aAAa,EACb,UAAU,EACV;QACE,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,uBAAc;QACtD,QAAQ,EAAE,sBAAsB;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;QACzC,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,EACD,aAAa,CACd,CAAC;IACF,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,4BAA4B,qBAAqB,IAAI,CAAC,CAAC;IAEnE;;OAEG;IACH,MAAM,CAAC,GAAG,IAAA,oBAAc,EAAC;QACvB,QAAQ,EAAE,eAAkC;QAC5C,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExC;;OAEG;IACH,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QAClC,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,MAAM,eAAe,GAAqB;QACxC,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,CAAC;KACZ,CAAC;IAEF,MAAM,oBAAoB,GAAqB,EAAE,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAA,oBAAY,EAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACrE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,iCAAiC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChG,CAAC;QAED,OAAO;QACP,MAAM,cAAc,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE7D,IAAI,cAAc,EAAE,CAAC;YACnB,eAAe,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC;QAED,YAAY;QACZ,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,mBAAmB,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAW,CAAC;YAE/E,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC/C,oBAAoB,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAChD,CAAC;YAED,oBAAoB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IAEH,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,WAAW,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAExC,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,WAAW,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAEY,QAAA,wBAAwB,GAAW;IAC9C,OAAO,EAAE,qBAAqB;IAC9B,OAAO,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1E,MAAM,kBAAkB,CACtB;YACE,iBAAiB;YACjB,aAAa;YACb,UAAU;YACV,OAAO,EAAE,MAAM;SAChB,EACD;YACE,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;YAC9B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;YACzD,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC9C,CAAC,CAAC,MAAM,CAAC,YAAY;gBACrB,CAAC,CAAC,CAAC,MAAM,CAAC,YAAsB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACnD,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CACF,CAAC;IACJ,CAAC;IACD,QAAQ,EAAE;QACR;YACE,OAAO,EACL,+GAA+G;YACjH,WAAW,EAAE,8DAA8D;SAC5E;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assess-distribution/index.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,16 @@
1
- import { FeaturevisorInstance } from "@featurevisor/sdk";
1
+ import type { Featurevisor } from "@featurevisor/sdk";
2
2
  import { Dependencies } from "../dependencies";
3
3
  import { Plugin } from "../cli";
4
4
  export interface BenchmarkOutput {
5
5
  value: any;
6
6
  duration: number;
7
+ minDuration: number;
8
+ averageDuration: number;
9
+ maxDuration: number;
7
10
  }
8
- export declare function benchmarkFeatureFlag(f: FeaturevisorInstance, featureKey: string, context: Record<string, unknown>, n: number): BenchmarkOutput;
9
- export declare function benchmarkFeatureVariation(f: FeaturevisorInstance, featureKey: string, context: Record<string, unknown>, n: number): BenchmarkOutput;
10
- export declare function benchmarkFeatureVariable(f: FeaturevisorInstance, featureKey: string, variableKey: string, context: Record<string, unknown>, n: number): BenchmarkOutput;
11
+ export declare function benchmarkFeatureFlag(f: Featurevisor, featureKey: string, context: Record<string, unknown>, n: number): BenchmarkOutput;
12
+ export declare function benchmarkFeatureVariation(f: Featurevisor, featureKey: string, context: Record<string, unknown>, n: number): BenchmarkOutput;
13
+ export declare function benchmarkFeatureVariable(f: Featurevisor, featureKey: string, variableKey: string, context: Record<string, unknown>, n: number): BenchmarkOutput;
11
14
  export interface BenchmarkOptions {
12
15
  environment?: string;
13
16
  feature: string;
@@ -15,8 +18,8 @@ export interface BenchmarkOptions {
15
18
  context: Record<string, unknown>;
16
19
  variation?: boolean;
17
20
  variable?: string;
18
- schemaVersion?: string;
19
21
  inflate?: number;
22
+ target?: string | string[];
20
23
  }
21
24
  export declare function benchmarkFeature(deps: Dependencies, options: BenchmarkOptions): Promise<void>;
22
25
  export declare const benchmarkPlugin: Plugin;
@@ -6,75 +6,70 @@ exports.benchmarkFeatureVariation = benchmarkFeatureVariation;
6
6
  exports.benchmarkFeatureVariable = benchmarkFeatureVariable;
7
7
  exports.benchmarkFeature = benchmarkFeature;
8
8
  const sdk_1 = require("@featurevisor/sdk");
9
- const config_1 = require("../config");
10
- const builder_1 = require("../builder");
9
+ const buildRuntimeDatafiles_1 = require("../builder/buildRuntimeDatafiles");
11
10
  const prettyDuration_1 = require("../tester/prettyDuration");
12
- function benchmarkFeatureFlag(f, featureKey, context, n) {
13
- const start = Date.now();
11
+ const sets_1 = require("../sets");
12
+ const cliFormat_1 = require("../tester/cliFormat");
13
+ function benchmarkEvaluation(n, evaluate) {
14
14
  let value;
15
+ let totalDurationNs = 0n;
16
+ let minDurationNs;
17
+ let maxDurationNs = 0n;
15
18
  for (let i = 0; i < n; i++) {
16
- value = f.isEnabled(featureKey, context);
19
+ const start = process.hrtime.bigint();
20
+ value = evaluate();
21
+ const durationNs = process.hrtime.bigint() - start;
22
+ totalDurationNs += durationNs;
23
+ if (typeof minDurationNs === "undefined" || durationNs < minDurationNs) {
24
+ minDurationNs = durationNs;
25
+ }
26
+ if (durationNs > maxDurationNs) {
27
+ maxDurationNs = durationNs;
28
+ }
17
29
  }
18
- const duration = Date.now() - start;
30
+ const duration = Number(totalDurationNs) / 1000000;
19
31
  return {
20
32
  value,
21
33
  duration,
34
+ minDuration: Number(minDurationNs || 0n) / 1000000,
35
+ averageDuration: duration / n,
36
+ maxDuration: Number(maxDurationNs) / 1000000,
22
37
  };
23
38
  }
39
+ function formatDurationMs(duration) {
40
+ return `${duration.toFixed(6)}ms`;
41
+ }
42
+ function benchmarkFeatureFlag(f, featureKey, context, n) {
43
+ return benchmarkEvaluation(n, () => f.isEnabled(featureKey, context));
44
+ }
24
45
  function benchmarkFeatureVariation(f, featureKey, context, n) {
25
- const start = Date.now();
26
- let value;
27
- for (let i = 0; i < n; i++) {
28
- value = f.getVariation(featureKey, context);
29
- }
30
- const duration = Date.now() - start;
31
- return {
32
- value,
33
- duration,
34
- };
46
+ return benchmarkEvaluation(n, () => f.getVariation(featureKey, context));
35
47
  }
36
48
  function benchmarkFeatureVariable(f, featureKey, variableKey, context, n) {
37
- const start = Date.now();
38
- let value;
39
- for (let i = 0; i < n; i++) {
40
- value = f.getVariable(featureKey, variableKey, context);
41
- }
42
- const duration = Date.now() - start;
43
- return {
44
- value,
45
- duration,
46
- };
49
+ return benchmarkEvaluation(n, () => f.getVariable(featureKey, variableKey, context));
47
50
  }
48
- async function benchmarkFeature(deps, options) {
49
- const { datasource, projectConfig } = deps;
50
- console.log("");
51
- console.log(`Running benchmark for feature "${options.feature}"...`);
51
+ async function benchmarkFeatureWithDatafile(datafileContent, options, target) {
52
52
  console.log("");
53
- console.log(`Building datafile containing all features for "${options.environment}"...`);
54
- const datafileBuildStart = Date.now();
55
- const existingState = await datasource.readState(options.environment || false);
56
- const datafileContent = await (0, builder_1.buildDatafile)(projectConfig, datasource, {
57
- schemaVersion: options.schemaVersion || config_1.SCHEMA_VERSION,
58
- revision: "include-all-features",
59
- environment: options.environment || false,
60
- inflate: options.inflate,
61
- }, existingState);
62
- const datafileBuildDuration = Date.now() - datafileBuildStart;
63
- console.log(`Datafile build duration: ${datafileBuildDuration}ms`);
64
- console.log(`Datafile size: ${(JSON.stringify(datafileContent).length / 1024).toFixed(2)} kB`);
53
+ console.log(cliFormat_1.CLI_FORMAT_BOLD, "Benchmark Featurevisor feature");
54
+ console.log(` ${(0, cliFormat_1.colorize)("Feature", cliFormat_1.CLI_COLOR_CYAN)}: ${options.feature}`);
55
+ console.log(` ${(0, cliFormat_1.colorize)("Environment", cliFormat_1.CLI_COLOR_CYAN)}: ${options.environment || false}`);
56
+ if (target)
57
+ console.log(` ${(0, cliFormat_1.colorize)("Target", cliFormat_1.CLI_COLOR_CYAN)}: ${target}`);
58
+ console.log(` ${(0, cliFormat_1.colorize)("Iterations", cliFormat_1.CLI_COLOR_CYAN)}: ${options.n}`);
59
+ console.log(` ${(0, cliFormat_1.colorize)("Datafile size", cliFormat_1.CLI_COLOR_CYAN)}: ${(JSON.stringify(datafileContent).length / 1024).toFixed(2)} kB`);
65
60
  if (options.inflate) {
66
61
  console.log("");
67
- console.log("Features count:", Object.keys(datafileContent.features).length);
68
- console.log("Segments count:", Object.keys(datafileContent.segments).length);
62
+ console.log(` ${(0, cliFormat_1.colorize)("Features count", cliFormat_1.CLI_COLOR_CYAN)}: ${Object.keys(datafileContent.features).length}`);
63
+ console.log(` ${(0, cliFormat_1.colorize)("Segments count", cliFormat_1.CLI_COLOR_CYAN)}: ${Object.keys(datafileContent.segments).length}`);
69
64
  }
70
65
  console.log("");
71
- const f = (0, sdk_1.createInstance)({
66
+ const f = (0, sdk_1.createFeaturevisor)({
72
67
  datafile: datafileContent,
73
68
  logLevel: "warn",
74
69
  });
75
- console.log("...SDK initialized");
70
+ console.log(cliFormat_1.CLI_FORMAT_GREEN, "SDK initialized");
76
71
  console.log("");
77
- console.log(`Against context: ${JSON.stringify(options.context)}`);
72
+ console.log(` ${(0, cliFormat_1.colorize)("Context", cliFormat_1.CLI_COLOR_CYAN)}: ${JSON.stringify(options.context)}`);
78
73
  let output;
79
74
  if (options.variable) {
80
75
  // variable
@@ -92,28 +87,50 @@ async function benchmarkFeature(deps, options) {
92
87
  output = benchmarkFeatureFlag(f, options.feature, options.context, options.n);
93
88
  }
94
89
  console.log("");
95
- console.log(`Evaluated value : ${JSON.stringify(output.value)}`);
96
- console.log(`Total duration : ${(0, prettyDuration_1.prettyDuration)(output.duration)}`);
97
- console.log(`Average duration: ${(0, prettyDuration_1.prettyDuration)(output.duration / options.n)}`);
90
+ console.log(` ${(0, cliFormat_1.colorize)("Evaluated value", cliFormat_1.CLI_COLOR_CYAN)}: ${JSON.stringify(output.value)}`);
91
+ console.log(` ${(0, cliFormat_1.colorize)("Total duration", cliFormat_1.CLI_COLOR_CYAN)}: ${(0, prettyDuration_1.prettyDuration)(output.duration)}`);
92
+ console.log(` ${(0, cliFormat_1.colorize)("Minimum duration", cliFormat_1.CLI_COLOR_CYAN)}: ${formatDurationMs(output.minDuration)}`);
93
+ console.log(` ${(0, cliFormat_1.colorize)("Average duration", cliFormat_1.CLI_COLOR_CYAN)}: ${formatDurationMs(output.averageDuration)}`);
94
+ console.log(` ${(0, cliFormat_1.colorize)("Maximum duration", cliFormat_1.CLI_COLOR_CYAN)}: ${formatDurationMs(output.maxDuration)}`);
95
+ }
96
+ async function benchmarkFeature(deps, options) {
97
+ const datafileBuildStart = Date.now();
98
+ const datafiles = await (0, buildRuntimeDatafiles_1.buildRuntimeDatafiles)(deps, {
99
+ environment: options.environment || false,
100
+ target: options.target,
101
+ revision: "include-all-features",
102
+ inflate: options.inflate,
103
+ });
104
+ const datafileBuildDuration = Date.now() - datafileBuildStart;
105
+ console.log("");
106
+ console.log(`Building ${datafiles.length} datafile${datafiles.length === 1 ? "" : "s"}...`);
107
+ console.log(` ${(0, cliFormat_1.colorize)("Build duration", cliFormat_1.CLI_COLOR_CYAN)}: ${datafileBuildDuration}ms`);
108
+ for (const entry of datafiles) {
109
+ await benchmarkFeatureWithDatafile(entry.datafile, options, entry.target);
110
+ }
98
111
  }
99
112
  exports.benchmarkPlugin = {
100
113
  command: "benchmark",
101
114
  handler: async ({ rootDirectoryPath, projectConfig, datasource, parsed }) => {
102
- await benchmarkFeature({
103
- rootDirectoryPath,
104
- projectConfig,
105
- datasource,
106
- options: parsed,
107
- }, {
108
- environment: parsed.environment,
109
- feature: parsed.feature,
110
- n: parseInt(parsed.n, 10) || 1,
111
- context: parsed.context ? JSON.parse(parsed.context) : {},
112
- variation: parsed.variation || undefined,
113
- variable: parsed.variable || undefined,
114
- schemaVersion: parsed.schemaVersion || undefined,
115
- inflate: parseInt(parsed.inflate, 10) || undefined,
116
- });
115
+ const executions = await (0, sets_1.getProjectSetExecutions)(projectConfig, datasource, parsed.set);
116
+ for (const execution of executions) {
117
+ (0, sets_1.printSetHeader)(projectConfig, execution.set);
118
+ await benchmarkFeature({
119
+ rootDirectoryPath,
120
+ projectConfig: execution.projectConfig,
121
+ datasource: execution.datasource,
122
+ options: parsed,
123
+ }, {
124
+ environment: parsed.environment,
125
+ feature: parsed.feature,
126
+ n: parseInt(parsed.n, 10) || 1,
127
+ context: parsed.context ? JSON.parse(parsed.context) : {},
128
+ variation: parsed.variation || undefined,
129
+ variable: parsed.variable || undefined,
130
+ inflate: parseInt(parsed.inflate, 10) || undefined,
131
+ target: parsed.target,
132
+ });
133
+ }
117
134
  },
118
135
  examples: [
119
136
  {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/benchmark/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/benchmark/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Condition, Context } from "@featurevisor/types";
2
+ import type { Featurevisor } from "@featurevisor/sdk";
3
+ export declare function applyContextToConditions(featurevisor: Featurevisor, conditions: Condition | Condition[], context: Context): Condition | Condition[];
4
+ export declare function removeRedundantConditions(conditions: Condition | Condition[]): Condition | Condition[];
5
+ export declare function applyContextToCondition(featurevisor: Featurevisor, condition: Condition | Condition[], context: Context): Condition | Condition[];
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildScopedConditions = buildScopedConditions;
3
+ exports.applyContextToConditions = applyContextToConditions;
4
4
  exports.removeRedundantConditions = removeRedundantConditions;
5
- exports.buildScopedCondition = buildScopedCondition;
6
- function buildScopedConditions(datafileReader, conditions, context) {
7
- const scoped = buildScopedCondition(datafileReader, conditions, context);
8
- const removed = removeRedundantConditions(scoped);
5
+ exports.applyContextToCondition = applyContextToCondition;
6
+ const sdk_1 = require("@featurevisor/sdk");
7
+ function applyContextToConditions(featurevisor, conditions, context) {
8
+ const withContextApplied = applyContextToCondition(featurevisor, conditions, context);
9
+ const removed = removeRedundantConditions(withContextApplied);
9
10
  return removed;
10
11
  }
11
12
  function removeRedundantConditions(conditions) {
@@ -49,9 +50,13 @@ function removeRedundantConditions(conditions) {
49
50
  if ("not" in conditions) {
50
51
  const processed = conditions.not.map((c) => removeRedundantConditions(c));
51
52
  const filtered = processed.filter((c) => c !== "*");
52
- // If all were "*", return "*"
53
+ // `not` negates the implicit AND of its children. Matched children are true
54
+ // and can be removed: not(true && X) becomes not(X). If every child was
55
+ // true, keep not("*") so it remains an always-false expression.
53
56
  if (filtered.length === 0) {
54
- return "*";
57
+ return {
58
+ not: ["*"],
59
+ };
55
60
  }
56
61
  return {
57
62
  not: filtered,
@@ -60,17 +65,17 @@ function removeRedundantConditions(conditions) {
60
65
  }
61
66
  return conditions;
62
67
  }
63
- function buildScopedCondition(datafileReader, condition, context) {
68
+ function applyContextToCondition(featurevisor, condition, context) {
64
69
  if (condition === "*") {
65
70
  return condition;
66
71
  }
67
72
  if (Array.isArray(condition)) {
68
- return condition.map((c) => buildScopedCondition(datafileReader, c, context));
73
+ return condition.map((c) => applyContextToCondition(featurevisor, c, context));
69
74
  }
70
75
  if (typeof condition === "object") {
71
76
  // plain condition
72
77
  if ("attribute" in condition) {
73
- const matched = datafileReader.allConditionsAreMatched(condition, context);
78
+ const matched = (0, sdk_1.allConditionsAreMatched)(condition, context);
74
79
  if (matched) {
75
80
  return "*";
76
81
  }
@@ -78,20 +83,20 @@ function buildScopedCondition(datafileReader, condition, context) {
78
83
  // AND, OR, NOT conditions
79
84
  if ("and" in condition) {
80
85
  return {
81
- and: condition.and.map((c) => buildScopedCondition(datafileReader, c, context)),
86
+ and: condition.and.map((c) => applyContextToCondition(featurevisor, c, context)),
82
87
  };
83
88
  }
84
89
  if ("or" in condition) {
85
90
  return {
86
- or: condition.or.map((c) => buildScopedCondition(datafileReader, c, context)),
91
+ or: condition.or.map((c) => applyContextToCondition(featurevisor, c, context)),
87
92
  };
88
93
  }
89
94
  if ("not" in condition) {
90
95
  return {
91
- not: condition.not.map((c) => buildScopedCondition(datafileReader, c, context)),
96
+ not: condition.not.map((c) => applyContextToCondition(featurevisor, c, context)),
92
97
  };
93
98
  }
94
99
  }
95
100
  return condition;
96
101
  }
97
- //# sourceMappingURL=buildScopedConditions.js.map
102
+ //# sourceMappingURL=applyContextToConditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyContextToConditions.js","sourceRoot":"","sources":["../../src/builder/applyContextToConditions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { DatafileContent, Context } from "@featurevisor/types";
2
+ export declare function applyContextToDatafile(originalDatafileContent: DatafileContent, context: Context): DatafileContent;