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
@@ -4,20 +4,39 @@
4
4
  * Outputs benchmark results in structured JSON format. Suitable for machine
5
5
  * processing, CI/CD integration, and data analysis.
6
6
  */
7
- import { mkdirSync, writeFileSync } from 'node:fs';
8
- import { dirname } from 'node:path';
7
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
8
+ import { dirname, join } from 'node:path';
9
+ import { fileURLToPath } from 'node:url';
9
10
  import { ReporterOutputError } from "../errors/index.js";
10
- import { BaseReporter } from "./registry.js";
11
+ import { BaseReporter } from "../services/reporter-registry.js";
12
+ /**
13
+ * Cache the package version at module load time
14
+ *
15
+ * NOTE: This relies on package.json being at the same relative path from both
16
+ * src/ and dist/ directories (../../package.json). If the build output
17
+ * structure changes, this will break.
18
+ */
19
+ const cachedPackageVersion = (() => {
20
+ try {
21
+ const __dirname = dirname(fileURLToPath(import.meta.url));
22
+ const pkgPath = join(__dirname, '..', '..', 'package.json');
23
+ const pkgContent = readFileSync(pkgPath, 'utf8');
24
+ const pkg = JSON.parse(pkgContent);
25
+ return pkg.version;
26
+ }
27
+ catch {
28
+ // Fallback if package.json cannot be read (shouldn't happen in normal use)
29
+ return 'unknown';
30
+ }
31
+ })();
11
32
  /**
12
33
  * JSON reporter for structured output
13
34
  */
