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,299 @@
1
+ /**
2
+ * ModestBench Error Manager
3
+ *
4
+ * Handles execution errors with context tracking, categorization, and provides
5
+ * structured error information for graceful degradation.
6
+ */
7
+ /**
8
+ * Error code mappings for different error types and contexts
9
+ */
10
+ const ERROR_CODES = {
11
+ // Benchmark file errors
12
+ BENCH_001: 'Benchmark file syntax error',
13
+ BENCH_002: 'Invalid benchmark structure',
14
+ BENCH_003: 'Missing dependency',
15
+ BENCH_004: 'Timeout exceeded',
16
+ BENCH_005: 'Memory limit exceeded',
17
+ // Configuration errors
18
+ CONFIG_001: 'Invalid configuration file',
19
+ CONFIG_002: 'Missing required option',
20
+ // Execution errors
21
+ EXEC_001: 'Task execution failed',
22
+ EXEC_002: 'Setup function failed',
23
+ EXEC_003: 'Teardown function failed',
24
+ EXEC_004: 'Memory leak detected',
25
+ // File system errors
26
+ FILE_001: 'File not found',
27
+ FILE_002: 'Permission denied',
28
+ FILE_003: 'Invalid file format',
29
+ // History storage errors
30
+ HIST_001: 'History data corruption',
31
+ HIST_002: 'Disk space insufficient',
32
+ HIST_003: 'Index corruption',
33
+ // System errors
34
+ SYS_001: 'Out of memory',
35
+ SYS_002: 'Process crashed',
36
+ SYS_003: 'System resource unavailable',
37
+ // Unknown errors
38
+ UNKNOWN: 'Unknown error',
39
+ // Validation errors
40
+ VALID_001: 'Schema validation failed',
41
+ VALID_002: 'Type validation failed',
42
+ VALID_003: 'Range validation failed',
43
+ };
44
+ /**
45
+ * Recoverable error types that shouldn't stop entire execution
46
+ */
47
+ const RECOVERABLE_ERRORS = new Set([
48
+ 'BENCH_003', // Missing dependency (can skip specific benchmark)
49
+ 'EXEC_001', // Task execution failed (can continue with other tasks)
50
+ 'FILE_001', // File not found (can continue with other files)
51
+ 'VALID_002', // Type validation failed (can skip invalid items)
52
+ 'VALID_003', // Range validation failed (can skip invalid items)
53
+ ]);
54
+ /**
55
+ * Default error manager implementation
56
+ */
57
+ export class ModestBenchErrorManager {
58
+ errors = [];
59
+ handlers = [];
60
+ maxRecentErrors = 50;
61
+ /**
62
+ * Clear error history
63
+ */
64
+ clearStats() {
65
+ this.errors = [];
66
+ }
67
+ /**
68
+ * Format error for display
69
+ */
70
+ formatError(error) {
71
+ const { code, context, message } = error;
72
+ let formatted = `[${code}] ${message}`;
73
+ // Add context information
74
+ const contextParts = [];
75
+ if (context.file) {
76
+ contextParts.push(`file: ${context.file}`);
77
+ }
78
+ if (context.suite) {
79
+ contextParts.push(`suite: ${context.suite}`);
80
+ }
81
+ if (context.task) {
82
+ contextParts.push(`task: ${context.task}`);
83
+ }
84
+ if (contextParts.length > 0) {
85
+ formatted += ` (${contextParts.join(', ')})`;
86
+ }
87
+ formatted += ` at ${context.timestamp.toISOString()}`;
88
+ return formatted;
89
+ }
90
+ /**
91
+ * Get error code for a given error
92
+ */
93
+ getErrorCode(error, context) {
94
+ // Check for specific error patterns
95
+ const message = error.message.toLowerCase();
96
+ const name = error.name.toLowerCase();
97
+ // File system errors
98
+ if (message.includes('enoent') || message.includes('no such file')) {
99
+ return 'FILE_001';
100
+ }
101
+ if (message.includes('eacces') || message.includes('permission denied')) {
102
+ return 'FILE_002';
103
+ }
104
+ // Memory errors
105
+ if (message.includes('out of memory') || name.includes('rangeerror')) {
106
+ return 'SYS_001';
107
+ }
108
+ // Timeout errors
109
+ if (message.includes('timeout') || name.includes('timeout')) {
110
+ return 'BENCH_004';
111
+ }
112
+ // Syntax errors in benchmark files
113
+ if (name.includes('syntaxerror') && context.phase === 'loading') {
114
+ return 'BENCH_001';
115
+ }
116
+ // Validation errors
117
+ if (context.phase === 'validation') {
118
+ if (message.includes('schema') || message.includes('structure')) {
119
+ return 'VALID_001';
120
+ }
121
+ if (message.includes('type')) {
122
+ return 'VALID_002';
123
+ }
124
+ if (message.includes('range') || message.includes('limit')) {
125
+ return 'VALID_003';
126
+ }
127
+ }
128
+ // Configuration errors
129
+ if (context.phase === 'discovery' && message.includes('config')) {
130
+ return 'CONFIG_001';
131
+ }
132
+ // Execution phase errors
133
+ if (context.phase === 'execution') {
134
+ if (context.task) {
135
+ return 'EXEC_001';
136
+ }
137
+ }
138
+ if (context.phase === 'setup') {
139
+ return 'EXEC_002';
140
+ }
141
+ if (context.phase === 'teardown') {
142
+ return 'EXEC_003';
143
+ }
144
+ // Storage errors
145
+ if (message.includes('disk') && message.includes('space')) {
146
+ return 'HIST_002';
147
+ }
148
+ if (message.includes('corrupt') || message.includes('invalid json')) {
149
+ return 'HIST_001';
150
+ }
151
+ // Default to unknown
152
+ return 'UNKNOWN';
153
+ }
154
+ /**
155
+ * Get error count by phase
156
+ */
157
+ getErrorCountByPhase(phase) {
158
+ return this.errors.filter((error) => error.context.phase === phase).length;
159
+ }
160
+ /**
161
+ * Get human-readable description for error code
162
+ */
163
+ getErrorDescription(code) {
164
+ return ERROR_CODES[code] || 'Unknown error';
165
+ }
166
+ /**
167
+ * Get all error handlers (for testing)
168
+ */
169
+ getHandlers() {
170
+ return [...this.handlers];
171
+ }
172
+ /**
173
+ * Get recent errors for a specific phase
174
+ */
175
+ getRecentErrorsForPhase(phase, limit = 10) {
176
+ return this.errors
177
+ .filter((error) => error.context.phase === phase)
178
+ .slice(-limit);
179
+ }
180
+ /**
181
+ * Get error statistics
182
+ */
183
+ getStats() {
184
+ const byPhase = {
185
+ cleanup: 0,
186
+ discovery: 0,
187
+ execution: 0,
188
+ loading: 0,
189
+ reporting: 0,
190
+ setup: 0,
191
+ teardown: 0,
192
+ validation: 0,
193
+ };
194
+ const byType = {};
195
+ let firstError;
196
+ let lastError;
197
+ for (const error of this.errors) {
198
+ // Count by phase
199
+ byPhase[error.context.phase]++;
200
+ // Count by type (error code)
201
+ const type = error.code;
202
+ byType[type] = (byType[type] || 0) + 1;
203
+ // Track timestamps
204
+ const timestamp = error.processedAt;
205
+ if (!firstError || timestamp < firstError) {
206
+ firstError = timestamp;
207
+ }
208
+ if (!lastError || timestamp > lastError) {
209
+ lastError = timestamp;
210
+ }
211
+ }
212
+ const result = {
213
+ byPhase,
214
+ byType,
215
+ ...(firstError && { firstError }),
216
+ ...(lastError && { lastError }),
217
+ recent: this.errors.slice(-this.maxRecentErrors),
218
+ total: this.errors.length,
219
+ };
220
+ return result;
221
+ }
222
+ /**
223
+ * Handle an execution error
224
+ */
225
+ handleError(error, context) {
226
+ const code = this.getErrorCode(error, context);
227
+ const recoverable = this.isRecoverableByCode(code);
228
+ const executionError = {
229
+ code,
230
+ context,
231
+ message: this.createMessage(error, context, code),
232
+ originalError: error,
233
+ processedAt: new Date(),
234
+ recoverable,
235
+ ...(error.stack && { stack: error.stack }),
236
+ };
237
+ // Store error for statistics
238
+ this.errors.push(executionError);
239
+ // Keep only recent errors to prevent memory leaks
240
+ if (this.errors.length > this.maxRecentErrors * 2) {
241
+ this.errors = this.errors.slice(-this.maxRecentErrors);
242
+ }
243
+ // Notify handlers
244
+ for (const handler of this.handlers) {
245
+ try {
246
+ handler(executionError);
247
+ }
248
+ catch (handlerError) {
249
+ // Don't let handler errors break error handling
250
+ console.error('Error in error handler:', handlerError);
251
+ }
252
+ }
253
+ return executionError;
254
+ }
255
+ /**
256
+ * Check if an error is recoverable
257
+ */
258
+ isRecoverable(error) {
259
+ return error.recoverable;
260
+ }
261
+ /**
262
+ * Register error handler callback
263
+ */
264
+ onError(handler) {
265
+ this.handlers.push(handler);
266
+ }
267
+ /**
268
+ * Remove error handler
269
+ */
270
+ removeHandler(handler) {
271
+ const index = this.handlers.indexOf(handler);
272
+ if (index >= 0) {
273
+ this.handlers.splice(index, 1);
274
+ return true;
275
+ }
276
+ return false;
277
+ }
278
+ /**
279
+ * Create human-readable error message
280
+ */
281
+ createMessage(error, context, code) {
282
+ const baseMessage = this.getErrorDescription(code);
283
+ const originalMessage = error.message;
284
+ // If the original message is more descriptive, use it
285
+ if (originalMessage &&
286
+ originalMessage !== baseMessage &&
287
+ !originalMessage.includes('[object')) {
288
+ return `${baseMessage}: ${originalMessage}`;
289
+ }
290
+ return baseMessage;
291
+ }
292
+ /**
293
+ * Check if error is recoverable by code
294
+ */
295
+ isRecoverableByCode(code) {
296
+ return RECOVERABLE_ERRORS.has(code);
297
+ }
298
+ }
299
+ //# sourceMappingURL=error-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-manager.js","sourceRoot":"","sources":["../../src/core/error-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ /**
3
+ * ModestBench File Loader
4
+ *
5
+ * Handles discovery, loading, and validation of benchmark files. Supports glob
6
+ * pattern matching and file structure validation.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
42
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
43
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
44
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
45
+ });
46
+ }
47
+ return path;
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.BenchmarkFileLoader = void 0;
51
+ const glob_1 = require("glob");
52
+ const promises_1 = require("node:fs/promises");
53
+ const node_path_1 = require("node:path");
54
+ const constants_js_1 = require("../constants.cjs");
55
+ const benchmark_schema_js_1 = require("./benchmark-schema.cjs");
56
+ /**
57
+ * Implementation of FileLoader for benchmark files
58
+ */
59
+ class BenchmarkFileLoader {
60
+ supportedExtensions = constants_js_1.BENCHMARK_FILE_EXTENSIONS;
61
+ /**
62
+ * Discover benchmark files using glob patterns or explicit file paths
63
+ */
64
+ async discover(pattern, exclude = []) {
65
+ try {
66
+ let patterns = Array.isArray(pattern) ? pattern : [pattern];
67
+ // Handle empty patterns - use sensible defaults
68
+ if (patterns.length === 0) {
69
+ patterns = [
70
+ `*${constants_js_1.BENCHMARK_FILE_PATTERN}`, // top-level current directory
71
+ `bench/*${constants_js_1.BENCHMARK_FILE_PATTERN}`, // top-level bench/ directory
72
+ ];
73
+ }
74
+ // Expand directory paths to recursive glob patterns
75
+ const expandedPatterns = [];
76
+ for (const p of patterns) {
77
+ try {
78
+ const stats = await (0, promises_1.stat)(p);
79
+ if (stats.isDirectory()) {
80
+ // Directory: search recursively
81
+ expandedPatterns.push(`${p}/**/*${constants_js_1.BENCHMARK_FILE_PATTERN}`);
82
+ }
83
+ else {
84
+ // File or doesn't exist: use as-is (glob will handle it)
85
+ expandedPatterns.push(p);
86
+ }
87
+ }
88
+ catch {
89
+ // Path doesn't exist, treat as glob pattern
90
+ expandedPatterns.push(p);
91
+ }
92
+ }
93
+ const allFiles = new Set();
94
+ // Process each pattern
95
+ for (const p of expandedPatterns) {
96
+ const files = await (0, glob_1.glob)(p, {
97
+ absolute: true,
98
+ ignore: exclude,
99
+ nodir: true,
100
+ });
101
+ // Add discovered files to the set (automatic deduplication)
102
+ for (const file of files) {
103
+ allFiles.add(file);
104
+ }
105
+ }
106
+ // Filter to supported file extensions
107
+ const supportedFiles = Array.from(allFiles).filter((file) => {
108
+ const ext = (0, node_path_1.extname)(file);
109
+ return this.supportedExtensions.has(ext);
110
+ });
111
+ return supportedFiles.sort();
112
+ }
113
+ catch (error) {
114
+ throw new Error(`File discovery failed: ${error instanceof Error ? error.message : String(error)}`);
115
+ }
116
+ }
117
+ /**
118
+ * Load a single benchmark file
119
+ */
120
+ async load(filePath) {
121
+ try {
122
+ // Basic file checks (existence, extension)
123
+ const basicValidation = await this.validate(filePath);
124
+ if (!basicValidation.valid) {
125
+ throw new Error(`Invalid benchmark file: ${basicValidation.errors.map((e) => e.message).join(', ')}`);
126
+ }
127
+ // Read file content
128
+ const content = await (0, promises_1.readFile)(filePath, 'utf-8');
129
+ // Get file stats for metadata
130
+ const stats = await (0, promises_1.stat)(filePath);
131
+ // Load the module using dynamic import
132
+ const ext = (0, node_path_1.extname)(filePath);
133
+ let module;
134
+ if (ext === '.ts' || ext === '.mts' || ext === '.cts') {
135
+ // For TypeScript files, use cosmiconfig-typescript-loader
136
+ const { TypeScriptLoader: createTypeScriptLoader } = await Promise.resolve().then(() => __importStar(require('cosmiconfig-typescript-loader')));
137
+ const loader = createTypeScriptLoader();
138
+ module = (await loader(filePath, content));
139
+ }
140
+ else {
141
+ // Use native dynamic import for JavaScript files with cache busting
142
+ // Add timestamp to prevent module caching issues across multiple loads
143
+ const timestamp = Date.now();
144
+ module = (await Promise.resolve(`${__rewriteRelativeImportExtension(`${filePath}?t=${timestamp}`)}`).then(s => __importStar(require(s))));
145
+ }
146
+ const exports = module.default || module;
147
+ // Validate the loaded exports structure with Zod
148
+ const structureValidation = this.validateExports(filePath, exports);
149
+ if (!structureValidation.valid || !structureValidation.data) {
150
+ throw new Error(`Invalid benchmark structure: ${structureValidation.errors.map((e) => e.message).join(', ')}`);
151
+ }
152
+ // Use the transformed/normalized data from Zod
153
+ // (this ensures shorthand functions are properly wrapped)
154
+ const normalizedExports = structureValidation.data;
155
+ // Analyze exports for metadata (simplified - structure already validated)
156
+ const hasDefaultExport = module.default !== undefined;
157
+ const exportNames = Object.keys(module);
158
+ return {
159
+ content,
160
+ exports: normalizedExports,
161
+ filePath,
162
+ metadata: {
163
+ exportNames,
164
+ hasDefaultExport,
165
+ mtime: stats.mtime,
166
+ size: stats.size,
167
+ },
168
+ };
169
+ }
170
+ catch (error) {
171
+ throw new Error(`Failed to load file ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
172
+ }
173
+ }
174
+ /**
175
+ * Load multiple files in parallel
176
+ */
177
+ async loadAll(filePaths) {
178
+ try {
179
+ const loadPromises = filePaths.map((filePath) => this.load(filePath));
180
+ return await Promise.all(loadPromises);
181
+ }
182
+ catch (error) {
183
+ throw new Error(`Failed to load files: ${error instanceof Error ? error.message : String(error)}`);
184
+ }
185
+ }
186
+ /**
187
+ * Validate benchmark file (basic checks only - file existence and extension)
188
+ * Structure validation happens after loading in the load() method
189
+ */
190
+ async validate(filePath) {
191
+ const errors = [];
192
+ const warnings = [];
193
+ try {
194
+ // Check file existence
195
+ try {
196
+ await (0, promises_1.access)(filePath);
197
+ }
198
+ catch {
199
+ errors.push({
200
+ code: 'FILE_NOT_FOUND',
201
+ file: filePath,
202
+ message: 'File does not exist',
203
+ severity: 'error',
204
+ });
205
+ return { errors, files: [], valid: false, warnings };
206
+ }
207
+ // Check file extension
208
+ const ext = (0, node_path_1.extname)(filePath);
209
+ if (!this.supportedExtensions.has(ext)) {
210
+ errors.push({
211
+ code: 'UNSUPPORTED_EXTENSION',
212
+ file: filePath,
213
+ message: `Unsupported file extension: ${ext}. Supported extensions: ${Array.from(this.supportedExtensions).join(', ')}`,
214
+ severity: 'error',
215
+ });
216
+ }
217
+ return {
218
+ errors,
219
+ files: [filePath],
220
+ valid: errors.length === 0,
221
+ warnings,
222
+ };
223
+ }
224
+ catch (error) {
225
+ errors.push({
226
+ code: 'VALIDATION_ERROR',
227
+ file: filePath,
228
+ message: `Validation failed: ${error instanceof Error ? error.message : String(error)}`,
229
+ severity: 'error',
230
+ });
231
+ return {
232
+ errors,
233
+ files: [filePath],
234
+ valid: false,
235
+ warnings,
236
+ };
237
+ }
238
+ }
239
+ /**
240
+ * Watch for file changes (placeholder implementation)
241
+ */
242
+ watch(_pattern, _callback) {
243
+ // TODO: Implement file watching with chokidar or similar
244
+ // For now, return a no-op watcher
245
+ return {
246
+ close() {
247
+ // No-op
248
+ },
249
+ };
250
+ }
251
+ /**
252
+ * Validate the structure of loaded exports using Zod schema Returns the
253
+ * transformed/normalized data if validation succeeds
254
+ */
255
+ validateExports(filePath, exports) {
256
+ const errors = [];
257
+ const warnings = [];
258
+ try {
259
+ const result = benchmark_schema_js_1.benchmarkFileSchema.safeParse(exports);
260
+ if (!result.success) {
261
+ for (const issue of result.error.issues) {
262
+ const path = issue.path.length > 0 ? `${issue.path.join('.')}: ` : '';
263
+ errors.push({
264
+ code: 'INVALID_STRUCTURE',
265
+ file: filePath,
266
+ message: `${path}${issue.message}`,
267
+ severity: 'error',
268
+ });
269
+ }
270
+ return { errors, valid: false, warnings };
271
+ }
272
+ // Return the transformed data (with shorthand functions normalized)
273
+ return { data: result.data, errors, valid: true, warnings };
274
+ }
275
+ catch (error) {
276
+ errors.push({
277
+ code: 'VALIDATION_ERROR',
278
+ file: filePath,
279
+ message: `Structure validation failed: ${error instanceof Error ? error.message : String(error)}`,
280
+ severity: 'error',
281
+ });
282
+ return { errors, valid: false, warnings };
283
+ }
284
+ }
285
+ }
286
+ exports.BenchmarkFileLoader = BenchmarkFileLoader;
287
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * ModestBench File Loader
3
+ *
4
+ * Handles discovery, loading, and validation of benchmark files. Supports glob
5
+ * pattern matching and file structure validation.
6
+ */
7
+ import type { BenchmarkFile, FileLoader, ValidationResult } from "../types/index.cjs";
8
+ /**
9
+ * File change notification for watch functionality
10
+ */
11
+ interface FileChange {
12
+ readonly filePath: string;
13
+ readonly timestamp: Date;
14
+ readonly type: 'added' | 'deleted' | 'modified';
15
+ }
16
+ /**
17
+ * File watcher interface
18
+ */
19
+ interface FileWatcher {
20
+ close(): void;
21
+ }
22
+ /**
23
+ * Implementation of FileLoader for benchmark files
24
+ */
25
+ export declare class BenchmarkFileLoader implements FileLoader {
26
+ private readonly supportedExtensions;
27
+ /**
28
+ * Discover benchmark files using glob patterns or explicit file paths
29
+ */
30
+ discover(pattern: string | string[], exclude?: string[]): Promise<string[]>;
31
+ /**
32
+ * Load a single benchmark file
33
+ */
34
+ load(filePath: string): Promise<BenchmarkFile>;
35
+ /**
36
+ * Load multiple files in parallel
37
+ */
38
+ loadAll(filePaths: string[]): Promise<BenchmarkFile[]>;
39
+ /**
40
+ * Validate benchmark file (basic checks only - file existence and extension)
41
+ * Structure validation happens after loading in the load() method
42
+ */
43
+ validate(filePath: string): Promise<ValidationResult>;
44
+ /**
45
+ * Watch for file changes (placeholder implementation)
46
+ */
47
+ watch(_pattern: string, _callback: (changes: FileChange[]) => void): FileWatcher;
48
+ /**
49
+ * Validate the structure of loaded exports using Zod schema Returns the
50
+ * transformed/normalized data if validation succeeds
51
+ */
52
+ private validateExports;
53
+ }
54
+ export {};
55
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAEV,aAAa,EACb,UAAU,EAEV,gBAAgB,EAEjB,2BAA0B;AAQ3B;;GAEG;AACH,UAAU,UAAU;IAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;CACjD;AAED;;GAEG;AACH,UAAU,WAAW;IACnB,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,UAAU;IACpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA6B;IAEjE;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,GAAE,MAAM,EAAO,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC;IA4DpB;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA4EpD;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAW5D;;;OAGG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoD3D;;OAEG;IACH,KAAK,CACH,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,GACzC,WAAW;IAUd;;;OAGG;IACH,OAAO,CAAC,eAAe;CAwCxB"}