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
@@ -40,9 +40,10 @@ var __importStar = (this && this.__importStar) || (function () {
40
40
  };
41
41
  })();
42
42
  Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.safeParseConfig = exports.partialModestBenchConfigSchema = void 0;
43
+ exports.safeParseConfig = exports.safeParsePartialConfig = exports.partialModestBenchConfigSchema = void 0;
44
44
  const z = __importStar(require("zod"));
45
45
  const constants_js_1 = require("../constants.cjs");
46
+ const budget_schema_js_1 = require("./budget-schema.cjs");
46
47
  /**
47
48
  * Schema for threshold configuration
48
49
  *
@@ -86,6 +87,41 @@ const thresholdConfigSchema = z
86
87
  .meta({
87
88
  title: 'Threshold Configuration',
88
89
  });
90
+ /**
91
+ * Inline budget schema for configuration (no transforms for JSON Schema
92
+ * compatibility - transforms are applied manually in transformBudgets
93
+ * function)
94
+ */
95
+ const budgetSchema = z
96
+ .object({
97
+ absolute: z
98
+ .object({
99
+ maxP99: z
100
+ .union([z.number().positive(), z.string()])
101
+ .optional()
102
+ .describe('Maximum 99th percentile in nanoseconds or time string'),
103
+ maxTime: z
104
+ .union([z.number().positive(), z.string()])
105
+ .describe('Maximum mean time in nanoseconds or time string (e.g., "10ms")'),
106
+ minOpsPerSec: z
107
+ .number()
108
+ .positive()
109
+ .optional()
110
+ .describe('Minimum operations per second'),
111
+ })
112
+ .optional()
113
+ .describe('Absolute performance thresholds'),
114
+ relative: z
115
+ .object({
116
+ maxRegression: z
117
+ .union([z.number().min(0).max(1), z.string()])
118
+ .optional()
119
+ .describe('Maximum regression as decimal (0.1) or percentage string ("10%")'),
120
+ })
121
+ .optional()
122
+ .describe('Relative performance thresholds vs baseline'),
123
+ })
124
+ .describe('Performance budget with absolute and/or relative thresholds');
89
125
  /**
90
126
  * Schema for the main ModestBench configuration
91
127
  *
@@ -99,6 +135,18 @@ const modestBenchConfigSchema = z
99
135
  .optional()
100
136
  .describe('JSON Schema reference for IDE support (not used by ModestBench)'),
101
137
  bail: z.boolean().describe('Stop benchmark execution on first failure'),
138
+ baseline: z
139
+ .string()
140
+ .optional()
141
+ .describe('Name of baseline to use for relative budget comparisons. Must match a saved baseline name.'),
142
+ budgetMode: z
143
+ .enum(['fail', 'warn', 'report'])
144
+ .optional()
145
+ .describe('How to handle budget violations: "fail" exits with error (default), "warn" shows warnings, "report" includes in output without failing'),
146
+ budgets: z
147
+ .record(z.string(), z.record(z.string(), z.record(z.string(), budgetSchema)))
148
+ .optional()
149
+ .describe('Performance budgets organized by file → suite → task. Budgets define acceptable performance thresholds.'),
102
150
  exclude: z
103
151
  .array(z.string())
104
152
  .describe('Glob patterns to exclude from benchmark file discovery (e.g., "node_modules/**", ".git/**")'),
@@ -123,6 +171,45 @@ const modestBenchConfigSchema = z
123
171
  pattern: z
124
172
  .union([z.string().min(1), z.array(z.string().min(1))])
125
173
  .describe(`Glob pattern(s) for discovering benchmark files. Can be a single pattern string or array of patterns (e.g., "**/*${constants_js_1.BENCHMARK_FILE_PATTERN}")`),
174
+ profile: z
175
+ .object({
176
+ exclude: z
177
+ .array(z.string())
178
+ .optional()
179
+ .describe('Glob patterns to exclude from profiling results'),
180
+ focus: z
181
+ .array(z.string())
182
+ .optional()
183
+ .describe('Glob patterns to focus on in profiling results. If specified, only matching files will be shown'),
184
+ minCallCount: z
185
+ .number()
186
+ .int()
187
+ .nonnegative()
188
+ .optional()
189
+ .describe('Minimum number of times a function must be called to be included in results'),
190
+ minExecutionPercent: z
191
+ .number()
192
+ .nonnegative()
193
+ .max(100)
194
+ .default(1.0)
195
+ .describe('Minimum execution percentage threshold for including functions in results'),
196
+ outputFile: z
197
+ .string()
198
+ .optional()
199
+ .describe('Path to write profile report to file'),
200
+ smartDetection: z
201
+ .boolean()
202
+ .default(true)
203
+ .describe('Automatically detect and focus on user code, excluding node_modules and Node.js internals'),
204
+ topN: z
205
+ .number()
206
+ .int()
207
+ .positive()
208
+ .default(25)
209
+ .describe('Maximum number of top functions to show in results'),
210
+ })
211
+ .optional()
212
+ .describe('Configuration for profile command to identify benchmark candidates'),
126
213
  quiet: z