14
35
  export class JsonReporter extends BaseReporter {
15
- currentRun;
16
36
  includeMetadata;
17
37
  includeStatistics;
18
38
  outputPath;
19
39
  prettyPrint;
20
- quiet;
21
40
  statistics = {
22
41
  taskCount: 0,
23
42
  totalIterations: 0,
@@ -29,31 +48,6 @@ export class JsonReporter extends BaseReporter {
29
48
  this.prettyPrint = options.prettyPrint ?? true;
30
49
  this.includeStatistics = options.includeStatistics ?? true;
31
50
  this.includeMetadata = options.includeMetadata ?? true;
32
- this.quiet = options.quiet ?? false;
33
- }
34
- /**
35
- * Check if statistics are included
36
- */
37
- areStatisticsIncluded() {
38
- return this.includeStatistics;
39
- }
40
- /**
41
- * Get the output path (if configured)
42
- */
43
- getOutputPath() {
44
- return this.outputPath;
45
- }
46
- /**
47
- * Check if metadata is included
48
- */
49
- isMetadataIncluded() {
50
- return this.includeMetadata;
51
- }
52
- /**
53
- * Check if pretty printing is enabled
54
- */
55
- isPrettyPrintEnabled() {
56
- return this.prettyPrint;
57
51
  }
58
52
  async onEnd(run) {
59
53
  const output = this.buildJsonOutput(run);
@@ -69,33 +63,14 @@ export class JsonReporter extends BaseReporter {
69
63
  // but we can also log to stderr for immediate feedback
70
64
  console.error('JSON Reporter Error:', error.message);
71
65
  }
72
- onFileEnd(_result) {
73
- // No-op for JSON reporter
74
- }
75
- onFileStart(_file) {
76
- // No-op for JSON reporter
77
- }
78
- onProgress(_state) {
79
- // No-op for JSON reporter - we don't output progress in JSON format
80
- }
81
- onStart(run) {
82
- this.currentRun = run;
66
+ onStart(_run) {
83
67
  this.resetStatistics();
84
68
  }
85
- onSuiteEnd(_result) {
86
- // No-op for JSON reporter
87
- }
88
- onSuiteStart(_suite) {
89
- // No-op for JSON reporter
90
- }
91
69
  onTaskResult(result) {
92
70
  if (!result.error) {
93
71
  this.updateStatistics(result);
94
72
  }
95
73
  }
96
- onTaskStart(_task) {
97
- // No-op for JSON reporter
98
- }
99
74
  /**
100
75
  * Build the complete JSON output structure
101
76
  */
@@ -104,7 +79,7 @@ export class JsonReporter extends BaseReporter {
104
79
  meta: {
105
80
  format: 'modestbench-json',
106
81
  timestamp: new Date().toISOString(),
107
- version: '0.1.0', // TODO: Get from package.json
82
+ version: cachedPackageVersion,
108
83
  },
109
84
  run: this.includeMetadata ? run : this.sanitizeRun(run),
110
85
  };
@@ -1 +1 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/reporters/json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,OAAO,EAAE,mBAAmB,EAAE,2BAA2B;AACzD,OAAO,EAAE,YAAY,EAAE,sBAAsB;AAuB7C;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,YAAY;IACpC,UAAU,CAAgB;IAEjB,eAAe,CAAU;IAEzB,iBAAiB,CAAU;IAE3B,UAAU,CAAsB;IAEhC,WAAW,CAAU;IAErB,KAAK,CAAU;IAExB,UAAU,GAMd;QACF,SAAS,EAAE,CAAC;QACZ,eAAe,EAAE,CAAC;QAClB,iBAAiB,EAAE,CAAC;KACrB,CAAC;IAEF,YACE,UAOI,EAAE;QAEN,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;QAC/C,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAiB;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,KAAY;QAClB,8DAA8D;QAC9D,uDAAuD;QACvD,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,SAAS,CAAC,OAAmB;QAC3B,0BAA0B;IAC5B,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,0BAA0B;IAC5B,CAAC;IAED,UAAU,CAAC,MAAqB;QAC9B,oEAAoE;IACtE,CAAC;IAED,OAAO,CAAC,GAAiB;QACvB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,OAAoB;QAC7B,0BAA0B;IAC5B,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,0BAA0B;IAC5B,CAAC;IAED,YAAY,CAAC,MAAkB;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,0BAA0B;IAC5B,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,GAAiB;QACvC,MAAM,MAAM,GAAe;YACzB,IAAI,EAAE;gBACJ,MAAM,EAAE,kBAAkB;gBAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,OAAO,EAAE,OAAO,EAAE,8BAA8B;aACjD;YACD,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;SACxD,CAAC;QAEF,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG;gBACZ,mBAAmB,EACjB,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC;oBAC3B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS;oBAC/D,CAAC,CAAC,CAAC;gBACP,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,eAAe;gBAChD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI;oBACjC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW;iBACzC,CAAC;gBACF,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI;oBACjC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW;iBACzC,CAAC;aACH,CAAC;YAEF,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;QAC5B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,IAAI,CAAC,UAAU,GAAG;YAChB,SAAS,EAAE,CAAC;YACZ,eAAe,EAAE,CAAC;YAClB,iBAAiB,EAAE,CAAC;SACrB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,GAAiB;QACnC,IAAI,SAAS,GAAG;YACd,GAAG,GAAG;YACN,WAAW,EAAE;gBACX,GAAG,GAAG,CAAC,WAAW;gBAClB,GAAG,EAAE,EAAE,EAAE,+BAA+B;gBACxC,QAAQ,EAAE,UAAU,EAAE,kBAAkB;aACzC;SACc,CAAC;QAElB,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,SAAS,GAAG;gBACV,GAAG,SAAS;gBACZ,GAAG,EAAE;oBACH,GAAG,GAAG,CAAC,GAAG;oBACV,MAAM,EAAE,UAAU,EAAE,qBAAqB;iBAC1C;aACF,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,MAAkB;QACzC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,MAAM,CAAC,UAAU,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,iBAAiB,IAAI,MAAM,CAAC,YAAY,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QAE5B,qBAAqB;QACrB,IACE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;YAC5B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAC9C,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,MAAM,CAAC;QACvC,CAAC;QAED,qBAAqB;QACrB,IACE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;YAC5B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAC9C,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,MAAM,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,MAAkB;QAC1C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,mBAAmB,CAAC,2BAA2B,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC;YACH,0BAA0B;YAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEpC,kBAAkB;YAClB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW;gBACjC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAE3B,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,mBAAmB,CAC3B,kCAAkC,IAAI,CAAC,UAAU,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC9G,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAkB;QACtC,0DAA0D;QAC1D,0EAA0E;QAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW;YACjC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACjC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE3B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;CACF"}
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/reporters/json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ /**
3
+ * Profile Human Reporter
4
+ *
5
+ * Human-readable reporter for profile command. Uses modestbench's synthwave
6
+ * ANSI theme to display profiled functions in an attractive, color-coded
7
+ * format.
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ProfileHumanReporter = void 0;
16
+ const node_path_1 = __importDefault(require("node:path"));
17
+ const ansi_js_1 = require("../utils/ansi.cjs");
18
+ /**
19
+ * Human-readable profile reporter
20
+ */
21
+ class ProfileHumanReporter {
22
+ groupByFile;
23
+ useColor;
24
+ constructor(options = {}) {
25
+ this.useColor =
26
+ options.color ??
27
+ (process.stdout.isTTY &&
28
+ process.env.FORCE_COLOR !== '0' &&
29
+ process.env.NO_COLOR == null);
30
+ this.groupByFile = options.groupByFile ?? false;
31
+ }
32
+ /**
33
+ * Generate and print profile report
34
+ */
35
+ report(data) {
36
+ this.printHeader(data);
37
+ this.printLine();
38
+ if (this.groupByFile && data.groupedByFile) {
39
+ this.printGroupedResults(data);
40
+ }
41
+ else {
42
+ this.printFlatResults(data);
43
+ }
44
+ }
45
+ colorize(color, text) {
46
+ if (!this.useColor) {
47
+ return text;
48
+ }
49
+ return `${ansi_js_1.colors[color]}${text}${ansi_js_1.colors.reset}`;
50
+ }
51
+ /**
52
+ * Format file path - show relative path if within CWD, otherwise absolute
53
+ */
54
+ formatPath(filePath) {
55
+ const cwd = process.cwd();
56
+ const absolutePath = node_path_1.default.resolve(filePath);
57
+ // Check if the file is within the current working directory
58
+ if (absolutePath.startsWith(cwd + node_path_1.default.sep) || absolutePath === cwd) {
59
+ return node_path_1.default.relative(cwd, absolutePath);
60
+ }
61
+ return absolutePath;
62
+ }
63
+ getPercentColor(percent) {
64
+ if (percent >= 10) {
65
+ return 'brightRed';
66
+ }
67
+ if (percent >= 5) {
68
+ return 'brightYellow';
69
+ }
70
+ if (percent >= 2) {
71
+ return 'brightCyan';
72
+ }
73
+ return 'white';
74
+ }
75
+ printFlatResults(data) {
76
+ const header = `${this.colorize('magenta', ansi_js_1.ansiChars.block.full.repeat(2))} ${this.colorize('brightWhite', this.colorize('bold', 'Benchmark Candidates'))}`;
77
+ this.printLine(header);
78
+ this.printLine();
79
+ this.printLine('Top functions by execution time:');
80
+ this.printLine();
81
+ for (const fn of data.functions) {
82
+ // Function name and percentage
83
+ const percentColor = this.getPercentColor(fn.percentage);
84
+ const percent = `${fn.percentage.toFixed(1)}%`;
85
+ const ticks = `(${fn.ticks.toLocaleString()} ticks)`;
86
+ this.printLine(` ${this.colorize('brightWhite', fn.name).padEnd(60)} ${this.colorize(percentColor, percent.padStart(6))} ${this.colorize('dim', ticks)}`);
87
+ // File and line
88
+ const displayPath = this.formatPath(fn.file);
89
+ const lineInfo = fn.line ? `:${fn.line}` : '';
90
+ this.printLine(` ${this.colorize('brightMagenta', this.colorize('bold', displayPath + lineInfo))}`);
91
+ this.printLine();
92
+ }
93
+ this.printSummary(data);
94
+ }
95
+ printGroupedResults(data) {
96
+ if (!data.groupedByFile) {
97
+ return;
98
+ }
99
+ const header = `${this.colorize('magenta', ansi_js_1.ansiChars.block.full.repeat(2))} ${this.colorize('brightWhite', this.colorize('bold', 'Grouped by File'))}`;
100
+ this.printLine(header);
101
+ this.printLine();
102
+ // Sort files by total percentage
103
+ const sortedFiles = Array.from(data.groupedByFile.entries()).sort((a, b) => {
104
+ const aTotal = a[1].reduce((sum, fn) => sum + fn.percentage, 0);
105
+ const bTotal = b[1].reduce((sum, fn) => sum + fn.percentage, 0);
106
+ return bTotal - aTotal;
107
+ });
108
+ for (const [file, functions] of sortedFiles) {
109
+ const totalPercent = functions.reduce((sum, fn) => sum + fn.percentage, 0);
110
+ const totalTicks = functions.reduce((sum, fn) => sum + fn.ticks, 0);
111
+ const percentColor = this.getPercentColor(totalPercent);
112
+ const percent = `${totalPercent.toFixed(1)}%`;
113
+ const ticks = `(${totalTicks.toLocaleString()} ticks)`;
114
+ // File header
115
+ const displayPath = this.formatPath(file);
116
+ this.printLine(`${this.colorize('magenta', ansi_js_1.ansiChars.block.dark)} ${this.colorize('brightMagenta', this.colorize('bold', displayPath)).padEnd(60)} ${this.colorize(percentColor, percent.padStart(6))} ${this.colorize('dim', ticks)}`);
117
+ // Functions in this file
118
+ for (const fn of functions) {
119
+ const fnPercent = `${fn.percentage.toFixed(1)}%`;
120
+ const fnTicks = `(${fn.ticks.toLocaleString()} ticks)`;
121
+ const lineInfo = fn.line ? `:${fn.line}` : '';
122
+ this.printLine(` ${this.colorize('magenta', ansi_js_1.ansiChars.smallSquare)} ${this.colorize('brightWhite', fn.name).padEnd(58)} ${this.colorize(this.getPercentColor(fn.percentage), fnPercent.padStart(6))} ${this.colorize('dim', fnTicks.padEnd(15))} ${this.colorize('dim', lineInfo)}`);
123
+ }
124
+ this.printLine();
125
+ }
126
+ this.printSummary(data);
127
+ }
128
+ printHeader(data) {
129
+ const header = `${this.colorize('magenta', ansi_js_1.ansiChars.block.full.repeat(2))} ${this.colorize('brightWhite', this.colorize('bold', 'Profile Analysis'))}`;
130
+ this.printLine(header);
131
+ this.printLine();
132
+ if (data.command) {
133
+ this.printLine(`Command: ${this.colorize('cyan', data.command)}`);
134
+ }
135
+ if (data.duration) {
136
+ const durationSec = (data.duration / 1000).toFixed(1);
137
+ this.printLine(`Duration: ${this.colorize('cyan', `${durationSec}s`)}`);
138
+ }
139
+ this.printLine(`Total Ticks: ${this.colorize('cyan', data.totalTicks.toLocaleString())}`);
140
+ }
141
+ printLine(text = '') {
142
+ console.log(text);
143
+ }
144
+ printSummary(data) {
145
+ this.printLine(`${this.colorize('dim', `... (showing top ${data.totalShown} of ${data.totalFiltered} user functions)`)}`);
146
+ }
147
+ }
148
+ exports.ProfileHumanReporter = ProfileHumanReporter;
149
+ //# sourceMappingURL=profile-human.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-human.js","sourceRoot":"","sources":["../../src/reporters/profile-human.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Profile Human Reporter
3
+ *
4
+ * Human-readable reporter for profile command. Uses modestbench's synthwave
5
+ * ANSI theme to display profiled functions in an attractive, color-coded
6
+ * format.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import type { FilteredProfileData } from "../types/profiler.cjs";
11
+ /**
12
+ * Reporter options
13
+ */
14
+ interface ProfileReporterOptions {
15
+ /** Enable color output */
16
+ color?: boolean;
17
+ /** Group by file */
18
+ groupByFile?: boolean;
19
+ }
20
+ /**
21
+ * Human-readable profile reporter
22
+ */
23
+ export declare class ProfileHumanReporter {
24
+ private readonly groupByFile;
25
+ private readonly useColor;
26
+ constructor(options?: ProfileReporterOptions);
27
+ /**
28
+ * Generate and print profile report
29
+ */
30
+ report(data: FilteredProfileData): void;
31
+ private colorize;
32
+ /**
33
+ * Format file path - show relative path if within CWD, otherwise absolute
34
+ */
35
+ private formatPath;
36
+ private getPercentColor;
37
+ private printFlatResults;
38
+ private printGroupedResults;
39
+ private printHeader;
40
+ private printLine;
41
+ private printSummary;
42
+ }
43
+ export {};
44
+ //# sourceMappingURL=profile-human.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-human.d.ts","sourceRoot":"","sources":["../../src/reporters/profile-human.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,8BAA6B;AAIhE;;GAEG;AACH,UAAU,sBAAsB;IAC9B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,oBAAoB;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IAEtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEvB,OAAO,GAAE,sBAA2B;IAUhD;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAWvC,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,mBAAmB;IAoD3B,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,YAAY;CAKrB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Profile Human Reporter
3
+ *
4
+ * Human-readable reporter for profile command. Uses modestbench's synthwave
5
+ * ANSI theme to display profiled functions in an attractive, color-coded
6
+ * format.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import type { FilteredProfileData } from "../types/profiler.js";
11
+ /**
12
+ * Reporter options
13
+ */
14
+ interface ProfileReporterOptions {
15
+ /** Enable color output */
16
+ color?: boolean;
17
+ /** Group by file */
18
+ groupByFile?: boolean;
19
+ }
20
+ /**
21
+ * Human-readable profile reporter
22
+ */
23
+ export declare class ProfileHumanReporter {
24
+ private readonly groupByFile;
25
+ private readonly useColor;
26
+ constructor(options?: ProfileReporterOptions);
27
+ /**
28
+ * Generate and print profile report
29
+ */
30
+ report(data: FilteredProfileData): void;
31
+ private colorize;
32
+ /**
33
+ * Format file path - show relative path if within CWD, otherwise absolute
34
+ */
35
+ private formatPath;
36
+ private getPercentColor;
37
+ private printFlatResults;
38
+ private printGroupedResults;
39
+ private printHeader;
40
+ private printLine;
41
+ private printSummary;
42
+ }
43
+ export {};
44
+ //# sourceMappingURL=profile-human.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-human.d.ts","sourceRoot":"","sources":["../../src/reporters/profile-human.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,6BAA6B;AAIhE;;GAEG;AACH,UAAU,sBAAsB;IAC9B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,oBAAoB;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IAEtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEvB,OAAO,GAAE,sBAA2B;IAUhD;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAWvC,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,mBAAmB;IAoD3B,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,YAAY;CAKrB"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Profile Human Reporter
3
+ *
4
+ * Human-readable reporter for profile command. Uses modestbench's synthwave
5
+ * ANSI theme to display profiled functions in an attractive, color-coded
6
+ * format.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import path from 'node:path';
11
+ import { ansiChars, colors } from "../utils/ansi.js";
12
+ /**
13
+ * Human-readable profile reporter
14
+ */
15
+ export class ProfileHumanReporter {
16
+ groupByFile;
17
+ useColor;
18
+ constructor(options = {}) {
19
+ this.useColor =
20
+ options.color ??
21
+ (process.stdout.isTTY &&
22
+ process.env.FORCE_COLOR !== '0' &&
23
+ process.env.NO_COLOR == null);
24
+ this.groupByFile = options.groupByFile ?? false;
25
+ }
26
+ /**
27
+ * Generate and print profile report
28
+ */
29
+ report(data) {
30
+ this.printHeader(data);
31
+ this.printLine();
32
+ if (this.groupByFile && data.groupedByFile) {
33
+ this.printGroupedResults(data);
34
+ }
35
+ else {
36
+ this.printFlatResults(data);
37
+ }
38
+ }
39
+ colorize(color, text) {
40
+ if (!this.useColor) {
41
+ return text;
42
+ }
43
+ return `${colors[color]}${text}${colors.reset}`;
44
+ }
45
+ /**
46
+ * Format file path - show relative path if within CWD, otherwise absolute
47
+ */
48
+ formatPath(filePath) {
49
+ const cwd = process.cwd();
50
+ const absolutePath = path.resolve(filePath);
51
+ // Check if the file is within the current working directory
52
+ if (absolutePath.startsWith(cwd + path.sep) || absolutePath === cwd) {
53
+ return path.relative(cwd, absolutePath);
54
+ }
55
+ return absolutePath;
56
+ }
57
+ getPercentColor(percent) {
58
+ if (percent >= 10) {
59
+ return 'brightRed';
60
+ }
61
+ if (percent >= 5) {
62
+ return 'brightYellow';
63
+ }
64
+ if (percent >= 2) {
65
+ return 'brightCyan';
66
+ }
67
+ return 'white';
68
+ }
69
+ printFlatResults(data) {
70
+ const header = `${this.colorize('magenta', ansiChars.block.full.repeat(2))} ${this.colorize('brightWhite', this.colorize('bold', 'Benchmark Candidates'))}`;
71
+ this.printLine(header);
72
+ this.printLine();
73
+ this.printLine('Top functions by execution time:');
74
+ this.printLine();
75
+ for (const fn of data.functions) {
76
+ // Function name and percentage
77
+ const percentColor = this.getPercentColor(fn.percentage);
78
+ const percent = `${fn.percentage.toFixed(1)}%`;
79
+ const ticks = `(${fn.ticks.toLocaleString()} ticks)`;
80
+ this.printLine(` ${this.colorize('brightWhite', fn.name).padEnd(60)} ${this.colorize(percentColor, percent.padStart(6))} ${this.colorize('dim', ticks)}`);
81
+ // File and line
82
+ const displayPath = this.formatPath(fn.file);
83
+ const lineInfo = fn.line ? `:${fn.line}` : '';
84
+ this.printLine(` ${this.colorize('brightMagenta', this.colorize('bold', displayPath + lineInfo))}`);
85
+ this.printLine();
86
+ }
87
+ this.printSummary(data);
88
+ }
89
+ printGroupedResults(data) {
90
+ if (!data.groupedByFile) {
91
+ return;
92
+ }
93
+ const header = `${this.colorize('magenta', ansiChars.block.full.repeat(2))} ${this.colorize('brightWhite', this.colorize('bold', 'Grouped by File'))}`;
94
+ this.printLine(header);
95
+ this.printLine();
96
+ // Sort files by total percentage
97
+ const sortedFiles = Array.from(data.groupedByFile.entries()).sort((a, b) => {
98
+ const aTotal = a[1].reduce((sum, fn) => sum + fn.percentage, 0);
99
+ const bTotal = b[1].reduce((sum, fn) => sum + fn.percentage, 0);
100
+ return bTotal - aTotal;
101
+ });
102
+ for (const [file, functions] of sortedFiles) {
103
+ const totalPercent = functions.reduce((sum, fn) => sum + fn.percentage, 0);
104
+ const totalTicks = functions.reduce((sum, fn) => sum + fn.ticks, 0);
105
+ const percentColor = this.getPercentColor(totalPercent);
106
+ const percent = `${totalPercent.toFixed(1)}%`;
107
+ const ticks = `(${totalTicks.toLocaleString()} ticks)`;
108
+ // File header
109
+ const displayPath = this.formatPath(file);
110
+ this.printLine(`${this.colorize('magenta', ansiChars.block.dark)} ${this.colorize('brightMagenta', this.colorize('bold', displayPath)).padEnd(60)} ${this.colorize(percentColor, percent.padStart(6))} ${this.colorize('dim', ticks)}`);
111
+ // Functions in this file
112
+ for (const fn of functions) {
113
+ const fnPercent = `${fn.percentage.toFixed(1)}%`;
114
+ const fnTicks = `(${fn.ticks.toLocaleString()} ticks)`;
115
+ const lineInfo = fn.line ? `:${fn.line}` : '';
116
+ this.printLine(` ${this.colorize('magenta', ansiChars.smallSquare)} ${this.colorize('brightWhite', fn.name).padEnd(58)} ${this.colorize(this.getPercentColor(fn.percentage), fnPercent.padStart(6))} ${this.colorize('dim', fnTicks.padEnd(15))} ${this.colorize('dim', lineInfo)}`);
117
+ }
118
+ this.printLine();
119
+ }
120
+ this.printSummary(data);
121
+ }
122
+ printHeader(data) {
123
+ const header = `${this.colorize('magenta', ansiChars.block.full.repeat(2))} ${this.colorize('brightWhite', this.colorize('bold', 'Profile Analysis'))}`;
124
+ this.printLine(header);
125
+ this.printLine();
126
+ if (data.command) {
127
+ this.printLine(`Command: ${this.colorize('cyan', data.command)}`);
128
+ }
129
+ if (data.duration) {
130
+ const durationSec = (data.duration / 1000).toFixed(1);
131
+ this.printLine(`Duration: ${this.colorize('cyan', `${durationSec}s`)}`);
132
+ }
133
+ this.printLine(`Total Ticks: ${this.colorize('cyan', data.totalTicks.toLocaleString())}`);
134
+ }
135
+ printLine(text = '') {
136
+ console.log(text);
137
+ }
138
+ printSummary(data) {
139
+ this.printLine(`${this.colorize('dim', `... (showing top ${data.totalShown} of ${data.totalFiltered} user functions)`)}`);
140
+ }
141
+ }
142
+ //# sourceMappingURL=profile-human.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-human.js","sourceRoot":"","sources":["../../src/reporters/profile-human.ts"],"names":[],"mappings":"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"}