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,125 @@
1
+ /**
2
+ * ModestBench Progress Manager
3
+ *
4
+ * Tracks execution progress, estimates completion times, and manages progress
5
+ * callbacks for real-time updates during benchmark runs.
6
+ */
7
+ import type { BenchmarkRun, ProgressManager, ProgressState } from "../types/index.js";
8
+ /**
9
+ * Progress callback function type
10
+ */
11
+ type ProgressCallback = (state: ProgressState) => void;
12
+ /**
13
+ * Default progress manager implementation
14
+ */
15
+ export declare class ModestBenchProgressManager implements ProgressManager {
16
+ private callbacks;
17
+ private lastUpdate;
18
+ private readonly maxRecentTimings;
19
+ private metrics;
20
+ private state;
21
+ private readonly updateThrottleMs;
22
+ constructor();
23
+ /**
24
+ * Clean up progress tracking resources
25
+ */
26
+ cleanup(): void;
27
+ /**
28
+ * Estimate completion time
29
+ */
30
+ estimateCompletion(): Date | null;
31
+ /**
32
+ * Force an immediate progress update (bypassing throttling)
33
+ */
34
+ forceUpdate(): void;
35
+ /**
36
+ * Format elapsed time as human-readable string
37
+ */
38
+ getFormattedElapsed(): string;
39
+ /**
40
+ * Format estimated remaining time as human-readable string
41
+ */
42
+ getFormattedEstimate(): null | string;
43
+ /**
44
+ * Get detailed progress metrics
45
+ */
46
+ getMetrics(): null | {
47
+ elapsedMs: number;
48
+ estimatedCompletion: Date | null;
49
+ remainingTasks: number;
50
+ throughput: number;
51
+ };
52
+ /**
53
+ * Get progress as a fraction (0.0 to 1.0)
54
+ */
55
+ getProgressFraction(): number;
56
+ /**
57
+ * Get current progress state
58
+ */
59
+ getState(): ProgressState;
60
+ /**
61
+ * Increment the completed files counter
62
+ */
63
+ incrementFiles(): void;
64
+ /**
65
+ * Increment the completed suites counter
66
+ */
67
+ incrementSuites(): void;
68
+ /**
69
+ * Increment the completed tasks counter
70
+ */
71
+ incrementTasks(): void;
72
+ /**
73
+ * Initialize progress tracking for a benchmark run
74
+ */
75
+ initialize(run: BenchmarkRun): void;
76
+ /**
77
+ * Check if the run is complete
78
+ */
79
+ isComplete(): boolean;
80
+ /**
81
+ * Register a callback for progress updates
82
+ */
83
+ onProgress(callback: ProgressCallback): void; /**
84
+ * Remove a progress callback
85
+ */
86
+ removeCallback(callback: ProgressCallback): boolean;
87
+ /**
88
+ * Set the current file being processed
89
+ */
90
+ setCurrentFile(file: string): void;
91
+ /**
92
+ * Set the current suite being processed
93
+ */
94
+ setCurrentSuite(suite: string): void;
95
+ /**
96
+ * Set the current task being processed
97
+ */
98
+ setCurrentTask(task: string): void;
99
+ /**
100
+ * Update progress state
101
+ */
102
+ update(updates: Partial<ProgressState>): void;
103
+ /**
104
+ * Calculate progress percentage from current state
105
+ */
106
+ private calculatePercentage;
107
+ /**
108
+ * Calculate average throughput from recent measurements
109
+ */
110
+ private calculateThroughput;
111
+ /**
112
+ * Create initial progress state
113
+ */
114
+ private createInitialState;
115
+ /**
116
+ * Notify all registered callbacks of state changes
117
+ */
118
+ private notifyCallbacks;
119
+ /**
120
+ * Update throughput metrics
121
+ */
122
+ private updateMetrics;
123
+ }
124
+ export {};
125
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/progress/manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACd,0BAA0B;AAE3B;;GAEG;AACH,KAAK,gBAAgB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAYvD;;GAEG;AACH,qBAAa,0BAA2B,YAAW,eAAe;IAChE,OAAO,CAAC,SAAS,CAA0B;IAE3C,OAAO,CAAC,UAAU,CAAK;IAEvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAM;IAEvC,OAAO,CAAC,OAAO,CAAgC;IAE/C,OAAO,CAAC,KAAK,CAAgB;IAE7B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAO;;IAMxC;;OAEG;IACH,OAAO,IAAI,IAAI;IAMf;;OAEG;IACH,kBAAkB,IAAI,IAAI,GAAG,IAAI;IA0BjC;;OAEG;IACH,WAAW,IAAI,IAAI;IAOnB;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAc7B;;OAEG;IACH,oBAAoB,IAAI,IAAI,GAAG,MAAM;IAwBrC;;OAEG;IACH,UAAU,IAAI,IAAI,GAAG;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,IAAI,GAAG,IAAI,CAAC;QACjC,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;KACpB;IAqBD;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,QAAQ,IAAI,aAAa;IAIzB;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,eAAe,IAAI,IAAI;IAIvB;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAsCnC;;OAEG;IACH,UAAU,IAAI,OAAO;IAOrB;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,EAE1C;;OAEC;IAEH,cAAc,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO;IASnD;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IA0B7C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,aAAa;CAwBtB"}
@@ -0,0 +1,321 @@
1
+ /**
2
+ * ModestBench Progress Manager
3
+ *
4
+ * Tracks execution progress, estimates completion times, and manages progress
5
+ * callbacks for real-time updates during benchmark runs.
6
+ */
7
+ /**
8
+ * Default progress manager implementation
9
+ */
10
+ export class ModestBenchProgressManager {
11
+ callbacks = [];
12
+ lastUpdate = 0;
13
+ maxRecentTimings = 10;
14
+ metrics = null;
15
+ state;
16
+ updateThrottleMs = 100; // Limit updates to avoid spam
17
+ constructor() {
18
+ this.state = this.createInitialState();
19
+ }
20
+ /**
21
+ * Clean up progress tracking resources
22
+ */
23
+ cleanup() {
24
+ this.callbacks = [];
25
+ this.metrics = null;
26
+ this.state = this.createInitialState();
27
+ }
28
+ /**
29
+ * Estimate completion time
30
+ */
31
+ estimateCompletion() {
32
+ if (!this.metrics ||
33
+ this.state.totalTasks === 0 ||
34
+ this.state.tasksCompleted === 0) {
35
+ return null;
36
+ }
37
+ const remainingTasks = this.state.totalTasks - this.state.tasksCompleted;
38
+ if (remainingTasks <= 0) {
39
+ return new Date(); // Already complete
40
+ }
41
+ // Calculate average throughput from recent timings
42
+ const throughput = this.calculateThroughput();
43
+ if (throughput <= 0) {
44
+ return null; // Can't estimate with no throughput data
45
+ }
46
+ const estimatedRemainingMs = (remainingTasks / throughput) * 1000;
47
+ return new Date(Date.now() + estimatedRemainingMs);
48
+ }
49
+ /**
50
+ * Force an immediate progress update (bypassing throttling)
51
+ */
52
+ forceUpdate() {
53
+ const oldThrottle = this.lastUpdate;
54
+ this.lastUpdate = 0; // Reset throttle
55
+ this.update({}); // Trigger update with no changes
56
+ this.lastUpdate = oldThrottle; // Restore throttle timing
57
+ }
58
+ /**
59
+ * Format elapsed time as human-readable string
60
+ */
61
+ getFormattedElapsed() {
62
+ const seconds = Math.floor(this.state.elapsed / 1000);
63
+ const minutes = Math.floor(seconds / 60);
64
+ const hours = Math.floor(minutes / 60);
65
+ if (hours > 0) {
66
+ return `${hours}h ${minutes % 60}m ${seconds % 60}s`;
67
+ }
68
+ else if (minutes > 0) {
69
+ return `${minutes}m ${seconds % 60}s`;
70
+ }
71
+ else {
72
+ return `${seconds}s`;
73
+ }
74
+ }
75
+ /**
76
+ * Format estimated remaining time as human-readable string
77
+ */
78
+ getFormattedEstimate() {
79
+ const completion = this.estimateCompletion();
80
+ if (!completion) {
81
+ return null;
82
+ }
83
+ const remaining = completion.getTime() - Date.now();
84
+ if (remaining <= 0) {
85
+ return 'Complete';
86
+ }
87
+ const seconds = Math.floor(remaining / 1000);
88
+ const minutes = Math.floor(seconds / 60);
89
+ const hours = Math.floor(minutes / 60);
90
+ if (hours > 0) {
91
+ return `~${hours}h ${minutes % 60}m remaining`;
92
+ }
93
+ else if (minutes > 0) {
94
+ return `~${minutes}m ${seconds % 60}s remaining`;
95
+ }
96
+ else {
97
+ return `~${seconds}s remaining`;
98
+ }
99
+ }
100
+ /**
101
+ * Get detailed progress metrics
102
+ */
103
+ getMetrics() {
104
+ if (!this.metrics) {
105
+ return null;
106
+ }
107
+ const throughput = this.calculateThroughput();
108
+ const estimatedCompletion = this.estimateCompletion();
109
+ const elapsedMs = Date.now() - this.metrics.startTime;
110
+ const remainingTasks = Math.max(0, this.state.totalTasks - this.state.tasksCompleted);
111
+ return {
112
+ elapsedMs,
113
+ estimatedCompletion,
114
+ remainingTasks,
115
+ throughput,
116
+ };
117
+ }
118
+ /**
119
+ * Get progress as a fraction (0.0 to 1.0)
120
+ */
121
+ getProgressFraction() {
122
+ return this.state.percentage / 100;
123
+ }
124
+ /**
125
+ * Get current progress state
126
+ */
127
+ getState() {
128
+ return { ...this.state };
129
+ }
130
+ /**
131
+ * Increment the completed files counter
132
+ */
133
+ incrementFiles() {
134
+ this.update({ filesCompleted: this.state.filesCompleted + 1 });
135
+ }
136
+ /**
137
+ * Increment the completed suites counter
138
+ */
139
+ incrementSuites() {
140
+ this.update({ suitesCompleted: this.state.suitesCompleted + 1 });
141
+ }
142
+ /**
143
+ * Increment the completed tasks counter
144
+ */
145
+ incrementTasks() {
146
+ this.update({ tasksCompleted: this.state.tasksCompleted + 1 });
147
+ }
148
+ /**
149
+ * Initialize progress tracking for a benchmark run
150
+ */
151
+ initialize(run) {
152
+ // Use summary totals if available (from pre-calculation), otherwise calculate from files
153
+ const totalFiles = run.summary?.totalFiles ?? run.files.length;
154
+ let totalSuites = run.summary?.totalSuites ?? 0;
155
+ let totalTasks = run.summary?.totalTasks ?? 0;
156
+ // If we don't have summary data and have detailed run information, calculate actual totals
157
+ if (!run.summary?.totalTasks && run.files.length > 0) {
158
+ for (const file of run.files) {
159
+ for (const suite of file.suites) {
160
+ totalSuites++;
161
+ totalTasks += suite.tasks.length;
162
+ }
163
+ }
164
+ }
165
+ this.state = {
166
+ elapsed: 0,
167
+ filesCompleted: 0,
168
+ percentage: 0,
169
+ suitesCompleted: 0,
170
+ tasksCompleted: 0,
171
+ totalFiles,
172
+ totalSuites,
173
+ totalTasks,
174
+ };
175
+ this.metrics = {
176
+ currentThroughput: 0,
177
+ estimatedTotal: totalTasks, // Use tasks as the primary progress unit
178
+ recentTimings: [],
179
+ startTime: Date.now(),
180
+ };
181
+ this.lastUpdate = Date.now();
182
+ this.notifyCallbacks();
183
+ }
184
+ /**
185
+ * Check if the run is complete
186
+ */
187
+ isComplete() {
188
+ return (this.state.tasksCompleted >= this.state.totalTasks &&
189
+ this.state.totalTasks > 0);
190
+ }
191
+ /**
192
+ * Register a callback for progress updates
193
+ */
194
+ onProgress(callback) {
195
+ this.callbacks.push(callback);
196
+ } /**
197
+ * Remove a progress callback
198
+ */
199
+ removeCallback(callback) {
200
+ const index = this.callbacks.indexOf(callback);
201
+ if (index >= 0) {
202
+ this.callbacks.splice(index, 1);
203
+ return true;
204
+ }
205
+ return false;
206
+ }
207
+ /**
208
+ * Set the current file being processed
209
+ */
210
+ setCurrentFile(file) {
211
+ this.update({ currentFile: file });
212
+ }
213
+ /**
214
+ * Set the current suite being processed
215
+ */
216
+ setCurrentSuite(suite) {
217
+ this.update({ currentSuite: suite });
218
+ }
219
+ /**
220
+ * Set the current task being processed
221
+ */
222
+ setCurrentTask(task) {
223
+ this.update({ currentTask: task });
224
+ }
225
+ /**
226
+ * Update progress state
227
+ */
228
+ update(updates) {
229
+ const now = Date.now();
230
+ // Throttle updates to avoid excessive callbacks
231
+ if (now - this.lastUpdate < this.updateThrottleMs) {
232
+ return;
233
+ }
234
+ // Calculate elapsed time
235
+ const elapsed = this.metrics ? now - this.metrics.startTime : 0;
236
+ // Apply updates
237
+ this.state = {
238
+ ...this.state,
239
+ ...updates,
240
+ elapsed,
241
+ percentage: this.calculatePercentage(updates),
242
+ };
243
+ // Update metrics for completion estimation
244
+ this.updateMetrics(now);
245
+ this.lastUpdate = now;
246
+ this.notifyCallbacks();
247
+ }
248
+ /**
249
+ * Calculate progress percentage from current state
250
+ */
251
+ calculatePercentage(updates) {
252
+ const currentState = { ...this.state, ...updates };
253
+ if (currentState.totalTasks === 0) {
254
+ return 0;
255
+ }
256
+ return Math.min(100, Math.max(0, (currentState.tasksCompleted / currentState.totalTasks) * 100));
257
+ }
258
+ /**
259
+ * Calculate average throughput from recent measurements
260
+ */
261
+ calculateThroughput() {
262
+ if (!this.metrics || this.metrics.recentTimings.length === 0) {
263
+ return 0;
264
+ }
265
+ // Use moving average of recent throughput measurements
266
+ const sum = this.metrics.recentTimings.reduce((acc, timing) => acc + timing, 0);
267
+ return sum / this.metrics.recentTimings.length;
268
+ }
269
+ /**
270
+ * Create initial progress state
271
+ */
272
+ createInitialState() {
273
+ return {
274
+ elapsed: 0,
275
+ filesCompleted: 0,
276
+ percentage: 0,
277
+ suitesCompleted: 0,
278
+ tasksCompleted: 0,
279
+ totalFiles: 0,
280
+ totalSuites: 0,
281
+ totalTasks: 0,
282
+ };
283
+ }
284
+ /**
285
+ * Notify all registered callbacks of state changes
286
+ */
287
+ notifyCallbacks() {
288
+ for (const callback of this.callbacks) {
289
+ try {
290
+ callback(this.state);
291
+ }
292
+ catch (error) {
293
+ console.error('Error in progress callback:', error);
294
+ }
295
+ }
296
+ }
297
+ /**
298
+ * Update throughput metrics
299
+ */
300
+ updateMetrics(now) {
301
+ if (!this.metrics) {
302
+ return;
303
+ }
304
+ // Track timing for throughput calculation
305
+ const elapsed = now - this.metrics.startTime;
306
+ if (elapsed > 0 && this.state.tasksCompleted > 0) {
307
+ const currentThroughput = this.state.tasksCompleted / (elapsed / 1000); // tasks per second
308
+ // Add to recent timings for moving average
309
+ this.metrics.recentTimings.push(currentThroughput);
310
+ // Keep only the most recent timings
311
+ if (this.metrics.recentTimings.length > this.maxRecentTimings) {
312
+ this.metrics.recentTimings.shift();
313
+ }
314
+ this.metrics = {
315
+ ...this.metrics,
316
+ currentThroughput,
317
+ };
318
+ }
319
+ }
320
+ }
321
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/progress/manager.ts"],"names":[],"mappings":"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"}