modestbench 0.0.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 (275) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/LICENSE.md +55 -0
  3. package/README.md +699 -0
  4. package/dist/bootstrap.cjs +37 -0
  5. package/dist/bootstrap.cjs.map +1 -0
  6. package/dist/bootstrap.d.cts +17 -0
  7. package/dist/bootstrap.d.cts.map +1 -0
  8. package/dist/bootstrap.d.ts +17 -0
  9. package/dist/bootstrap.d.ts.map +1 -0
  10. package/dist/bootstrap.js +33 -0
  11. package/dist/bootstrap.js.map +1 -0
  12. package/dist/cli/commands/history.cjs +459 -0
  13. package/dist/cli/commands/history.cjs.map +1 -0
  14. package/dist/cli/commands/history.d.cts +34 -0
  15. package/dist/cli/commands/history.d.cts.map +1 -0
  16. package/dist/cli/commands/history.d.ts +34 -0
  17. package/dist/cli/commands/history.d.ts.map +1 -0
  18. package/dist/cli/commands/history.js +422 -0
  19. package/dist/cli/commands/history.js.map +1 -0
  20. package/dist/cli/commands/init.cjs +566 -0
  21. package/dist/cli/commands/init.cjs.map +1 -0
  22. package/dist/cli/commands/init.d.cts +26 -0
  23. package/dist/cli/commands/init.d.cts.map +1 -0
  24. package/dist/cli/commands/init.d.ts +26 -0
  25. package/dist/cli/commands/init.d.ts.map +1 -0
  26. package/dist/cli/commands/init.js +562 -0
  27. package/dist/cli/commands/init.js.map +1 -0
  28. package/dist/cli/commands/run.cjs +285 -0
  29. package/dist/cli/commands/run.cjs.map +1 -0
  30. package/dist/cli/commands/run.d.cts +37 -0
  31. package/dist/cli/commands/run.d.cts.map +1 -0
  32. package/dist/cli/commands/run.d.ts +37 -0
  33. package/dist/cli/commands/run.d.ts.map +1 -0
  34. package/dist/cli/commands/run.js +248 -0
  35. package/dist/cli/commands/run.js.map +1 -0
  36. package/dist/cli/index.cjs +523 -0
  37. package/dist/cli/index.cjs.map +1 -0
  38. package/dist/cli/index.d.cts +58 -0
  39. package/dist/cli/index.d.cts.map +1 -0
  40. package/dist/cli/index.d.ts +58 -0
  41. package/dist/cli/index.d.ts.map +1 -0
  42. package/dist/cli/index.js +515 -0
  43. package/dist/cli/index.js.map +1 -0
  44. package/dist/config/manager.cjs +370 -0
  45. package/dist/config/manager.cjs.map +1 -0
  46. package/dist/config/manager.d.cts +46 -0
  47. package/dist/config/manager.d.cts.map +1 -0
  48. package/dist/config/manager.d.ts +46 -0
  49. package/dist/config/manager.d.ts.map +1 -0
  50. package/dist/config/manager.js +333 -0
  51. package/dist/config/manager.js.map +1 -0
  52. package/dist/config/schema.cjs +182 -0
  53. package/dist/config/schema.cjs.map +1 -0
  54. package/dist/config/schema.d.cts +51 -0
  55. package/dist/config/schema.d.cts.map +1 -0
  56. package/dist/config/schema.d.ts +51 -0
  57. package/dist/config/schema.d.ts.map +1 -0
  58. package/dist/config/schema.js +145 -0
  59. package/dist/config/schema.js.map +1 -0
  60. package/dist/constants.cjs +22 -0
  61. package/dist/constants.cjs.map +1 -0
  62. package/dist/constants.d.cts +10 -0
  63. package/dist/constants.d.cts.map +1 -0
  64. package/dist/constants.d.ts +10 -0
  65. package/dist/constants.d.ts.map +1 -0
  66. package/dist/constants.js +19 -0
  67. package/dist/constants.js.map +1 -0
  68. package/dist/core/benchmark-schema.cjs +135 -0
  69. package/dist/core/benchmark-schema.cjs.map +1 -0
  70. package/dist/core/benchmark-schema.d.cts +139 -0
  71. package/dist/core/benchmark-schema.d.cts.map +1 -0
  72. package/dist/core/benchmark-schema.d.ts +139 -0
  73. package/dist/core/benchmark-schema.d.ts.map +1 -0
  74. package/dist/core/benchmark-schema.js +132 -0
  75. package/dist/core/benchmark-schema.js.map +1 -0
  76. package/dist/core/engine.cjs +669 -0
  77. package/dist/core/engine.cjs.map +1 -0
  78. package/dist/core/engine.d.cts +128 -0
  79. package/dist/core/engine.d.cts.map +1 -0
  80. package/dist/core/engine.d.ts +128 -0
  81. package/dist/core/engine.d.ts.map +1 -0
  82. package/dist/core/engine.js +632 -0
  83. package/dist/core/engine.js.map +1 -0
  84. package/dist/core/engines/accurate-engine.cjs +292 -0
  85. package/dist/core/engines/accurate-engine.cjs.map +1 -0
  86. package/dist/core/engines/accurate-engine.d.cts +63 -0
  87. package/dist/core/engines/accurate-engine.d.cts.map +1 -0
  88. package/dist/core/engines/accurate-engine.d.ts +63 -0
  89. package/dist/core/engines/accurate-engine.d.ts.map +1 -0
  90. package/dist/core/engines/accurate-engine.js +288 -0
  91. package/dist/core/engines/accurate-engine.js.map +1 -0
  92. package/dist/core/engines/index.cjs +21 -0
  93. package/dist/core/engines/index.cjs.map +1 -0
  94. package/dist/core/engines/index.d.cts +16 -0
  95. package/dist/core/engines/index.d.cts.map +1 -0
  96. package/dist/core/engines/index.d.ts +16 -0
  97. package/dist/core/engines/index.d.ts.map +1 -0
  98. package/dist/core/engines/index.js +16 -0
  99. package/dist/core/engines/index.js.map +1 -0
  100. package/dist/core/engines/tinybench-engine.cjs +286 -0
  101. package/dist/core/engines/tinybench-engine.cjs.map +1 -0
  102. package/dist/core/engines/tinybench-engine.d.cts +18 -0
  103. package/dist/core/engines/tinybench-engine.d.cts.map +1 -0
  104. package/dist/core/engines/tinybench-engine.d.ts +18 -0
  105. package/dist/core/engines/tinybench-engine.d.ts.map +1 -0
  106. package/dist/core/engines/tinybench-engine.js +282 -0
  107. package/dist/core/engines/tinybench-engine.js.map +1 -0
  108. package/dist/core/error-manager.cjs +303 -0
  109. package/dist/core/error-manager.cjs.map +1 -0
  110. package/dist/core/error-manager.d.cts +77 -0
  111. package/dist/core/error-manager.d.cts.map +1 -0
  112. package/dist/core/error-manager.d.ts +77 -0
  113. package/dist/core/error-manager.d.ts.map +1 -0
  114. package/dist/core/error-manager.js +299 -0
  115. package/dist/core/error-manager.js.map +1 -0
  116. package/dist/core/loader.cjs +287 -0
  117. package/dist/core/loader.cjs.map +1 -0
  118. package/dist/core/loader.d.cts +55 -0
  119. package/dist/core/loader.d.cts.map +1 -0
  120. package/dist/core/loader.d.ts +55 -0
  121. package/dist/core/loader.d.ts.map +1 -0
  122. package/dist/core/loader.js +250 -0
  123. package/dist/core/loader.js.map +1 -0
  124. package/dist/core/stats-utils.cjs +99 -0
  125. package/dist/core/stats-utils.cjs.map +1 -0
  126. package/dist/core/stats-utils.d.cts +50 -0
  127. package/dist/core/stats-utils.d.cts.map +1 -0
  128. package/dist/core/stats-utils.d.ts +50 -0
  129. package/dist/core/stats-utils.d.ts.map +1 -0
  130. package/dist/core/stats-utils.js +94 -0
  131. package/dist/core/stats-utils.js.map +1 -0
  132. package/dist/index.cjs +64 -0
  133. package/dist/index.cjs.map +1 -0
  134. package/dist/index.d.cts +22 -0
  135. package/dist/index.d.cts.map +1 -0
  136. package/dist/index.d.ts +22 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +30 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/progress/manager.cjs +325 -0
  141. package/dist/progress/manager.cjs.map +1 -0
  142. package/dist/progress/manager.d.cts +125 -0
  143. package/dist/progress/manager.d.cts.map +1 -0
  144. package/dist/progress/manager.d.ts +125 -0
  145. package/dist/progress/manager.d.ts.map +1 -0
  146. package/dist/progress/manager.js +321 -0
  147. package/dist/progress/manager.js.map +1 -0
  148. package/dist/reporters/csv.cjs +250 -0
  149. package/dist/reporters/csv.cjs.map +1 -0
  150. package/dist/reporters/csv.d.cts +92 -0
  151. package/dist/reporters/csv.d.cts.map +1 -0
  152. package/dist/reporters/csv.d.ts +92 -0
  153. package/dist/reporters/csv.d.ts.map +1 -0
  154. package/dist/reporters/csv.js +246 -0
  155. package/dist/reporters/csv.js.map +1 -0
  156. package/dist/reporters/human.cjs +516 -0
  157. package/dist/reporters/human.cjs.map +1 -0
  158. package/dist/reporters/human.d.cts +86 -0
  159. package/dist/reporters/human.d.cts.map +1 -0
  160. package/dist/reporters/human.d.ts +86 -0
  161. package/dist/reporters/human.d.ts.map +1 -0
  162. package/dist/reporters/human.js +509 -0
  163. package/dist/reporters/human.js.map +1 -0
  164. package/dist/reporters/index.cjs +17 -0
  165. package/dist/reporters/index.cjs.map +1 -0
  166. package/dist/reporters/index.d.cts +10 -0
  167. package/dist/reporters/index.d.cts.map +1 -0
  168. package/dist/reporters/index.d.ts +10 -0
  169. package/dist/reporters/index.d.ts.map +1 -0
  170. package/dist/reporters/index.js +10 -0
  171. package/dist/reporters/index.js.map +1 -0
  172. package/dist/reporters/json.cjs +215 -0
  173. package/dist/reporters/json.cjs.map +1 -0
  174. package/dist/reporters/json.d.cts +79 -0
  175. package/dist/reporters/json.d.cts.map +1 -0
  176. package/dist/reporters/json.d.ts +79 -0
  177. package/dist/reporters/json.d.ts.map +1 -0
  178. package/dist/reporters/json.js +211 -0
  179. package/dist/reporters/json.js.map +1 -0
  180. package/dist/reporters/registry.cjs +255 -0
  181. package/dist/reporters/registry.cjs.map +1 -0
  182. package/dist/reporters/registry.d.cts +155 -0
  183. package/dist/reporters/registry.d.cts.map +1 -0
  184. package/dist/reporters/registry.d.ts +155 -0
  185. package/dist/reporters/registry.d.ts.map +1 -0
  186. package/dist/reporters/registry.js +249 -0
  187. package/dist/reporters/registry.js.map +1 -0
  188. package/dist/reporters/simple.cjs +328 -0
  189. package/dist/reporters/simple.cjs.map +1 -0
  190. package/dist/reporters/simple.d.cts +51 -0
  191. package/dist/reporters/simple.d.cts.map +1 -0
  192. package/dist/reporters/simple.d.ts +51 -0
  193. package/dist/reporters/simple.d.ts.map +1 -0
  194. package/dist/reporters/simple.js +321 -0
  195. package/dist/reporters/simple.js.map +1 -0
  196. package/dist/schema/modestbench-config.schema.json +162 -0
  197. package/dist/storage/history.cjs +456 -0
  198. package/dist/storage/history.cjs.map +1 -0
  199. package/dist/storage/history.d.cts +99 -0
  200. package/dist/storage/history.d.cts.map +1 -0
  201. package/dist/storage/history.d.ts +99 -0
  202. package/dist/storage/history.d.ts.map +1 -0
  203. package/dist/storage/history.js +452 -0
  204. package/dist/storage/history.js.map +1 -0
  205. package/dist/types/cli.cjs +21 -0
  206. package/dist/types/cli.cjs.map +1 -0
  207. package/dist/types/cli.d.cts +296 -0
  208. package/dist/types/cli.d.cts.map +1 -0
  209. package/dist/types/cli.d.ts +296 -0
  210. package/dist/types/cli.d.ts.map +1 -0
  211. package/dist/types/cli.js +18 -0
  212. package/dist/types/cli.js.map +1 -0
  213. package/dist/types/core.cjs +14 -0
  214. package/dist/types/core.cjs.map +1 -0
  215. package/dist/types/core.d.cts +380 -0
  216. package/dist/types/core.d.cts.map +1 -0
  217. package/dist/types/core.d.ts +380 -0
  218. package/dist/types/core.d.ts.map +1 -0
  219. package/dist/types/core.js +13 -0
  220. package/dist/types/core.js.map +1 -0
  221. package/dist/types/index.cjs +27 -0
  222. package/dist/types/index.cjs.map +1 -0
  223. package/dist/types/index.d.cts +11 -0
  224. package/dist/types/index.d.cts.map +1 -0
  225. package/dist/types/index.d.ts +11 -0
  226. package/dist/types/index.d.ts.map +1 -0
  227. package/dist/types/index.js +11 -0
  228. package/dist/types/index.js.map +1 -0
  229. package/dist/types/interfaces.cjs +10 -0
  230. package/dist/types/interfaces.cjs.map +1 -0
  231. package/dist/types/interfaces.d.cts +381 -0
  232. package/dist/types/interfaces.d.cts.map +1 -0
  233. package/dist/types/interfaces.d.ts +381 -0
  234. package/dist/types/interfaces.d.ts.map +1 -0
  235. package/dist/types/interfaces.js +9 -0
  236. package/dist/types/interfaces.js.map +1 -0
  237. package/dist/types/utility.cjs +92 -0
  238. package/dist/types/utility.cjs.map +1 -0
  239. package/dist/types/utility.d.cts +330 -0
  240. package/dist/types/utility.d.cts.map +1 -0
  241. package/dist/types/utility.d.ts +330 -0
  242. package/dist/types/utility.d.ts.map +1 -0
  243. package/dist/types/utility.js +78 -0
  244. package/dist/types/utility.js.map +1 -0
  245. package/package.json +211 -0
  246. package/src/bootstrap.ts +35 -0
  247. package/src/cli/commands/history.ts +569 -0
  248. package/src/cli/commands/init.ts +658 -0
  249. package/src/cli/commands/run.ts +346 -0
  250. package/src/cli/index.ts +642 -0
  251. package/src/config/manager.ts +387 -0
  252. package/src/config/schema.ts +188 -0
  253. package/src/constants.ts +21 -0
  254. package/src/core/benchmark-schema.ts +185 -0
  255. package/src/core/engine.ts +888 -0
  256. package/src/core/engines/accurate-engine.ts +408 -0
  257. package/src/core/engines/index.ts +16 -0
  258. package/src/core/engines/tinybench-engine.ts +335 -0
  259. package/src/core/error-manager.ts +372 -0
  260. package/src/core/loader.ts +324 -0
  261. package/src/core/stats-utils.ts +135 -0
  262. package/src/index.ts +46 -0
  263. package/src/progress/manager.ts +415 -0
  264. package/src/reporters/csv.ts +368 -0
  265. package/src/reporters/human.ts +707 -0
  266. package/src/reporters/index.ts +10 -0
  267. package/src/reporters/json.ts +302 -0
  268. package/src/reporters/registry.ts +349 -0
  269. package/src/reporters/simple.ts +459 -0
  270. package/src/storage/history.ts +600 -0
  271. package/src/types/cli.ts +312 -0
  272. package/src/types/core.ts +414 -0
  273. package/src/types/index.ts +18 -0
  274. package/src/types/interfaces.ts +451 -0
  275. package/src/types/utility.ts +446 -0