127
214
  .boolean()
128
215
  .describe('Run in quiet mode with minimal console output (only errors and final results)'),
@@ -168,6 +255,88 @@ const modestBenchConfigSchema = z
168
255
  * merging with defaults.
169
256
  */
170
257
  exports.partialModestBenchConfigSchema = modestBenchConfigSchema.partial();
258
+ /**
259
+ * Transform budget values (parse time/percentage strings)
260
+ */
261
+ const transformBudgetValues = (budget) => {
262
+ const transformed = {};
263
+ if (budget.absolute) {
264
+ transformed.absolute = {};
265
+ // Copy minOpsPerSec as-is (already a number)
266
+ if (budget.absolute.minOpsPerSec !== undefined) {
267
+ transformed.absolute.minOpsPerSec = budget.absolute.minOpsPerSec;
268
+ }
269
+ // Parse time strings
270
+ if (budget.absolute.maxTime !== undefined) {
271
+ transformed.absolute.maxTime =
272
+ typeof budget.absolute.maxTime === 'string'
273
+ ? (0, budget_schema_js_1.parseTimeString)(budget.absolute.maxTime)
274
+ : budget.absolute.maxTime;
275
+ }
276
+ if (budget.absolute.maxP99 !== undefined) {
277
+ transformed.absolute.maxP99 =
278
+ typeof budget.absolute.maxP99 === 'string'
279
+ ? (0, budget_schema_js_1.parseTimeString)(budget.absolute.maxP99)
280
+ : budget.absolute.maxP99;
281
+ }
282
+ }
283
+ if (budget.relative) {
284
+ transformed.relative = {};
285
+ // Parse percentage strings
286
+ if (budget.relative.maxRegression !== undefined) {
287
+ transformed.relative.maxRegression =
288
+ typeof budget.relative.maxRegression === 'string'
289
+ ? (0, budget_schema_js_1.parsePercentageString)(budget.relative.maxRegression)
290
+ : budget.relative.maxRegression;
291
+ }
292
+ }
293
+ return transformed;
294
+ };
295
+ /**
296
+ * Transform nested budget structure to flat TaskId → Budget mapping Also parses
297
+ * time and percentage strings
298
+ *
299
+ * @internal
300
+ */
301
+ const transformBudgets = (nested) => {
302
+ if (!nested) {
303
+ return undefined;
304
+ }
305
+ const flat = {};
306
+ for (const [file, suites] of Object.entries(nested)) {
307
+ for (const [suite, tasks] of Object.entries(suites)) {
308
+ for (const [task, budget] of Object.entries(tasks)) {
309
+ const taskId = `${file}/${suite}/${task}`;
310
+ // Transform budget values (parse strings)
311
+ flat[taskId] = transformBudgetValues(budget);
312
+ }
313
+ }
314
+ }
315
+ return flat;
316
+ };
317
+ /**
318
+ * Safely parse and validate a partial configuration object with budget
319
+ * transformation
320
+ *
321
+ * @param config - The configuration object to validate
322
+ * @returns A result object with either success: true and data, or success:
323
+ * false and error
324
+ */
325
+ const safeParsePartialConfig = (config) => {
326
+ const result = exports.partialModestBenchConfigSchema.safeParse(config);
327
+ // Transform nested budgets to flat structure after validation
328
+ if (result.success && result.data.budgets) {
329
+ return {
330
+ ...result,
331
+ data: {
332
+ ...result.data,
333
+ budgets: transformBudgets(result.data.budgets),
334
+ },
335
+ };
336
+ }
337
+ return result;
338
+ };
339
+ exports.safeParsePartialConfig = safeParsePartialConfig;
171
340
  /**
172
341
  * Safely parse and validate a configuration object
173
342
  *
@@ -176,7 +345,18 @@ exports.partialModestBenchConfigSchema = modestBenchConfigSchema.partial();
176
345
  * false and error
177
346
  */
