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,452 @@
1
+ /**
2
+ * ModestBench History Storage
3
+ *
4
+ * File-based storage system for benchmark run history and results. Provides
5
+ * querying, cleanup, and export capabilities for historical data.
6
+ */
7
+ import { createHash } from 'node:crypto';
8
+ import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync, } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ /**
11
+ * File-based history storage implementation
12
+ */
13
+ export class FileHistoryStorage {
14
+ index = null;
15
+ indexFile;
16
+ maxFileSize;
17
+ storageDir;
18
+ constructor(options = {}) {
19
+ this.storageDir =
20
+ options.storageDir || join(process.cwd(), '.modestbench', 'history');
21
+ this.indexFile = join(this.storageDir, 'index.json');
22
+ this.maxFileSize = options.maxFileSize || 10 * 1024 * 1024; // 10MB default
23
+ this.ensureStorageDir();
24
+ }
25
+ static isValidBenchmarkRun(obj) {
26
+ // Type guard function that checks properties on unknown object
27
+ return (!!obj &&
28
+ typeof obj === 'object' &&
29
+ 'id' in obj &&
30
+ typeof obj.id === 'string' &&
31
+ 'files' in obj &&
32
+ Array.isArray(obj.files) &&
33
+ 'startTime' in obj &&
34
+ !!obj.startTime &&
35
+ 'endTime' in obj &&
36
+ !!obj.endTime &&
37
+ 'environment' in obj &&
38
+ !!obj.environment &&
39
+ 'summary' in obj &&
40
+ !!obj.summary);
41
+ }
42
+ /**
43
+ * Clean up old data according to retention policy
44
+ */
45
+ async cleanup(policy) {
46
+ try {
47
+ const index = await this.loadIndex();
48
+ const entriesToRemove = [];
49
+ let totalSize = 0;
50
+ // Calculate current storage metrics
51
+ for (const entry of index.entries) {
52
+ totalSize += entry.sizeBytes;
53
+ }
54
+ // Sort entries by date (oldest first) for cleanup
55
+ const sortedEntries = [...index.entries].sort((a, b) => a.date.getTime() - b.date.getTime());
56
+ // Apply retention policies
57
+ for (const entry of sortedEntries) {
58
+ let shouldRemove = false;
59
+ // Check max age
60
+ if (policy.maxAge &&
61
+ Date.now() - entry.date.getTime() > policy.maxAge) {
62
+ shouldRemove = true;
63
+ }
64
+ // Check max runs count (remove oldest)
65
+ if (policy.maxRuns &&
66
+ index.entries.length - entriesToRemove.length > policy.maxRuns) {
67
+ shouldRemove = true;
68
+ }
69
+ // Check max size (remove oldest until under limit)
70
+ if (policy.maxSize && totalSize > policy.maxSize) {
71
+ shouldRemove = true;
72
+ totalSize -= entry.sizeBytes;
73
+ }
74
+ if (shouldRemove) {
75
+ entriesToRemove.push(entry);
76
+ }
77
+ }
78
+ // Remove files and update index
79
+ const removedFiles = [];
80
+ let freedBytes = 0;
81
+ for (const entry of entriesToRemove) {
82
+ const filePath = join(this.storageDir, entry.filename);
83
+ try {
84
+ if (existsSync(filePath)) {
85
+ unlinkSync(filePath);
86
+ removedFiles.push(entry.filename);
87
+ freedBytes += entry.sizeBytes;
88
+ }
89
+ await this.removeFromIndex(entry.id);
90
+ }
91
+ catch (error) {
92
+ // Log but continue with other deletions
93
+ console.warn(`Failed to remove file ${entry.filename}: ${error}`);
94
+ }
95
+ }
96
+ return {
97
+ freedBytes,
98
+ removedFiles,
99
+ removedRuns: entriesToRemove.length,
100
+ };
101
+ }
102
+ catch (error) {
103
+ throw new Error(`Failed to cleanup storage: ${error instanceof Error ? error.message : String(error)}`);
104
+ }
105
+ }
106
+ /**
107
+ * Export historical data
108
+ */
109
+ async export(format, query) {
110
+ try {
111
+ const runs = await this.queryRuns(query || {});
112
+ if (format === 'json') {
113
+ return JSON.stringify(runs, null, 2);
114
+ }
115
+ else if (format === 'csv') {
116
+ return this.exportToCsv(runs);
117
+ }
118
+ else {
119
+ throw new Error(`Unsupported export format: ${format}`);
120
+ }
121
+ }
122
+ catch (error) {
123
+ throw new Error(`Failed to export data: ${error instanceof Error ? error.message : String(error)}`);
124
+ }
125
+ }
126
+ /**
127
+ * Get index of all stored runs
128
+ */
129
+ async getIndex() {
130
+ try {
131
+ const index = await this.loadIndex();
132
+ return index.entries.map((entry) => ({
133
+ date: entry.date,
134
+ id: entry.id,
135
+ summary: entry.summary,
136
+ }));
137
+ }
138
+ catch (error) {
139
+ throw new Error(`Failed to get storage index: ${error instanceof Error ? error.message : String(error)}`);
140
+ }
141
+ }
142
+ /**
143
+ * Get storage statistics
144
+ */
145
+ async getStats() {
146
+ try {
147
+ const index = await this.loadIndex();
148
+ const dates = index.entries
149
+ .map((e) => e.date)
150
+ .sort((a, b) => a.getTime() - b.getTime());
151
+ return {
152
+ newestRun: dates[dates.length - 1],
153
+ oldestRun: dates[0],
154
+ totalRuns: index.entries.length,
155
+ totalSize: index.entries.reduce((total, entry) => total + entry.sizeBytes, 0),
156
+ };
157
+ }
158
+ catch {
159
+ return { totalRuns: 0, totalSize: 0 };
160
+ }
161
+ }
162
+ /**
163
+ * Get storage directory path
164
+ */
165
+ getStorageDir() {
166
+ return this.storageDir;
167
+ }
168
+ /**
169
+ * Get total storage size in bytes
170
+ */
171
+ async getStorageSize() {
172
+ try {
173
+ const index = await this.loadIndex();
174
+ return index.entries.reduce((total, entry) => total + entry.sizeBytes, 0);
175
+ }
176
+ catch {
177
+ return 0;
178
+ }
179
+ }
180
+ /**
181
+ * Load a specific benchmark run
182
+ */
183
+ async loadRun(id) {
184
+ try {
185
+ const index = await this.loadIndex();
186
+ const entry = index.entries.find((e) => e.id === id);
187
+ if (!entry) {
188
+ return null;
189
+ }
190
+ const filePath = join(this.storageDir, entry.filename);
191
+ if (!existsSync(filePath)) {
192
+ // File missing, clean up index
193
+ await this.removeFromIndex(id);
194
+ return null;
195
+ }
196
+ const data = readFileSync(filePath, 'utf8');
197
+ const run = JSON.parse(data);
198
+ // Validate the loaded run
199
+ if (!FileHistoryStorage.isValidBenchmarkRun(run)) {
200
+ throw new Error(`Invalid benchmark run data in file ${entry.filename}`);
201
+ }
202
+ return run;
203
+ }
204
+ catch (error) {
205
+ throw new Error(`Failed to load benchmark run ${id}: ${error instanceof Error ? error.message : String(error)}`);
206
+ }
207
+ }
208
+ /**
209
+ * Query historical runs
210
+ */
211
+ async queryRuns(query) {
212
+ try {
213
+ const index = await this.loadIndex();
214
+ let filteredEntries = [...index.entries];
215
+ // Apply filters
216
+ if (query.since) {
217
+ filteredEntries = filteredEntries.filter((e) => e.date >= query.since);
218
+ }
219
+ if (query.until) {
220
+ filteredEntries = filteredEntries.filter((e) => e.date <= query.until);
221
+ }
222
+ if (query.pattern) {
223
+ const regex = new RegExp(query.pattern, 'i');
224
+ filteredEntries = filteredEntries.filter((e) => regex.test(e.summary));
225
+ }
226
+ if (query.tags && query.tags.length > 0) {
227
+ filteredEntries = filteredEntries.filter((e) => query.tags.some((tag) => e.tags.includes(tag)));
228
+ }
229
+ // Apply sorting
230
+ const sortBy = query.sortBy || 'date';
231
+ const sort = query.sort || 'desc';
232
+ filteredEntries.sort((a, b) => {
233
+ let comparison = 0;
234
+ switch (sortBy) {
235
+ case 'date':
236
+ comparison = a.date.getTime() - b.date.getTime();
237
+ break;
238
+ case 'name':
239
+ comparison = a.summary.localeCompare(b.summary);
240
+ break;
241
+ default:
242
+ comparison = a.date.getTime() - b.date.getTime();
243
+ }
244
+ return sort === 'desc' ? -comparison : comparison;
245
+ });
246
+ // Apply pagination
247
+ const offset = query.offset || 0;
248
+ const limit = query.limit || filteredEntries.length;
249
+ const paginatedEntries = filteredEntries.slice(offset, offset + limit);
250
+ // Load the actual runs
251
+ const runs = [];
252
+ for (const entry of paginatedEntries) {
253
+ const run = await this.loadRun(entry.id);
254
+ if (run) {
255
+ runs.push(run);
256
+ }
257
+ }
258
+ return runs;
259
+ }
260
+ catch (error) {
261
+ throw new Error(`Failed to query benchmark runs: ${error instanceof Error ? error.message : String(error)}`);
262
+ }
263
+ }
264
+ /**
265
+ * Save a benchmark run to storage
266
+ */
267
+ async saveRun(run) {
268
+ try {
269
+ this.ensureStorageDir();
270
+ // Generate filename based on run ID and timestamp
271
+ const filename = this.generateFilename(run);
272
+ const filePath = join(this.storageDir, filename);
273
+ // Serialize the run data
274
+ const data = JSON.stringify(run, null, 2);
275
+ // Check file size limit
276
+ if (Buffer.byteLength(data, 'utf8') > this.maxFileSize) {
277
+ throw new Error(`Benchmark run data exceeds maximum file size of ${this.maxFileSize} bytes`);
278
+ }
279
+ // Write the run data
280
+ writeFileSync(filePath, data, 'utf8');
281
+ // Update the index
282
+ await this.updateIndex(run, filename, Buffer.byteLength(data, 'utf8'));
283
+ }
284
+ catch (error) {
285
+ throw new Error(`Failed to save benchmark run: ${error instanceof Error ? error.message : String(error)}`);
286
+ }
287
+ }
288
+ /**
289
+ * Ensure storage directory exists
290
+ */
291
+ ensureStorageDir() {
292
+ if (!existsSync(this.storageDir)) {
293
+ mkdirSync(this.storageDir, { recursive: true });
294
+ }
295
+ }
296
+ /**
297
+ * Export runs to CSV format
298
+ */
299
+ exportToCsv(runs) {
300
+ const headers = [
301
+ 'runId',
302
+ 'startTime',
303
+ 'endTime',
304
+ 'duration',
305
+ 'files',
306
+ 'suites',
307
+ 'tasks',
308
+ 'passed',
309
+ 'failed',
310
+ 'nodeVersion',
311
+ 'platform',
312
+ 'arch',
313
+ 'gitCommit',
314
+ 'gitBranch',
315
+ ];
316
+ const rows = runs.map((run) => [
317
+ run.id,
318
+ run.startTime.toISOString(),
319
+ run.endTime.toISOString(),
320
+ run.duration.toString(),
321
+ run.summary.totalFiles.toString(),
322
+ run.summary.totalSuites.toString(),
323
+ run.summary.totalTasks.toString(),
324
+ run.summary.passedTasks.toString(),
325
+ run.summary.failedTasks.toString(),
326
+ run.environment.nodeVersion,
327
+ run.environment.platform,
328
+ run.environment.arch,
329
+ run.git?.commit || '',
330
+ run.git?.branch || '',
331
+ ]);
332
+ const csvLines = [headers, ...rows];
333
+ return csvLines
334
+ .map((row) => row.map((cell) => `"${cell.replace(/"/g, '""')}"`).join(','))
335
+ .join('\n');
336
+ }
337
+ /**
338
+ * Generate filename for a benchmark run
339
+ */
340
+ generateFilename(run) {
341
+ const timestamp = run.startTime.toISOString().replace(/[:.]/g, '-');
342
+ const hash = createHash('md5').update(run.id).digest('hex').substring(0, 8);
343
+ return `run-${timestamp}-${hash}.json`;
344
+ }
345
+ /**
346
+ * Generate a human-readable summary for a run
347
+ */
348
+ generateSummary(run) {
349
+ const fileCount = run.files.length;
350
+ const taskCount = run.summary.totalTasks;
351
+ const failedCount = run.summary.failedTasks;
352
+ if (failedCount > 0) {
353
+ return `${fileCount} files, ${taskCount} tasks (${failedCount} failed)`;
354
+ }
355
+ else {
356
+ return `${fileCount} files, ${taskCount} tasks`;
357
+ }
358
+ }
359
+ /**
360
+ * Load the storage index
361
+ */
362
+ async loadIndex() {
363
+ if (this.index) {
364
+ return this.index;
365
+ }
366
+ if (!existsSync(this.indexFile)) {
367
+ this.index = {
368
+ created: new Date(),
369
+ entries: [],
370
+ lastModified: new Date(),
371
+ version: '1.0.0',
372
+ };
373
+ await this.saveIndex();
374
+ return this.index; // We just assigned it, so it's not null
375
+ }
376
+ try {
377
+ const data = readFileSync(this.indexFile, 'utf8');
378
+ const parsed = JSON.parse(data);
379
+ // Convert date strings back to Date objects
380
+ this.index = {
381
+ created: new Date(parsed.created),
382
+ entries: parsed.entries.map((entry) => ({
383
+ ...entry,
384
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access
385
+ date: new Date(entry.date),
386
+ })),
387
+ lastModified: new Date(parsed.lastModified),
388
+ version: '1.0.0',
389
+ };
390
+ return this.index; // We just assigned it, so it's not null
391
+ }
392
+ catch (error) {
393
+ throw new Error(`Failed to load storage index: ${error instanceof Error ? error.message : String(error)}`);
394
+ }
395
+ }
396
+ /**
397
+ * Remove an entry from the index
398
+ */
399
+ async removeFromIndex(id) {
400
+ const index = await this.loadIndex();
401
+ const entryIndex = index.entries.findIndex((e) => e.id === id);
402
+ if (entryIndex >= 0) {
403
+ index.entries.splice(entryIndex, 1);
404
+ this.index = index;
405
+ await this.saveIndex();
406
+ }
407
+ }
408
+ /**
409
+ * Save the storage index
410
+ */
411
+ async saveIndex() {
412
+ if (!this.index) {
413
+ return;
414
+ }
415
+ try {
416
+ this.index = {
417
+ ...this.index,
418
+ lastModified: new Date(),
419
+ };
420
+ const data = JSON.stringify(this.index, null, 2);
421
+ writeFileSync(this.indexFile, data, 'utf8');
422
+ }
423
+ catch (error) {
424
+ throw new Error(`Failed to save storage index: ${error instanceof Error ? error.message : String(error)}`);
425
+ }
426
+ }
427
+ /**
428
+ * Update index with a new run
429
+ */
430
+ async updateIndex(run, filename, sizeBytes) {
431
+ const index = await this.loadIndex();
432
+ const entry = {
433
+ date: run.startTime,
434
+ filename,
435
+ id: run.id,
436
+ sizeBytes,
437
+ summary: this.generateSummary(run),
438
+ tags: run.tags || [],
439
+ };
440
+ // Remove existing entry if it exists
441
+ const existingIndex = index.entries.findIndex((e) => e.id === run.id);
442
+ if (existingIndex >= 0) {
443
+ index.entries.splice(existingIndex, 1);
444
+ }
445
+ // Add new entry
446
+ index.entries.push(entry);
447
+ // Update index
448
+ this.index = index;
449
+ await this.saveIndex();
450
+ }
451
+ }
452
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/storage/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * ModestBench CLI Types
4
+ *
5
+ * Defines types specific to the command-line interface, including command
6
+ * definitions, argument parsing, and CLI-specific configuration structures.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ExitCodes = void 0;
10
+ /**
11
+ * Exit codes used by the CLI
12
+ */
13
+ exports.ExitCodes = {
14
+ ConfigurationError: 2,
15
+ ExecutionError: 5,
16
+ FileDiscoveryError: 3,
17
+ GeneralError: 1,
18
+ Success: 0,
19
+ ValidationError: 4,
20
+ };
21
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/types/cli.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH;;GAEG;AACU,QAAA,SAAS,GAAG;IACvB,kBAAkB,EAAE,CAAC;IACrB,cAAc,EAAE,CAAC;IACjB,kBAAkB,EAAE,CAAC;IACrB,YAAY,EAAE,CAAC;IACf,OAAO,EAAE,CAAC;IACV,eAAe,EAAE,CAAC;CACV,CAAC"}