modestbench 0.2.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 (332) hide show
  1. package/CHANGELOG.md +20 -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 +88 -155
  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 +88 -155
  30. package/dist/cli/commands/init.js.map +1 -1
  31. package/dist/cli/commands/run.cjs +132 -114
  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 +131 -80
  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 +103 -21
  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 +104 -22
  78. package/dist/core/engine.js.map +1 -1
  79. package/dist/core/output-path-resolver.cjs +8 -1
  80. package/dist/core/output-path-resolver.cjs.map +1 -1
  81. package/dist/core/output-path-resolver.d.cts.map +1 -1
  82. package/dist/core/output-path-resolver.d.ts.map +1 -1
  83. package/dist/core/output-path-resolver.js +9 -2
  84. package/dist/core/output-path-resolver.js.map +1 -1
  85. package/dist/errors/base.cjs +12 -3
  86. package/dist/errors/base.cjs.map +1 -1
  87. package/dist/errors/base.d.cts +7 -0
  88. package/dist/errors/base.d.cts.map +1 -1
  89. package/dist/errors/base.d.ts +7 -0
  90. package/dist/errors/base.d.ts.map +1 -1
  91. package/dist/errors/base.js +10 -2
  92. package/dist/errors/base.js.map +1 -1
  93. package/dist/errors/budget.cjs +37 -0
  94. package/dist/errors/budget.cjs.map +1 -0
  95. package/dist/errors/budget.d.cts +31 -0
  96. package/dist/errors/budget.d.cts.map +1 -0
  97. package/dist/errors/budget.d.ts +31 -0
  98. package/dist/errors/budget.d.ts.map +1 -0
  99. package/dist/errors/budget.js +33 -0
  100. package/dist/errors/budget.js.map +1 -0
  101. package/dist/errors/index.cjs +4 -1
  102. package/dist/errors/index.cjs.map +1 -1
  103. package/dist/errors/index.d.cts +1 -0
  104. package/dist/errors/index.d.cts.map +1 -1
  105. package/dist/errors/index.d.ts +1 -0
  106. package/dist/errors/index.d.ts.map +1 -1
  107. package/dist/errors/index.js +2 -0
  108. package/dist/errors/index.js.map +1 -1
  109. package/dist/index.cjs +13 -1
  110. package/dist/index.cjs.map +1 -1
  111. package/dist/index.d.cts +5 -0
  112. package/dist/index.d.cts.map +1 -1
  113. package/dist/index.d.ts +5 -0
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +7 -0
  116. package/dist/index.js.map +1 -1
  117. package/dist/reporters/csv.cjs +37 -17
  118. package/dist/reporters/csv.cjs.map +1 -1
  119. package/dist/reporters/csv.d.cts +3 -6
  120. package/dist/reporters/csv.d.cts.map +1 -1
  121. package/dist/reporters/csv.d.ts +3 -6
  122. package/dist/reporters/csv.d.ts.map +1 -1
  123. package/dist/reporters/csv.js +37 -17
  124. package/dist/reporters/csv.js.map +1 -1
  125. package/dist/reporters/human.cjs +66 -40
  126. package/dist/reporters/human.cjs.map +1 -1
  127. package/dist/reporters/human.d.cts +14 -13
  128. package/dist/reporters/human.d.cts.map +1 -1
  129. package/dist/reporters/human.d.ts +14 -13
  130. package/dist/reporters/human.d.ts.map +1 -1
  131. package/dist/reporters/human.js +66 -40
  132. package/dist/reporters/human.js.map +1 -1
  133. package/dist/reporters/json.cjs +23 -48
  134. package/dist/reporters/json.cjs.map +1 -1
  135. package/dist/reporters/json.d.cts +2 -28
  136. package/dist/reporters/json.d.cts.map +1 -1
  137. package/dist/reporters/json.d.ts +2 -28
  138. package/dist/reporters/json.d.ts.map +1 -1
  139. package/dist/reporters/json.js +25 -50
  140. package/dist/reporters/json.js.map +1 -1
  141. package/dist/reporters/profile-human.cjs +149 -0
  142. package/dist/reporters/profile-human.cjs.map +1 -0
  143. package/dist/reporters/profile-human.d.cts +44 -0
  144. package/dist/reporters/profile-human.d.cts.map +1 -0
  145. package/dist/reporters/profile-human.d.ts +44 -0
  146. package/dist/reporters/profile-human.d.ts.map +1 -0
  147. package/dist/reporters/profile-human.js +142 -0
  148. package/dist/reporters/profile-human.js.map +1 -0
  149. package/dist/reporters/simple.cjs +64 -44
  150. package/dist/reporters/simple.cjs.map +1 -1
  151. package/dist/reporters/simple.d.cts +14 -14
  152. package/dist/reporters/simple.d.cts.map +1 -1
  153. package/dist/reporters/simple.d.ts +14 -14
  154. package/dist/reporters/simple.d.ts.map +1 -1
  155. package/dist/reporters/simple.js +64 -44
  156. package/dist/reporters/simple.js.map +1 -1
  157. package/dist/schema/modestbench-config.schema.json +153 -0
  158. package/dist/services/baseline-storage.cjs +151 -0
  159. package/dist/services/baseline-storage.cjs.map +1 -0
  160. package/dist/services/baseline-storage.d.cts +55 -0
  161. package/dist/services/baseline-storage.d.cts.map +1 -0
  162. package/dist/services/baseline-storage.d.ts +55 -0
  163. package/dist/services/baseline-storage.d.ts.map +1 -0
  164. package/dist/services/baseline-storage.js +147 -0
  165. package/dist/services/baseline-storage.js.map +1 -0
  166. package/dist/services/budget-evaluator.cjs +146 -0
  167. package/dist/services/budget-evaluator.cjs.map +1 -0
  168. package/dist/services/budget-evaluator.d.cts +29 -0
  169. package/dist/services/budget-evaluator.d.cts.map +1 -0
  170. package/dist/services/budget-evaluator.d.ts +29 -0
  171. package/dist/services/budget-evaluator.d.ts.map +1 -0
  172. package/dist/services/budget-evaluator.js +142 -0
  173. package/dist/services/budget-evaluator.js.map +1 -0
  174. package/dist/services/config-manager.cjs +23 -9
  175. package/dist/services/config-manager.cjs.map +1 -1
  176. package/dist/services/config-manager.d.cts +6 -1
  177. package/dist/services/config-manager.d.cts.map +1 -1
  178. package/dist/services/config-manager.d.ts +6 -1
  179. package/dist/services/config-manager.d.ts.map +1 -1
  180. package/dist/services/config-manager.js +23 -9
  181. package/dist/services/config-manager.js.map +1 -1
  182. package/dist/services/file-loader.cjs +3 -6
  183. package/dist/services/file-loader.cjs.map +1 -1
  184. package/dist/services/file-loader.d.cts.map +1 -1
  185. package/dist/services/file-loader.d.ts.map +1 -1
  186. package/dist/services/file-loader.js +3 -6
  187. package/dist/services/file-loader.js.map +1 -1
  188. package/dist/services/profiler/profile-filter.cjs +113 -0
  189. package/dist/services/profiler/profile-filter.cjs.map +1 -0
  190. package/dist/services/profiler/profile-filter.d.cts +20 -0
  191. package/dist/services/profiler/profile-filter.d.cts.map +1 -0
  192. package/dist/services/profiler/profile-filter.d.ts +20 -0
  193. package/dist/services/profiler/profile-filter.d.ts.map +1 -0
  194. package/dist/services/profiler/profile-filter.js +109 -0
  195. package/dist/services/profiler/profile-filter.js.map +1 -0
  196. package/dist/services/profiler/profile-parser.cjs +139 -0
  197. package/dist/services/profiler/profile-parser.cjs.map +1 -0
  198. package/dist/services/profiler/profile-parser.d.cts +18 -0
  199. package/dist/services/profiler/profile-parser.d.cts.map +1 -0
  200. package/dist/services/profiler/profile-parser.d.ts +18 -0
  201. package/dist/services/profiler/profile-parser.d.ts.map +1 -0
  202. package/dist/services/profiler/profile-parser.js +132 -0
  203. package/dist/services/profiler/profile-parser.js.map +1 -0
  204. package/dist/services/profiler/profile-runner.cjs +90 -0
  205. package/dist/services/profiler/profile-runner.cjs.map +1 -0
  206. package/dist/services/profiler/profile-runner.d.cts +29 -0
  207. package/dist/services/profiler/profile-runner.d.cts.map +1 -0
  208. package/dist/services/profiler/profile-runner.d.ts +29 -0
  209. package/dist/services/profiler/profile-runner.d.ts.map +1 -0
  210. package/dist/services/profiler/profile-runner.js +86 -0
  211. package/dist/services/profiler/profile-runner.js.map +1 -0
  212. package/dist/services/reporter-registry.cjs +18 -24
  213. package/dist/services/reporter-registry.cjs.map +1 -1
  214. package/dist/services/reporter-registry.d.cts +18 -40
  215. package/dist/services/reporter-registry.d.cts.map +1 -1
  216. package/dist/services/reporter-registry.d.ts +18 -40
  217. package/dist/services/reporter-registry.d.ts.map +1 -1
  218. package/dist/services/reporter-registry.js +18 -24
  219. package/dist/services/reporter-registry.js.map +1 -1
  220. package/dist/types/budgets.cjs +8 -0
  221. package/dist/types/budgets.cjs.map +1 -0
  222. package/dist/types/budgets.d.cts +149 -0
  223. package/dist/types/budgets.d.cts.map +1 -0
  224. package/dist/types/budgets.d.ts +149 -0
  225. package/dist/types/budgets.d.ts.map +1 -0
  226. package/dist/types/budgets.js +7 -0
  227. package/dist/types/budgets.js.map +1 -0
  228. package/dist/types/cli.cjs +2 -11
  229. package/dist/types/cli.cjs.map +1 -1
  230. package/dist/types/cli.d.cts +3 -227
  231. package/dist/types/cli.d.cts.map +1 -1
  232. package/dist/types/cli.d.ts +3 -227
  233. package/dist/types/cli.d.ts.map +1 -1
  234. package/dist/types/cli.js +2 -11
  235. package/dist/types/cli.js.map +1 -1
  236. package/dist/types/core.cjs +6 -1
  237. package/dist/types/core.cjs.map +1 -1
  238. package/dist/types/core.d.cts +13 -2
  239. package/dist/types/core.d.cts.map +1 -1
  240. package/dist/types/core.d.ts +13 -2
  241. package/dist/types/core.d.ts.map +1 -1
  242. package/dist/types/core.js +2 -1
  243. package/dist/types/core.js.map +1 -1
  244. package/dist/types/index.cjs +5 -0
  245. package/dist/types/index.cjs.map +1 -1
  246. package/dist/types/index.d.cts +2 -0
  247. package/dist/types/index.d.cts.map +1 -1
  248. package/dist/types/index.d.ts +2 -0
  249. package/dist/types/index.d.ts.map +1 -1
  250. package/dist/types/index.js +2 -0
  251. package/dist/types/index.js.map +1 -1
  252. package/dist/types/interfaces.d.cts +15 -8
  253. package/dist/types/interfaces.d.cts.map +1 -1
  254. package/dist/types/interfaces.d.ts +15 -8
  255. package/dist/types/interfaces.d.ts.map +1 -1
  256. package/dist/types/profiler.cjs +11 -0
  257. package/dist/types/profiler.cjs.map +1 -0
  258. package/dist/types/profiler.d.cts +100 -0
  259. package/dist/types/profiler.d.cts.map +1 -0
  260. package/dist/types/profiler.d.ts +100 -0
  261. package/dist/types/profiler.d.ts.map +1 -0
  262. package/dist/types/profiler.js +10 -0
  263. package/dist/types/profiler.js.map +1 -0
  264. package/dist/types/utility.cjs.map +1 -1
  265. package/dist/types/utility.d.cts +0 -8
  266. package/dist/types/utility.d.cts.map +1 -1
  267. package/dist/types/utility.d.ts +0 -8
  268. package/dist/types/utility.d.ts.map +1 -1
  269. package/dist/types/utility.js.map +1 -1
  270. package/dist/utils/identifiers.cjs +32 -0
  271. package/dist/utils/identifiers.cjs.map +1 -0
  272. package/dist/utils/identifiers.d.cts +32 -0
  273. package/dist/utils/identifiers.d.cts.map +1 -0
  274. package/dist/utils/identifiers.d.ts +32 -0
  275. package/dist/utils/identifiers.d.ts.map +1 -0
  276. package/dist/utils/identifiers.js +27 -0
  277. package/dist/utils/identifiers.js.map +1 -0
  278. package/dist/utils/package.cjs +40 -0
  279. package/dist/utils/package.cjs.map +1 -0
  280. package/dist/utils/package.d.cts +15 -0
  281. package/dist/utils/package.d.cts.map +1 -0
  282. package/dist/utils/package.d.ts +15 -0
  283. package/dist/utils/package.d.ts.map +1 -0
  284. package/dist/utils/package.js +33 -0
  285. package/dist/utils/package.js.map +1 -0
  286. package/dist/utils/type-guards.cjs +48 -0
  287. package/dist/utils/type-guards.cjs.map +1 -0
  288. package/dist/utils/type-guards.d.cts +22 -0
  289. package/dist/utils/type-guards.d.cts.map +1 -0
  290. package/dist/utils/type-guards.d.ts +22 -0
  291. package/dist/utils/type-guards.d.ts.map +1 -0
  292. package/dist/utils/type-guards.js +43 -0
  293. package/dist/utils/type-guards.js.map +1 -0
  294. package/package.json +10 -10
  295. package/src/cli/commands/analyze.ts +101 -0
  296. package/src/cli/commands/baseline.ts +577 -0
  297. package/src/cli/commands/history.ts +1 -1
  298. package/src/cli/commands/init.ts +105 -183
  299. package/src/cli/commands/run.ts +167 -98
  300. package/src/cli/index.ts +425 -183
  301. package/src/config/budget-schema.ts +189 -0
  302. package/src/config/schema.ts +260 -1
  303. package/src/constants.ts +53 -1
  304. package/src/core/engine.ts +151 -20
  305. package/src/core/output-path-resolver.ts +10 -2
  306. package/src/errors/base.ts +11 -2
  307. package/src/errors/budget.ts +38 -0
  308. package/src/errors/index.ts +3 -0
  309. package/src/index.ts +9 -0
  310. package/src/reporters/csv.ts +54 -25
  311. package/src/reporters/human.ts +88 -47
  312. package/src/reporters/json.ts +26 -71
  313. package/src/reporters/profile-human.ts +204 -0
  314. package/src/reporters/simple.ts +84 -53
  315. package/src/services/baseline-storage.ts +199 -0
  316. package/src/services/budget-evaluator.ts +182 -0
  317. package/src/services/config-manager.ts +23 -8
  318. package/src/services/file-loader.ts +3 -6
  319. package/src/services/profiler/profile-filter.ts +143 -0
  320. package/src/services/profiler/profile-parser.ts +194 -0
  321. package/src/services/profiler/profile-runner.ts +121 -0
  322. package/src/services/reporter-registry.ts +46 -81
  323. package/src/types/budgets.ts +180 -0
  324. package/src/types/cli.ts +5 -238
  325. package/src/types/core.ts +50 -10
  326. package/src/types/index.ts +5 -0
  327. package/src/types/interfaces.ts +16 -6
  328. package/src/types/profiler.ts +132 -0
  329. package/src/types/utility.ts +0 -10
  330. package/src/utils/identifiers.ts +58 -0
  331. package/src/utils/package.ts +35 -0
  332. 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"}