178
347
  const safeParseConfig = (config) => {
179
- return modestBenchConfigSchema.safeParse(config);
348
+ const result = modestBenchConfigSchema.safeParse(config);
349
+ // Transform nested budgets to flat structure after validation
350
+ if (result.success && result.data.budgets) {
351
+ return {
352
+ ...result,
353
+ data: {
354
+ ...result.data,
355
+ budgets: transformBudgets(result.data.budgets),
356
+ },
357
+ };
358
+ }
359
+ return result;
180
360
  };
181
361
  exports.safeParseConfig = safeParseConfig;
182
362
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,15 @@ import type { ModestBenchConfig } from "../types/core.cjs";
14
14
  * merging with defaults.
15
15
  */
16
16
  export declare const partialModestBenchConfigSchema: z.ZodType<Partial<ModestBenchConfig>>;
17
+ /**
18
+ * Safely parse and validate a partial configuration object with budget
19
+ * transformation
20
+ *
21
+ * @param config - The configuration object to validate
22
+ * @returns A result object with either success: true and data, or success:
23
+ * false and error
24
+ */
25
+ export declare const safeParsePartialConfig: (config: unknown) => z.ZodSafeParseResult<Partial<ModestBenchConfig>>;
17
26
  /**
18
27
  * Safely parse and validate a configuration object
19
28
  *
@@ -21,12 +30,12 @@ export declare const partialModestBenchConfigSchema: z.ZodType<Partial<ModestBen
21
30
  * @returns A result object with either success: true and data, or success:
22
31
  * false and error
23
32
  */
24
- export declare const safeParseConfig: (config: unknown) => z.ZodSafeParseResult<{
33
+ export declare const safeParseConfig: (config: unknown) => z.ZodSafeParseSuccess<{
25
34
  bail: boolean;
26
35
  exclude: string[];
27
36
  excludeTags: string[];
28
37
  iterations: number;
29
- limitBy: "iterations" | "all" | "any" | "time";
38
+ limitBy: "any" | "iterations" | "time" | "all";
30
39
  metadata: Record<string, unknown>;
31
40
  outputDir: string;
32
41
  pattern: string | string[];
@@ -47,5 +56,115 @@ export declare const safeParseConfig: (config: unknown) => z.ZodSafeParseResult<
47
56
  verbose: boolean;
48
57
  warmup: number;
49
58
  $schema?: string | undefined;
50
- }>;
59
+ baseline?: string | undefined;
60
+ budgetMode?: "fail" | "warn" | "report" | undefined;
61
+ budgets?: Record<string, Record<string, Record<string, {
62
+ absolute?: {
63
+ maxTime: string | number;
64
+ maxP99?: string | number | undefined;
65
+ minOpsPerSec?: number | undefined;
66
+ } | undefined;
67
+ relative?: {
68
+ maxRegression?: string | number | undefined;
69
+ } | undefined;
70
+ }>>> | undefined;
71
+ profile?: {
72
+ minExecutionPercent: number;
73
+ smartDetection: boolean;
74
+ topN: number;
75
+ exclude?: string[] | undefined;
76
+ focus?: string[] | undefined;
77
+ minCallCount?: number | undefined;
78
+ outputFile?: string | undefined;
79
+ } | undefined;
80
+ }> | z.ZodSafeParseError<{
81
+ bail: boolean;
82
+ exclude: string[];
83
+ excludeTags: string[];
84
+ iterations: number;
85
+ limitBy: "any" | "iterations" | "time" | "all";
86
+ metadata: Record<string, unknown>;
87
+ outputDir: string;
88
+ pattern: string | string[];
89
+ quiet: boolean;
90
+ reporterConfig: Record<string, unknown>;
91
+ reporters: string[];
92
+ tags: string[];
93
+ thresholds: {
94
+ maxMarginOfError?: number | undefined;
95
+ maxMean?: number | undefined;
96
+ maxP95?: number | undefined;
97
+ maxP99?: number | undefined;
98
+ maxStdDev?: number | undefined;
99
+ minOpsPerSecond?: number | undefined;
100
+ };
101
+ time: number;
102
+ timeout: number;
103
+ verbose: boolean;
104
+ warmup: number;
105
+ $schema?: string | undefined;
106
+ baseline?: string | undefined;
107
+ budgetMode?: "fail" | "warn" | "report" | undefined;
108
+ budgets?: Record<string, Record<string, Record<string, {
109
+ absolute?: {
110
+ maxTime: string | number;
111
+ maxP99?: string | number | undefined;
112
+ minOpsPerSec?: number | undefined;
113
+ } | undefined;
114
+ relative?: {
115
+ maxRegression?: string | number | undefined;
116
+ } | undefined;
117
+ }>>> | undefined;
118
+ profile?: {
119
+ minExecutionPercent: number;
120
+ smartDetection: boolean;
121
+ topN: number;
122
+ exclude?: string[] | undefined;
123
+ focus?: string[] | undefined;
124
+ minCallCount?: number | undefined;
125
+ outputFile?: string | undefined;
126
+ } | undefined;
127
+ }> | {
128
+ data: {
129
+ budgets: Record<string, unknown> | undefined;
130
+ bail: boolean;
131
+ exclude: string[];
132
+ excludeTags: string[];
133
+ iterations: number;
134
+ limitBy: "any" | "iterations" | "time" | "all";
135
+ metadata: Record<string, unknown>;
136
+ outputDir: string;
137
+ pattern: string | string[];
138
+ quiet: boolean;
139
+ reporterConfig: Record<string, unknown>;
140
+ reporters: string[];
141
+ tags: string[];
142
+ thresholds: {
143
+ maxMarginOfError?: number | undefined;
144
+ maxMean?: number | undefined;
145
+ maxP95?: number | undefined;
146
+ maxP99?: number | undefined;
147
+ maxStdDev?: number | undefined;
148
+ minOpsPerSecond?: number | undefined;
149
+ };
150
+ time: number;
151
+ timeout: number;
152
+ verbose: boolean;
153
+ warmup: number;
154
+ $schema?: string | undefined;
155
+ baseline?: string | undefined;
156
+ budgetMode?: "fail" | "warn" | "report" | undefined;
157
+ profile?: {
158
+ minExecutionPercent: number;
159
+ smartDetection: boolean;
160
+ topN: number;
161
+ exclude?: string[] | undefined;
162
+ focus?: string[] | undefined;
163
+ minCallCount?: number | undefined;
164
+ outputFile?: string | undefined;
165
+ } | undefined;
166
+ };
167
+ success: true;
168
+ error?: never;
169
+ };
51
170
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,0BAAyB;AA8J1D;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,CAAC,CAAC,OAAO,CACpD,OAAO,CAAC,iBAAiB,CAAC,CACS,CAAC;AAEtC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;EAE9C,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,0BAAyB;AA6Q1D;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,CAAC,CAAC,OAAO,CACpD,OAAO,CAAC,iBAAiB,CAAC,CACS,CAAC;AAsGtC;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,OAAO,qDAoBrD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoB9C,CAAC"}
@@ -14,6 +14,15 @@ import type { ModestBenchConfig } from "../types/core.js";
14
14
  * merging with defaults.
