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,34 @@
1
+ /**
2
+ * ModestBench History Command
3
+ *
4
+ * View and manage benchmark run history with subcommands for listing, showing,
5
+ * comparing, and cleaning historical data.
6
+ */
7
+ import type { CliContext } from "../index.js";
8
+ /**
9
+ * History command options interface
10
+ */
11
+ interface HistoryOptions {
12
+ args?: string[] | undefined;
13
+ confirm?: boolean | undefined;
14
+ cwd: string;
15
+ format?: 'csv' | 'human' | 'json' | undefined;
16
+ limit?: number | undefined;
17
+ maxAge?: number | undefined;
18
+ maxRuns?: number | undefined;
19
+ maxSize?: number | undefined;
20
+ outputDir?: string | undefined;
21
+ pattern?: string | undefined;
22
+ quiet?: boolean | undefined;
23
+ since?: string | undefined;
24
+ subcommand: 'clean' | 'compare' | 'export' | 'list' | 'show' | 'trends';
25
+ tags?: string[] | undefined;
26
+ until?: string | undefined;
27
+ verbose?: boolean | undefined;
28
+ }
29
+ /**
30
+ * Handle history command
31
+ */
32
+ export declare const handleHistoryCommand: (context: CliContext, options: HistoryOptions) => Promise<number>;
33
+ export {};
34
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/history.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB;AAE9C;;GAEG;AACH,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAS,UAAU,EACnB,SAAS,cAAc,KACtB,OAAO,CAAC,MAAM,CAgChB,CAAC"}
@@ -0,0 +1,422 @@
1
+ /**
2
+ * ModestBench History Command
3
+ *
4
+ * View and manage benchmark run history with subcommands for listing, showing,
5
+ * comparing, and cleaning historical data.
6
+ */
7
+ /**
8
+ * Handle history command
9
+ */
10
+ export const handleHistoryCommand = async (context, options) => {
11
+ try {
12
+ // Get the subcommand
13
+ const subcommand = options.subcommand;
14
+ switch (subcommand) {
15
+ case 'clean':
16
+ return await handleCleanCommand(context, options);
17
+ case 'compare':
18
+ return await handleCompareCommand(context, options);
19
+ case 'export':
20
+ return await handleExportCommand(context, options);
21
+ case 'list':
22
+ return await handleListCommand(context, options);
23
+ case 'show':
24
+ return await handleShowCommand(context, options);
25
+ case 'trends':
26
+ return await handleTrendsCommand(context, options);
27
+ default:
28
+ console.error(`Unknown history subcommand: ${subcommand || '(none)'}`);
29
+ console.error('Available subcommands: list, show, compare, trends, clean, export');
30
+ return 2; // Config error
31
+ }
32
+ }
33
+ catch (error) {
34
+ console.error('History command failed:', error instanceof Error ? error.message : String(error));
35
+ return 2; // Configuration/runtime errors
36
+ }
37
+ };
38
+ /**
39
+ * Format bytes in human-readable format
40
+ */
41
+ const formatBytes = (bytes) => {
42
+ const units = ['B', 'KB', 'MB', 'GB'];
43
+ let size = bytes;
44
+ let unitIndex = 0;
45
+ while (size >= 1024 && unitIndex < units.length - 1) {
46
+ size /= 1024;
47
+ unitIndex++;
48
+ }
49
+ return `${size.toFixed(1)} ${units[unitIndex]}`;
50
+ };
51
+ /**
52
+ * Handle the clean subcommand
53
+ */
54
+ const handleCleanCommand = async (context, options) => {
55
+ try {
56
+ // Build retention policy from arguments
57
+ const policy = {
58
+ ...(options.maxAge && { maxAge: options.maxAge }),
59
+ ...(options.maxRuns && { maxRuns: options.maxRuns }),
60
+ ...(options.maxSize && { maxSize: options.maxSize }),
61
+ };
62
+ if (Object.keys(policy).length === 0) {
63
+ console.error('At least one cleanup criterion must be specified (--max-age, --max-runs, or --max-size)');
64
+ return 2;
65
+ }
66
+ // Show what would be cleaned unless confirmed
67
+ if (!options.confirm) {
68
+ console.log('This will clean up historical data based on the following policy:');
69
+ if (policy.maxAge) {
70
+ console.log(` - Remove runs older than ${policy.maxAge}ms`);
71
+ }
72
+ if (policy.maxRuns) {
73
+ console.log(` - Keep only the latest ${policy.maxRuns} runs`);
74
+ }
75
+ if (policy.maxSize) {
76
+ console.log(` - Remove runs until storage is under ${policy.maxSize} bytes`);
77
+ }
78
+ console.log();
79
+ console.log('Use --confirm to proceed with cleanup.');
80
+ return 0;
81
+ }
82
+ // Perform cleanup
83
+ const result = await context.historyStorage.cleanup(policy);
84
+ if (!options.quiet) {
85
+ console.log(`Cleanup completed:`);
86
+ console.log(` Removed ${result.removedRuns} run(s)`);
87
+ console.log(` Freed ${formatBytes(result.freedBytes)} of storage`);
88
+ if (options.verbose && result.removedFiles.length > 0) {
89
+ console.log(` Removed files:`);
90
+ for (const file of result.removedFiles) {
91
+ console.log(` ${file}`);
92
+ }
93
+ }
94
+ }
95
+ return 0;
96
+ }
97
+ catch (error) {
98
+ console.error('Failed to clean history:', error instanceof Error ? error.message : String(error));
99
+ return 5;
100
+ }
101
+ };
102
+ /**
103
+ * Handle the compare subcommand
104
+ */
105
+ const handleCompareCommand = async (context, options) => {
106
+ try {
107
+ // For compare command, IDs come from args after the subcommand
108
+ const id1 = options.args?.[0];
109
+ const id2 = options.args?.[1];
110
+ if (!id1 || !id2) {
111
+ console.error('Two run IDs are required for compare command');
112
+ console.error('Usage: modestbench history compare <run-id1> <run-id2>');
113
+ return 2;
114
+ }
115
+ const [run1, run2] = await Promise.all([
116
+ context.historyStorage.loadRun(id1),
117
+ context.historyStorage.loadRun(id2),
118
+ ]);
119
+ if (!run1) {
120
+ console.error(`Run not found: ${id1}`);
121
+ return 1;
122
+ }
123
+ if (!run2) {
124
+ console.error(`Run not found: ${id2}`);
125
+ return 1;
126
+ }
127
+ if (options.format === 'json') {
128
+ const comparison = {
129
+ run1: { id: run1.id, summary: run1.summary },
130
+ run2: { id: run2.id, summary: run2.summary },
131
+ // TODO: Add detailed comparison logic
132
+ };
133
+ console.log(JSON.stringify(comparison, null, 2));
134
+ }
135
+ else {
136
+ // Human format comparison
137
+ console.log(`Comparing runs:`);
138
+ console.log(` Run 1: ${run1.id} (${run1.startTime.toLocaleString()})`);
139
+ console.log(` Run 2: ${run2.id} (${run2.startTime.toLocaleString()})`);
140
+ console.log();
141
+ console.log('Summary comparison:');
142
+ console.log(` Files: ${run1.summary.totalFiles} vs ${run2.summary.totalFiles}`);
143
+ console.log(` Tasks: ${run1.summary.totalTasks} vs ${run2.summary.totalTasks}`);
144
+ console.log(` Passed: ${run1.summary.passedTasks} vs ${run2.summary.passedTasks}`);
145
+ console.log(` Failed: ${run1.summary.failedTasks} vs ${run2.summary.failedTasks}`);
146
+ // TODO: Add detailed performance comparison
147
+ console.log();
148
+ console.log('Note: Detailed performance comparison not yet implemented.');
149
+ }
150
+ return 0;
151
+ }
152
+ catch (error) {
153
+ console.error('Failed to compare runs:', error instanceof Error ? error.message : String(error));
154
+ return 5;
155
+ }
156
+ };
157
+ /**
158
+ * Handle the export subcommand
159
+ */
160
+ const handleExportCommand = async (context, options) => {
161
+ try {
162
+ const format = options.format || 'json';
163
+ // Build query for export
164
+ const query = {
165
+ ...(options.since && { since: parseDate(options.since) }),
166
+ ...(options.until && { until: parseDate(options.until) }),
167
+ };
168
+ const exportData = await context.historyStorage.export(format, query);
169
+ if (options.outputDir) {
170
+ // Write to file
171
+ const fs = await import('node:fs/promises');
172
+ await fs.writeFile(options.outputDir, exportData, 'utf8');
173
+ if (!options.quiet) {
174
+ console.log(`Exported history to ${options.outputDir}`);
175
+ }
176
+ }
177
+ else {
178
+ // Write to stdout
179
+ console.log(exportData);
180
+ }
181
+ return 0;
182
+ }
183
+ catch (error) {
184
+ console.error('Failed to export history:', error instanceof Error ? error.message : String(error));
185
+ return 5;
186
+ }
187
+ };
188
+ /**
189
+ * Handle the list subcommand
190
+ */
191
+ const handleListCommand = async (context, options) => {
192
+ try {
193
+ // Build query from command line arguments
194
+ let parsedSince;
195
+ let parsedUntil;
196
+ if (options.since) {
197
+ try {
198
+ parsedSince = parseDate(options.since);
199
+ }
200
+ catch (error) {
201
+ console.error('Invalid since date:', error instanceof Error ? error.message : String(error));
202
+ return 2; // Invalid date format
203
+ }
204
+ }
205
+ if (options.until) {
206
+ try {
207
+ parsedUntil = parseDate(options.until);
208
+ }
209
+ catch (error) {
210
+ console.error('Invalid until date:', error instanceof Error ? error.message : String(error));
211
+ return 2; // Invalid date format
212
+ }
213
+ }
214
+ const query = {
215
+ ...(parsedSince && { since: parsedSince }),
216
+ ...(parsedUntil && { until: parsedUntil }),
217
+ ...(options.pattern && { pattern: options.pattern }),
218
+ ...(options.tags && options.tags.length > 0 && { tags: options.tags }),
219
+ ...(options.limit && { limit: options.limit }),
220
+ };
221
+ // Query historical runs
222
+ const runs = await context.historyStorage.queryRuns(query);
223
+ // Display results based on format
224
+ if (options.format === 'json') {
225
+ if (runs.length === 0) {
226
+ console.log('[]'); // Empty JSON array for no data
227
+ }
228
+ else {
229
+ console.log(JSON.stringify(runs.map((run) => ({
230
+ duration: run.duration,
231
+ failed: run.summary.failedTasks,
232
+ files: run.summary.totalFiles,
233
+ id: run.id,
234
+ passed: run.summary.passedTasks,
235
+ startTime: run.startTime,
236
+ tasks: run.summary.totalTasks,
237
+ })), null, 2));
238
+ }
239
+ }
240
+ else if (options.format === 'csv') {
241
+ console.log('id,startTime,duration,files,tasks,passed,failed');
242
+ if (runs.length > 0) {
243
+ for (const run of runs) {
244
+ console.log(`${run.id},${run.startTime.toISOString()},${run.duration},${run.summary.totalFiles},${run.summary.totalTasks},${run.summary.passedTasks},${run.summary.failedTasks}`);
245
+ }
246
+ }
247
+ // For CSV, no additional message needed - header is sufficient
248
+ }
249
+ else {
250
+ // Human format
251
+ if (runs.length === 0) {
252
+ if (!options.quiet) {
253
+ console.log('No historical data found matching criteria.');
254
+ }
255
+ }
256
+ else {
257
+ console.log('Recent benchmark runs:');
258
+ console.log();
259
+ for (const run of runs) {
260
+ const dateStr = run.startTime.toLocaleString();
261
+ const durationStr = `${(run.duration / 1000).toFixed(1)}s`;
262
+ const statusStr = run.summary.failedTasks > 0
263
+ ? `${run.summary.passedTasks} passed, ${run.summary.failedTasks} failed`
264
+ : `${run.summary.passedTasks} passed`;
265
+ console.log(` ${run.id.substring(0, 8)} - ${dateStr} (${durationStr})`);
266
+ console.log(` ${run.summary.totalFiles} files, ${run.summary.totalTasks} tasks: ${statusStr}`);
267
+ console.log();
268
+ }
269
+ }
270
+ }
271
+ return 0;
272
+ }
273
+ catch (error) {
274
+ console.error('Failed to list history:', error instanceof Error ? error.message : String(error));
275
+ return 5;
276
+ }
277
+ };
278
+ /**
279
+ * Handle the show subcommand
280
+ */
281
+ const handleShowCommand = async (context, options) => {
282
+ try {
283
+ // For show command, ID comes from the args after the subcommand
284
+ const runId = options.args?.[0];
285
+ if (!runId) {
286
+ console.error('Run ID is required for show command');
287
+ console.error('Usage: modestbench history show <run-id>');
288
+ return 2;
289
+ }
290
+ const run = await context.historyStorage.loadRun(runId);
291
+ if (!run) {
292
+ console.error(`Run not found: ${runId}`);
293
+ return 1;
294
+ }
295
+ if (options.format === 'json') {
296
+ console.log(JSON.stringify(run, null, 2));
297
+ }
298
+ else {
299
+ // Human format
300
+ console.log(`Benchmark Run: ${run.id}`);
301
+ console.log(`Date: ${run.startTime.toLocaleString()}`);
302
+ console.log(`Duration: ${(run.duration / 1000).toFixed(1)}s`);
303
+ console.log(`Environment: Node.js ${run.environment.nodeVersion} on ${run.environment.platform}`);
304
+ if (run.git) {
305
+ console.log(`Git: ${run.git.branch}@${run.git.commit.substring(0, 8)}`);
306
+ }
307
+ console.log();
308
+ console.log('Summary:');
309
+ console.log(` Files: ${run.summary.totalFiles}`);
310
+ console.log(` Suites: ${run.summary.totalSuites}`);
311
+ console.log(` Tasks: ${run.summary.totalTasks}`);
312
+ console.log(` Passed: ${run.summary.passedTasks}`);
313
+ console.log(` Failed: ${run.summary.failedTasks}`);
314
+ // TODO: Show detailed file/suite/task results
315
+ console.log();
316
+ console.log('Detailed results:');
317
+ for (const file of run.files) {
318
+ console.log(` 📁 ${file.filePath}`);
319
+ for (const suite of file.suites) {
320
+ console.log(` 📊 ${suite.name}`);
321
+ for (const task of suite.tasks) {
322
+ const status = task.error ? '❌' : '✅';
323
+ const timing = task.error
324
+ ? 'failed'
325
+ : `${(task.mean / 1000000).toFixed(2)}ms`;
326
+ console.log(` ${status} ${task.name} - ${timing}`);
327
+ }
328
+ }
329
+ }
330
+ }
331
+ return 0;
332
+ }
333
+ catch (error) {
334
+ console.error('Failed to show run:', error instanceof Error ? error.message : String(error));
335
+ return 5;
336
+ }
337
+ };
338
+ /**
339
+ * Handle the trends subcommand
340
+ */
341
+ const handleTrendsCommand = async (context, options) => {
342
+ try {
343
+ // Build query from command line arguments (same as list command)
344
+ let parsedSince;
345
+ let parsedUntil;
346
+ if (options.since) {
347
+ try {
348
+ parsedSince = parseDate(options.since);
349
+ }
350
+ catch (error) {
351
+ console.error('Invalid since date:', error instanceof Error ? error.message : String(error));
352
+ return 2; // Invalid date format
353
+ }
354
+ }
355
+ if (options.until) {
356
+ try {
357
+ parsedUntil = parseDate(options.until);
358
+ }
359
+ catch (error) {
360
+ console.error('Invalid until date:', error instanceof Error ? error.message : String(error));
361
+ return 2; // Invalid date format
362
+ }
363
+ }
364
+ // Get pattern from args or explicit pattern option
365
+ const pattern = options.args?.[0] || options.pattern;
366
+ const query = {
367
+ ...(parsedSince && { since: parsedSince }),
368
+ ...(parsedUntil && { until: parsedUntil }),
369
+ ...(pattern && { pattern }),
370
+ ...(options.tags && options.tags.length > 0 && { tags: options.tags }),
371
+ ...(options.limit && { limit: options.limit }),
372
+ };
373
+ // Query historical runs
374
+ const runs = await context.historyStorage.queryRuns(query);
375
+ if (runs.length === 0) {
376
+ if (!options.quiet) {
377
+ console.log('No historical data found matching criteria');
378
+ }
379
+ return 0; // Success - no data is not an error
380
+ }
381
+ if (options.format === 'json') {
382
+ // TODO: Generate trends data in JSON format
383
+ const trendsData = {
384
+ runs: runs.length,
385
+ timespan: {
386
+ end: runs[0]?.startTime,
387
+ start: runs[runs.length - 1]?.startTime,
388
+ },
389
+ // TODO: Add actual trend calculations
390
+ };
391
+ console.log(JSON.stringify(trendsData, null, 2));
392
+ }
393
+ else {
394
+ // Human format trends
395
+ if (!options.quiet) {
396
+ console.log(`Performance trends for ${runs.length} runs:`);
397
+ console.log(`Time range: ${runs[runs.length - 1]?.startTime} to ${runs[0]?.startTime}`);
398
+ // TODO: Add trend analysis and visualization
399
+ console.log('(Trend analysis not yet implemented)');
400
+ }
401
+ }
402
+ return 0; // Success
403
+ }
404
+ catch (error) {
405
+ console.error('Error showing trends:', error);
406
+ return 3; // Runtime error
407
+ }
408
+ };
409
+ /**
410
+ * Parse date string (ISO 8601 or relative)
411
+ */
412
+ const parseDate = (dateStr) => {
413
+ // Try parsing as ISO 8601 first
414
+ const isoDate = new Date(dateStr);
415
+ if (!isNaN(isoDate.getTime())) {
416
+ return isoDate;
417
+ }
418
+ // TODO: Parse relative dates like "1 week ago", "3 days ago", etc.
419
+ // For now, throw error for invalid dates
420
+ throw new Error(`Invalid date format: "${dateStr}"`);
421
+ };
422
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/cli/commands/history.ts"],"names":[],"mappings":"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"}