modestbench 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +131 -34
  3. package/dist/cli/commands/analyze.cjs +60 -0
  4. package/dist/cli/commands/analyze.cjs.map +1 -0
  5. package/dist/cli/commands/analyze.d.cts +35 -0
  6. package/dist/cli/commands/analyze.d.cts.map +1 -0
  7. package/dist/cli/commands/analyze.d.ts +35 -0
  8. package/dist/cli/commands/analyze.d.ts.map +1 -0
  9. package/dist/cli/commands/analyze.js +56 -0
  10. package/dist/cli/commands/analyze.js.map +1 -0
  11. package/dist/cli/commands/baseline.cjs +404 -0
  12. package/dist/cli/commands/baseline.cjs.map +1 -0
  13. package/dist/cli/commands/baseline.d.cts +72 -0
  14. package/dist/cli/commands/baseline.d.cts.map +1 -0
  15. package/dist/cli/commands/baseline.d.ts +72 -0
  16. package/dist/cli/commands/baseline.d.ts.map +1 -0
  17. package/dist/cli/commands/baseline.js +396 -0
  18. package/dist/cli/commands/baseline.js.map +1 -0
  19. package/dist/cli/commands/history.d.cts +1 -1
  20. package/dist/cli/commands/history.d.cts.map +1 -1
  21. package/dist/cli/commands/history.d.ts +1 -1
  22. package/dist/cli/commands/history.d.ts.map +1 -1
  23. package/dist/cli/commands/init.cjs +99 -166
  24. package/dist/cli/commands/init.cjs.map +1 -1
  25. package/dist/cli/commands/init.d.cts +4 -4
  26. package/dist/cli/commands/init.d.cts.map +1 -1
  27. package/dist/cli/commands/init.d.ts +4 -4
  28. package/dist/cli/commands/init.d.ts.map +1 -1
  29. package/dist/cli/commands/init.js +99 -166
  30. package/dist/cli/commands/init.js.map +1 -1
  31. package/dist/cli/commands/run.cjs +146 -127
  32. package/dist/cli/commands/run.cjs.map +1 -1
  33. package/dist/cli/commands/run.d.cts +16 -3
  34. package/dist/cli/commands/run.d.cts.map +1 -1
  35. package/dist/cli/commands/run.d.ts +16 -3
  36. package/dist/cli/commands/run.d.ts.map +1 -1
  37. package/dist/cli/commands/run.js +145 -93
  38. package/dist/cli/commands/run.js.map +1 -1
  39. package/dist/cli/index.cjs +583 -394
  40. package/dist/cli/index.cjs.map +1 -1
  41. package/dist/cli/index.d.cts +4 -16
  42. package/dist/cli/index.d.cts.map +1 -1
  43. package/dist/cli/index.d.ts +4 -16
  44. package/dist/cli/index.d.ts.map +1 -1
  45. package/dist/cli/index.js +575 -386
  46. package/dist/cli/index.js.map +1 -1
  47. package/dist/config/budget-schema.cjs +172 -0
  48. package/dist/config/budget-schema.cjs.map +1 -0
  49. package/dist/config/budget-schema.d.cts +59 -0
  50. package/dist/config/budget-schema.d.cts.map +1 -0
  51. package/dist/config/budget-schema.d.ts +59 -0
  52. package/dist/config/budget-schema.d.ts.map +1 -0
  53. package/dist/config/budget-schema.js +166 -0
  54. package/dist/config/budget-schema.js.map +1 -0
  55. package/dist/config/schema.cjs +182 -2
  56. package/dist/config/schema.cjs.map +1 -1
  57. package/dist/config/schema.d.cts +122 -3
  58. package/dist/config/schema.d.cts.map +1 -1
  59. package/dist/config/schema.d.ts +122 -3
  60. package/dist/config/schema.d.ts.map +1 -1
  61. package/dist/config/schema.js +180 -1
  62. package/dist/config/schema.js.map +1 -1
  63. package/dist/constants.cjs +45 -2
  64. package/dist/constants.cjs.map +1 -1
  65. package/dist/constants.d.cts +41 -0
  66. package/dist/constants.d.cts.map +1 -1
  67. package/dist/constants.d.ts +41 -0
  68. package/dist/constants.d.ts.map +1 -1
  69. package/dist/constants.js +44 -1
  70. package/dist/constants.js.map +1 -1
  71. package/dist/core/engine.cjs +114 -23
  72. package/dist/core/engine.cjs.map +1 -1
  73. package/dist/core/engine.d.cts +7 -7
  74. package/dist/core/engine.d.cts.map +1 -1
  75. package/dist/core/engine.d.ts +7 -7
  76. package/dist/core/engine.d.ts.map +1 -1
  77. package/dist/core/engine.js +115 -24
  78. package/dist/core/engine.js.map +1 -1
  79. package/dist/core/engines/accurate-engine.cjs +171 -36
  80. package/dist/core/engines/accurate-engine.cjs.map +1 -1
  81. package/dist/core/engines/accurate-engine.d.cts +5 -0
  82. package/dist/core/engines/accurate-engine.d.cts.map +1 -1
  83. package/dist/core/engines/accurate-engine.d.ts +5 -0
  84. package/dist/core/engines/accurate-engine.d.ts.map +1 -1
  85. package/dist/core/engines/accurate-engine.js +171 -36
  86. package/dist/core/engines/accurate-engine.js.map +1 -1
  87. package/dist/core/engines/tinybench-engine.cjs +3 -2
  88. package/dist/core/engines/tinybench-engine.cjs.map +1 -1
  89. package/dist/core/engines/tinybench-engine.d.cts.map +1 -1
  90. package/dist/core/engines/tinybench-engine.d.ts.map +1 -1
  91. package/dist/core/engines/tinybench-engine.js +3 -2
  92. package/dist/core/engines/tinybench-engine.js.map +1 -1
  93. package/dist/core/output-path-resolver.cjs +8 -1
  94. package/dist/core/output-path-resolver.cjs.map +1 -1
  95. package/dist/core/output-path-resolver.d.cts.map +1 -1
  96. package/dist/core/output-path-resolver.d.ts.map +1 -1
  97. package/dist/core/output-path-resolver.js +9 -2
  98. package/dist/core/output-path-resolver.js.map +1 -1
  99. package/dist/errors/base.cjs +12 -3
  100. package/dist/errors/base.cjs.map +1 -1
  101. package/dist/errors/base.d.cts +7 -0
  102. package/dist/errors/base.d.cts.map +1 -1
  103. package/dist/errors/base.d.ts +7 -0
  104. package/dist/errors/base.d.ts.map +1 -1
  105. package/dist/errors/base.js +10 -2
  106. package/dist/errors/base.js.map +1 -1
  107. package/dist/errors/budget.cjs +37 -0
  108. package/dist/errors/budget.cjs.map +1 -0
  109. package/dist/errors/budget.d.cts +31 -0
  110. package/dist/errors/budget.d.cts.map +1 -0
  111. package/dist/errors/budget.d.ts +31 -0
  112. package/dist/errors/budget.d.ts.map +1 -0
  113. package/dist/errors/budget.js +33 -0
  114. package/dist/errors/budget.js.map +1 -0
  115. package/dist/errors/index.cjs +4 -1
  116. package/dist/errors/index.cjs.map +1 -1
  117. package/dist/errors/index.d.cts +1 -0
  118. package/dist/errors/index.d.cts.map +1 -1
  119. package/dist/errors/index.d.ts +1 -0
  120. package/dist/errors/index.d.ts.map +1 -1
  121. package/dist/errors/index.js +2 -0
  122. package/dist/errors/index.js.map +1 -1
  123. package/dist/index.cjs +13 -1
  124. package/dist/index.cjs.map +1 -1
  125. package/dist/index.d.cts +5 -0
  126. package/dist/index.d.cts.map +1 -1
  127. package/dist/index.d.ts +5 -0
  128. package/dist/index.d.ts.map +1 -1
  129. package/dist/index.js +7 -0
  130. package/dist/index.js.map +1 -1
  131. package/dist/reporters/csv.cjs +37 -17
  132. package/dist/reporters/csv.cjs.map +1 -1
  133. package/dist/reporters/csv.d.cts +3 -6
  134. package/dist/reporters/csv.d.cts.map +1 -1
  135. package/dist/reporters/csv.d.ts +3 -6
  136. package/dist/reporters/csv.d.ts.map +1 -1
  137. package/dist/reporters/csv.js +37 -17
  138. package/dist/reporters/csv.js.map +1 -1
  139. package/dist/reporters/human.cjs +290 -67
  140. package/dist/reporters/human.cjs.map +1 -1
  141. package/dist/reporters/human.d.cts +25 -13
  142. package/dist/reporters/human.d.cts.map +1 -1
  143. package/dist/reporters/human.d.ts +25 -13
  144. package/dist/reporters/human.d.ts.map +1 -1
  145. package/dist/reporters/human.js +290 -67
  146. package/dist/reporters/human.js.map +1 -1
  147. package/dist/reporters/json.cjs +23 -48
  148. package/dist/reporters/json.cjs.map +1 -1
  149. package/dist/reporters/json.d.cts +2 -28
  150. package/dist/reporters/json.d.cts.map +1 -1
  151. package/dist/reporters/json.d.ts +2 -28
  152. package/dist/reporters/json.d.ts.map +1 -1
  153. package/dist/reporters/json.js +25 -50
  154. package/dist/reporters/json.js.map +1 -1
  155. package/dist/reporters/profile-human.cjs +154 -0
  156. package/dist/reporters/profile-human.cjs.map +1 -0
  157. package/dist/reporters/profile-human.d.cts +44 -0
  158. package/dist/reporters/profile-human.d.cts.map +1 -0
  159. package/dist/reporters/profile-human.d.ts +44 -0
  160. package/dist/reporters/profile-human.d.ts.map +1 -0
  161. package/dist/reporters/profile-human.js +147 -0
  162. package/dist/reporters/profile-human.js.map +1 -0
  163. package/dist/reporters/simple.cjs +67 -45
  164. package/dist/reporters/simple.cjs.map +1 -1
  165. package/dist/reporters/simple.d.cts +14 -14
  166. package/dist/reporters/simple.d.cts.map +1 -1
  167. package/dist/reporters/simple.d.ts +14 -14
  168. package/dist/reporters/simple.d.ts.map +1 -1
  169. package/dist/reporters/simple.js +67 -45
  170. package/dist/reporters/simple.js.map +1 -1
  171. package/dist/schema/modestbench-config.schema.json +153 -0
  172. package/dist/services/baseline-storage.cjs +151 -0
  173. package/dist/services/baseline-storage.cjs.map +1 -0
  174. package/dist/services/baseline-storage.d.cts +55 -0
  175. package/dist/services/baseline-storage.d.cts.map +1 -0
  176. package/dist/services/baseline-storage.d.ts +55 -0
  177. package/dist/services/baseline-storage.d.ts.map +1 -0
  178. package/dist/services/baseline-storage.js +147 -0
  179. package/dist/services/baseline-storage.js.map +1 -0
  180. package/dist/services/budget-evaluator.cjs +146 -0
  181. package/dist/services/budget-evaluator.cjs.map +1 -0
  182. package/dist/services/budget-evaluator.d.cts +29 -0
  183. package/dist/services/budget-evaluator.d.cts.map +1 -0
  184. package/dist/services/budget-evaluator.d.ts +29 -0
  185. package/dist/services/budget-evaluator.d.ts.map +1 -0
  186. package/dist/services/budget-evaluator.js +142 -0
  187. package/dist/services/budget-evaluator.js.map +1 -0
  188. package/dist/services/config-manager.cjs +24 -10
  189. package/dist/services/config-manager.cjs.map +1 -1
  190. package/dist/services/config-manager.d.cts +6 -1
  191. package/dist/services/config-manager.d.cts.map +1 -1
  192. package/dist/services/config-manager.d.ts +6 -1
  193. package/dist/services/config-manager.d.ts.map +1 -1
  194. package/dist/services/config-manager.js +24 -10
  195. package/dist/services/config-manager.js.map +1 -1
  196. package/dist/services/file-loader.cjs +3 -6
  197. package/dist/services/file-loader.cjs.map +1 -1
  198. package/dist/services/file-loader.d.cts.map +1 -1
  199. package/dist/services/file-loader.d.ts.map +1 -1
  200. package/dist/services/file-loader.js +3 -6
  201. package/dist/services/file-loader.js.map +1 -1
  202. package/dist/services/profiler/profile-filter.cjs +116 -0
  203. package/dist/services/profiler/profile-filter.cjs.map +1 -0
  204. package/dist/services/profiler/profile-filter.d.cts +20 -0
  205. package/dist/services/profiler/profile-filter.d.cts.map +1 -0
  206. package/dist/services/profiler/profile-filter.d.ts +20 -0
  207. package/dist/services/profiler/profile-filter.d.ts.map +1 -0
  208. package/dist/services/profiler/profile-filter.js +112 -0
  209. package/dist/services/profiler/profile-filter.js.map +1 -0
  210. package/dist/services/profiler/profile-parser.cjs +139 -0
  211. package/dist/services/profiler/profile-parser.cjs.map +1 -0
  212. package/dist/services/profiler/profile-parser.d.cts +18 -0
  213. package/dist/services/profiler/profile-parser.d.cts.map +1 -0
  214. package/dist/services/profiler/profile-parser.d.ts +18 -0
  215. package/dist/services/profiler/profile-parser.d.ts.map +1 -0
  216. package/dist/services/profiler/profile-parser.js +132 -0
  217. package/dist/services/profiler/profile-parser.js.map +1 -0
  218. package/dist/services/profiler/profile-runner.cjs +90 -0
  219. package/dist/services/profiler/profile-runner.cjs.map +1 -0
  220. package/dist/services/profiler/profile-runner.d.cts +29 -0
  221. package/dist/services/profiler/profile-runner.d.cts.map +1 -0
  222. package/dist/services/profiler/profile-runner.d.ts +29 -0
  223. package/dist/services/profiler/profile-runner.d.ts.map +1 -0
  224. package/dist/services/profiler/profile-runner.js +86 -0
  225. package/dist/services/profiler/profile-runner.js.map +1 -0
  226. package/dist/services/progress-manager.cjs +10 -2
  227. package/dist/services/progress-manager.cjs.map +1 -1
  228. package/dist/services/progress-manager.d.cts +2 -0
  229. package/dist/services/progress-manager.d.cts.map +1 -1
  230. package/dist/services/progress-manager.d.ts +2 -0
  231. package/dist/services/progress-manager.d.ts.map +1 -1
  232. package/dist/services/progress-manager.js +10 -2
  233. package/dist/services/progress-manager.js.map +1 -1
  234. package/dist/services/reporter-registry.cjs +18 -24
  235. package/dist/services/reporter-registry.cjs.map +1 -1
  236. package/dist/services/reporter-registry.d.cts +18 -40
  237. package/dist/services/reporter-registry.d.cts.map +1 -1
  238. package/dist/services/reporter-registry.d.ts +18 -40
  239. package/dist/services/reporter-registry.d.ts.map +1 -1
  240. package/dist/services/reporter-registry.js +18 -24
  241. package/dist/services/reporter-registry.js.map +1 -1
  242. package/dist/types/budgets.cjs +8 -0
  243. package/dist/types/budgets.cjs.map +1 -0
  244. package/dist/types/budgets.d.cts +149 -0
  245. package/dist/types/budgets.d.cts.map +1 -0
  246. package/dist/types/budgets.d.ts +149 -0
  247. package/dist/types/budgets.d.ts.map +1 -0
  248. package/dist/types/budgets.js +7 -0
  249. package/dist/types/budgets.js.map +1 -0
  250. package/dist/types/cli.cjs +2 -11
  251. package/dist/types/cli.cjs.map +1 -1
  252. package/dist/types/cli.d.cts +3 -227
  253. package/dist/types/cli.d.cts.map +1 -1
  254. package/dist/types/cli.d.ts +3 -227
  255. package/dist/types/cli.d.ts.map +1 -1
  256. package/dist/types/cli.js +2 -11
  257. package/dist/types/cli.js.map +1 -1
  258. package/dist/types/core.cjs +6 -1
  259. package/dist/types/core.cjs.map +1 -1
  260. package/dist/types/core.d.cts +15 -2
  261. package/dist/types/core.d.cts.map +1 -1
  262. package/dist/types/core.d.ts +15 -2
  263. package/dist/types/core.d.ts.map +1 -1
  264. package/dist/types/core.js +2 -1
  265. package/dist/types/core.js.map +1 -1
  266. package/dist/types/index.cjs +5 -0
  267. package/dist/types/index.cjs.map +1 -1
  268. package/dist/types/index.d.cts +2 -0
  269. package/dist/types/index.d.cts.map +1 -1
  270. package/dist/types/index.d.ts +2 -0
  271. package/dist/types/index.d.ts.map +1 -1
  272. package/dist/types/index.js +2 -0
  273. package/dist/types/index.js.map +1 -1
  274. package/dist/types/interfaces.d.cts +19 -8
  275. package/dist/types/interfaces.d.cts.map +1 -1
  276. package/dist/types/interfaces.d.ts +19 -8
  277. package/dist/types/interfaces.d.ts.map +1 -1
  278. package/dist/types/profiler.cjs +11 -0
  279. package/dist/types/profiler.cjs.map +1 -0
  280. package/dist/types/profiler.d.cts +102 -0
  281. package/dist/types/profiler.d.cts.map +1 -0
  282. package/dist/types/profiler.d.ts +102 -0
  283. package/dist/types/profiler.d.ts.map +1 -0
  284. package/dist/types/profiler.js +10 -0
  285. package/dist/types/profiler.js.map +1 -0
  286. package/dist/types/utility.cjs.map +1 -1
  287. package/dist/types/utility.d.cts +0 -8
  288. package/dist/types/utility.d.cts.map +1 -1
  289. package/dist/types/utility.d.ts +0 -8
  290. package/dist/types/utility.d.ts.map +1 -1
  291. package/dist/types/utility.js.map +1 -1
  292. package/dist/utils/identifiers.cjs +32 -0
  293. package/dist/utils/identifiers.cjs.map +1 -0
  294. package/dist/utils/identifiers.d.cts +32 -0
  295. package/dist/utils/identifiers.d.cts.map +1 -0
  296. package/dist/utils/identifiers.d.ts +32 -0
  297. package/dist/utils/identifiers.d.ts.map +1 -0
  298. package/dist/utils/identifiers.js +27 -0
  299. package/dist/utils/identifiers.js.map +1 -0
  300. package/dist/utils/package.cjs +40 -0
  301. package/dist/utils/package.cjs.map +1 -0
  302. package/dist/utils/package.d.cts +15 -0
  303. package/dist/utils/package.d.cts.map +1 -0
  304. package/dist/utils/package.d.ts +15 -0
  305. package/dist/utils/package.d.ts.map +1 -0
  306. package/dist/utils/package.js +33 -0
  307. package/dist/utils/package.js.map +1 -0
  308. package/dist/utils/type-guards.cjs +48 -0
  309. package/dist/utils/type-guards.cjs.map +1 -0
  310. package/dist/utils/type-guards.d.cts +22 -0
  311. package/dist/utils/type-guards.d.cts.map +1 -0
  312. package/dist/utils/type-guards.d.ts +22 -0
  313. package/dist/utils/type-guards.d.ts.map +1 -0
  314. package/dist/utils/type-guards.js +43 -0
  315. package/dist/utils/type-guards.js.map +1 -0
  316. package/package.json +18 -19
  317. package/src/cli/commands/analyze.ts +101 -0
  318. package/src/cli/commands/baseline.ts +577 -0
  319. package/src/cli/commands/history.ts +1 -1
  320. package/src/cli/commands/init.ts +116 -194
  321. package/src/cli/commands/run.ts +183 -113
  322. package/src/cli/index.ts +425 -183
  323. package/src/config/budget-schema.ts +189 -0
  324. package/src/config/schema.ts +260 -1
  325. package/src/constants.ts +53 -1
  326. package/src/core/engine.ts +169 -22
  327. package/src/core/engines/accurate-engine.ts +195 -44
  328. package/src/core/engines/tinybench-engine.ts +3 -2
  329. package/src/core/output-path-resolver.ts +10 -2
  330. package/src/errors/base.ts +11 -2
  331. package/src/errors/budget.ts +38 -0
  332. package/src/errors/index.ts +3 -0
  333. package/src/index.ts +9 -0
  334. package/src/reporters/csv.ts +54 -25
  335. package/src/reporters/human.ts +434 -115
  336. package/src/reporters/json.ts +26 -71
  337. package/src/reporters/profile-human.ts +210 -0
  338. package/src/reporters/simple.ts +88 -54
  339. package/src/services/baseline-storage.ts +199 -0
  340. package/src/services/budget-evaluator.ts +182 -0
  341. package/src/services/config-manager.ts +24 -9
  342. package/src/services/file-loader.ts +3 -6
  343. package/src/services/profiler/profile-filter.ts +147 -0
  344. package/src/services/profiler/profile-parser.ts +194 -0
  345. package/src/services/profiler/profile-runner.ts +121 -0
  346. package/src/services/progress-manager.ts +12 -2
  347. package/src/services/reporter-registry.ts +46 -81
  348. package/src/types/budgets.ts +180 -0
  349. package/src/types/cli.ts +5 -238
  350. package/src/types/core.ts +52 -10
  351. package/src/types/index.ts +5 -0
  352. package/src/types/interfaces.ts +24 -6
  353. package/src/types/profiler.ts +135 -0
  354. package/src/types/utility.ts +0 -10
  355. package/src/utils/identifiers.ts +58 -0
  356. package/src/utils/package.ts +35 -0
  357. package/src/utils/type-guards.ts +51 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.1](https://github.com/boneskull/modestbench/compare/modestbench-v0.3.0...modestbench-v0.3.1) (2025-10-29)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * fix engine and reporter problems ([b4a14f3](https://github.com/boneskull/modestbench/commit/b4a14f3eac2600752939c295935901091843bf00))
9
+
10
+ ## [0.3.0](https://github.com/boneskull/modestbench/compare/modestbench-v0.2.0...modestbench-v0.3.0) (2025-10-28)
11
+
12
+
13
+ ### Features
14
+
15
+ * add analyze command for code profiling and benchmark discovery ([330b345](https://github.com/boneskull/modestbench/commit/330b345493fc43ba6e00d64c245e2a84fd734e6d))
16
+ * add performance budgets ([367c554](https://github.com/boneskull/modestbench/commit/367c5542efea8bab7a64d22728b2ea793de91f99))
17
+ * implement --bail ([#82](https://github.com/boneskull/modestbench/issues/82)) ([69d4327](https://github.com/boneskull/modestbench/commit/69d4327ee9327ab5e6076654e79dd4a21f15770a))
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **deps:** pin dependency tinybench to 5.1.0 ([#81](https://github.com/boneskull/modestbench/issues/81)) ([1be5bbe](https://github.com/boneskull/modestbench/commit/1be5bbe332545eea8d25143f61492f87cbb2089d))
23
+ * **deps:** update dependency tinybench to v5.1.0 ([#76](https://github.com/boneskull/modestbench/issues/76)) ([cbd763c](https://github.com/boneskull/modestbench/commit/cbd763ca7d7335f9b3e7e4cda2217160b76e366c))
24
+ * **deps:** upgrade to tinybench@5.1.0 ([6668a38](https://github.com/boneskull/modestbench/commit/6668a38c1ea737320a132efd884a57a4c5f91a25))
25
+ * fix bin script ([68155e9](https://github.com/boneskull/modestbench/commit/68155e93a19cd88fa8add5fad4e2baae356eaba0))
26
+ * resolve merge conflict issues and test failures ([ab1e288](https://github.com/boneskull/modestbench/commit/ab1e288cbe11d729266fd74dc14dedc58a01bf27))
27
+ * resolve test failures and improve default behavior ([a61d798](https://github.com/boneskull/modestbench/commit/a61d798127ca58eac4ef2f3e03944703459dda31))
28
+ * resolve TypeScript type errors in budget transformation ([b8f2155](https://github.com/boneskull/modestbench/commit/b8f215533829e533515c7af1f8396aea71517c10))
29
+
3
30
  ## [0.2.0](https://github.com/boneskull/modestbench/compare/modestbench-v0.1.0...modestbench-v0.2.0) (2025-10-26)
4
31
 
5
32
 
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,7 +126,7 @@ 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
@@ -170,9 +171,12 @@ modestbench file.bench.js benchmarks/ "tests/**/*.bench.ts"
170
171
  modestbench \
171
172
  --config ./config.json \
172
173
  --iterations 2000 \
173
- --reporters human,json,csv \
174
+ --reporter human \
175
+ --reporter json \
176
+ --reporter csv \
174
177
  --output ./results \
175
- --tags performance,algorithm \
178
+ --tag performance \
179
+ --tag algorithm \
176
180
  --concurrent
177
181
  ```
178
182
 
@@ -222,23 +226,23 @@ Run specific subsets of benchmarks using tags:
222
226
 
223
227
  ```bash
224
228
  # Run only benchmarks tagged with 'fast'
225
- modestbench --tags fast
229
+ modestbench --tag fast
226
230
 
227
231
  # Run benchmarks with multiple tags (OR logic - matches ANY)
228
- modestbench --tags string,array,algorithm
232
+ modestbench --tag string --tag array --tag algorithm
229
233
 
230
234
  # Exclude specific benchmarks
231
- modestbench --exclude-tags slow,experimental
235
+ modestbench --exclude-tag slow --exclude-tag experimental
232
236
 
233
237
  # Combine: run fast benchmarks except experimental ones
234
- modestbench --tags fast --exclude-tags experimental
238
+ modestbench --tag fast --exclude-tag experimental
235
239
  ```
236
240
 
237
241
  **Key Features:**
238
242
 
239
243
  - Tags cascade from file → suite → task levels
240
- - `--tags` uses OR logic (matches ANY specified tag)
241
- - `--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`
242
246
  - Suite setup/teardown only runs if at least one task matches
243
247
 
244
248
  See [Tagging and Filtering](#tagging-and-filtering) for detailed examples.
@@ -249,22 +253,22 @@ Control where and how benchmark results are saved:
249
253
 
250
254
  ```bash
251
255
  # Write to a directory (creates results.json, results.csv, etc.)
252
- modestbench --reporters json,csv --output ./results
256
+ modestbench --reporter json --reporter csv --output ./results
253
257
 
254
258
  # Custom filename for single reporter
255
- modestbench --reporters json --output-file my-benchmarks.json
259
+ modestbench --reporter json --output-file my-benchmarks.json
256
260
 
257
261
  # Custom filename in specific directory
258
- modestbench --reporters json --output ./results --output-file benchmarks-2024.json
262
+ modestbench --reporter json --output ./results --output-file benchmarks-2024.json
259
263
 
260
264
  # Custom filename with absolute path
261
- modestbench --reporters json --output-file /tmp/my-benchmarks.json
265
+ modestbench --reporter json --output-file /tmp/my-benchmarks.json
262
266
 
263
267
  # With subdirectories
264
- modestbench --reporters csv --output ./results --output-file reports/performance.csv
268
+ modestbench --reporter csv --output ./results --output-file reports/performance.csv
265
269
 
266
- # Short flag alias
267
- modestbench --reporters json --of custom.json
270
+ # Short flag alias (using -r for --reporter)
271
+ modestbench -r json --of custom.json
268
272
  ```
269
273
 
270
274
  **Key Options:**
@@ -272,7 +276,7 @@ modestbench --reporters json --of custom.json
272
276
  - `--output <dir>`, `-o <dir>` - Directory to write output files (default: stdout)
273
277
  - `--output-file <filename>`, `--of <filename>` - Custom filename for output
274
278
  - Works with absolute or relative paths
275
- - Requires exactly one reporter (e.g., `--reporters json`)
279
+ - Requires exactly one reporter (e.g., `--reporter json`)
276
280
  - When used with `--output`, the filename is relative to that directory
277
281
  - When used alone, the path is relative to current working directory
278
282
 
@@ -307,6 +311,98 @@ modestbench history export --format csv --output results.csv
307
311
  modestbench history clean --older-than 30d
308
312
  ```
309
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
+
310
406
  ## Configuration
311
407
 
312
408
  ### Project Configuration
@@ -509,37 +605,37 @@ export default {
509
605
 
510
606
  #### Filtering Benchmarks
511
607
 
512
- 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):
513
609
 
514
610
  ```bash
515
- # Run only fast algorithms
516
- modestbench run --tags fast
611
+ # Run fast algorithms
612
+ modestbench run --tag fast
517
613
 
518
614
  # Run benchmarks tagged with 'string' OR 'array'
519
- modestbench run --tags string,array
615
+ modestbench run --tag string --tag array
520
616
 
521
- # Multiple tags can be space-separated too
522
- modestbench run --tags fast optimized
617
+ # Using short aliases
618
+ modestbench run -t fast -t optimized
523
619
  ```
524
620
 
525
- Use `--exclude-tags` to skip benchmarks with specific tags:
621
+ Use `--exclude-tag` (or `-e`) to skip benchmarks with specific tags:
526
622
 
527
623
  ```bash
528
624
  # Exclude slow benchmarks
529
- modestbench run --exclude-tags slow
625
+ modestbench run --exclude-tag slow
530
626
 
531
627
  # Exclude experimental and unstable benchmarks
532
- modestbench run --exclude-tags experimental,unstable
628
+ modestbench run --exclude-tag experimental --exclude-tag unstable
533
629
  ```
534
630
 
535
631
  Combine both to fine-tune your benchmark runs (exclusion takes precedence):
536
632
 
537
633
  ```bash
538
634
  # Run fast benchmarks, but exclude experimental ones
539
- modestbench run --tags fast --exclude-tags experimental
635
+ modestbench run --tag fast --exclude-tag experimental
540
636
 
541
637
  # Run algorithm benchmarks but skip slow reference implementations
542
- modestbench run --tags algorithm --exclude-tags slow,reference
638
+ modestbench run --tag algorithm --exclude-tag slow --exclude-tag reference
543
639
  ```
544
640
 
545
641
  #### Tag Cascading Example
@@ -565,10 +661,10 @@ export default {
565
661
 
566
662
  **Filtering Behavior:**
567
663
 
568
- - `--tags math` → Runs only Task A (matches 'math')
569
- - `--tags fast` → Runs both Task A and Task B (both have 'fast')
570
- - `--tags file-level` → Runs both tasks (both inherit 'file-level')
571
- - `--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)
572
668
 
573
669
  #### Suite Lifecycle with Filtering
574
670
 
@@ -597,7 +693,8 @@ jobs:
597
693
  - name: Run Benchmarks
598
694
  run: |
599
695
  modestbench \
600
- --reporters json,csv \
696
+ --reporter json \
697
+ --reporter csv \
601
698
  --output ./results
602
699
 
603
700
  - name: Upload Results
@@ -615,7 +712,7 @@ import { execSync } from 'child_process';
615
712
  import { readFileSync } from 'fs';
616
713
 
617
714
  // Run current benchmarks
618
- execSync('modestbench --reporters json --output ./current');
715
+ execSync('modestbench --reporter json --output ./current');
619
716
  const current = JSON.parse(readFileSync('./current/results.json'));
620
717
 
621
718
  // Load baseline results
@@ -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"}