modestbench 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +162 -57
  3. package/dist/bootstrap.cjs +10 -10
  4. package/dist/bootstrap.cjs.map +1 -1
  5. package/dist/bootstrap.d.cts.map +1 -1
  6. package/dist/bootstrap.d.ts.map +1 -1
  7. package/dist/bootstrap.js +5 -5
  8. package/dist/bootstrap.js.map +1 -1
  9. package/dist/cli/commands/analyze.cjs +60 -0
  10. package/dist/cli/commands/analyze.cjs.map +1 -0
  11. package/dist/cli/commands/analyze.d.cts +35 -0
  12. package/dist/cli/commands/analyze.d.cts.map +1 -0
  13. package/dist/cli/commands/analyze.d.ts +35 -0
  14. package/dist/cli/commands/analyze.d.ts.map +1 -0
  15. package/dist/cli/commands/analyze.js +56 -0
  16. package/dist/cli/commands/analyze.js.map +1 -0
  17. package/dist/cli/commands/baseline.cjs +404 -0
  18. package/dist/cli/commands/baseline.cjs.map +1 -0
  19. package/dist/cli/commands/baseline.d.cts +72 -0
  20. package/dist/cli/commands/baseline.d.cts.map +1 -0
  21. package/dist/cli/commands/baseline.d.ts +72 -0
  22. package/dist/cli/commands/baseline.d.ts.map +1 -0
  23. package/dist/cli/commands/baseline.js +396 -0
  24. package/dist/cli/commands/baseline.js.map +1 -0
  25. package/dist/cli/commands/history.cjs +108 -266
  26. package/dist/cli/commands/history.cjs.map +1 -1
  27. package/dist/cli/commands/history.d.cts +75 -12
  28. package/dist/cli/commands/history.d.cts.map +1 -1
  29. package/dist/cli/commands/history.d.ts +75 -12
  30. package/dist/cli/commands/history.d.ts.map +1 -1
  31. package/dist/cli/commands/history.js +105 -268
  32. package/dist/cli/commands/history.js.map +1 -1
  33. package/dist/cli/commands/init.cjs +88 -155
  34. package/dist/cli/commands/init.cjs.map +1 -1
  35. package/dist/cli/commands/init.d.cts +4 -4
  36. package/dist/cli/commands/init.d.cts.map +1 -1
  37. package/dist/cli/commands/init.d.ts +4 -4
  38. package/dist/cli/commands/init.d.ts.map +1 -1
  39. package/dist/cli/commands/init.js +88 -155
  40. package/dist/cli/commands/init.js.map +1 -1
  41. package/dist/cli/commands/run.cjs +143 -112
  42. package/dist/cli/commands/run.cjs.map +1 -1
  43. package/dist/cli/commands/run.d.cts +17 -3
  44. package/dist/cli/commands/run.d.cts.map +1 -1
  45. package/dist/cli/commands/run.d.ts +17 -3
  46. package/dist/cli/commands/run.d.ts.map +1 -1
  47. package/dist/cli/commands/run.js +142 -78
  48. package/dist/cli/commands/run.js.map +1 -1
  49. package/dist/cli/index.cjs +671 -266
  50. package/dist/cli/index.cjs.map +1 -1
  51. package/dist/cli/index.d.cts +4 -16
  52. package/dist/cli/index.d.cts.map +1 -1
  53. package/dist/cli/index.d.ts +4 -16
  54. package/dist/cli/index.d.ts.map +1 -1
  55. package/dist/cli/index.js +664 -259
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/config/budget-schema.cjs +172 -0
  58. package/dist/config/budget-schema.cjs.map +1 -0
  59. package/dist/config/budget-schema.d.cts +59 -0
  60. package/dist/config/budget-schema.d.cts.map +1 -0
  61. package/dist/config/budget-schema.d.ts +59 -0
  62. package/dist/config/budget-schema.d.ts.map +1 -0
  63. package/dist/config/budget-schema.js +166 -0
  64. package/dist/config/budget-schema.js.map +1 -0
  65. package/dist/config/schema.cjs +182 -2
  66. package/dist/config/schema.cjs.map +1 -1
  67. package/dist/config/schema.d.cts +122 -3
  68. package/dist/config/schema.d.cts.map +1 -1
  69. package/dist/config/schema.d.ts +122 -3
  70. package/dist/config/schema.d.ts.map +1 -1
  71. package/dist/config/schema.js +180 -1
  72. package/dist/config/schema.js.map +1 -1
  73. package/dist/constants.cjs +45 -2
  74. package/dist/constants.cjs.map +1 -1
  75. package/dist/constants.d.cts +41 -0
  76. package/dist/constants.d.cts.map +1 -1
  77. package/dist/constants.d.ts +41 -0
  78. package/dist/constants.d.ts.map +1 -1
  79. package/dist/constants.js +44 -1
  80. package/dist/constants.js.map +1 -1
  81. package/dist/core/engine.cjs +104 -15
  82. package/dist/core/engine.cjs.map +1 -1
  83. package/dist/core/engine.d.cts +7 -4
  84. package/dist/core/engine.d.cts.map +1 -1
  85. package/dist/core/engine.d.ts +7 -4
  86. package/dist/core/engine.d.ts.map +1 -1
  87. package/dist/core/engine.js +105 -16
  88. package/dist/core/engine.js.map +1 -1
  89. package/dist/core/output-path-resolver.cjs +41 -0
  90. package/dist/core/output-path-resolver.cjs.map +1 -0
  91. package/dist/core/output-path-resolver.d.cts +10 -0
  92. package/dist/core/output-path-resolver.d.cts.map +1 -0
  93. package/dist/core/output-path-resolver.d.ts +10 -0
  94. package/dist/core/output-path-resolver.d.ts.map +1 -0
  95. package/dist/core/output-path-resolver.js +37 -0
  96. package/dist/core/output-path-resolver.js.map +1 -0
  97. package/dist/errors/base.cjs +12 -3
  98. package/dist/errors/base.cjs.map +1 -1
  99. package/dist/errors/base.d.cts +7 -0
  100. package/dist/errors/base.d.cts.map +1 -1
  101. package/dist/errors/base.d.ts +7 -0
  102. package/dist/errors/base.d.ts.map +1 -1
  103. package/dist/errors/base.js +10 -2
  104. package/dist/errors/base.js.map +1 -1
  105. package/dist/errors/budget.cjs +37 -0
  106. package/dist/errors/budget.cjs.map +1 -0
  107. package/dist/errors/budget.d.cts +31 -0
  108. package/dist/errors/budget.d.cts.map +1 -0
  109. package/dist/errors/budget.d.ts +31 -0
  110. package/dist/errors/budget.d.ts.map +1 -0
  111. package/dist/errors/budget.js +33 -0
  112. package/dist/errors/budget.js.map +1 -0
  113. package/dist/errors/index.cjs +4 -1
  114. package/dist/errors/index.cjs.map +1 -1
  115. package/dist/errors/index.d.cts +1 -0
  116. package/dist/errors/index.d.cts.map +1 -1
  117. package/dist/errors/index.d.ts +1 -0
  118. package/dist/errors/index.d.ts.map +1 -1
  119. package/dist/errors/index.js +2 -0
  120. package/dist/errors/index.js.map +1 -1
  121. package/dist/formatters/history/base.cjs +9 -0
  122. package/dist/formatters/history/base.cjs.map +1 -0
  123. package/dist/formatters/history/base.d.cts +26 -0
  124. package/dist/formatters/history/base.d.cts.map +1 -0
  125. package/dist/formatters/history/base.d.ts +26 -0
  126. package/dist/formatters/history/base.d.ts.map +1 -0
  127. package/dist/formatters/history/base.js +8 -0
  128. package/dist/formatters/history/base.js.map +1 -0
  129. package/dist/formatters/history/compare.cjs +127 -0
  130. package/dist/formatters/history/compare.cjs.map +1 -0
  131. package/dist/formatters/history/compare.d.cts +21 -0
  132. package/dist/formatters/history/compare.d.cts.map +1 -0
  133. package/dist/formatters/history/compare.d.ts +21 -0
  134. package/dist/formatters/history/compare.d.ts.map +1 -0
  135. package/dist/formatters/history/compare.js +123 -0
  136. package/dist/formatters/history/compare.js.map +1 -0
  137. package/dist/formatters/history/list.cjs +74 -0
  138. package/dist/formatters/history/list.cjs.map +1 -0
  139. package/dist/formatters/history/list.d.cts +25 -0
  140. package/dist/formatters/history/list.d.cts.map +1 -0
  141. package/dist/formatters/history/list.d.ts +25 -0
  142. package/dist/formatters/history/list.d.ts.map +1 -0
  143. package/dist/formatters/history/list.js +70 -0
  144. package/dist/formatters/history/list.js.map +1 -0
  145. package/dist/formatters/history/show.cjs +98 -0
  146. package/dist/formatters/history/show.cjs.map +1 -0
  147. package/dist/formatters/history/show.d.cts +21 -0
  148. package/dist/formatters/history/show.d.cts.map +1 -0
  149. package/dist/formatters/history/show.d.ts +21 -0
  150. package/dist/formatters/history/show.d.ts.map +1 -0
  151. package/dist/formatters/history/show.js +94 -0
  152. package/dist/formatters/history/show.js.map +1 -0
  153. package/dist/formatters/history/trends.cjs +194 -0
  154. package/dist/formatters/history/trends.cjs.map +1 -0
  155. package/dist/formatters/history/trends.d.cts +22 -0
  156. package/dist/formatters/history/trends.d.cts.map +1 -0
  157. package/dist/formatters/history/trends.d.ts +22 -0
  158. package/dist/formatters/history/trends.d.ts.map +1 -0
  159. package/dist/formatters/history/trends.js +190 -0
  160. package/dist/formatters/history/trends.js.map +1 -0
  161. package/dist/formatters/history/visualization.cjs +79 -0
  162. package/dist/formatters/history/visualization.cjs.map +1 -0
  163. package/dist/formatters/history/visualization.d.cts +24 -0
  164. package/dist/formatters/history/visualization.d.cts.map +1 -0
  165. package/dist/formatters/history/visualization.d.ts +24 -0
  166. package/dist/formatters/history/visualization.d.ts.map +1 -0
  167. package/dist/formatters/history/visualization.js +74 -0
  168. package/dist/formatters/history/visualization.js.map +1 -0
  169. package/dist/index.cjs +27 -17
  170. package/dist/index.cjs.map +1 -1
  171. package/dist/index.d.cts +10 -5
  172. package/dist/index.d.cts.map +1 -1
  173. package/dist/index.d.ts +10 -5
  174. package/dist/index.d.ts.map +1 -1
  175. package/dist/index.js +14 -9
  176. package/dist/index.js.map +1 -1
  177. package/dist/reporters/csv.cjs +39 -19
  178. package/dist/reporters/csv.cjs.map +1 -1
  179. package/dist/reporters/csv.d.cts +4 -7
  180. package/dist/reporters/csv.d.cts.map +1 -1
  181. package/dist/reporters/csv.d.ts +4 -7
  182. package/dist/reporters/csv.d.ts.map +1 -1
  183. package/dist/reporters/csv.js +38 -18
  184. package/dist/reporters/csv.js.map +1 -1
  185. package/dist/reporters/human.cjs +87 -99
  186. package/dist/reporters/human.cjs.map +1 -1
  187. package/dist/reporters/human.d.cts +15 -14
  188. package/dist/reporters/human.d.cts.map +1 -1
  189. package/dist/reporters/human.d.ts +15 -14
  190. package/dist/reporters/human.d.ts.map +1 -1
  191. package/dist/reporters/human.js +68 -80
  192. package/dist/reporters/human.js.map +1 -1
  193. package/dist/reporters/json.cjs +25 -50
  194. package/dist/reporters/json.cjs.map +1 -1
  195. package/dist/reporters/json.d.cts +3 -29
  196. package/dist/reporters/json.d.cts.map +1 -1
  197. package/dist/reporters/json.d.ts +3 -29
  198. package/dist/reporters/json.d.ts.map +1 -1
  199. package/dist/reporters/json.js +26 -51
  200. package/dist/reporters/json.js.map +1 -1
  201. package/dist/reporters/profile-human.cjs +149 -0
  202. package/dist/reporters/profile-human.cjs.map +1 -0
  203. package/dist/reporters/profile-human.d.cts +44 -0
  204. package/dist/reporters/profile-human.d.cts.map +1 -0
  205. package/dist/reporters/profile-human.d.ts +44 -0
  206. package/dist/reporters/profile-human.d.ts.map +1 -0
  207. package/dist/reporters/profile-human.js +142 -0
  208. package/dist/reporters/profile-human.js.map +1 -0
  209. package/dist/reporters/simple.cjs +66 -46
  210. package/dist/reporters/simple.cjs.map +1 -1
  211. package/dist/reporters/simple.d.cts +15 -15
  212. package/dist/reporters/simple.d.cts.map +1 -1
  213. package/dist/reporters/simple.d.ts +15 -15
  214. package/dist/reporters/simple.d.ts.map +1 -1
  215. package/dist/reporters/simple.js +65 -45
  216. package/dist/reporters/simple.js.map +1 -1
  217. package/dist/schema/modestbench-config.schema.json +153 -0
  218. package/dist/services/baseline-storage.cjs +151 -0
  219. package/dist/services/baseline-storage.cjs.map +1 -0
  220. package/dist/services/baseline-storage.d.cts +55 -0
  221. package/dist/services/baseline-storage.d.cts.map +1 -0
  222. package/dist/services/baseline-storage.d.ts +55 -0
  223. package/dist/services/baseline-storage.d.ts.map +1 -0
  224. package/dist/services/baseline-storage.js +147 -0
  225. package/dist/services/baseline-storage.js.map +1 -0
  226. package/dist/services/budget-evaluator.cjs +146 -0
  227. package/dist/services/budget-evaluator.cjs.map +1 -0
  228. package/dist/services/budget-evaluator.d.cts +29 -0
  229. package/dist/services/budget-evaluator.d.cts.map +1 -0
  230. package/dist/services/budget-evaluator.d.ts +29 -0
  231. package/dist/services/budget-evaluator.d.ts.map +1 -0
  232. package/dist/services/budget-evaluator.js +142 -0
  233. package/dist/services/budget-evaluator.js.map +1 -0
  234. package/dist/{config/manager.cjs → services/config-manager.cjs} +25 -11
  235. package/dist/services/config-manager.cjs.map +1 -0
  236. package/dist/{config/manager.d.cts → services/config-manager.d.cts} +7 -2
  237. package/dist/services/config-manager.d.cts.map +1 -0
  238. package/dist/{config/manager.d.ts → services/config-manager.d.ts} +7 -2
  239. package/dist/services/config-manager.d.ts.map +1 -0
  240. package/dist/{config/manager.js → services/config-manager.js} +25 -11
  241. package/dist/services/config-manager.js.map +1 -0
  242. package/dist/{core/loader.cjs → services/file-loader.cjs} +5 -8
  243. package/dist/services/file-loader.cjs.map +1 -0
  244. package/dist/{core/loader.d.cts → services/file-loader.d.cts} +1 -1
  245. package/dist/services/file-loader.d.cts.map +1 -0
  246. package/dist/{core/loader.d.ts → services/file-loader.d.ts} +1 -1
  247. package/dist/services/file-loader.d.ts.map +1 -0
  248. package/dist/{core/loader.js → services/file-loader.js} +5 -8
  249. package/dist/services/file-loader.js.map +1 -0
  250. package/dist/services/history/comparison.cjs +124 -0
  251. package/dist/services/history/comparison.cjs.map +1 -0
  252. package/dist/services/history/comparison.d.cts +18 -0
  253. package/dist/services/history/comparison.d.cts.map +1 -0
  254. package/dist/services/history/comparison.d.ts +18 -0
  255. package/dist/services/history/comparison.d.ts.map +1 -0
  256. package/dist/services/history/comparison.js +120 -0
  257. package/dist/services/history/comparison.js.map +1 -0
  258. package/dist/services/history/models.cjs +9 -0
  259. package/dist/services/history/models.cjs.map +1 -0
  260. package/dist/services/history/models.d.cts +139 -0
  261. package/dist/services/history/models.d.cts.map +1 -0
  262. package/dist/services/history/models.d.ts +139 -0
  263. package/dist/services/history/models.d.ts.map +1 -0
  264. package/dist/services/history/models.js +8 -0
  265. package/dist/services/history/models.js.map +1 -0
  266. package/dist/services/history/query.cjs +97 -0
  267. package/dist/services/history/query.cjs.map +1 -0
  268. package/dist/services/history/query.d.cts +38 -0
  269. package/dist/services/history/query.d.cts.map +1 -0
  270. package/dist/services/history/query.d.ts +38 -0
  271. package/dist/services/history/query.d.ts.map +1 -0
  272. package/dist/services/history/query.js +92 -0
  273. package/dist/services/history/query.js.map +1 -0
  274. package/dist/services/history/trend-analysis.cjs +187 -0
  275. package/dist/services/history/trend-analysis.cjs.map +1 -0
  276. package/dist/services/history/trend-analysis.d.cts +34 -0
  277. package/dist/services/history/trend-analysis.d.cts.map +1 -0
  278. package/dist/services/history/trend-analysis.d.ts +34 -0
  279. package/dist/services/history/trend-analysis.d.ts.map +1 -0
  280. package/dist/services/history/trend-analysis.js +179 -0
  281. package/dist/services/history/trend-analysis.js.map +1 -0
  282. package/dist/{storage/history.cjs → services/history-storage.cjs} +1 -1
  283. package/dist/services/history-storage.cjs.map +1 -0
  284. package/dist/{storage/history.d.cts → services/history-storage.d.cts} +1 -1
  285. package/dist/services/history-storage.d.cts.map +1 -0
  286. package/dist/{storage/history.d.ts → services/history-storage.d.ts} +1 -1
  287. package/dist/services/history-storage.d.ts.map +1 -0
  288. package/dist/{storage/history.js → services/history-storage.js} +1 -1
  289. package/dist/services/history-storage.js.map +1 -0
  290. package/dist/services/profiler/profile-filter.cjs +113 -0
  291. package/dist/services/profiler/profile-filter.cjs.map +1 -0
  292. package/dist/services/profiler/profile-filter.d.cts +20 -0
  293. package/dist/services/profiler/profile-filter.d.cts.map +1 -0
  294. package/dist/services/profiler/profile-filter.d.ts +20 -0
  295. package/dist/services/profiler/profile-filter.d.ts.map +1 -0
  296. package/dist/services/profiler/profile-filter.js +109 -0
  297. package/dist/services/profiler/profile-filter.js.map +1 -0
  298. package/dist/services/profiler/profile-parser.cjs +139 -0
  299. package/dist/services/profiler/profile-parser.cjs.map +1 -0
  300. package/dist/services/profiler/profile-parser.d.cts +18 -0
  301. package/dist/services/profiler/profile-parser.d.cts.map +1 -0
  302. package/dist/services/profiler/profile-parser.d.ts +18 -0
  303. package/dist/services/profiler/profile-parser.d.ts.map +1 -0
  304. package/dist/services/profiler/profile-parser.js +132 -0
  305. package/dist/services/profiler/profile-parser.js.map +1 -0
  306. package/dist/services/profiler/profile-runner.cjs +90 -0
  307. package/dist/services/profiler/profile-runner.cjs.map +1 -0
  308. package/dist/services/profiler/profile-runner.d.cts +29 -0
  309. package/dist/services/profiler/profile-runner.d.cts.map +1 -0
  310. package/dist/services/profiler/profile-runner.d.ts +29 -0
  311. package/dist/services/profiler/profile-runner.d.ts.map +1 -0
  312. package/dist/services/profiler/profile-runner.js +86 -0
  313. package/dist/services/profiler/profile-runner.js.map +1 -0
  314. package/dist/{progress/manager.cjs → services/progress-manager.cjs} +1 -1
  315. package/dist/services/progress-manager.cjs.map +1 -0
  316. package/dist/{progress/manager.d.cts → services/progress-manager.d.cts} +1 -1
  317. package/dist/services/progress-manager.d.cts.map +1 -0
  318. package/dist/{progress/manager.d.ts → services/progress-manager.d.ts} +1 -1
  319. package/dist/services/progress-manager.d.ts.map +1 -0
  320. package/dist/{progress/manager.js → services/progress-manager.js} +1 -1
  321. package/dist/services/progress-manager.js.map +1 -0
  322. package/dist/{reporters/registry.cjs → services/reporter-registry.cjs} +19 -25
  323. package/dist/services/reporter-registry.cjs.map +1 -0
  324. package/dist/{reporters/registry.d.cts → services/reporter-registry.d.cts} +19 -41
  325. package/dist/services/reporter-registry.d.cts.map +1 -0
  326. package/dist/{reporters/registry.d.ts → services/reporter-registry.d.ts} +19 -41
  327. package/dist/services/reporter-registry.d.ts.map +1 -0
  328. package/dist/{reporters/registry.js → services/reporter-registry.js} +19 -25
  329. package/dist/services/reporter-registry.js.map +1 -0
  330. package/dist/types/budgets.cjs +8 -0
  331. package/dist/types/budgets.cjs.map +1 -0
  332. package/dist/types/budgets.d.cts +149 -0
  333. package/dist/types/budgets.d.cts.map +1 -0
  334. package/dist/types/budgets.d.ts +149 -0
  335. package/dist/types/budgets.d.ts.map +1 -0
  336. package/dist/types/budgets.js +7 -0
  337. package/dist/types/budgets.js.map +1 -0
  338. package/dist/types/cli.cjs +2 -11
  339. package/dist/types/cli.cjs.map +1 -1
  340. package/dist/types/cli.d.cts +3 -224
  341. package/dist/types/cli.d.cts.map +1 -1
  342. package/dist/types/cli.d.ts +3 -224
  343. package/dist/types/cli.d.ts.map +1 -1
  344. package/dist/types/cli.js +2 -11
  345. package/dist/types/cli.js.map +1 -1
  346. package/dist/types/core.cjs +6 -1
  347. package/dist/types/core.cjs.map +1 -1
  348. package/dist/types/core.d.cts +13 -2
  349. package/dist/types/core.d.cts.map +1 -1
  350. package/dist/types/core.d.ts +13 -2
  351. package/dist/types/core.d.ts.map +1 -1
  352. package/dist/types/core.js +2 -1
  353. package/dist/types/core.js.map +1 -1
  354. package/dist/types/index.cjs +5 -0
  355. package/dist/types/index.cjs.map +1 -1
  356. package/dist/types/index.d.cts +2 -0
  357. package/dist/types/index.d.cts.map +1 -1
  358. package/dist/types/index.d.ts +2 -0
  359. package/dist/types/index.d.ts.map +1 -1
  360. package/dist/types/index.js +2 -0
  361. package/dist/types/index.js.map +1 -1
  362. package/dist/types/interfaces.d.cts +15 -8
  363. package/dist/types/interfaces.d.cts.map +1 -1
  364. package/dist/types/interfaces.d.ts +15 -8
  365. package/dist/types/interfaces.d.ts.map +1 -1
  366. package/dist/types/profiler.cjs +11 -0
  367. package/dist/types/profiler.cjs.map +1 -0
  368. package/dist/types/profiler.d.cts +100 -0
  369. package/dist/types/profiler.d.cts.map +1 -0
  370. package/dist/types/profiler.d.ts +100 -0
  371. package/dist/types/profiler.d.ts.map +1 -0
  372. package/dist/types/profiler.js +10 -0
  373. package/dist/types/profiler.js.map +1 -0
  374. package/dist/types/utility.cjs.map +1 -1
  375. package/dist/types/utility.d.cts +0 -8
  376. package/dist/types/utility.d.cts.map +1 -1
  377. package/dist/types/utility.d.ts +0 -8
  378. package/dist/types/utility.d.ts.map +1 -1
  379. package/dist/types/utility.js.map +1 -1
  380. package/dist/utils/ansi.cjs +61 -0
  381. package/dist/utils/ansi.cjs.map +1 -0
  382. package/dist/utils/ansi.d.cts +53 -0
  383. package/dist/utils/ansi.d.cts.map +1 -0
  384. package/dist/utils/ansi.d.ts +53 -0
  385. package/dist/utils/ansi.d.ts.map +1 -0
  386. package/dist/utils/ansi.js +57 -0
  387. package/dist/utils/ansi.js.map +1 -0
  388. package/dist/utils/identifiers.cjs +32 -0
  389. package/dist/utils/identifiers.cjs.map +1 -0
  390. package/dist/utils/identifiers.d.cts +32 -0
  391. package/dist/utils/identifiers.d.cts.map +1 -0
  392. package/dist/utils/identifiers.d.ts +32 -0
  393. package/dist/utils/identifiers.d.ts.map +1 -0
  394. package/dist/utils/identifiers.js +27 -0
  395. package/dist/utils/identifiers.js.map +1 -0
  396. package/dist/utils/package.cjs +40 -0
  397. package/dist/utils/package.cjs.map +1 -0
  398. package/dist/utils/package.d.cts +15 -0
  399. package/dist/utils/package.d.cts.map +1 -0
  400. package/dist/utils/package.d.ts +15 -0
  401. package/dist/utils/package.d.ts.map +1 -0
  402. package/dist/utils/package.js +33 -0
  403. package/dist/utils/package.js.map +1 -0
  404. package/dist/utils/type-guards.cjs +48 -0
  405. package/dist/utils/type-guards.cjs.map +1 -0
  406. package/dist/utils/type-guards.d.cts +22 -0
  407. package/dist/utils/type-guards.d.cts.map +1 -0
  408. package/dist/utils/type-guards.d.ts +22 -0
  409. package/dist/utils/type-guards.d.ts.map +1 -0
  410. package/dist/utils/type-guards.js +43 -0
  411. package/dist/utils/type-guards.js.map +1 -0
  412. package/package.json +14 -13
  413. package/src/bootstrap.ts +5 -5
  414. package/src/cli/commands/analyze.ts +101 -0
  415. package/src/cli/commands/baseline.ts +577 -0
  416. package/src/cli/commands/history.ts +194 -342
  417. package/src/cli/commands/init.ts +105 -183
  418. package/src/cli/commands/run.ts +186 -88
  419. package/src/cli/index.ts +731 -234
  420. package/src/config/budget-schema.ts +189 -0
  421. package/src/config/schema.ts +260 -1
  422. package/src/constants.ts +53 -1
  423. package/src/core/engine.ts +153 -14
  424. package/src/core/output-path-resolver.ts +46 -0
  425. package/src/errors/base.ts +11 -2
  426. package/src/errors/budget.ts +38 -0
  427. package/src/errors/index.ts +3 -0
  428. package/src/formatters/history/base.ts +28 -0
  429. package/src/formatters/history/compare.ts +186 -0
  430. package/src/formatters/history/list.ts +101 -0
  431. package/src/formatters/history/show.ts +155 -0
  432. package/src/formatters/history/trends.ts +281 -0
  433. package/src/formatters/history/visualization.ts +93 -0
  434. package/src/index.ts +17 -12
  435. package/src/reporters/csv.ts +55 -26
  436. package/src/reporters/human.ts +90 -89
  437. package/src/reporters/json.ts +27 -72
  438. package/src/reporters/profile-human.ts +204 -0
  439. package/src/reporters/simple.ts +85 -54
  440. package/src/services/baseline-storage.ts +199 -0
  441. package/src/services/budget-evaluator.ts +182 -0
  442. package/src/{config/manager.ts → services/config-manager.ts} +24 -9
  443. package/src/{core/loader.ts → services/file-loader.ts} +4 -7
  444. package/src/services/history/comparison.ts +130 -0
  445. package/src/services/history/models.ts +148 -0
  446. package/src/services/history/query.ts +116 -0
  447. package/src/services/history/trend-analysis.ts +238 -0
  448. package/src/services/profiler/profile-filter.ts +143 -0
  449. package/src/services/profiler/profile-parser.ts +194 -0
  450. package/src/services/profiler/profile-runner.ts +121 -0
  451. package/src/{reporters/registry.ts → services/reporter-registry.ts} +46 -81
  452. package/src/types/budgets.ts +180 -0
  453. package/src/types/cli.ts +5 -235
  454. package/src/types/core.ts +50 -10
  455. package/src/types/index.ts +5 -0
  456. package/src/types/interfaces.ts +16 -6
  457. package/src/types/profiler.ts +132 -0
  458. package/src/types/utility.ts +0 -10
  459. package/src/utils/ansi.ts +59 -0
  460. package/src/utils/identifiers.ts +58 -0
  461. package/src/utils/package.ts +35 -0
  462. package/src/utils/type-guards.ts +51 -0
  463. package/dist/config/manager.cjs.map +0 -1
  464. package/dist/config/manager.d.cts.map +0 -1
  465. package/dist/config/manager.d.ts.map +0 -1
  466. package/dist/config/manager.js.map +0 -1
  467. package/dist/core/loader.cjs.map +0 -1
  468. package/dist/core/loader.d.cts.map +0 -1
  469. package/dist/core/loader.d.ts.map +0 -1
  470. package/dist/core/loader.js.map +0 -1
  471. package/dist/progress/manager.cjs.map +0 -1
  472. package/dist/progress/manager.d.cts.map +0 -1
  473. package/dist/progress/manager.d.ts.map +0 -1
  474. package/dist/progress/manager.js.map +0 -1
  475. package/dist/reporters/registry.cjs.map +0 -1
  476. package/dist/reporters/registry.d.cts.map +0 -1
  477. package/dist/reporters/registry.d.ts.map +0 -1
  478. package/dist/reporters/registry.js.map +0 -1
  479. package/dist/storage/history.cjs.map +0 -1
  480. package/dist/storage/history.d.cts.map +0 -1
  481. package/dist/storage/history.d.ts.map +0 -1
  482. package/dist/storage/history.js.map +0 -1
  483. /package/src/{storage/history.ts → services/history-storage.ts} +0 -0
  484. /package/src/{progress/manager.ts → services/progress-manager.ts} +0 -0
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ /**
3
+ * Show Formatter
4
+ *
5
+ * Formats detailed benchmark run display in human and JSON formats.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.HistoryShowFormatter = void 0;
9
+ const node_path_1 = require("node:path");
10
+ const ansi_js_1 = require("../../utils/ansi.cjs");
11
+ /**
12
+ * Formatter for history show command
13
+ */
14
+ class HistoryShowFormatter {
15
+ /**
16
+ * Format as human-readable detailed view
17
+ */
18
+ formatHuman(data) {
19
+ const lines = [];
20
+ // Header with run ID
21
+ lines.push((0, ansi_js_1.colorize)('cyan', (0, ansi_js_1.colorize)('bold', `\nBenchmark Run: ${(0, ansi_js_1.colorize)('brightWhite', (0, ansi_js_1.colorize)('bold', data.id))}`)));
22
+ // Run details (indented by 2 spaces)
23
+ lines.push(` ${(0, ansi_js_1.colorize)('brightCyan', ansi_js_1.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('white', data.startTime.toLocaleString())}`);
24
+ lines.push(` ${(0, ansi_js_1.colorize)('brightCyan', ansi_js_1.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('white', 'Duration:')} ${(0, ansi_js_1.colorize)('magenta', `${(data.duration / 1000).toFixed(1)}s`)}`);
25
+ lines.push(` ${(0, ansi_js_1.colorize)('brightCyan', ansi_js_1.ansiChars.bullet)} Node.js ${(0, ansi_js_1.colorize)('brightWhite', data.environment.nodeVersion)} on ${(0, ansi_js_1.colorize)('brightWhite', data.environment.platform)} (${(0, ansi_js_1.colorize)('brightWhite', data.environment.arch)})`);
26
+ // CPU and system info
27
+ lines.push(` ${(0, ansi_js_1.colorize)('brightCyan', ansi_js_1.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('brightWhite', String(data.environment.cpu.cores))} cores @ ${(0, ansi_js_1.colorize)('brightWhite', `${data.environment.cpu.speed}MHz`)} on ${(0, ansi_js_1.colorize)('brightWhite', data.environment.cpu.model)}`);
28
+ if (data.git) {
29
+ lines.push(` ${(0, ansi_js_1.colorize)('brightCyan', ansi_js_1.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('brightBlue', data.git.branch)}@${(0, ansi_js_1.colorize)('dim', data.git.commit.substring(0, 8))}`);
30
+ }
31
+ // Summary section
32
+ lines.push('');
33
+ lines.push((0, ansi_js_1.colorize)('cyan', 'Summary'));
34
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_1.ansiChars.smallSquare)} Files: ${(0, ansi_js_1.colorize)('brightWhite', String(data.summary.totalFiles))}`);
35
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_1.ansiChars.smallSquare)} Suites: ${(0, ansi_js_1.colorize)('brightWhite', String(data.summary.totalSuites))}`);
36
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_1.ansiChars.smallSquare)} Tasks: ${(0, ansi_js_1.colorize)('brightWhite', String(data.summary.totalTasks))}`);
37
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_1.ansiChars.smallSquare)} Passed: ${(0, ansi_js_1.colorize)('brightCyan', String(data.summary.passedTasks))}`);
38
+ if (data.summary.failedTasks > 0) {
39
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_1.ansiChars.smallSquare)} Failed: ${(0, ansi_js_1.colorize)('brightRed', (0, ansi_js_1.colorize)('bold', String(data.summary.failedTasks)))}`);
40
+ }
41
+ // Detailed results
42
+ lines.push('');
43
+ lines.push((0, ansi_js_1.colorize)('cyan', 'Results'));
44
+ lines.push('');
45
+ for (const file of data.files) {
46
+ // Display filepath as relative if within cwd, otherwise absolute
47
+ const displayPath = (0, node_path_1.relative)(process.cwd(), file.filePath);
48
+ const finalPath = displayPath.startsWith('..')
49
+ ? file.filePath
50
+ : displayPath;
51
+ lines.push(`${(0, ansi_js_1.colorize)('dim', ansi_js_1.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('brightMagenta', (0, ansi_js_1.colorize)('bold', finalPath))}`);
52
+ for (const suite of file.suites) {
53
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', ansi_js_1.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('brightWhite', suite.name)}`);
54
+ for (const task of suite.tasks) {
55
+ const statusIcon = task.error
56
+ ? (0, ansi_js_1.colorize)('brightRed', ansi_js_1.ansiChars.cross)
57
+ : (0, ansi_js_1.colorize)('brightCyan', ansi_js_1.ansiChars.checkmark);
58
+ if (task.error) {
59
+ lines.push(` ${statusIcon} ${(0, ansi_js_1.colorize)('white', task.name)} ${(0, ansi_js_1.colorize)('dim', ansi_js_1.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('brightRed', 'failed')}`);
60
+ }
61
+ else {
62
+ const mean = formatTime(task.mean);
63
+ const opsStr = task.opsPerSecond.toLocaleString('en-US', {
64
+ maximumFractionDigits: 0,
65
+ });
66
+ const rmeStr = task.marginOfError.toFixed(2);
67
+ lines.push(` ${statusIcon} ${(0, ansi_js_1.colorize)('white', task.name)}: ${(0, ansi_js_1.colorize)('brightMagenta', mean)} ${(0, ansi_js_1.colorize)('dim', ansi_js_1.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('brightBlue', `${ansi_js_1.ansiChars.plusMinus}${rmeStr}`)} ${(0, ansi_js_1.colorize)('dim', ansi_js_1.ansiChars.bullet)} ${(0, ansi_js_1.colorize)('magenta', opsStr)} ops/sec`);
68
+ if (task.iterations > 0) {
69
+ lines.push(` ${(0, ansi_js_1.colorize)('dim', `${task.iterations} iterations, cv: ${task.cv.toFixed(1)}%`)}`);
70
+ }
71
+ }
72
+ }
73
+ }
74
+ lines.push('');
75
+ }
76
+ return lines.join('\n');
77
+ }
78
+ /**
79
+ * Format as complete JSON
80
+ */
81
+ formatJson(data) {
82
+ return JSON.stringify(data, null, 2);
83
+ }
84
+ }
85
+ exports.HistoryShowFormatter = HistoryShowFormatter;
86
+ /**
87
+ * Format nanoseconds as a human-readable time string
88
+ */
89
+ const formatTime = (ns) => {
90
+ if (ns < 1000) {
91
+ return `${ns.toFixed(2)}ns`;
92
+ }
93
+ if (ns < 1000000) {
94
+ return `${(ns / 1000).toFixed(3)}µs`;
95
+ }
96
+ return `${(ns / 1000000).toFixed(3)}ms`;
97
+ };
98
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/formatters/history/show.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Show Formatter
3
+ *
4
+ * Formats detailed benchmark run display in human and JSON formats.
5
+ */
6
+ import type { ShowResult } from "../../services/history/models.cjs";
7
+ import type { HistoryFormatter } from "./base.cjs";
8
+ /**
9
+ * Formatter for history show command
10
+ */
11
+ export declare class HistoryShowFormatter implements HistoryFormatter<ShowResult> {
12
+ /**
13
+ * Format as human-readable detailed view
14
+ */
15
+ formatHuman(data: ShowResult): string;
16
+ /**
17
+ * Format as complete JSON
18
+ */
19
+ formatJson(data: ShowResult): string;
20
+ }
21
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/formatters/history/show.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,0CAAyC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAkB;AAIlD;;GAEG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB,CAAC,UAAU,CAAC;IACvE;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAmHrC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;CAGrC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Show Formatter
3
+ *
4
+ * Formats detailed benchmark run display in human and JSON formats.
5
+ */
6
+ import type { ShowResult } from "../../services/history/models.js";
7
+ import type { HistoryFormatter } from "./base.js";
8
+ /**
9
+ * Formatter for history show command
10
+ */
11
+ export declare class HistoryShowFormatter implements HistoryFormatter<ShowResult> {
12
+ /**
13
+ * Format as human-readable detailed view
14
+ */
15
+ formatHuman(data: ShowResult): string;
16
+ /**
17
+ * Format as complete JSON
18
+ */
19
+ formatJson(data: ShowResult): string;
20
+ }
21
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/formatters/history/show.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,yCAAyC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB;AAIlD;;GAEG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB,CAAC,UAAU,CAAC;IACvE;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAmHrC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;CAGrC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Show Formatter
3
+ *
4
+ * Formats detailed benchmark run display in human and JSON formats.
5
+ */
6
+ import { relative } from 'node:path';
7
+ import { ansiChars, colorize } from "../../utils/ansi.js";
8
+ /**
9
+ * Formatter for history show command
10
+ */
11
+ export class HistoryShowFormatter {
12
+ /**
13
+ * Format as human-readable detailed view
14
+ */
15
+ formatHuman(data) {
16
+ const lines = [];
17
+ // Header with run ID
18
+ lines.push(colorize('cyan', colorize('bold', `\nBenchmark Run: ${colorize('brightWhite', colorize('bold', data.id))}`)));
19
+ // Run details (indented by 2 spaces)
20
+ lines.push(` ${colorize('brightCyan', ansiChars.bullet)} ${colorize('white', data.startTime.toLocaleString())}`);
21
+ lines.push(` ${colorize('brightCyan', ansiChars.bullet)} ${colorize('white', 'Duration:')} ${colorize('magenta', `${(data.duration / 1000).toFixed(1)}s`)}`);
22
+ lines.push(` ${colorize('brightCyan', ansiChars.bullet)} Node.js ${colorize('brightWhite', data.environment.nodeVersion)} on ${colorize('brightWhite', data.environment.platform)} (${colorize('brightWhite', data.environment.arch)})`);
23
+ // CPU and system info
24
+ lines.push(` ${colorize('brightCyan', ansiChars.bullet)} ${colorize('brightWhite', String(data.environment.cpu.cores))} cores @ ${colorize('brightWhite', `${data.environment.cpu.speed}MHz`)} on ${colorize('brightWhite', data.environment.cpu.model)}`);
25
+ if (data.git) {
26
+ lines.push(` ${colorize('brightCyan', ansiChars.bullet)} ${colorize('brightBlue', data.git.branch)}@${colorize('dim', data.git.commit.substring(0, 8))}`);
27
+ }
28
+ // Summary section
29
+ lines.push('');
30
+ lines.push(colorize('cyan', 'Summary'));
31
+ lines.push(` ${colorize('dim', ansiChars.smallSquare)} Files: ${colorize('brightWhite', String(data.summary.totalFiles))}`);
32
+ lines.push(` ${colorize('dim', ansiChars.smallSquare)} Suites: ${colorize('brightWhite', String(data.summary.totalSuites))}`);
33
+ lines.push(` ${colorize('dim', ansiChars.smallSquare)} Tasks: ${colorize('brightWhite', String(data.summary.totalTasks))}`);
34
+ lines.push(` ${colorize('dim', ansiChars.smallSquare)} Passed: ${colorize('brightCyan', String(data.summary.passedTasks))}`);
35
+ if (data.summary.failedTasks > 0) {
36
+ lines.push(` ${colorize('dim', ansiChars.smallSquare)} Failed: ${colorize('brightRed', colorize('bold', String(data.summary.failedTasks)))}`);
37
+ }
38
+ // Detailed results
39
+ lines.push('');
40
+ lines.push(colorize('cyan', 'Results'));
41
+ lines.push('');
42
+ for (const file of data.files) {
43
+ // Display filepath as relative if within cwd, otherwise absolute
44
+ const displayPath = relative(process.cwd(), file.filePath);
45
+ const finalPath = displayPath.startsWith('..')
46
+ ? file.filePath
47
+ : displayPath;
48
+ lines.push(`${colorize('dim', ansiChars.bullet)} ${colorize('brightMagenta', colorize('bold', finalPath))}`);
49
+ for (const suite of file.suites) {
50
+ lines.push(` ${colorize('dim', ansiChars.bullet)} ${colorize('brightWhite', suite.name)}`);
51
+ for (const task of suite.tasks) {
52
+ const statusIcon = task.error
53
+ ? colorize('brightRed', ansiChars.cross)
54
+ : colorize('brightCyan', ansiChars.checkmark);
55
+ if (task.error) {
56
+ lines.push(` ${statusIcon} ${colorize('white', task.name)} ${colorize('dim', ansiChars.bullet)} ${colorize('brightRed', 'failed')}`);
57
+ }
58
+ else {
59
+ const mean = formatTime(task.mean);
60
+ const opsStr = task.opsPerSecond.toLocaleString('en-US', {
61
+ maximumFractionDigits: 0,
62
+ });
63
+ const rmeStr = task.marginOfError.toFixed(2);
64
+ lines.push(` ${statusIcon} ${colorize('white', task.name)}: ${colorize('brightMagenta', mean)} ${colorize('dim', ansiChars.bullet)} ${colorize('brightBlue', `${ansiChars.plusMinus}${rmeStr}`)} ${colorize('dim', ansiChars.bullet)} ${colorize('magenta', opsStr)} ops/sec`);
65
+ if (task.iterations > 0) {
66
+ lines.push(` ${colorize('dim', `${task.iterations} iterations, cv: ${task.cv.toFixed(1)}%`)}`);
67
+ }
68
+ }
69
+ }
70
+ }
71
+ lines.push('');
72
+ }
73
+ return lines.join('\n');
74
+ }
75
+ /**
76
+ * Format as complete JSON
77
+ */
78
+ formatJson(data) {
79
+ return JSON.stringify(data, null, 2);
80
+ }
81
+ }
82
+ /**
83
+ * Format nanoseconds as a human-readable time string
84
+ */
85
+ const formatTime = (ns) => {
86
+ if (ns < 1000) {
87
+ return `${ns.toFixed(2)}ns`;
88
+ }
89
+ if (ns < 1000000) {
90
+ return `${(ns / 1000).toFixed(3)}µs`;
91
+ }
92
+ return `${(ns / 1000000).toFixed(3)}ms`;
93
+ };
94
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/formatters/history/show.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAKrC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B;AAE1D;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAC/B;;OAEG;IACH,WAAW,CAAC,IAAgB;QAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,qBAAqB;QACrB,KAAK,CAAC,IAAI,CACR,QAAQ,CACN,MAAM,EACN,QAAQ,CACN,MAAM,EACN,oBAAoB,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CACzE,CACF,CACF,CAAC;QAEF,qCAAqC;QACrC,KAAK,CAAC,IAAI,CACR,KAAK,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,EAAE,CACtG,CAAC;QACF,KAAK,CAAC,IAAI,CACR,KAAK,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAClJ,CAAC;QACF,KAAK,CAAC,IAAI,CACR,KAAK,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,YAAY,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAC9N,CAAC;QAEF,sBAAsB;QACtB,KAAK,CAAC,IAAI,CACR,KAAK,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,YAAY,QAAQ,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAChP,CAAC;QAEF,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CACR,KAAK,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAC/I,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CACR,KAAK,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,WAAW,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CACjH,CAAC;QACF,KAAK,CAAC,IAAI,CACR,KAAK,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,YAAY,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CACnH,CAAC;QACF,KAAK,CAAC,IAAI,CACR,KAAK,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,WAAW,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CACjH,CAAC;QAEF,KAAK,CAAC,IAAI,CACR,KAAK,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,YAAY,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAClH,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CACR,KAAK,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,YAAY,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CACnI,CAAC;QACJ,CAAC;QAED,mBAAmB;QACnB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,iEAAiE;YACjE,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC5C,CAAC,CAAC,IAAI,CAAC,QAAQ;gBACf,CAAC,CAAC,WAAW,CAAC;YAEhB,KAAK,CAAC,IAAI,CACR,GAAG,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CACjG,CAAC;YAEF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CACR,KAAK,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAChF,CAAC;gBAEF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK;wBAC3B,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC;wBACxC,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;oBAEhD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACf,KAAK,CAAC,IAAI,CACR,OAAO,UAAU,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAC5H,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,EAAE;4BACvD,qBAAqB,EAAE,CAAC;yBACzB,CAAC,CAAC;wBACH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAE7C,KAAK,CAAC,IAAI,CACR,OAAO,UAAU,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CACtQ,CAAC;wBAEF,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;4BACxB,KAAK,CAAC,IAAI,CACR,SAAS,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,oBAAoB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CACxF,CAAC;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAgB;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,GAAG,CAAC,EAAU,EAAU,EAAE;IACxC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;QACd,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9B,CAAC;IACD,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IACD,OAAO,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC,CAAC"}
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ /**
3
+ * Trends Formatter
4
+ *
5
+ * Formats performance trend analysis with visualizations in human and JSON
6
+ * formats.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.HistoryTrendsFormatter = void 0;
10
+ const node_util_1 = require("node:util");
11
+ const ansi_js_1 = require("../../utils/ansi.cjs");
12
+ const visualization_js_1 = require("./visualization.cjs");
13
+ /**
14
+ * Nanoseconds per millisecond conversion constant
15
+ */
16
+ const NS_PER_MS = 1_000_000;
17
+ /**
18
+ * Nanoseconds per microsecond conversion constant
19
+ */
20
+ const NS_PER_US = 1_000;
21
+ /**
22
+ * Intelligently format a time range with appropriate precision Displays
23
+ * microseconds for small values (< 1ms) for better clarity
24
+ */
25
+ const formatTimeRange = (minNs, maxNs) => {
26
+ // If both values are below 1ms, show in microseconds for better precision
27
+ if (maxNs < NS_PER_MS) {
28
+ const minUs = minNs / NS_PER_US;
29
+ const maxUs = maxNs / NS_PER_US;
30
+ return `${minUs.toFixed(2)}-${maxUs.toFixed(2)}µs`;
31
+ }
32
+ // Otherwise show in milliseconds
33
+ const minMs = minNs / NS_PER_MS;
34
+ const maxMs = maxNs / NS_PER_MS;
35
+ return `${minMs.toFixed(3)}-${maxMs.toFixed(3)}ms`;
36
+ };
37
+ /**
38
+ * Calculate visible string length, stripping ANSI escape codes
39
+ */
40
+ const getVisualLength = (str) => (0, node_util_1.stripVTControlCharacters)(str).length;
41
+ /**
42
+ * Formatter for history trends command
43
+ */
44
+ class HistoryTrendsFormatter {
45
+ /**
46
+ * Format as human-readable trends with visualizations
47
+ */
48
+ formatHuman(data) {
49
+ const lines = [];
50
+ lines.push((0, ansi_js_1.colorize)('brightMagenta', (0, ansi_js_1.colorize)('bold', `\nPerformance Trends (${data.runs} runs)`)));
51
+ if (data.timespan.start && data.timespan.end) {
52
+ lines.push((0, ansi_js_1.colorize)('dim', `Time range: ${data.timespan.start.toLocaleDateString()} to ${data.timespan.end.toLocaleDateString()}`));
53
+ }
54
+ lines.push('');
55
+ // Summary statistics
56
+ lines.push((0, ansi_js_1.colorize)('brightBlue', 'Summary:'));
57
+ lines.push(` ${(0, ansi_js_1.colorize)('brightCyan', '▲')} ${data.summary.improvingTasks} improving ${(0, ansi_js_1.colorize)('brightRed', '▼')} ${data.summary.degradingTasks} degrading ${(0, ansi_js_1.colorize)('dim', '→')} ${data.summary.stableTasks} stable`);
58
+ lines.push('');
59
+ // Task Performance Summary Table
60
+ lines.push((0, ansi_js_1.colorize)('brightMagenta', 'Task Performance Summary:'));
61
+ lines.push('');
62
+ for (const trendData of data.trends) {
63
+ // Show top 20
64
+ const trendIcon = trendData.trend === 'improving'
65
+ ? (0, ansi_js_1.colorize)('brightCyan', '▲')
66
+ : trendData.trend === 'degrading'
67
+ ? (0, ansi_js_1.colorize)('brightRed', '▼')
68
+ : (0, ansi_js_1.colorize)('dim', '→');
69
+ const changeColor = trendData.percentChange < -5
70
+ ? 'brightCyan'
71
+ : trendData.percentChange > 5
72
+ ? 'brightRed'
73
+ : 'dim';
74
+ const changeSign = trendData.percentChange >= 0 ? '+' : '';
75
+ const changeStr = `${changeSign}${trendData.percentChange.toFixed(1)}%`;
76
+ // Generate sparkline - scale with number of data points (min 12, max 20)
77
+ const values = trendData.dataPoints.map((dp) => dp.mean);
78
+ const sparklineWidth = Math.min(20, Math.max(12, trendData.runs));
79
+ const sparkline = (0, visualization_js_1.generateSparkline)(values, sparklineWidth);
80
+ const sparklineColor = trendData.trend === 'improving'
81
+ ? 'brightCyan'
82
+ : trendData.trend === 'degrading'
83
+ ? 'brightRed'
84
+ : 'cyan';
85
+ const taskName = (0, ansi_js_1.colorize)('white', trendData.task);
86
+ const percentDisplay = (0, ansi_js_1.colorize)(changeColor, changeStr.padStart(8));
87
+ const sparklineDisplay = (0, ansi_js_1.colorize)(sparklineColor, sparkline);
88
+ // Layout: icon (2) + task name + padding + percent (8) + spaces (2) + sparkline
89
+ // Position percent+graph at visual column 60 for consistent alignment
90
+ const prefix = ` ${trendIcon} ${taskName}`;
91
+ const prefixVisualLength = getVisualLength(prefix);
92
+ const targetColumn = 60;
93
+ if (prefixVisualLength > targetColumn) {
94
+ // Task name is too long, wrap to next line
95
+ lines.push(prefix);
96
+ lines.push(`${' '.repeat(targetColumn)}${percentDisplay} ${sparklineDisplay}`);
97
+ }
98
+ else {
99
+ // Fit on one line with padding
100
+ const padding = Math.max(1, targetColumn - prefixVisualLength);
101
+ const paddingStr = ' '.repeat(padding);
102
+ lines.push(`${prefix}${paddingStr}${percentDisplay} ${sparklineDisplay}`);
103
+ }
104
+ }
105
+ // Show all trends (no limit)
106
+ lines.push('');
107
+ // Show regressions if any
108
+ if (data.regressions.length > 0) {
109
+ lines.push((0, ansi_js_1.colorize)('brightRed', (0, ansi_js_1.colorize)('bold', 'Regressions Detected:')));
110
+ lines.push('');
111
+ for (const regression of data.regressions) {
112
+ lines.push(` ${(0, ansi_js_1.colorize)('brightRed', '▼')} ${(0, ansi_js_1.colorize)('white', regression.task)}: ${(0, ansi_js_1.colorize)('brightRed', `${regression.percentChange.toFixed(1)}% slower`)} (${regression.runs} runs)`);
113
+ }
114
+ lines.push('');
115
+ }
116
+ // Show low-confidence regressions (insufficient data)
117
+ if (data.lowConfidenceRegressions.length > 0) {
118
+ lines.push((0, ansi_js_1.colorize)('brightYellow', (0, ansi_js_1.colorize)('bold', '! Potential Regressions (insufficient data):')));
119
+ lines.push('');
120
+ for (const regression of data.lowConfidenceRegressions) {
121
+ lines.push(` ${(0, ansi_js_1.colorize)('brightYellow', '!')} ${(0, ansi_js_1.colorize)('white', regression.task)}: ${(0, ansi_js_1.colorize)('brightYellow', `${regression.percentChange.toFixed(1)}% slower`)} (${regression.runs} run${regression.runs !== 1 ? 's' : ''})`);
122
+ }
123
+ lines.push('');
124
+ }
125
+ // Show performance distribution for most important task (highest RME) if we have enough data
126
+ // Find task with highest relative margin of error - the most variable/unreliable one
127
+ const mostImportantTrend = data.trends
128
+ .filter((t) => t.runs >= 5)
129
+ .sort((a, b) => {
130
+ const rmeA = (a.statistics.stdDeviation / a.statistics.mean) * 100;
131
+ const rmeB = (b.statistics.stdDeviation / b.statistics.mean) * 100;
132
+ return rmeB - rmeA; // Descending order (highest RME first)
133
+ })[0];
134
+ if (mostImportantTrend) {
135
+ lines.push((0, ansi_js_1.colorize)('brightMagenta', 'Performance Distribution (most variable task):'));
136
+ lines.push((0, ansi_js_1.colorize)('white', mostImportantTrend.task));
137
+ const cv = ((mostImportantTrend.statistics.stdDeviation /
138
+ mostImportantTrend.statistics.mean) *
139
+ 100).toFixed(1);
140
+ lines.push((0, ansi_js_1.colorize)('dim', ` Variability: ${cv}%`));
141
+ lines.push('');
142
+ // Create distribution buckets
143
+ const values = mostImportantTrend.dataPoints.map((dp) => dp.mean);
144
+ const min = Math.min(...values);
145
+ const max = Math.max(...values);
146
+ const range = max - min;
147
+ const numBuckets = Math.min(5, mostImportantTrend.runs);
148
+ const bucketSize = range / numBuckets;
149
+ const buckets = [];
150
+ for (let i = 0; i < numBuckets; i++) {
151
+ const bucketMin = min + i * bucketSize;
152
+ const bucketMax = min + (i + 1) * bucketSize;
153
+ const count = values.filter((v) => v >= bucketMin &&
154
+ (i === numBuckets - 1 ? v <= bucketMax : v < bucketMax)).length;
155
+ const label = formatTimeRange(bucketMin, bucketMax);
156
+ buckets.push({
157
+ count,
158
+ label,
159
+ max: bucketMax,
160
+ min: bucketMin,
161
+ });
162
+ }
163
+ // Filter out empty buckets for cleaner display
164
+ const nonEmptyBuckets = buckets.filter((b) => b.count > 0);
165
+ const chart = (0, visualization_js_1.generateBarChart)(nonEmptyBuckets, 25);
166
+ for (const line of chart) {
167
+ lines.push((0, ansi_js_1.colorize)('brightCyan', line));
168
+ }
169
+ lines.push('');
170
+ lines.push((0, ansi_js_1.colorize)('dim', ` Mean: ${(mostImportantTrend.statistics.mean / NS_PER_MS).toFixed(3)}ms Median: ${(mostImportantTrend.statistics.median / NS_PER_MS).toFixed(3)}ms StdDev: ${(mostImportantTrend.statistics.stdDeviation / NS_PER_MS).toFixed(3)}ms`));
171
+ lines.push('');
172
+ }
173
+ return lines.join('\n');
174
+ }
175
+ /**
176
+ * Format as JSON
177
+ */
178
+ formatJson(data) {
179
+ return JSON.stringify({
180
+ regressions: data.regressions,
181
+ summary: {
182
+ degradingTasks: data.summary.degradingTasks,
183
+ improvingTasks: data.summary.improvingTasks,
184
+ runs: data.runs,
185
+ stableTasks: data.summary.stableTasks,
186
+ timespan: data.timespan,
187
+ totalTasks: data.summary.totalTasks,
188
+ },
189
+ trends: data.trends,
190
+ }, null, 2);
191
+ }
192
+ }
193
+ exports.HistoryTrendsFormatter = HistoryTrendsFormatter;
194
+ //# sourceMappingURL=trends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trends.js","sourceRoot":"","sources":["../../../src/formatters/history/trends.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Trends Formatter
3
+ *
4
+ * Formats performance trend analysis with visualizations in human and JSON
5
+ * formats.
6
+ */
7
+ import type { TrendsResult } from "../../services/history/models.cjs";
8
+ import type { HistoryFormatter } from "./base.cjs";
9
+ /**
10
+ * Formatter for history trends command
11
+ */
12
+ export declare class HistoryTrendsFormatter implements HistoryFormatter<TrendsResult> {
13
+ /**
14
+ * Format as human-readable trends with visualizations
15
+ */
16
+ formatHuman(data: TrendsResult): string;
17
+ /**
18
+ * Format as JSON
19
+ */
20
+ formatJson(data: TrendsResult): string;
21
+ }
22
+ //# sourceMappingURL=trends.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trends.d.ts","sourceRoot":"","sources":["../../../src/formatters/history/trends.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAEV,YAAY,EACb,0CAAyC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAkB;AAuClD;;GAEG;AACH,qBAAa,sBAAuB,YAAW,gBAAgB,CAAC,YAAY,CAAC;IAC3E;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IAwMvC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;CAkBvC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Trends Formatter
3
+ *
4
+ * Formats performance trend analysis with visualizations in human and JSON
5
+ * formats.
6
+ */
7
+ import type { TrendsResult } from "../../services/history/models.js";
8
+ import type { HistoryFormatter } from "./base.js";
9
+ /**
10
+ * Formatter for history trends command
11
+ */
12
+ export declare class HistoryTrendsFormatter implements HistoryFormatter<TrendsResult> {
13
+ /**
14
+ * Format as human-readable trends with visualizations
15
+ */
16
+ formatHuman(data: TrendsResult): string;
17
+ /**
18
+ * Format as JSON
19
+ */
20
+ formatJson(data: TrendsResult): string;
21
+ }
22
+ //# sourceMappingURL=trends.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trends.d.ts","sourceRoot":"","sources":["../../../src/formatters/history/trends.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAEV,YAAY,EACb,yCAAyC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB;AAuClD;;GAEG;AACH,qBAAa,sBAAuB,YAAW,gBAAgB,CAAC,YAAY,CAAC;IAC3E;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IAwMvC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;CAkBvC"}