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,255 @@
1
+ "use strict";
2
+ /**
3
+ * ModestBench Reporter Registry
4
+ *
5
+ * Plugin-based system for managing benchmark output formatters. Supports
6
+ * registration, retrieval, and lifecycle management of reporters.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ModestBenchReporterRegistry = exports.CompositeReporter = exports.BaseReporter = void 0;
10
+ /**
11
+ * Base abstract reporter class providing common functionality
12
+ */
13
+ class BaseReporter {
14
+ name;
15
+ options;
16
+ constructor(name, options = {}) {
17
+ this.name = name;
18
+ this.options = options;
19
+ }
20
+ /**
21
+ * Get reporter name
22
+ */
23
+ getName() {
24
+ return this.name;
25
+ }
26
+ /**
27
+ * Get reporter options
28
+ */
29
+ getOptions() {
30
+ return { ...this.options };
31
+ }
32
+ /**
33
+ * Utility method to format duration in human-readable format
34
+ */
35
+ formatDuration(nanoseconds) {
36
+ if (nanoseconds < 1000) {
37
+ return `${nanoseconds.toFixed(2)}ns`;
38
+ }
39
+ else if (nanoseconds < 1000000) {
40
+ return `${(nanoseconds / 1000).toFixed(2)}μs`;
41
+ }
42
+ else if (nanoseconds < 1000000000) {
43
+ return `${(nanoseconds / 1000000).toFixed(2)}ms`;
44
+ }
45
+ else {
46
+ return `${(nanoseconds / 1000000000).toFixed(2)}s`;
47
+ }
48
+ }
49
+ /**
50
+ * Utility method to format operations per second
51
+ */
52
+ formatOpsPerSecond(opsPerSecond) {
53
+ if (opsPerSecond < 1000) {
54
+ return `${opsPerSecond.toFixed(2)} ops/sec`;
55
+ }
56
+ else if (opsPerSecond < 1000000) {
57
+ return `${(opsPerSecond / 1000).toFixed(2)}K ops/sec`;
58
+ }
59
+ else if (opsPerSecond < 1000000000) {
60
+ return `${(opsPerSecond / 1000000).toFixed(2)}M ops/sec`;
61
+ }
62
+ else {
63
+ return `${(opsPerSecond / 1000000000).toFixed(2)}B ops/sec`;
64
+ }
65
+ }
66
+ /**
67
+ * Utility method to format percentage
68
+ */
69
+ formatPercentage(value) {
70
+ return `${value.toFixed(2)}%`;
71
+ }
72
+ /**
73
+ * Utility method to safely handle async operations
74
+ */
75
+ async safeAsync(operation) {
76
+ try {
77
+ return await operation();
78
+ }
79
+ catch (error) {
80
+ await this.onError(error instanceof Error ? error : new Error(String(error)));
81
+ return null;
82
+ }
83
+ }
84
+ }
85
+ exports.BaseReporter = BaseReporter;
86
+ /**
87
+ * Composite reporter that broadcasts events to multiple reporters
88
+ */
89
+ class CompositeReporter extends BaseReporter {
90
+ reporters;
91
+ constructor(reporters) {
92
+ super('composite', {});
93
+ this.reporters = [...reporters];
94
+ }
95
+ /**
96
+ * Add a reporter to the composite
97
+ */
98
+ addReporter(reporter) {
99
+ this.reporters.push(reporter);
100
+ }
101
+ /**
102
+ * Get all reporters in the composite
103
+ */
104
+ getReporters() {
105
+ return [...this.reporters];
106
+ }
107
+ async onEnd(run) {
108
+ await this.broadcastAsync('onEnd', run);
109
+ }
110
+ async onError(error) {
111
+ await this.broadcastAsync('onError', error);
112
+ }
113
+ async onFileEnd(result) {
114
+ await this.broadcastAsync('onFileEnd', result);
115
+ }
116
+ async onFileStart(file) {
117
+ await this.broadcastAsync('onFileStart', file);
118
+ }
119
+ async onProgress(state) {
120
+ await this.broadcastAsync('onProgress', state);
121
+ }
122
+ async onStart(run) {
123
+ await this.broadcastAsync('onStart', run);
124
+ }
125
+ async onSuiteEnd(result) {
126
+ await this.broadcastAsync('onSuiteEnd', result);
127
+ }
128
+ async onSuiteStart(suite) {
129
+ await this.broadcastAsync('onSuiteStart', suite);
130
+ }
131
+ async onTaskResult(result) {
132
+ await this.broadcastAsync('onTaskResult', result);
133
+ }
134
+ async onTaskStart(task) {
135
+ await this.broadcastAsync('onTaskStart', task);
136
+ }
137
+ /**
138
+ * Remove a reporter from the composite
139
+ */
140
+ removeReporter(reporter) {
141
+ const index = this.reporters.indexOf(reporter);
142
+ if (index >= 0) {
143
+ this.reporters.splice(index, 1);
144
+ return true;
145
+ }
146
+ return false;
147
+ }
148
+ /**
149
+ * Broadcast an event to all reporters with error handling
150
+ */
151
+ async broadcastAsync(method, ...args) {
152
+ const promises = this.reporters.map(async (reporter) => {
153
+ try {
154
+ const reporterMethod = reporter[method];
155
+ if (typeof reporterMethod === 'function') {
156
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
157
+ const result = reporterMethod(...args);
158
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
159
+ if (result && typeof result.then === 'function') {
160
+ await result;
161
+ }
162
+ }
163
+ }
164
+ catch (error) {
165
+ // Handle reporter-specific errors without affecting others
166
+ console.error(`Reporter error in ${reporter.constructor.name}.${method}:`, error);
167
+ }
168
+ });
169
+ await Promise.all(promises);
170
+ }
171
+ }
172
+ exports.CompositeReporter = CompositeReporter;
173
+ /**
174
+ * Reporter registry implementation for managing multiple reporters
175
+ */
176
+ class ModestBenchReporterRegistry {
177
+ reporters = new Map();
178
+ /**
179
+ * Clear all registered reporters
180
+ */
181
+ clear() {
182
+ this.reporters.clear();
183
+ }
184
+ /**
185
+ * Get a reporter by name
186
+ */
187
+ get(name) {
188
+ return this.reporters.get(name);
189
+ }
190
+ /**
191
+ * Get all registered reporters
192
+ */
193
+ getAll() {
194
+ const result = {};
195
+ this.reporters.forEach((reporter, name) => {
196
+ result[name] = reporter;
197
+ });
198
+ return result;
199
+ }
200
+ /**
201
+ * Get multiple reporters by names
202
+ */
203
+ getByNames(names) {
204
+ const result = [];
205
+ const missing = [];
206
+ for (const name of names) {
207
+ const reporter = this.reporters.get(name);
208
+ if (reporter) {
209
+ result.push(reporter);
210
+ }
211
+ else {
212
+ missing.push(name);
213
+ }
214
+ }
215
+ if (missing.length > 0) {
216
+ throw new Error(`Unknown reporters: ${missing.join(', ')}. Available: ${Array.from(this.reporters.keys()).join(', ')}`);
217
+ }
218
+ return result;
219
+ }
220
+ /**
221
+ * Get list of registered reporter names
222
+ */
223
+ getNames() {
224
+ return Array.from(this.reporters.keys());
225
+ }
226
+ /**
227
+ * Check if a reporter is registered
228
+ */
229
+ has(name) {
230
+ return this.reporters.has(name);
231
+ }
232
+ /**
233
+ * Register a reporter with a unique name
234
+ */
235
+ register(name, reporter) {
236
+ if (this.reporters.has(name)) {
237
+ throw new Error(`Reporter with name "${name}" is already registered`);
238
+ }
239
+ this.reporters.set(name, reporter);
240
+ }
241
+ /**
242
+ * Get count of registered reporters
243
+ */
244
+ size() {
245
+ return this.reporters.size;
246
+ }
247
+ /**
248
+ * Unregister a reporter
249
+ */
250
+ unregister(name) {
251
+ return this.reporters.delete(name);
252
+ }
253
+ }
254
+ exports.ModestBenchReporterRegistry = ModestBenchReporterRegistry;
255
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/reporters/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * ModestBench Reporter Registry
3
+ *
4
+ * Plugin-based system for managing benchmark output formatters. Supports
5
+ * registration, retrieval, and lifecycle management of reporters.
6
+ */
7
+ import type { BenchmarkRun, FileResult, ProgressState, Reporter, ReporterRegistry, SuiteResult, TaskResult } from "../types/index.cjs";
8
+ /**
9
+ * Base abstract reporter class providing common functionality
10
+ */
11
+ export declare abstract class BaseReporter implements Reporter {
12
+ protected readonly name: string;
13
+ protected readonly options: Record<string, unknown>;
14
+ constructor(name: string, options?: Record<string, unknown>);
15
+ /**
16
+ * Get reporter name
17
+ */
18
+ getName(): string;
19
+ /**
20
+ * Get reporter options
21
+ */
22
+ getOptions(): Record<string, unknown>;
23
+ /**
24
+ * Called when benchmark run completes
25
+ */
26
+ abstract onEnd(run: BenchmarkRun): Promise<void> | void;
27
+ /**
28
+ * Called when an error occurs
29
+ */
30
+ abstract onError(error: Error): Promise<void> | void;
31
+ /**
32
+ * Called when a file completes
33
+ */
34
+ abstract onFileEnd(result: FileResult): Promise<void> | void;
35
+ /**
36
+ * Called when a file starts execution
37
+ */
38
+ abstract onFileStart(file: string): Promise<void> | void;
39
+ /**
40
+ * Called for progress updates
41
+ */
42
+ abstract onProgress(state: ProgressState): Promise<void> | void;
43
+ /**
44
+ * Called when benchmark run starts
45
+ */
46
+ abstract onStart(run: BenchmarkRun): Promise<void> | void;
47
+ /**
48
+ * Called when a suite completes
49
+ */
50
+ abstract onSuiteEnd(result: SuiteResult): Promise<void> | void;
51
+ /**
52
+ * Called when a suite starts execution
53
+ */
54
+ abstract onSuiteStart(suite: string): Promise<void> | void;
55
+ /**
56
+ * Called when a task completes
57
+ */
58
+ abstract onTaskResult(result: TaskResult): Promise<void> | void;
59
+ /**
60
+ * Called when a task starts execution
61
+ */
62
+ abstract onTaskStart(task: string): Promise<void> | void;
63
+ /**
64
+ * Utility method to format duration in human-readable format
65
+ */
66
+ protected formatDuration(nanoseconds: number): string;
67
+ /**
68
+ * Utility method to format operations per second
69
+ */
70
+ protected formatOpsPerSecond(opsPerSecond: number): string;
71
+ /**
72
+ * Utility method to format percentage
73
+ */
74
+ protected formatPercentage(value: number): string;
75
+ /**
76
+ * Utility method to safely handle async operations
77
+ */
78
+ protected safeAsync<T>(operation: () => Promise<T>): Promise<null | T>;
79
+ }
80
+ /**
81
+ * Composite reporter that broadcasts events to multiple reporters
82
+ */
83
+ export declare class CompositeReporter extends BaseReporter {
84
+ private readonly reporters;
85
+ constructor(reporters: Reporter[]);
86
+ /**
87
+ * Add a reporter to the composite
88
+ */
89
+ addReporter(reporter: Reporter): void;
90
+ /**
91
+ * Get all reporters in the composite
92
+ */
93
+ getReporters(): Reporter[];
94
+ onEnd(run: BenchmarkRun): Promise<void>;
95
+ onError(error: Error): Promise<void>;
96
+ onFileEnd(result: FileResult): Promise<void>;
97
+ onFileStart(file: string): Promise<void>;
98
+ onProgress(state: ProgressState): Promise<void>;
99
+ onStart(run: BenchmarkRun): Promise<void>;
100
+ onSuiteEnd(result: SuiteResult): Promise<void>;
101
+ onSuiteStart(suite: string): Promise<void>;
102
+ onTaskResult(result: TaskResult): Promise<void>;
103
+ onTaskStart(task: string): Promise<void>;
104
+ /**
105
+ * Remove a reporter from the composite
106
+ */
107
+ removeReporter(reporter: Reporter): boolean;
108
+ /**
109
+ * Broadcast an event to all reporters with error handling
110
+ */
111
+ private broadcastAsync;
112
+ }
113
+ /**
114
+ * Reporter registry implementation for managing multiple reporters
115
+ */
116
+ export declare class ModestBenchReporterRegistry implements ReporterRegistry {
117
+ private readonly reporters;
118
+ /**
119
+ * Clear all registered reporters
120
+ */
121
+ clear(): void;
122
+ /**
123
+ * Get a reporter by name
124
+ */
125
+ get(name: string): Reporter | undefined;
126
+ /**
127
+ * Get all registered reporters
128
+ */
129
+ getAll(): Record<string, Reporter>;
130
+ /**
131
+ * Get multiple reporters by names
132
+ */
133
+ getByNames(names: string[]): Reporter[];
134
+ /**
135
+ * Get list of registered reporter names
136
+ */
137
+ getNames(): string[];
138
+ /**
139
+ * Check if a reporter is registered
140
+ */
141
+ has(name: string): boolean;
142
+ /**
143
+ * Register a reporter with a unique name
144
+ */
145
+ register(name: string, reporter: Reporter): void;
146
+ /**
147
+ * Get count of registered reporters
148
+ */
149
+ size(): number;
150
+ /**
151
+ * Unregister a reporter
152
+ */
153
+ unregister(name: string): boolean;
154
+ }
155
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/reporters/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * ModestBench Reporter Registry
3
+ *
4
+ * Plugin-based system for managing benchmark output formatters. Supports
5
+ * registration, retrieval, and lifecycle management of reporters.
6
+ */
7
+ import type { BenchmarkRun, FileResult, ProgressState, Reporter, ReporterRegistry, SuiteResult, TaskResult } from "../types/index.js";
8
+ /**
9
+ * Base abstract reporter class providing common functionality
10
+ */
11
+ export declare abstract class BaseReporter implements Reporter {
12
+ protected readonly name: string;
13
+ protected readonly options: Record<string, unknown>;
14
+ constructor(name: string, options?: Record<string, unknown>);
15
+ /**
16
+ * Get reporter name
17
+ */
18
+ getName(): string;
19
+ /**
20
+ * Get reporter options
21
+ */
22
+ getOptions(): Record<string, unknown>;
23
+ /**
24
+ * Called when benchmark run completes
25
+ */
26
+ abstract onEnd(run: BenchmarkRun): Promise<void> | void;
27
+ /**
28
+ * Called when an error occurs
29
+ */
30
+ abstract onError(error: Error): Promise<void> | void;
31
+ /**
32
+ * Called when a file completes
33
+ */
34
+ abstract onFileEnd(result: FileResult): Promise<void> | void;
35
+ /**
36
+ * Called when a file starts execution
37
+ */
38
+ abstract onFileStart(file: string): Promise<void> | void;
39
+ /**
40
+ * Called for progress updates
41
+ */
42
+ abstract onProgress(state: ProgressState): Promise<void> | void;
43
+ /**
44
+ * Called when benchmark run starts
45
+ */
46
+ abstract onStart(run: BenchmarkRun): Promise<void> | void;
47
+ /**
48
+ * Called when a suite completes
49
+ */
50
+ abstract onSuiteEnd(result: SuiteResult): Promise<void> | void;
51
+ /**
52
+ * Called when a suite starts execution
53
+ */
54
+ abstract onSuiteStart(suite: string): Promise<void> | void;
55
+ /**
56
+ * Called when a task completes
57
+ */
58
+ abstract onTaskResult(result: TaskResult): Promise<void> | void;
59
+ /**
60
+ * Called when a task starts execution
61
+ */
62
+ abstract onTaskStart(task: string): Promise<void> | void;
63
+ /**
64
+ * Utility method to format duration in human-readable format
65
+ */
66
+ protected formatDuration(nanoseconds: number): string;
67
+ /**
68
+ * Utility method to format operations per second
69
+ */
70
+ protected formatOpsPerSecond(opsPerSecond: number): string;
71
+ /**
72
+ * Utility method to format percentage
73
+ */
74
+ protected formatPercentage(value: number): string;
75
+ /**
76
+ * Utility method to safely handle async operations
77
+ */
78
+ protected safeAsync<T>(operation: () => Promise<T>): Promise<null | T>;
79
+ }
80
+ /**
81
+ * Composite reporter that broadcasts events to multiple reporters
82
+ */
83
+ export declare class CompositeReporter extends BaseReporter {
84
+ private readonly reporters;
85
+ constructor(reporters: Reporter[]);
86
+ /**
87
+ * Add a reporter to the composite
88
+ */
89
+ addReporter(reporter: Reporter): void;
90
+ /**
91
+ * Get all reporters in the composite
92
+ */
93
+ getReporters(): Reporter[];
94
+ onEnd(run: BenchmarkRun): Promise<void>;
95
+ onError(error: Error): Promise<void>;
96
+ onFileEnd(result: FileResult): Promise<void>;
97
+ onFileStart(file: string): Promise<void>;
98
+ onProgress(state: ProgressState): Promise<void>;
99
+ onStart(run: BenchmarkRun): Promise<void>;
100
+ onSuiteEnd(result: SuiteResult): Promise<void>;
101
+ onSuiteStart(suite: string): Promise<void>;
102
+ onTaskResult(result: TaskResult): Promise<void>;
103
+ onTaskStart(task: string): Promise<void>;
104
+ /**
105
+ * Remove a reporter from the composite
106
+ */
107
+ removeReporter(reporter: Reporter): boolean;
108
+ /**
109
+ * Broadcast an event to all reporters with error handling
110
+ */
111
+ private broadcastAsync;
112
+ }
113
+ /**
114
+ * Reporter registry implementation for managing multiple reporters
115
+ */
116
+ export declare class ModestBenchReporterRegistry implements ReporterRegistry {
117
+ private readonly reporters;
118
+ /**
119
+ * Clear all registered reporters
120
+ */
121
+ clear(): void;
122
+ /**
123
+ * Get a reporter by name
124
+ */
125
+ get(name: string): Reporter | undefined;
126
+ /**
127
+ * Get all registered reporters
128
+ */
129
+ getAll(): Record<string, Reporter>;
130
+ /**
131
+ * Get multiple reporters by names
132
+ */
133
+ getByNames(names: string[]): Reporter[];
134
+ /**
135
+ * Get list of registered reporter names
136
+ */
137
+ getNames(): string[];
138
+ /**
139
+ * Check if a reporter is registered
140
+ */
141
+ has(name: string): boolean;
142
+ /**
143
+ * Register a reporter with a unique name
144
+ */
145
+ register(name: string, reporter: Reporter): void;
146
+ /**
147
+ * Get count of registered reporters
148
+ */
149
+ size(): number;
150
+ /**
151
+ * Unregister a reporter
152
+ */
153
+ unregister(name: string): boolean;
154
+ }
155
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/reporters/registry.ts"],"names":[],"mappings":"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"}