15
15
  */
16
16
  export declare const partialModestBenchConfigSchema: z.ZodType<Partial<ModestBenchConfig>>;
17
+ /**
18
+ * Safely parse and validate a partial configuration object with budget
19
+ * transformation
20
+ *
21
+ * @param config - The configuration object to validate
22
+ * @returns A result object with either success: true and data, or success:
23
+ * false and error
24
+ */
25
+ export declare const safeParsePartialConfig: (config: unknown) => z.ZodSafeParseResult<Partial<ModestBenchConfig>>;
17
26
  /**
18
27
  * Safely parse and validate a configuration object
19
28
  *
@@ -21,12 +30,12 @@ export declare const partialModestBenchConfigSchema: z.ZodType<Partial<ModestBen
21
30
  * @returns A result object with either success: true and data, or success:
22
31
  * false and error
23
32
  */
24
- export declare const safeParseConfig: (config: unknown) => z.ZodSafeParseResult<{
33
+ export declare const safeParseConfig: (config: unknown) => z.ZodSafeParseSuccess<{
25
34
  bail: boolean;
26
35
  exclude: string[];
27
36
  excludeTags: string[];
28
37
  iterations: number;
29
- limitBy: "iterations" | "all" | "any" | "time";
38
+ limitBy: "any" | "iterations" | "time" | "all";
30
39
  metadata: Record<string, unknown>;
31
40
  outputDir: string;
32
41
  pattern: string | string[];
@@ -47,5 +56,115 @@ export declare const safeParseConfig: (config: unknown) => z.ZodSafeParseResult<
47
56
  verbose: boolean;
48
57
  warmup: number;
49
58
  $schema?: string | undefined;
50
- }>;
59
+ baseline?: string | undefined;
60
+ budgetMode?: "fail" | "warn" | "report" | undefined;
61
+ budgets?: Record<string, Record<string, Record<string, {
62
+ absolute?: {
63
+ maxTime: string | number;
64
+ maxP99?: string | number | undefined;
65
+ minOpsPerSec?: number | undefined;
66
+ } | undefined;
67
+ relative?: {
68
+ maxRegression?: string | number | undefined;
69
+ } | undefined;
70
+ }>>> | undefined;
71
+ profile?: {
72
+ minExecutionPercent: number;
73
+ smartDetection: boolean;
74
+ topN: number;
75
+ exclude?: string[] | undefined;
76
+ focus?: string[] | undefined;
77
+ minCallCount?: number | undefined;
78
+ outputFile?: string | undefined;
79
+ } | undefined;
80
+ }> | z.ZodSafeParseError<{
81
+ bail: boolean;
82
+ exclude: string[];
83
+ excludeTags: string[];
84
+ iterations: number;
85
+ limitBy: "any" | "iterations" | "time" | "all";
86
+ metadata: Record<string, unknown>;
87
+ outputDir: string;
88
+ pattern: string | string[];
89
+ quiet: boolean;
90
+ reporterConfig: Record<string, unknown>;
91
+ reporters: string[];
92
+ tags: string[];
93
+ thresholds: {
94
+ maxMarginOfError?: number | undefined;
95
+ maxMean?: number | undefined;
96
+ maxP95?: number | undefined;
97
+ maxP99?: number | undefined;
98
+ maxStdDev?: number | undefined;
99
+ minOpsPerSecond?: number | undefined;
100
+ };
101
+ time: number;
102
+ timeout: number;
103
+ verbose: boolean;
104
+ warmup: number;
105
+ $schema?: string | undefined;
106
+ baseline?: string | undefined;
107
+ budgetMode?: "fail" | "warn" | "report" | undefined;
108
+ budgets?: Record<string, Record<string, Record<string, {
109
+ absolute?: {
110
+ maxTime: string | number;
111
+ maxP99?: string | number | undefined;
112
+ minOpsPerSec?: number | undefined;
113
+ } | undefined;
114
+ relative?: {
115
+ maxRegression?: string | number | undefined;
116
+ } | undefined;
117
+ }>>> | undefined;
118
+ profile?: {
119
+ minExecutionPercent: number;
120
+ smartDetection: boolean;
121
+ topN: number;
122
+ exclude?: string[] | undefined;
123
+ focus?: string[] | undefined;
124
+ minCallCount?: number | undefined;
125
+ outputFile?: string | undefined;
126
+ } | undefined;
127
+ }> | {
128
+ data: {
129
+ budgets: Record<string, unknown> | undefined;
130
+ bail: boolean;
131
+ exclude: string[];
132
+ excludeTags: string[];
133
+ iterations: number;
134
+ limitBy: "any" | "iterations" | "time" | "all";
135
+ metadata: Record<string, unknown>;
136
+ outputDir: string;
137
+ pattern: string | string[];
138
+ quiet: boolean;
139
+ reporterConfig: Record<string, unknown>;
140
+ reporters: string[];
141
+ tags: string[];
142
+ thresholds: {
143
+ maxMarginOfError?: number | undefined;
144
+ maxMean?: number | undefined;
145
+ maxP95?: number | undefined;
146
+ maxP99?: number | undefined;
147
+ maxStdDev?: number | undefined;
148
+ minOpsPerSecond?: number | undefined;
149
+ };
150
+ time: number;
151
+ timeout: number;
152
+ verbose: boolean;
153
+ warmup: number;
154
+ $schema?: string | undefined;
155
+ baseline?: string | undefined;
156
+ budgetMode?: "fail" | "warn" | "report" | undefined;
157
+ profile?: {
158
+ minExecutionPercent: number;
159
+ smartDetection: boolean;
160
+ topN: number;
161
+ exclude?: string[] | undefined;
162
+ focus?: string[] | undefined;
163
+ minCallCount?: number | undefined;
164
+ outputFile?: string | undefined;
165
+ } | undefined;
166
+ };
167
+ success: true;
168
+ error?: never;
169
+ };
51
170
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB;AA8J1D;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,CAAC,CAAC,OAAO,CACpD,OAAO,CAAC,iBAAiB,CAAC,CACS,CAAC;AAEtC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;EAE9C,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB;AA6Q1D;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,CAAC,CAAC,OAAO,CACpD,OAAO,CAAC,iBAAiB,CAAC,CACS,CAAC;AAsGtC;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,OAAO,qDAoBrD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoB9C,CAAC"}