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,370 @@
1
+ "use strict";
2
+ /**
3
+ * ModestBench Configuration Manager
4
+ *
5
+ * Handles loading, merging, and validation of configuration from multiple
6
+ * sources. Supports CLI arguments, config files (JSON/YAML/JS/TS), and
7
+ * defaults.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
43
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
44
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
45
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
46
+ });
47
+ }
48
+ return path;
49
+ };
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.ModestBenchConfigurationManager = void 0;
52
+ const cosmiconfig_1 = require("cosmiconfig");
53
+ const node_path_1 = require("node:path");
54
+ const schema_js_1 = require("./schema.cjs");
55
+ /**
56
+ * Get the default reporter based on TTY status and environment
57
+ */
58
+ const getDefaultReporter = () => {
59
+ // Use simple reporter when stdout is not a TTY and color is not forced
60
+ if (!process.stdout.isTTY && !isColorForced()) {
61
+ return 'simple';
62
+ }
63
+ return 'human';
64
+ };
65
+ /**
66
+ * Check if color output has been forced via environment variables
67
+ */
68
+ const isColorForced = () => {
69
+ return (process.env.FORCE_COLOR !== undefined &&
70
+ process.env.FORCE_COLOR !== '0' &&
71
+ process.env.NO_COLOR === undefined);
72
+ };
73
+ /**
74
+ * Default configuration values Using minimal values to reduce test overhead
75
+ * while maintaining functionality
76
+ */
77
+ const DEFAULT_CONFIG = {
78
+ bail: false,
79
+ exclude: ['node_modules/**', '.git/**'],
80
+ excludeTags: [],
81
+ iterations: 100, // Sufficient iterations for reliable statistics
82
+ limitBy: 'iterations', // Default to limiting by iteration count
83
+ metadata: {},
84
+ outputDir: './benchmark-results',
85
+ pattern: '**/*.bench.{js,ts,mjs,cjs,mts,cts}',
86
+ quiet: false,
87
+ reporterConfig: {},
88
+ reporters: [getDefaultReporter()],
89
+ tags: [],
90
+ thresholds: {},
91
+ time: 1000, // 1 second minimum for tinybench to gather samples
92
+ timeout: 30000, // 30 seconds
93
+ verbose: false, // No verbose output by default
94
+ warmup: 0, // No warmup by default for test speed
95
+ };
96
+ /**
97
+ * Configuration precedence order (highest to lowest):
98
+ *
99
+ * 1. CLI arguments
100
+ * 2. Config file
101
+ * 3. Default values
102
+ */
103
+ class ModestBenchConfigurationManager {
104
+ /**
105
+ * Apply smart defaults for limitBy based on which flags were provided
106
+ */
107
+ static applySmartDefaults(merged, cliArgs, fileConfig) {
108
+ // If limitBy was explicitly provided in CLI or file, use it
109
+ if (cliArgs['limit-by'] || cliArgs.limitBy || fileConfig.limitBy) {
110
+ return merged;
111
+ }
112
+ // Determine if user explicitly provided time or iterations
113
+ const userProvidedTime = 'time' in cliArgs || 't' in cliArgs;
114
+ const userProvidedIterations = 'iterations' in cliArgs || 'i' in cliArgs;
115
+ let smartDefault;
116
+ if (userProvidedTime && userProvidedIterations) {
117
+ // Both provided → stop at whichever comes first
118
+ smartDefault = 'any';
119
+ }
120
+ else if (userProvidedTime) {
121
+ // Only time → limit by time
122
+ smartDefault = 'time';
123
+ }
124
+ else {
125
+ // Only iterations (or neither) → limit by iterations
126
+ smartDefault = 'iterations';
127
+ }
128
+ return {
129
+ ...merged,
130
+ limitBy: smartDefault,
131
+ };
132
+ }
133
+ /**
134
+ * Get default configuration values
135
+ */
136
+ getDefaults() {
137
+ return { ...DEFAULT_CONFIG };
138
+ }
139
+ /**
140
+ * Load configuration from various sources with precedence
141
+ */
142
+ async load(configPath, cliArgs) {
143
+ try {
144
+ // Create a fresh explorer for each load to avoid module caching issues
145
+ const explorer = this.createExplorer();
146
+ // 1. Load config file using cosmiconfig
147
+ let result;
148
+ if (configPath) {
149
+ const resolvedPath = (0, node_path_1.resolve)(configPath);
150
+ // For .js/.mjs/.cjs files, add cache busting to the import to avoid Node's module cache
151
+ if (resolvedPath.endsWith('.js') ||
152
+ resolvedPath.endsWith('.mjs') ||
153
+ resolvedPath.endsWith('.cjs')) {
154
+ // Clear Node's module cache for this file to ensure fresh load
155
+ const moduleUrl = `${resolvedPath}?t=${Date.now()}`;
156
+ try {
157
+ const module = (await Promise.resolve(`${__rewriteRelativeImportExtension(moduleUrl)}`).then(s => __importStar(require(s))));
158
+ result = {
159
+ config: module.default || module,
160
+ filepath: resolvedPath,
161
+ };
162
+ }
163
+ catch {
164
+ // Fall back to explorer.load if cache busting fails
165
+ result = await explorer.load(resolvedPath);
166
+ }
167
+ }
168
+ else {
169
+ result = await explorer.load(resolvedPath);
170
+ }
171
+ }
172
+ else {
173
+ result = await explorer.search();
174
+ }
175
+ const fileConfig = (result?.config || {});
176
+ // 2. Merge: defaults <- file <- CLI args
177
+ const normalizedCliArgs = cliArgs ? this.normalizeCliArgs(cliArgs) : {};
178
+ const merged = this.merge(DEFAULT_CONFIG, fileConfig, normalizedCliArgs);
179
+ // 2.5. Apply smart defaults for limitBy if not explicitly provided
180
+ const finalConfig = ModestBenchConfigurationManager.applySmartDefaults(merged, cliArgs || {}, fileConfig);
181
+ // 3. Validate final configuration
182
+ const validation = this.validate(finalConfig);
183
+ if (!validation.valid) {
184
+ throw new Error(`Configuration validation failed: ${validation.errors.map((e) => e.message).join(', ')}`);
185
+ }
186
+ return finalConfig;
187
+ }
188
+ catch (error) {
189
+ throw new Error(`Failed to load configuration: ${error instanceof Error ? error.message : String(error)}`);
190
+ }
191
+ }
192
+ /**
193
+ * Merge multiple configuration objects with precedence
194
+ */
195
+ merge(...configs) {
196
+ let result = {};
197
+ for (const config of configs) {
198
+ result = {
199
+ ...result,
200
+ ...config,
201
+ // Special handling for arrays - replace rather than merge
202
+ // Allow empty arrays to override defaults (for pattern defaulting in loader)
203
+ ...(config.pattern !== undefined && {
204
+ pattern: Array.isArray(config.pattern)
205
+ ? [...config.pattern]
206
+ : config.pattern,
207
+ }),
208
+ ...(config.exclude && { exclude: [...config.exclude] }),
209
+ ...(config.excludeTags && { excludeTags: [...config.excludeTags] }),
210
+ ...(config.reporters && { reporters: [...config.reporters] }),
211
+ ...(config.tags && { tags: [...config.tags] }),
212
+ // Deep merge for objects
213
+ ...(config.reporterConfig && {
214
+ reporterConfig: {
215
+ ...result.reporterConfig,
216
+ ...config.reporterConfig,
217
+ },
218
+ }),
219
+ ...(config.metadata && {
220
+ metadata: { ...result.metadata, ...config.metadata },
221
+ }),
222
+ ...(config.thresholds && {
223
+ thresholds: { ...result.thresholds, ...config.thresholds },
224
+ }),
225
+ };
226
+ }
227
+ return { ...DEFAULT_CONFIG, ...result };
228
+ }
229
+ /**
230
+ * Validate configuration object using Zod schema
231
+ */
232
+ validate(config) {
233
+ const errors = [];
234
+ const warnings = [];
235
+ // Use Zod schema validation
236
+ const result = (0, schema_js_1.safeParseConfig)(config);
237
+ if (!result.success) {
238
+ // Convert Zod errors to ValidationError format
239
+ for (const issue of result.error.issues) {
240
+ const path = issue.path.join('.');
241
+ errors.push({
242
+ code: `INVALID_${path.toUpperCase().replace(/\./g, '_') || 'CONFIG'}`,
243
+ file: 'configuration',
244
+ message: `${path ? `${path}: ` : ''}${issue.message}`,
245
+ severity: 'error',
246
+ });
247
+ }
248
+ }
249
+ // Additional logical validations and warnings
250
+ if (result.success) {
251
+ const validConfig = result.data;
252
+ // Warn about empty reporters
253
+ if (validConfig.reporters.length === 0) {
254
+ warnings.push({
255
+ code: 'NO_REPORTERS',
256
+ file: 'configuration',
257
+ message: 'no reporters specified, using default human reporter',
258
+ severity: 'warning',
259
+ });
260
+ }
261
+ // Warn about potentially long runtime
262
+ if (validConfig.iterations > 1000 && validConfig.time > 60000) {
263
+ warnings.push({
264
+ code: 'LONG_RUNTIME_WARNING',
265
+ file: 'configuration',
266
+ message: 'high iterations and time values may result in very long benchmark runs',
267
+ severity: 'warning',
268
+ });
269
+ }
270
+ }
271
+ return {
272
+ errors,
273
+ files: ['configuration'],
274
+ valid: errors.length === 0,
275
+ warnings,
276
+ };
277
+ }
278
+ /**
279
+ * Create a cosmiconfig explorer for loading configuration files
280
+ */
281
+ createExplorer() {
282
+ return (0, cosmiconfig_1.cosmiconfig)('modestbench', {
283
+ cache: false, // Disable caching to prevent cross-contamination between different config files
284
+ loaders: {
285
+ '.ts': async (filepath) => {
286
+ // Use cosmiconfig-typescript-loader to load TypeScript files
287
+ // This works without tsx in the import chain
288
+ const { TypeScriptLoader: createTypeScriptLoader } = await Promise.resolve().then(() => __importStar(require('cosmiconfig-typescript-loader')));
289
+ const loader = createTypeScriptLoader();
290
+ const { readFile } = await Promise.resolve().then(() => __importStar(require('node:fs/promises')));
291
+ const content = await readFile(filepath, 'utf-8');
292
+ return (await loader(filepath, content));
293
+ },
294
+ },
295
+ searchPlaces: [
296
+ 'package.json',
297
+ '.modestbenchrc',
298
+ '.modestbenchrc.json',
299
+ '.modestbenchrc.yaml',
300
+ '.modestbenchrc.yml',
301
+ '.modestbenchrc.js',
302
+ '.modestbenchrc.mjs',
303
+ '.modestbenchrc.cjs',
304
+ 'modestbench.config.json',
305
+ 'modestbench.config.yaml',
306
+ 'modestbench.config.yml',
307
+ 'modestbench.config.js',
308
+ 'modestbench.config.mjs',
309
+ 'modestbench.config.cjs',
310
+ 'modestbench.config.ts',
311
+ ],
312
+ });
313
+ }
314
+ /**
315
+ * Normalize CLI arguments to configuration format
316
+ */
317
+ normalizeCliArgs(cliArgs) {
318
+ const normalized = {};
319
+ // Map CLI argument names to config property names
320
+ const argMap = {
321
+ bail: 'bail',
322
+ exclude: 'exclude',
323
+ 'exclude-tags': 'excludeTags',
324
+ excludeTags: 'excludeTags',
325
+ i: 'iterations',
326
+ iterations: 'iterations',
327
+ 'limit-by': 'limitBy',
328
+ limitBy: 'limitBy',
329
+ o: 'outputDir',
330
+ output: 'outputDir',
331
+ 'output-dir': 'outputDir',
332
+ pattern: 'pattern',
333
+ q: 'quiet',
334
+ quiet: 'quiet',
335
+ r: 'reporters',
336
+ reporters: 'reporters',
337
+ t: 'time',
338
+ tags: 'tags',
339
+ time: 'time',
340
+ timeout: 'timeout',
341
+ v: 'verbose',
342
+ verbose: 'verbose',
343
+ w: 'warmup',
344
+ warmup: 'warmup',
345
+ };
346
+ for (const [cliKey, configKey] of Object.entries(argMap)) {
347
+ if (cliKey in cliArgs && cliArgs[cliKey] !== undefined) {
348
+ const value = cliArgs[cliKey];
349
+ // Handle array arguments that might come as strings
350
+ if (configKey === 'exclude' ||
351
+ configKey === 'excludeTags' ||
352
+ configKey === 'reporters' ||
353
+ configKey === 'tags') {
354
+ if (typeof value === 'string') {
355
+ normalized[configKey] = value.split(',').map((s) => s.trim());
356
+ }
357
+ else if (Array.isArray(value)) {
358
+ normalized[configKey] = value;
359
+ }
360
+ }
361
+ else {
362
+ normalized[configKey] = value;
363
+ }
364
+ }
365
+ }
366
+ return normalized;
367
+ }
368
+ }
369
+ exports.ModestBenchConfigurationManager = ModestBenchConfigurationManager;
370
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * ModestBench Configuration Manager
3
+ *
4
+ * Handles loading, merging, and validation of configuration from multiple
5
+ * sources. Supports CLI arguments, config files (JSON/YAML/JS/TS), and
6
+ * defaults.
7
+ */
8
+ import type { ConfigurationManager, ModestBenchConfig, ValidationResult } from "../types/index.cjs";
9
+ /**
10
+ * Configuration precedence order (highest to lowest):
11
+ *
12
+ * 1. CLI arguments
13
+ * 2. Config file
14
+ * 3. Default values
15
+ */
16
+ export declare class ModestBenchConfigurationManager implements ConfigurationManager {
17
+ /**
18
+ * Apply smart defaults for limitBy based on which flags were provided
19
+ */
20
+ static applySmartDefaults(merged: ModestBenchConfig, cliArgs: Record<string, unknown>, fileConfig: Partial<ModestBenchConfig>): ModestBenchConfig;
21
+ /**
22
+ * Get default configuration values
23
+ */
24
+ getDefaults(): ModestBenchConfig;
25
+ /**
26
+ * Load configuration from various sources with precedence
27
+ */
28
+ load(configPath?: string, cliArgs?: Record<string, unknown>): Promise<ModestBenchConfig>;
29
+ /**
30
+ * Merge multiple configuration objects with precedence
31
+ */
32
+ merge(...configs: Partial<ModestBenchConfig>[]): ModestBenchConfig;
33
+ /**
34
+ * Validate configuration object using Zod schema
35
+ */
36
+ validate(config: ModestBenchConfig): ValidationResult;
37
+ /**
38
+ * Create a cosmiconfig explorer for loading configuration files
39
+ */
40
+ private createExplorer;
41
+ /**
42
+ * Normalize CLI arguments to configuration format
43
+ */
44
+ private normalizeCliArgs;
45
+ }
46
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EAEjB,gBAAgB,EAEjB,2BAA0B;AAkD3B;;;;;;GAMG;AACH,qBAAa,+BAAgC,YAAW,oBAAoB;IAC1E;;OAEG;WACW,kBAAkB,CAC9B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACrC,iBAAiB;IA6BpB;;OAEG;IACH,WAAW,IAAI,iBAAiB;IAIhC;;OAEG;IACG,IAAI,CACR,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,iBAAiB,CAAC;IAkE7B;;OAEG;IACH,KAAK,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,GAAG,iBAAiB;IAqClE;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;IAsDrD;;OAEG;IACH,OAAO,CAAC,cAAc;IAoCtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAyDzB"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * ModestBench Configuration Manager
3
+ *
4
+ * Handles loading, merging, and validation of configuration from multiple
5
+ * sources. Supports CLI arguments, config files (JSON/YAML/JS/TS), and
6
+ * defaults.
7
+ */
8
+ import type { ConfigurationManager, ModestBenchConfig, ValidationResult } from "../types/index.js";
9
+ /**
10
+ * Configuration precedence order (highest to lowest):
11
+ *
12
+ * 1. CLI arguments
13
+ * 2. Config file
14
+ * 3. Default values
15
+ */
16
+ export declare class ModestBenchConfigurationManager implements ConfigurationManager {
17
+ /**
18
+ * Apply smart defaults for limitBy based on which flags were provided
19
+ */
20
+ static applySmartDefaults(merged: ModestBenchConfig, cliArgs: Record<string, unknown>, fileConfig: Partial<ModestBenchConfig>): ModestBenchConfig;
21
+ /**
22
+ * Get default configuration values
23
+ */
24
+ getDefaults(): ModestBenchConfig;
25
+ /**
26
+ * Load configuration from various sources with precedence
27
+ */
28
+ load(configPath?: string, cliArgs?: Record<string, unknown>): Promise<ModestBenchConfig>;
29
+ /**
30
+ * Merge multiple configuration objects with precedence
31
+ */
32
+ merge(...configs: Partial<ModestBenchConfig>[]): ModestBenchConfig;
33
+ /**
34
+ * Validate configuration object using Zod schema
35
+ */
36
+ validate(config: ModestBenchConfig): ValidationResult;
37
+ /**
38
+ * Create a cosmiconfig explorer for loading configuration files
39
+ */
40
+ private createExplorer;
41
+ /**
42
+ * Normalize CLI arguments to configuration format
43
+ */
44
+ private normalizeCliArgs;
45
+ }
46
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EAEjB,gBAAgB,EAEjB,0BAA0B;AAkD3B;;;;;;GAMG;AACH,qBAAa,+BAAgC,YAAW,oBAAoB;IAC1E;;OAEG;WACW,kBAAkB,CAC9B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACrC,iBAAiB;IA6BpB;;OAEG;IACH,WAAW,IAAI,iBAAiB;IAIhC;;OAEG;IACG,IAAI,CACR,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,iBAAiB,CAAC;IAkE7B;;OAEG;IACH,KAAK,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,GAAG,iBAAiB;IAqClE;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;IAsDrD;;OAEG;IACH,OAAO,CAAC,cAAc;IAoCtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAyDzB"}