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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.0](https://github.com/boneskull/modestbench/compare/modestbench-v0.2.0...modestbench-v0.3.0) (2025-10-28)
4
+
5
+
6
+ ### Features
7
+
8
+ * add analyze command for code profiling and benchmark discovery ([330b345](https://github.com/boneskull/modestbench/commit/330b345493fc43ba6e00d64c245e2a84fd734e6d))
9
+ * add performance budgets ([367c554](https://github.com/boneskull/modestbench/commit/367c5542efea8bab7a64d22728b2ea793de91f99))
10
+ * implement --bail ([#82](https://github.com/boneskull/modestbench/issues/82)) ([69d4327](https://github.com/boneskull/modestbench/commit/69d4327ee9327ab5e6076654e79dd4a21f15770a))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **deps:** pin dependency tinybench to 5.1.0 ([#81](https://github.com/boneskull/modestbench/issues/81)) ([1be5bbe](https://github.com/boneskull/modestbench/commit/1be5bbe332545eea8d25143f61492f87cbb2089d))
16
+ * **deps:** update dependency tinybench to v5.1.0 ([#76](https://github.com/boneskull/modestbench/issues/76)) ([cbd763c](https://github.com/boneskull/modestbench/commit/cbd763ca7d7335f9b3e7e4cda2217160b76e366c))
17
+ * **deps:** upgrade to tinybench@5.1.0 ([6668a38](https://github.com/boneskull/modestbench/commit/6668a38c1ea737320a132efd884a57a4c5f91a25))
18
+ * fix bin script ([68155e9](https://github.com/boneskull/modestbench/commit/68155e93a19cd88fa8add5fad4e2baae356eaba0))
19
+ * resolve merge conflict issues and test failures ([ab1e288](https://github.com/boneskull/modestbench/commit/ab1e288cbe11d729266fd74dc14dedc58a01bf27))
20
+ * resolve test failures and improve default behavior ([a61d798](https://github.com/boneskull/modestbench/commit/a61d798127ca58eac4ef2f3e03944703459dda31))
21
+ * resolve TypeScript type errors in budget transformation ([b8f2155](https://github.com/boneskull/modestbench/commit/b8f215533829e533515c7af1f8396aea71517c10))
22
+
23
+ ## [0.2.0](https://github.com/boneskull/modestbench/compare/modestbench-v0.1.0...modestbench-v0.2.0) (2025-10-26)
24
+
25
+
26
+ ### Features
27
+
28
+ * add --output-file CLI option ([#66](https://github.com/boneskull/modestbench/issues/66)) ([09bb5ae](https://github.com/boneskull/modestbench/commit/09bb5ae7468c9d5eb9d1e9641c58350a5b3856dd))
29
+ * **history:** implement trend analysis and comparison ([#64](https://github.com/boneskull/modestbench/issues/64)) ([acf7dda](https://github.com/boneskull/modestbench/commit/acf7ddaa91f7ae242c2a2df86fd610ce88f8ac91))
30
+ * **history:** implement trends and comparison ([acf7dda](https://github.com/boneskull/modestbench/commit/acf7ddaa91f7ae242c2a2df86fd610ce88f8ac91))
31
+ * implement date parsing, compare, and trend analysis core ([acf7dda](https://github.com/boneskull/modestbench/commit/acf7ddaa91f7ae242c2a2df86fd610ce88f8ac91))
32
+ * implement full trends command with visualizations ([acf7dda](https://github.com/boneskull/modestbench/commit/acf7ddaa91f7ae242c2a2df86fd610ce88f8ac91))
33
+
3
34
  ## [0.1.0](https://github.com/boneskull/modestbench/compare/modestbench-v0.0.3...modestbench-v0.1.0) (2025-10-24)
4
35
 
5
36
 
package/README.md CHANGED
@@ -14,6 +14,7 @@
14
14
  - **Multiple Output Formats**: Human-readable, JSON, and CSV reports (at the same time!!)
15
15
  - **Historical Tracking**: Store and compare benchmark results over time
16
16
  - **Tagging System**: Organize and filter benchmarks by categories
17
+ - **Performance Budgets**: Enforce performance standards and prevent regressions
17
18
  - **CLI & API**: Command-line interface and programmatic API
18
19
  - **TypeScript Support**: Full type safety
19
20
 
@@ -125,42 +126,12 @@ export default {
125
126
  modestbench
126
127
 
127
128
  # Run with specific options
128
- modestbench --iterations 5000 --reporters human,json
129
+ modestbench --iterations 5000 --reporter human --reporter json
129
130
  ```
130
131
 
131
132
  ### View Results
132
133
 
133
- ```text
134
- 🚀 ModestBench
135
-
136
- Environment:
137
- Node.js: v24.10.0
138
- Platform: darwin arm64
139
- CPU: Apple M4 Max (16 cores)
140
- Memory: 48.0 GB
141
-
142
- Found 1 benchmark file(s)
143
-
144
- ▶ benchmarks/example.bench.js
145
-
146
- ▶ Array Operations
147
- ✓ Array.push()
148
- 810.05μs ±2.45% (1.23M ops/sec)
149
- ✓ Array spread
150
- 81.01ms ±4.12% (12.34K ops/sec)
151
- ✓ 2 passed
152
-
153
- ✓ All 2 tasks passed
154
-
155
- 📊 Results
156
-
157
- ✓ All tests passed: 2
158
- 📁 Files: 1
159
- 📊 Suites: 1
160
- ⏱️ Duration: 1.82s
161
-
162
- 🎉 All benchmarks completed successfully!
163
- ```
134
+ ![Example output showing colorful terminal display with benchmark results](./public/human-reporter.png)
164
135
 
165
136
  ## Getting Started
166
137
 
@@ -200,9 +171,12 @@ modestbench file.bench.js benchmarks/ "tests/**/*.bench.ts"
200
171
  modestbench \
201
172
  --config ./config.json \
202
173
  --iterations 2000 \
203
- --reporters human,json,csv \
174
+ --reporter human \
175
+ --reporter json \
176
+ --reporter csv \
204
177
  --output ./results \
205
- --tags performance,algorithm \
178
+ --tag performance \
179
+ --tag algorithm \
206
180
  --concurrent
207
181
  ```
208
182
 
@@ -252,27 +226,65 @@ Run specific subsets of benchmarks using tags:
252
226
 
253
227
  ```bash
254
228
  # Run only benchmarks tagged with 'fast'
255
- modestbench --tags fast
229
+ modestbench --tag fast
256
230
 
257
231
  # Run benchmarks with multiple tags (OR logic - matches ANY)
258
- modestbench --tags string,array,algorithm
232
+ modestbench --tag string --tag array --tag algorithm
259
233
 
260
234
  # Exclude specific benchmarks
261
- modestbench --exclude-tags slow,experimental
235
+ modestbench --exclude-tag slow --exclude-tag experimental
262
236
 
263
237
  # Combine: run fast benchmarks except experimental ones
264
- modestbench --tags fast --exclude-tags experimental
238
+ modestbench --tag fast --exclude-tag experimental
265
239
  ```
266
240
 
267
241
  **Key Features:**
268
242
 
269
243
  - Tags cascade from file → suite → task levels
270
- - `--tags` uses OR logic (matches ANY specified tag)
271
- - `--exclude-tags` takes precedence over `--tags`
244
+ - `--tag` uses OR logic when specified multiple times (matches ANY specified tag)
245
+ - `--exclude-tag` takes precedence over `--tag`
272
246
  - Suite setup/teardown only runs if at least one task matches
273
247
 
274
248
  See [Tagging and Filtering](#tagging-and-filtering) for detailed examples.
275
249
 
250
+ #### Output Options
251
+
252
+ Control where and how benchmark results are saved:
253
+
254
+ ```bash
255
+ # Write to a directory (creates results.json, results.csv, etc.)
256
+ modestbench --reporter json --reporter csv --output ./results
257
+
258
+ # Custom filename for single reporter
259
+ modestbench --reporter json --output-file my-benchmarks.json
260
+
261
+ # Custom filename in specific directory
262
+ modestbench --reporter json --output ./results --output-file benchmarks-2024.json
263
+
264
+ # Custom filename with absolute path
265
+ modestbench --reporter json --output-file /tmp/my-benchmarks.json
266
+
267
+ # With subdirectories
268
+ modestbench --reporter csv --output ./results --output-file reports/performance.csv
269
+
270
+ # Short flag alias (using -r for --reporter)
271
+ modestbench -r json --of custom.json
272
+ ```
273
+
274
+ **Key Options:**
275
+
276
+ - `--output <dir>`, `-o <dir>` - Directory to write output files (default: stdout)
277
+ - `--output-file <filename>`, `--of <filename>` - Custom filename for output
278
+ - Works with absolute or relative paths
279
+ - Requires exactly one reporter (e.g., `--reporter json`)
280
+ - When used with `--output`, the filename is relative to that directory
281
+ - When used alone, the path is relative to current working directory
282
+
283
+ **Limitations:**
284
+
285
+ - `--output-file` only works with a single reporter
286
+ - For multiple reporters, use `--output <dir>` (defaults to `results.json`, `results.csv`, etc.)
287
+
276
288
  ### History Management
277
289
 
278
290
  **modestbench** automatically tracks benchmark results over time in a local `.modestbench/` directory. This history enables you to:
@@ -299,6 +311,98 @@ modestbench history export --format csv --output results.csv
299
311
  modestbench history clean --older-than 30d
300
312
  ```
301
313
 
314
+ ### Performance Budgets
315
+
316
+ **modestbench** supports performance budgets to prevent regressions and enforce performance standards in CI/CD.
317
+
318
+ #### Configuring Budgets
319
+
320
+ Define budgets in your `modestbench.config.json`:
321
+
322
+ ```json
323
+ {
324
+ "budgetMode": "fail",
325
+ "budgets": {
326
+ "benchmarks/critical.bench.js/default/parseConfig": {
327
+ "absolute": {
328
+ "maxTime": "10ms",
329
+ "minOpsPerSec": 100000
330
+ }
331
+ }
332
+ }
333
+ }
334
+ ```
335
+
336
+ **Budget Types:**
337
+
338
+ - **Absolute Budgets**: Fixed thresholds
339
+ - `maxTime` - Maximum mean execution time (e.g., `"10ms"`, `"500us"`)
340
+ - `minOpsPerSec` - Minimum operations per second
341
+ - `maxP99` - Maximum 99th percentile latency
342
+
343
+ - **Relative Budgets**: Comparison against baseline
344
+ - `maxRegression` - Maximum performance degradation (e.g., `"10%"`, `0.1`)
345
+
346
+ **Budget Modes:**
347
+
348
+ - `fail` (default) - Exit with error code if budgets fail
349
+ - `warn` - Show warnings but don't fail
350
+ - `report` - Include in output without failing
351
+
352
+ #### Managing Baselines
353
+
354
+ ```bash
355
+ # Save current run as a baseline
356
+ modestbench baseline set production-v1.0
357
+
358
+ # List all baselines
359
+ modestbench baseline list
360
+
361
+ # Compare against a baseline
362
+ modestbench run --baseline production-v1.0
363
+
364
+ # Analyze history and suggest budgets
365
+ modestbench baseline analyze
366
+ ```
367
+
368
+ ### Profile Code Execution
369
+
370
+ Identify hot code paths that are good candidates for benchmarking:
371
+
372
+ ```bash
373
+ # Profile a command
374
+ modestbench analyze "npm test"
375
+
376
+ # Profile a specific script
377
+ modestbench analyze "node ./src/server.js"
378
+
379
+ # Analyze existing profile
380
+ modestbench analyze --input isolate-0x123-v8.log
381
+
382
+ # Filter and customize output
383
+ modestbench analyze "npm test" \
384
+ --filter-file "src/**" \
385
+ --min-percent 2.0 \
386
+ --top 50 \
387
+ --group-by-file
388
+ ```
389
+
390
+ **Profile Options:**
391
+
392
+ - `[command]` - Command to profile (e.g., `npm test`, `node script.js`)
393
+ - `--input`, `-i` - Path to existing V8 profile log file
394
+ - `--filter-file` - Filter functions by file glob pattern
395
+ - `--min-percent` - Minimum execution percentage to show (default: 1.0)
396
+ - `--top`, `-n` - Number of top functions to show (default: 25)
397
+ - `--group-by-file` - Group results by source file
398
+ - `--color` - Enable/disable color output
399
+
400
+ **How It Works:**
401
+
402
+ The profile command uses Node.js's built-in V8 profiler to identify functions that consume the most execution time. It automatically filters out Node.js internals and `node_modules` to focus on your code.
403
+
404
+ Functions that appear at the top of the profile report are good candidates for benchmarking, as optimizing them will have the most impact on overall performance.
405
+
302
406
  ## Configuration
303
407
 
304
408
  ### Project Configuration
@@ -501,37 +605,37 @@ export default {
501
605
 
502
606
  #### Filtering Benchmarks
503
607
 
504
- Use `--tags` to include only benchmarks with specific tags (OR logic - matches ANY tag):
608
+ Use `--tag` (or `-t`) to include only benchmarks with specific tags (OR logic - matches ANY tag):
505
609
 
506
610
  ```bash
507
- # Run only fast algorithms
508
- modestbench run --tags fast
611
+ # Run fast algorithms
612
+ modestbench run --tag fast
509
613
 
510
614
  # Run benchmarks tagged with 'string' OR 'array'
511
- modestbench run --tags string,array
615
+ modestbench run --tag string --tag array
512
616
 
513
- # Multiple tags can be space-separated too
514
- modestbench run --tags fast optimized
617
+ # Using short aliases
618
+ modestbench run -t fast -t optimized
515
619
  ```
516
620
 
517
- Use `--exclude-tags` to skip benchmarks with specific tags:
621
+ Use `--exclude-tag` (or `-e`) to skip benchmarks with specific tags:
518
622
 
519
623
  ```bash
520
624
  # Exclude slow benchmarks
521
- modestbench run --exclude-tags slow
625
+ modestbench run --exclude-tag slow
522
626
 
523
627
  # Exclude experimental and unstable benchmarks
524
- modestbench run --exclude-tags experimental,unstable
628
+ modestbench run --exclude-tag experimental --exclude-tag unstable
525
629
  ```
526
630
 
527
631
  Combine both to fine-tune your benchmark runs (exclusion takes precedence):
528
632
 
529
633
  ```bash
530
634
  # Run fast benchmarks, but exclude experimental ones
531
- modestbench run --tags fast --exclude-tags experimental
635
+ modestbench run --tag fast --exclude-tag experimental
532
636
 
533
637
  # Run algorithm benchmarks but skip slow reference implementations
534
- modestbench run --tags algorithm --exclude-tags slow,reference
638
+ modestbench run --tag algorithm --exclude-tag slow --exclude-tag reference
535
639
  ```
536
640
 
537
641
  #### Tag Cascading Example
@@ -557,10 +661,10 @@ export default {
557
661
 
558
662
  **Filtering Behavior:**
559
663
 
560
- - `--tags math` → Runs only Task A (matches 'math')
561
- - `--tags fast` → Runs both Task A and Task B (both have 'fast')
562
- - `--tags file-level` → Runs both tasks (both inherit 'file-level')
563
- - `--exclude-tags math` → Runs only Task B (Task A excluded)
664
+ - `--tag math` → Runs only Task A (matches 'math')
665
+ - `--tag fast` → Runs both Task A and Task B (both have 'fast')
666
+ - `--tag file-level` → Runs both tasks (both inherit 'file-level')
667
+ - `--exclude-tag math` → Runs only Task B (Task A excluded)
564
668
 
565
669
  #### Suite Lifecycle with Filtering
566
670
 
@@ -589,7 +693,8 @@ jobs:
589
693
  - name: Run Benchmarks
590
694
  run: |
591
695
  modestbench \
592
- --reporters json,csv \
696
+ --reporter json \
697
+ --reporter csv \
593
698
  --output ./results
594
699
 
595
700
  - name: Upload Results
@@ -607,7 +712,7 @@ import { execSync } from 'child_process';
607
712
  import { readFileSync } from 'fs';
608
713
 
609
714
  // Run current benchmarks
610
- execSync('modestbench --reporters json --output ./current');
715
+ execSync('modestbench --reporter json --output ./current');
611
716
  const current = JSON.parse(readFileSync('./current/results.json'));
612
717
 
613
718
  // Load baseline results
@@ -7,12 +7,12 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.bootstrap = void 0;
10
- const manager_js_1 = require("./config/manager.cjs");
11
10
  const index_js_1 = require("./core/engines/index.cjs");
12
- const loader_js_1 = require("./core/loader.cjs");
13
- const manager_js_2 = require("./progress/manager.cjs");
14
- const registry_js_1 = require("./reporters/registry.cjs");
15
- const history_js_1 = require("./storage/history.cjs");
11
+ const config_manager_js_1 = require("./services/config-manager.cjs");
12
+ const file_loader_js_1 = require("./services/file-loader.cjs");
13
+ const history_storage_js_1 = require("./services/history-storage.cjs");
14
+ const progress_manager_js_1 = require("./services/progress-manager.cjs");
15
+ const reporter_registry_js_1 = require("./services/reporter-registry.cjs");
16
16
  /**
17
17
  * Initializes the ModestBench engine with default dependencies.
18
18
  *
@@ -23,11 +23,11 @@ const history_js_1 = require("./storage/history.cjs");
23
23
  */
24
24
  const bootstrap = () => {
25
25
  const engine = new index_js_1.TinybenchEngine({
26
- configManager: new manager_js_1.ModestBenchConfigurationManager(),
27
- fileLoader: new loader_js_1.BenchmarkFileLoader(),
28
- historyStorage: new history_js_1.FileHistoryStorage(),
29
- progressManager: new manager_js_2.ModestBenchProgressManager(),
30
- reporterRegistry: new registry_js_1.ModestBenchReporterRegistry(),
26
+ configManager: new config_manager_js_1.ModestBenchConfigurationManager(),
27
+ fileLoader: new file_loader_js_1.BenchmarkFileLoader(),
28
+ historyStorage: new history_storage_js_1.FileHistoryStorage(),
29
+ progressManager: new progress_manager_js_1.ModestBenchProgressManager(),
30
+ reporterRegistry: new reporter_registry_js_1.ModestBenchReporterRegistry(),
31
31
  });
32
32
  return engine;
33
33
  };
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,qDAAsE;AAEtE,uDAA0D;AAC1D,iDAAuD;AACvD,uDAAmE;AACnE,0DAAsE;AACtE,sDAA0D;AAE1D;;;;;;;GAOG;AACI,MAAM,SAAS,GAAG,GAAsB,EAAE;IAC/C,MAAM,MAAM,GAAG,IAAI,0BAAe,CAAC;QACjC,aAAa,EAAE,IAAI,4CAA+B,EAAE;QACpD,UAAU,EAAE,IAAI,+BAAmB,EAAE;QACrC,cAAc,EAAE,IAAI,+BAAkB,EAAE;QACxC,eAAe,EAAE,IAAI,uCAA0B,EAAE;QACjD,gBAAgB,EAAE,IAAI,yCAA2B,EAAE;KACpD,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AATW,QAAA,SAAS,aASpB"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAGH,uDAA0D;AAC1D,qEAA+E;AAC/E,+DAAgE;AAChE,uEAAmE;AACnE,yEAA4E;AAC5E,2EAA8E;AAE9E;;;;;;;GAOG;AACI,MAAM,SAAS,GAAG,GAAsB,EAAE;IAC/C,MAAM,MAAM,GAAG,IAAI,0BAAe,CAAC;QACjC,aAAa,EAAE,IAAI,mDAA+B,EAAE;QACpD,UAAU,EAAE,IAAI,oCAAmB,EAAE;QACrC,cAAc,EAAE,IAAI,uCAAkB,EAAE;QACxC,eAAe,EAAE,IAAI,gDAA0B,EAAE;QACjD,gBAAgB,EAAE,IAAI,kDAA2B,EAAE;KACpD,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AATW,QAAA,SAAS,aASpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,iBAAiB,EAAE,0BAAyB;AAO1D;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,QAAO,iBAS5B,CAAC"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,iBAAiB,EAAE,0BAAyB;AAQ1D;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,QAAO,iBAS5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,iBAAiB,EAAE,yBAAyB;AAO1D;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,QAAO,iBAS5B,CAAC"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,iBAAiB,EAAE,yBAAyB;AAQ1D;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,QAAO,iBAS5B,CAAC"}
package/dist/bootstrap.js CHANGED
@@ -4,12 +4,12 @@
4
4
  *
5
5
  * @packageDocumentation
6
6
  */
7
- import { ModestBenchConfigurationManager } from "./config/manager.js";
8
7
  import { TinybenchEngine } from "./core/engines/index.js";
9
- import { BenchmarkFileLoader } from "./core/loader.js";
10
- import { ModestBenchProgressManager } from "./progress/manager.js";
11
- import { ModestBenchReporterRegistry } from "./reporters/registry.js";
12
- import { FileHistoryStorage } from "./storage/history.js";
8
+ import { ModestBenchConfigurationManager } from "./services/config-manager.js";
9
+ import { BenchmarkFileLoader } from "./services/file-loader.js";
10
+ import { FileHistoryStorage } from "./services/history-storage.js";
11
+ import { ModestBenchProgressManager } from "./services/progress-manager.js";
12
+ import { ModestBenchReporterRegistry } from "./services/reporter-registry.js";
13
13
  /**
14
14
  * Initializes the ModestBench engine with default dependencies.
15
15
  *
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,+BAA+B,EAAE,4BAA4B;AAEtE,OAAO,EAAE,eAAe,EAAE,gCAAgC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,yBAAyB;AACvD,OAAO,EAAE,0BAA0B,EAAE,8BAA8B;AACnE,OAAO,EAAE,2BAA2B,EAAE,gCAAgC;AACtE,OAAO,EAAE,kBAAkB,EAAE,6BAA6B;AAE1D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAAsB,EAAE;IAC/C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,aAAa,EAAE,IAAI,+BAA+B,EAAE;QACpD,UAAU,EAAE,IAAI,mBAAmB,EAAE;QACrC,cAAc,EAAE,IAAI,kBAAkB,EAAE;QACxC,eAAe,EAAE,IAAI,0BAA0B,EAAE;QACjD,gBAAgB,EAAE,IAAI,2BAA2B,EAAE;KACpD,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,gCAAgC;AAC1D,OAAO,EAAE,+BAA+B,EAAE,qCAAqC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,kCAAkC;AAChE,OAAO,EAAE,kBAAkB,EAAE,sCAAsC;AACnE,OAAO,EAAE,0BAA0B,EAAE,uCAAuC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,wCAAwC;AAE9E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAAsB,EAAE;IAC/C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,aAAa,EAAE,IAAI,+BAA+B,EAAE;QACpD,UAAU,EAAE,IAAI,mBAAmB,EAAE;QACrC,cAAc,EAAE,IAAI,kBAAkB,EAAE;QACxC,eAAe,EAAE,IAAI,0BAA0B,EAAE;QACjD,gBAAgB,EAAE,IAAI,2BAA2B,EAAE;KACpD,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /**
3
+ * Analyze Command
4
+ *
5
+ * CLI command for analyzing code execution and identifying benchmark
6
+ * candidates. Uses Node.js V8 profiler to capture function execution data.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.handleAnalyzeCommand = void 0;
12
+ const profile_human_js_1 = require("../../reporters/profile-human.cjs");
13
+ const profile_filter_js_1 = require("../../services/profiler/profile-filter.cjs");
14
+ const profile_parser_js_1 = require("../../services/profiler/profile-parser.cjs");
15
+ const profile_runner_js_1 = require("../../services/profiler/profile-runner.cjs");
16
+ const package_js_1 = require("../../utils/package.cjs");
17
+ /**
18
+ * Handle analyze command
19
+ */
20
+ const handleAnalyzeCommand = async (_context, options) => {
21
+ try {
22
+ const startTime = Date.now();
23
+ // Run profiling or load existing profile
24
+ const logPath = options.input
25
+ ? options.input
26
+ : await (0, profile_runner_js_1.runWithProfiling)(options.command, {
27
+ cwd: options.cwd,
28
+ });
29
+ const duration = Date.now() - startTime;
30
+ // Parse profile data
31
+ const profileData = await (0, profile_parser_js_1.parseProfile)(logPath);
32
+ // Find package root for smart detection
33
+ const packageRoot = await (0, package_js_1.findPackageRoot)(options.cwd);
34
+ // Apply filtering
35
+ const config = {
36
+ focus: options.filterFile ? [options.filterFile] : undefined,
37
+ groupByFile: options.groupByFile,
38
+ minExecutionPercent: options.minPercent,
39
+ smartDetection: true,
40
+ topN: options.top,
41
+ };
42
+ const filtered = (0, profile_filter_js_1.filterProfile)(profileData, config, packageRoot);
43
+ // Add command and duration to filtered data
44
+ filtered.command = options.command;
45
+ filtered.duration = duration;
46
+ // Report results
47
+ const reporter = new profile_human_js_1.ProfileHumanReporter({
48
+ color: options.color,
49
+ groupByFile: options.groupByFile,
50
+ });
51
+ reporter.report(filtered);
52
+ return 0;
53
+ }
54
+ catch (error) {
55
+ console.error('Analyze command failed:', error);
56
+ return 1;
57
+ }
58
+ };
59
+ exports.handleAnalyzeCommand = handleAnalyzeCommand;
60
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAKH,wEAAwE;AACxE,kFAA0E;AAC1E,kFAAyE;AACzE,kFAA6E;AAC7E,wDAAyD;AA+BzD;;GAEG;AACI,MAAM,oBAAoB,GAAG,KAAK,EACvC,QAAoB,EACpB,OAAuB,EACN,EAAE;IACnB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,yCAAyC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK;YAC3B,CAAC,CAAC,OAAO,CAAC,KAAK;YACf,CAAC,CAAC,MAAM,IAAA,oCAAgB,EAAC,OAAO,CAAC,OAAQ,EAAE;gBACvC,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAC;QAEP,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,qBAAqB;QACrB,MAAM,WAAW,GAAG,MAAM,IAAA,gCAAY,EAAC,OAAO,CAAC,CAAC;QAEhD,wCAAwC;QACxC,MAAM,WAAW,GAAG,MAAM,IAAA,4BAAe,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEvD,kBAAkB;QAClB,MAAM,MAAM,GAAkB;YAC5B,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5D,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,mBAAmB,EAAE,OAAO,CAAC,UAAU;YACvC,cAAc,EAAE,IAAI;YACpB,IAAI,EAAE,OAAO,CAAC,GAAG;SAClB,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAA,iCAAa,EAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAEjE,4CAA4C;QAC5C,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QACnC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAE7B,iBAAiB;QACjB,MAAM,QAAQ,GAAG,IAAI,uCAAoB,CAAC;YACxC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QAEH,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE1B,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC,CAAC;AAlDW,QAAA,oBAAoB,wBAkD/B"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Analyze Command
3
+ *
4
+ * CLI command for analyzing code execution and identifying benchmark
5
+ * candidates. Uses Node.js V8 profiler to capture function execution data.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import type { CliContext } from "../index.cjs";
10
+ /**
11
+ * Analyze command options interface
12
+ */
13
+ export interface AnalyzeOptions {
14
+ /** Enable color output */
15
+ color?: boolean | undefined;
16
+ /** Command to analyze */
17
+ command?: string | undefined;
18
+ /** Working directory */
19
+ cwd: string;
20
+ /** Filter by file pattern */
21
+ filterFile?: string | undefined;
22
+ /** Group by file */
23
+ groupByFile?: boolean | undefined;
24
+ /** Input profile file */
25
+ input?: string | undefined;
26
+ /** Minimum execution percentage */
27
+ minPercent?: number | undefined;
28
+ /** Number of top functions to show */
29
+ top?: number | undefined;
30
+ }
31
+ /**
32
+ * Handle analyze command
33
+ */
34
+ export declare const handleAnalyzeCommand: (_context: CliContext, options: AnalyzeOptions) => Promise<number>;
35
+ //# sourceMappingURL=analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAoB;AAQ9C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAE5B,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE7B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IAEZ,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC,oBAAoB;IACpB,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAElC,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,UAAU,EACpB,SAAS,cAAc,KACtB,OAAO,CAAC,MAAM,CA+ChB,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Analyze Command
3
+ *
4
+ * CLI command for analyzing code execution and identifying benchmark
5
+ * candidates. Uses Node.js V8 profiler to capture function execution data.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import type { CliContext } from "../index.js";
10
+ /**
11
+ * Analyze command options interface
12
+ */
13
+ export interface AnalyzeOptions {
14
+ /** Enable color output */
15
+ color?: boolean | undefined;
16
+ /** Command to analyze */
17
+ command?: string | undefined;
18
+ /** Working directory */
19
+ cwd: string;
20
+ /** Filter by file pattern */
21
+ filterFile?: string | undefined;
22
+ /** Group by file */
23
+ groupByFile?: boolean | undefined;
24
+ /** Input profile file */
25
+ input?: string | undefined;
26
+ /** Minimum execution percentage */
27
+ minPercent?: number | undefined;
28
+ /** Number of top functions to show */
29
+ top?: number | undefined;
30
+ }
31
+ /**
32
+ * Handle analyze command
33
+ */
34
+ export declare const handleAnalyzeCommand: (_context: CliContext, options: AnalyzeOptions) => Promise<number>;
35
+ //# sourceMappingURL=analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB;AAQ9C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAE5B,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE7B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IAEZ,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC,oBAAoB;IACpB,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAElC,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,UAAU,EACpB,SAAS,cAAc,KACtB,OAAO,CAAC,MAAM,CA+ChB,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Analyze Command
3
+ *
4
+ * CLI command for analyzing code execution and identifying benchmark
5
+ * candidates. Uses Node.js V8 profiler to capture function execution data.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { ProfileHumanReporter } from "../../reporters/profile-human.js";
10
+ import { filterProfile } from "../../services/profiler/profile-filter.js";
11
+ import { parseProfile } from "../../services/profiler/profile-parser.js";
12
+ import { runWithProfiling } from "../../services/profiler/profile-runner.js";
13
+ import { findPackageRoot } from "../../utils/package.js";
14
+ /**
15
+ * Handle analyze command
16
+ */
17
+ export const handleAnalyzeCommand = async (_context, options) => {
18
+ try {
19
+ const startTime = Date.now();
20
+ // Run profiling or load existing profile
21
+ const logPath = options.input
22
+ ? options.input
23
+ : await runWithProfiling(options.command, {
24
+ cwd: options.cwd,
25
+ });
26
+ const duration = Date.now() - startTime;
27
+ // Parse profile data
28
+ const profileData = await parseProfile(logPath);
29
+ // Find package root for smart detection
30
+ const packageRoot = await findPackageRoot(options.cwd);
31
+ // Apply filtering
32
+ const config = {
33
+ focus: options.filterFile ? [options.filterFile] : undefined,
34
+ groupByFile: options.groupByFile,
35
+ minExecutionPercent: options.minPercent,
36
+ smartDetection: true,
37
+ topN: options.top,
38
+ };
39
+ const filtered = filterProfile(profileData, config, packageRoot);
40
+ // Add command and duration to filtered data
41
+ filtered.command = options.command;
42
+ filtered.duration = duration;
43
+ // Report results
44
+ const reporter = new ProfileHumanReporter({
45
+ color: options.color,
46
+ groupByFile: options.groupByFile,
47
+ });
48
+ reporter.report(filtered);
49
+ return 0;
50
+ }
51
+ catch (error) {
52
+ console.error('Analyze command failed:', error);
53
+ return 1;
54
+ }
55
+ };
56
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,oBAAoB,EAAE,yCAAyC;AACxE,OAAO,EAAE,aAAa,EAAE,kDAAkD;AAC1E,OAAO,EAAE,YAAY,EAAE,kDAAkD;AACzE,OAAO,EAAE,gBAAgB,EAAE,kDAAkD;AAC7E,OAAO,EAAE,eAAe,EAAE,+BAA+B;AA+BzD;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,QAAoB,EACpB,OAAuB,EACN,EAAE;IACnB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,yCAAyC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK;YAC3B,CAAC,CAAC,OAAO,CAAC,KAAK;YACf,CAAC,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,OAAQ,EAAE;gBACvC,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAC;QAEP,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,qBAAqB;QACrB,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAEhD,wCAAwC;QACxC,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEvD,kBAAkB;QAClB,MAAM,MAAM,GAAkB;YAC5B,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5D,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,mBAAmB,EAAE,OAAO,CAAC,UAAU;YACvC,cAAc,EAAE,IAAI;YACpB,IAAI,EAAE,OAAO,CAAC,GAAG;SAClB,CAAC;QAEF,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAEjE,4CAA4C;QAC5C,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QACnC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAE7B,iBAAiB;QACjB,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC;YACxC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QAEH,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE1B,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC,CAAC"}