@@ -0,0 +1,145 @@
1
+ /**
2
+ * ModestBench Configuration Schemas
3
+ *
4
+ * Zod schemas for validating configuration. These schemas are constrained to
5
+ * match the TypeScript types defined in types/core.ts, ensuring type safety and
6
+ * enabling JSON Schema generation.
7
+ */
8
+ import * as z from 'zod';
9
+ import { BENCHMARK_FILE_PATTERN } from "../constants.js";
10
+ /**
11
+ * Schema for threshold configuration
12
+ *
13
+ * Defines performance assertion thresholds for benchmark validation.
14
+ */
15
+ const thresholdConfigSchema = z
16
+ .object({
17
+ maxMarginOfError: z
18
+ .number()
19
+ .positive()
20
+ .describe('Maximum allowed margin of error as a percentage')
21
+ .optional(),
22
+ maxMean: z
23
+ .number()
24
+ .positive()
25
+ .describe('Maximum allowed mean execution time in nanoseconds')
26
+ .optional(),
27
+ maxP95: z
28
+ .number()
29
+ .positive()
30
+ .describe('Maximum allowed 95th percentile execution time in nanoseconds')
31
+ .optional(),
32
+ maxP99: z
33
+ .number()
34
+ .positive()
35
+ .describe('Maximum allowed 99th percentile execution time in nanoseconds')
36
+ .optional(),
37
+ maxStdDev: z
38
+ .number()
39
+ .positive()
40
+ .describe('Maximum allowed standard deviation in nanoseconds')
41
+ .optional(),
42
+ minOpsPerSecond: z
43
+ .number()
44
+ .positive()
45
+ .describe('Minimum required operations per second')
46
+ .optional(),
47
+ })
48
+ .strict()
49
+ .describe('Performance assertion thresholds for benchmark validation')
50
+ .meta({
51
+ title: 'Threshold Configuration',
52
+ });
53
+ /**
54
+ * Schema for the main ModestBench configuration
55
+ *
56
+ * This is the complete configuration schema used for validating benchmark
57
+ * configuration from all sources (files, CLI args, defaults).
58
+ */
59
+ const modestBenchConfigSchema = z
60
+ .object({
61
+ $schema: z
62
+ .string()
63
+ .optional()
64
+ .describe('JSON Schema reference for IDE support (not used by ModestBench)'),
65
+ bail: z.boolean().describe('Stop benchmark execution on first failure'),
66
+ exclude: z
67
+ .array(z.string())
68
+ .describe('Glob patterns to exclude from benchmark file discovery (e.g., "node_modules/**", ".git/**")'),
69
+ excludeTags: z
70
+ .array(z.string())
71
+ .describe('Tags to exclude from benchmark execution. Benchmarks matching any of these tags will be skipped.'),
72
+ iterations: z
73
+ .number()
74
+ .int()
75
+ .positive()
76
+ .describe('Default number of iterations to run for each benchmark task. Higher values provide more accurate statistics but take longer to execute.'),
77
+ limitBy: z
78
+ .enum(['time', 'iterations', 'any', 'all'])
79
+ .describe('How to limit benchmark execution: "time" stops after time limit, "iterations" stops after iteration count, "any" stops at whichever comes first, "all" runs until both limits are reached'),
80
+ metadata: z
81
+ .record(z.string(), z.unknown())
82
+ .describe('Custom metadata to attach to benchmark runs. Can include project name, version, environment details, etc.'),
83
+ outputDir: z
84
+ .string()
85
+ .min(1)
86
+ .describe('Directory path where benchmark results and reports will be written'),
87
+ pattern: z
88
+ .union([z.string().min(1), z.array(z.string().min(1))])
89
+ .describe(`Glob pattern(s) for discovering benchmark files. Can be a single pattern string or array of patterns (e.g., "**/*${BENCHMARK_FILE_PATTERN}")`),
90
+ quiet: z
91
+ .boolean()
92
+ .describe('Run in quiet mode with minimal console output (only errors and final results)'),
93
+ reporterConfig: z
94
+ .record(z.string(), z.unknown())
95
+ .describe('Configuration options specific to individual reporters, keyed by reporter name'),
96
+ reporters: z
97
+ .array(z.string())
98
+ .min(1)
99
+ .describe('List of reporter names to use for output. Available reporters: "human", "json", "csv"'),
100
+ tags: z
101
+ .array(z.string())
102
+ .describe('Tags to filter which benchmarks to run. If empty, all benchmarks are included. Only benchmarks with matching tags will execute.'),
103
+ thresholds: thresholdConfigSchema,
104
+ time: z
105
+ .number()
106
+ .int()
107
+ .positive()
108
+ .describe('Maximum time to spend on each benchmark task in milliseconds. Tasks will run at least until this duration or iteration count is reached, depending on limitBy setting.'),
109
+ timeout: z
110
+ .number()
111
+ .int()
112
+ .positive()
113
+ .describe('Timeout for individual benchmark tasks in milliseconds. Tasks exceeding this duration will be terminated and marked as failed.'),
114
+ verbose: z
115
+ .boolean()
116
+ .describe('Enable verbose output. Provides more detailed console output including progress, intermediate results, and diagnostic information'),
117
+ warmup: z
118
+ .number()
119
+ .int()
120
+ .nonnegative()
121
+ .describe('Number of warmup iterations to run before measurement begins. Warmup helps stabilize performance by allowing JIT compilation and caching to occur.'),
122
+ })
123
+ .strict()
124
+ .describe('ModestBench configuration for controlling benchmark discovery, execution, and reporting')
125
+ .meta({
126
+ title: 'ModestBench Configuration',
127
+ });
128
+ /**
129
+ * Validate a partial configuration object
130
+ *
131
+ * This is used for validating configuration from files or CLI args before
132
+ * merging with defaults.
133
+ */
134
+ export const partialModestBenchConfigSchema = modestBenchConfigSchema.partial();
135
+ /**
136
+ * Safely parse and validate a configuration object
137
+ *
138
+ * @param config - The configuration object to validate
139
+ * @returns A result object with either success: true and data, or success:
140
+ * false and error
141
+ */
142
+ export const safeParseConfig = (config) => {
143
+ return modestBenchConfigSchema.safeParse(config);
144
+ };
145
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BENCHMARK_FILE_PATTERN = exports.BENCHMARK_FILE_EXTENSIONS = void 0;
4
+ /**
5
+ * Supported benchmark file extensions
6
+ */
7
+ exports.BENCHMARK_FILE_EXTENSIONS = new Set([
8
+ '.cjs',
9
+ '.cts',
10
+ '.js',
11
+ '.mjs',
12
+ '.mts',
13
+ '.ts',
14
+ ]);
15
+ /**
16
+ * Glob pattern fragment for benchmark file extensions. Example:
17
+ * ".bench.{js,mjs,cjs,ts,mts,cts}"
18
+ */
19
+ exports.BENCHMARK_FILE_PATTERN = `.bench.{${Array.from(exports.BENCHMARK_FILE_EXTENSIONS)
20
+ .map((ext) => ext.slice(1))
21
+ .join(',')}}`;
22
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,yBAAyB,GAAG,IAAI,GAAG,CAAC;IAC/C,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;CACN,CAAC,CAAC;AAEH;;;GAGG;AACU,QAAA,sBAAsB,GAAG,WAAW,KAAK,CAAC,IAAI,CACzD,iCAAyB,CAC1B;KACE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Supported benchmark file extensions
3
+ */
4
+ export declare const BENCHMARK_FILE_EXTENSIONS: Set<string>;
5
+ /**
6
+ * Glob pattern fragment for benchmark file extensions. Example:
7
+ * ".bench.{js,mjs,cjs,ts,mts,cts}"
8
+ */
9
+ export declare const BENCHMARK_FILE_PATTERN: string;
10
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,yBAAyB,aAOpC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAIpB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Supported benchmark file extensions
3
+ */
4
+ export declare const BENCHMARK_FILE_EXTENSIONS: Set<string>;
5
+ /**
6
+ * Glob pattern fragment for benchmark file extensions. Example:
7
+ * ".bench.{js,mjs,cjs,ts,mts,cts}"
8
+ */
9
+ export declare const BENCHMARK_FILE_PATTERN: string;
10
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,yBAAyB,aAOpC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAIpB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Supported benchmark file extensions
3
+ */
4
+ export const BENCHMARK_FILE_EXTENSIONS = new Set([
5
+ '.cjs',
6
+ '.cts',
7
+ '.js',
8
+ '.mjs',
9
+ '.mts',
10
+ '.ts',
11
+ ]);
12
+ /**
13
+ * Glob pattern fragment for benchmark file extensions. Example:
14
+ * ".bench.{js,mjs,cjs,ts,mts,cts}"
15
+ */
16
+ export const BENCHMARK_FILE_PATTERN = `.bench.{${Array.from(BENCHMARK_FILE_EXTENSIONS)
17
+ .map((ext) => ext.slice(1))
18
+ .join(',')}}`;
19
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IAC/C,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;CACN,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,KAAK,CAAC,IAAI,CACzD,yBAAyB,CAC1B;KACE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ /**
3
+ * ModestBench Benchmark File Schema
4
+ *
5
+ * Zod schemas for validating and parsing benchmark file structure. Supports
6
+ * both traditional suite-based format and simplified flat task definitions.
7
+ *
8
+ * Types are derived from schemas using z.infer (output) and z.input (input).
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.benchmarkFileSchema = void 0;
12
+ const zod_1 = require("zod");
13
+ const schema_js_1 = require("../config/schema.cjs");
14
+ /**
15
+ * Schema for benchmark functions
16
+ */
17
+ const benchmarkFnSchema = zod_1.z.custom((value) => typeof value === 'function', { message: 'Expected a function' });
18
+ /**
19
+ * Zod schema for the full benchmark task object structure (normalized output)
20
+ */
21
+ const benchmarkTaskObjectSchema = zod_1.z.object({
22
+ config: schema_js_1.partialModestBenchConfigSchema
23
+ .optional()
24
+ .describe('Task-specific configuration overrides'),
25
+ fn: benchmarkFnSchema.describe('The function to benchmark'),
26
+ metadata: zod_1.z
27
+ .record(zod_1.z.string(), zod_1.z.unknown())
28
+ .optional()
29
+ .describe('Custom metadata associated with the task'),
30
+ tags: zod_1.z
31
+ .array(zod_1.z.string())
32
+ .optional()
33
+ .describe('Tags for filtering and grouping tasks'),
34
+ });
35
+ /**
36
+ * Zod schema for a benchmark task - accepts either:
37
+ *
38
+ * 1. A full task object with fn, config, metadata, tags
39
+ * 2. A function directly (shorthand syntax)
40
+ *
41
+ * Input: function OR object Output: always normalized to object with fn
42
+ * property
43
+ */
44
+ const benchmarkTaskSchema = zod_1.z
45
+ .union([
46
+ benchmarkTaskObjectSchema,
47
+ benchmarkFnSchema.transform((fn) => ({ fn })),
48
+ ])
49
+ .pipe(benchmarkTaskObjectSchema)
50
+ .describe('A single benchmark task definition (object or function)');
51
+ /**
52
+ * Zod schema for validating benchmark suite structure
53
+ */
54
+ const benchmarkSuiteSchema = zod_1.z
55
+ .object({
56
+ benchmarks: zod_1.z
57
+ .record(zod_1.z.string(), benchmarkTaskSchema)
58
+ .describe('Map of benchmark task names to task definitions'),
59
+ config: schema_js_1.partialModestBenchConfigSchema
60
+ .optional()
61
+ .describe('Suite-specific configuration overrides'),
62
+ metadata: zod_1.z
63
+ .record(zod_1.z.string(), zod_1.z.unknown())
64
+ .optional()
65
+ .describe('Custom metadata associated with the suite'),
66
+ setup: benchmarkFnSchema
67
+ .optional()
68
+ .describe('Function to run before all benchmarks in the suite'),
69
+ tags: zod_1.z
70
+ .array(zod_1.z.string())
71
+ .optional()
72
+ .describe('Tags for filtering and grouping suites'),
73
+ teardown: benchmarkFnSchema
74
+ .optional()
75
+ .describe('Function to run after all benchmarks in the suite'),
76
+ })
77
+ .describe('A benchmark suite containing multiple tasks');
78
+ /**
79
+ * Zod schema for validating benchmark file structure.
80
+ *
81
+ * Supports two formats:
82
+ *
83
+ * 1. Suite format (supports config/metadata/tags): { suites: { 'Suite Name': {
84
+ * benchmarks: {...} } }, config: {...} }
85
+ * 2. Flat format (simple, tasks only - no config/metadata/tags): { 'task name': ()
86
+ * => {...} }
87
+ *
88
+ * The flat format is automatically transformed to suite format with a default
89
+ * suite.
90
+ *
91
+ * Input: flat Record<string, function> OR suite object Output: always
92
+ * normalized to suite format
93
+ */
94
+ exports.benchmarkFileSchema = zod_1.z
95
+ .union([
96
+ // Suite format: explicit structure with config/metadata/tags support
97
+ zod_1.z.object({
98
+ config: schema_js_1.partialModestBenchConfigSchema
99
+ .optional()
100
+ .describe('File-level configuration overrides'),
101
+ metadata: zod_1.z
102
+ .record(zod_1.z.string(), zod_1.z.unknown())
103
+ .optional()
104
+ .describe('Custom metadata associated with the file'),
105
+ suites: zod_1.z
106
+ .record(zod_1.z.string(), benchmarkSuiteSchema)
107
+ .refine((suites) => Object.keys(suites).length > 0, {
108
+ message: 'At least one suite is required',
109
+ })
110
+ .describe('Map of suite names to suite definitions'),
111
+ tags: zod_1.z
112
+ .array(zod_1.z.string())
113
+ .optional()
114
+ .describe('Tags for filtering and grouping files'),
115
+ }),
116
+ // Flat format: simple tasks only (no config/metadata/tags)
117
+ zod_1.z
118
+ .record(zod_1.z.string(), benchmarkFnSchema)
119
+ .refine((tasks) => Object.keys(tasks).length > 0, {
120
+ message: 'At least one task is required',
121
+ })
122
+ .transform((tasks) => ({
123
+ // Ensure all optional properties exist (as undefined) for type consistency
124
+ config: undefined,
125
+ metadata: undefined,
126
+ suites: {
127
+ default: {
128
+ benchmarks: Object.fromEntries(Object.entries(tasks).map(([name, fn]) => [name, { fn }])),
129
+ },
130
+ },
131
+ tags: undefined,
132
+ })),
133
+ ])
134
+ .describe('A benchmark file containing one or more suites with configuration and metadata');
135
+ //# sourceMappingURL=benchmark-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark-schema.js","sourceRoot":"","sources":["../../src/core/benchmark-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * ModestBench Benchmark File Schema
3
+ *
4
+ * Zod schemas for validating and parsing benchmark file structure. Supports
5
+ * both traditional suite-based format and simplified flat task definitions.
6
+ *
7
+ * Types are derived from schemas using z.infer (output) and z.input (input).
8
+ */
9
+ import { z } from 'zod';
10
+ import type { ModestBenchConfig } from "../types/core.cjs";
11
+ /**
12
+ * Zod schema for a benchmark task - accepts either:
13
+ *
14
+ * 1. A full task object with fn, config, metadata, tags
15
+ * 2. A function directly (shorthand syntax)
16
+ *
17
+ * Input: function OR object Output: always normalized to object with fn
18
+ * property
19
+ */
20
+ declare const benchmarkTaskSchema: z.ZodPipe<z.ZodUnion<readonly [z.ZodObject<{
21
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
22
+ fn: z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>;
23
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
24
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ }, z.core.$strip>, z.ZodPipe<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>, z.ZodTransform<{
26
+ fn: (...args: any[]) => unknown;
27
+ }, (...args: any[]) => unknown>>]>, z.ZodObject<{
28
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
29
+ fn: z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>;
30
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
31
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
32
+ }, z.core.$strip>>;
33
+ /**
34
+ * Zod schema for validating benchmark suite structure
35
+ */
36
+ declare const benchmarkSuiteSchema: z.ZodObject<{
37
+ benchmarks: z.ZodRecord<z.ZodString, z.ZodPipe<z.ZodUnion<readonly [z.ZodObject<{
38
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
39
+ fn: z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>;
40
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
41
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
42
+ }, z.core.$strip>, z.ZodPipe<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>, z.ZodTransform<{
43
+ fn: (...args: any[]) => unknown;
44
+ }, (...args: any[]) => unknown>>]>, z.ZodObject<{
45
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
46
+ fn: z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>;
47
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
48
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
49
+ }, z.core.$strip>>>;
50
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
51
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
52
+ setup: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
53
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
54
+ teardown: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
55
+ }, z.core.$strip>;
56
+ /**
57
+ * Zod schema for validating benchmark file structure.
58
+ *
59
+ * Supports two formats:
60
+ *
61
+ * 1. Suite format (supports config/metadata/tags): { suites: { 'Suite Name': {
62
+ * benchmarks: {...} } }, config: {...} }
63
+ * 2. Flat format (simple, tasks only - no config/metadata/tags): { 'task name': ()
64
+ * => {...} }
65
+ *
66
+ * The flat format is automatically transformed to suite format with a default
67
+ * suite.
68
+ *
69
+ * Input: flat Record<string, function> OR suite object Output: always
70
+ * normalized to suite format
71
+ */
72
+ export declare const benchmarkFileSchema: z.ZodUnion<readonly [z.ZodObject<{
73
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
74
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
75
+ suites: z.ZodRecord<z.ZodString, z.ZodObject<{
76
+ benchmarks: z.ZodRecord<z.ZodString, z.ZodPipe<z.ZodUnion<readonly [z.ZodObject<{
77
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
78
+ fn: z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>;
79
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
80
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
81
+ }, z.core.$strip>, z.ZodPipe<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>, z.ZodTransform<{
82
+ fn: (...args: any[]) => unknown;
83
+ }, (...args: any[]) => unknown>>]>, z.ZodObject<{
84
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
85
+ fn: z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>;
86
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
87
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
88
+ }, z.core.$strip>>>;
89
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
90
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
91
+ setup: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
92
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
93
+ teardown: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
94
+ }, z.core.$strip>>;
95
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
96
+ }, z.core.$strip>, z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>, z.ZodTransform<{
97
+ config: Partial<ModestBenchConfig> | undefined;
98
+ metadata: Record<string, unknown> | undefined;
99
+ suites: {
100
+ default: {
101
+ benchmarks: {
102
+ [k: string]: {
103
+ fn: (...args: any[]) => unknown;
104
+ };
105
+ };
106
+ };
107
+ };
108
+ tags: string[] | undefined;
109
+ }, Record<string, (...args: any[]) => unknown>>>]>;
110
+ /**
111
+ * Benchmark file definition (normalized) - internal representation Always in
112
+ * suite format
113
+ */
114
+ export type BenchmarkDefinition = z.infer<typeof benchmarkFileSchema>;
115
+ /**
116
+ * Benchmark file definition (input) - what users write Can be either flat
117
+ * format (Record<string, function>) or suite format
118
+ */
119
+ export type BenchmarkDefinitionInput = z.input<typeof benchmarkFileSchema>;
120
+ /**
121
+ * Benchmark suite (normalized) - internal representation
122
+ */
123
+ export type BenchmarkSuite = z.infer<typeof benchmarkSuiteSchema>;
124
+ /**
125
+ * Benchmark suite (input) - what users write
126
+ */
127
+ export type BenchmarkSuiteInput = z.input<typeof benchmarkSuiteSchema>;
128
+ /**
129
+ * Benchmark task (normalized) - internal representation Always an object with
130
+ * fn property
131
+ */
132
+ export type BenchmarkTask = z.infer<typeof benchmarkTaskSchema>;
133
+ /**
134
+ * Benchmark task (input) - what users write Can be either a function or an
135
+ * object with fn property
136
+ */
137
+ export type BenchmarkTaskInput = z.input<typeof benchmarkTaskSchema>;
138
+ export {};
139
+ //# sourceMappingURL=benchmark-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark-schema.d.ts","sourceRoot":"","sources":["../../src/core/benchmark-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,iBAAiB,EAAE,0BAAyB;AA8B1D;;;;;;;;GAQG;AACH,QAAA,MAAM,mBAAmB;;8BAhCoB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;;;mDAAjB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;kBAAjB,GAAG,EAAE,KAAK,OAAO;aAAjB,GAAG,EAAE,KAAK,OAAO;;8BAAjB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;;;kBAsCQ,CAAC;AAEvE;;GAEG;AACH,QAAA,MAAM,oBAAoB;;;kCA3CmB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;;;uDAAjB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;sBAAjB,GAAG,EAAE,KAAK,OAAO;iBAAjB,GAAG,EAAE,KAAK,OAAO;;kCAAjB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;;;;;;+CAAjB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;;kDAAjB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;iBAkEJ,CAAC;AAE3D;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,mBAAmB;;;;;;sCApFa,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;;;2DAAjB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;0BAAjB,GAAG,EAAE,KAAK,OAAO;qBAAjB,GAAG,EAAE,KAAK,OAAO;;sCAAjB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;;;;;;mDAAjB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;;sDAAjB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;;;4EAAjB,GAAG,EAAE,KAAK,OAAO,YAAjB,GAAG,EAAE,KAAK,OAAO;YAkHjC,OAAO,CAAC,iBAAiB,CAAC,GAAG,SAAS;cACpC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;;;;;kCAnHrB,GAAG,EAAE,KAAK,OAAO;;;;;UA2HnC,MAAM,EAAE,GAAG,SAAS;4BA3HF,GAAG,EAAE,KAAK,OAAO,KAgI3D,CAAC;AAMJ;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * ModestBench Benchmark File Schema
3
+ *
4
+ * Zod schemas for validating and parsing benchmark file structure. Supports
5
+ * both traditional suite-based format and simplified flat task definitions.
6
+ *
7
+ * Types are derived from schemas using z.infer (output) and z.input (input).
8
+ */
9
+ import { z } from 'zod';
10
+ import type { ModestBenchConfig } from "../types/core.js";
11
+ /**
12
+ * Zod schema for a benchmark task - accepts either:
13
+ *
14
+ * 1. A full task object with fn, config, metadata, tags
15
+ * 2. A function directly (shorthand syntax)
16
+ *
17
+ * Input: function OR object Output: always normalized to object with fn
18
+ * property
19
+ */
20
+ declare const benchmarkTaskSchema: z.ZodPipe<z.ZodUnion<readonly [z.ZodObject<{
21
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
22
+ fn: z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>;
23
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
24
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ }, z.core.$strip>, z.ZodPipe<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>, z.ZodTransform<{
26
+ fn: (...args: any[]) => unknown;
27
+ }, (...args: any[]) => unknown>>]>, z.ZodObject<{
28
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
29
+ fn: z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>;
30
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
31
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
32
+ }, z.core.$strip>>;
33
+ /**
34
+ * Zod schema for validating benchmark suite structure
35
+ */
36
+ declare const benchmarkSuiteSchema: z.ZodObject<{
37
+ benchmarks: z.ZodRecord<z.ZodString, z.ZodPipe<z.ZodUnion<readonly [z.ZodObject<{
38
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
39
+ fn: z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>;
40
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
41
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
42
+ }, z.core.$strip>, z.ZodPipe<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>, z.ZodTransform<{
43
+ fn: (...args: any[]) => unknown;
44
+ }, (...args: any[]) => unknown>>]>, z.ZodObject<{
45
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
46
+ fn: z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>;
47
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
48
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
49
+ }, z.core.$strip>>>;
50
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
51
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
52
+ setup: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
53
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
54
+ teardown: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
55
+ }, z.core.$strip>;
56
+ /**
57
+ * Zod schema for validating benchmark file structure.
58
+ *
59
+ * Supports two formats:
60
+ *
61
+ * 1. Suite format (supports config/metadata/tags): { suites: { 'Suite Name': {
62
+ * benchmarks: {...} } }, config: {...} }
63
+ * 2. Flat format (simple, tasks only - no config/metadata/tags): { 'task name': ()
64
+ * => {...} }
65
+ *
66
+ * The flat format is automatically transformed to suite format with a default
67
+ * suite.
68
+ *
69
+ * Input: flat Record<string, function> OR suite object Output: always
70
+ * normalized to suite format
71
+ */
72
+ export declare const benchmarkFileSchema: z.ZodUnion<readonly [z.ZodObject<{
73
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
74
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
75
+ suites: z.ZodRecord<z.ZodString, z.ZodObject<{
76
+ benchmarks: z.ZodRecord<z.ZodString, z.ZodPipe<z.ZodUnion<readonly [z.ZodObject<{
77
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
78
+ fn: z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>;
79
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
80
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
81
+ }, z.core.$strip>, z.ZodPipe<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>, z.ZodTransform<{
82
+ fn: (...args: any[]) => unknown;
83
+ }, (...args: any[]) => unknown>>]>, z.ZodObject<{
84
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
85
+ fn: z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>;
86
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
87
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
88
+ }, z.core.$strip>>>;
89
+ config: z.ZodOptional<z.ZodType<Partial<ModestBenchConfig>, unknown, z.core.$ZodTypeInternals<Partial<ModestBenchConfig>, unknown>>>;
90
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
91
+ setup: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
92
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
93
+ teardown: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
94
+ }, z.core.$strip>>;
95
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
96
+ }, z.core.$strip>, z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>, z.ZodTransform<{
97
+ config: Partial<ModestBenchConfig> | undefined;
98
+ metadata: Record<string, unknown> | undefined;
99
+ suites: {
100
+ default: {
101
+ benchmarks: {
102
+ [k: string]: {
103
+ fn: (...args: any[]) => unknown;
104
+ };
105
+ };
106
+ };
107
+ };
108
+ tags: string[] | undefined;
109
+ }, Record<string, (...args: any[]) => unknown>>>]>;
110
+ /**
111
+ * Benchmark file definition (normalized) - internal representation Always in
112
+ * suite format
113
+ */
114
+ export type BenchmarkDefinition = z.infer<typeof benchmarkFileSchema>;
115
+ /**
116
+ * Benchmark file definition (input) - what users write Can be either flat
117
+ * format (Record<string, function>) or suite format
118
+ */
119
+ export type BenchmarkDefinitionInput = z.input<typeof benchmarkFileSchema>;
120
+ /**
121
+ * Benchmark suite (normalized) - internal representation
122
+ */
123
+ export type BenchmarkSuite = z.infer<typeof benchmarkSuiteSchema>;
124
+ /**
125
+ * Benchmark suite (input) - what users write
126
+ */
127
+ export type BenchmarkSuiteInput = z.input<typeof benchmarkSuiteSchema>;
128
+ /**
129
+ * Benchmark task (normalized) - internal representation Always an object with
130
+ * fn property
131
+ */
132
+ export type BenchmarkTask = z.infer<typeof benchmarkTaskSchema>;
133
+ /**
134
+ * Benchmark task (input) - what users write Can be either a function or an
135
+ * object with fn property
136
+ */
137
+ export type BenchmarkTaskInput = z.input<typeof benchmarkTaskSchema>;
138
+ export {};
139
+ //# sourceMappingURL=benchmark-schema.d.ts.map