modestbench 0.3.0 → 0.3.2

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 (109) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +1 -1
  3. package/dist/cli/commands/init.cjs +13 -12
  4. package/dist/cli/commands/init.cjs.map +1 -1
  5. package/dist/cli/commands/init.d.cts.map +1 -1
  6. package/dist/cli/commands/init.d.ts.map +1 -1
  7. package/dist/cli/commands/init.js +13 -12
  8. package/dist/cli/commands/init.js.map +1 -1
  9. package/dist/cli/commands/run.cjs +16 -12
  10. package/dist/cli/commands/run.cjs.map +1 -1
  11. package/dist/cli/commands/run.d.cts.map +1 -1
  12. package/dist/cli/commands/run.d.ts.map +1 -1
  13. package/dist/cli/commands/run.js +16 -12
  14. package/dist/cli/commands/run.js.map +1 -1
  15. package/dist/config/schema.cjs +2 -1
  16. package/dist/config/schema.cjs.map +1 -1
  17. package/dist/config/schema.d.cts +3 -3
  18. package/dist/config/schema.d.cts.map +1 -1
  19. package/dist/config/schema.d.ts +3 -3
  20. package/dist/config/schema.d.ts.map +1 -1
  21. package/dist/config/schema.js +2 -1
  22. package/dist/config/schema.js.map +1 -1
  23. package/dist/core/engine.cjs +11 -2
  24. package/dist/core/engine.cjs.map +1 -1
  25. package/dist/core/engine.d.cts.map +1 -1
  26. package/dist/core/engine.d.ts.map +1 -1
  27. package/dist/core/engine.js +11 -2
  28. package/dist/core/engine.js.map +1 -1
  29. package/dist/core/engines/accurate-engine.cjs +171 -36
  30. package/dist/core/engines/accurate-engine.cjs.map +1 -1
  31. package/dist/core/engines/accurate-engine.d.cts +5 -0
  32. package/dist/core/engines/accurate-engine.d.cts.map +1 -1
  33. package/dist/core/engines/accurate-engine.d.ts +5 -0
  34. package/dist/core/engines/accurate-engine.d.ts.map +1 -1
  35. package/dist/core/engines/accurate-engine.js +171 -36
  36. package/dist/core/engines/accurate-engine.js.map +1 -1
  37. package/dist/core/engines/tinybench-engine.cjs +3 -2
  38. package/dist/core/engines/tinybench-engine.cjs.map +1 -1
  39. package/dist/core/engines/tinybench-engine.d.cts.map +1 -1
  40. package/dist/core/engines/tinybench-engine.d.ts.map +1 -1
  41. package/dist/core/engines/tinybench-engine.js +3 -2
  42. package/dist/core/engines/tinybench-engine.js.map +1 -1
  43. package/dist/reporters/human.cjs +226 -29
  44. package/dist/reporters/human.cjs.map +1 -1
  45. package/dist/reporters/human.d.cts +11 -0
  46. package/dist/reporters/human.d.cts.map +1 -1
  47. package/dist/reporters/human.d.ts +11 -0
  48. package/dist/reporters/human.d.ts.map +1 -1
  49. package/dist/reporters/human.js +226 -29
  50. package/dist/reporters/human.js.map +1 -1
  51. package/dist/reporters/profile-human.cjs +6 -1
  52. package/dist/reporters/profile-human.cjs.map +1 -1
  53. package/dist/reporters/profile-human.d.cts.map +1 -1
  54. package/dist/reporters/profile-human.d.ts.map +1 -1
  55. package/dist/reporters/profile-human.js +6 -1
  56. package/dist/reporters/profile-human.js.map +1 -1
  57. package/dist/reporters/simple.cjs +4 -2
  58. package/dist/reporters/simple.cjs.map +1 -1
  59. package/dist/reporters/simple.d.cts.map +1 -1
  60. package/dist/reporters/simple.d.ts.map +1 -1
  61. package/dist/reporters/simple.js +4 -2
  62. package/dist/reporters/simple.js.map +1 -1
  63. package/dist/schema/modestbench-config.schema.json +1 -1
  64. package/dist/services/config-manager.cjs +1 -1
  65. package/dist/services/config-manager.cjs.map +1 -1
  66. package/dist/services/config-manager.js +1 -1
  67. package/dist/services/config-manager.js.map +1 -1
  68. package/dist/services/profiler/profile-filter.cjs +4 -1
  69. package/dist/services/profiler/profile-filter.cjs.map +1 -1
  70. package/dist/services/profiler/profile-filter.d.cts.map +1 -1
  71. package/dist/services/profiler/profile-filter.d.ts.map +1 -1
  72. package/dist/services/profiler/profile-filter.js +4 -1
  73. package/dist/services/profiler/profile-filter.js.map +1 -1
  74. package/dist/services/progress-manager.cjs +10 -2
  75. package/dist/services/progress-manager.cjs.map +1 -1
  76. package/dist/services/progress-manager.d.cts +2 -0
  77. package/dist/services/progress-manager.d.cts.map +1 -1
  78. package/dist/services/progress-manager.d.ts +2 -0
  79. package/dist/services/progress-manager.d.ts.map +1 -1
  80. package/dist/services/progress-manager.js +10 -2
  81. package/dist/services/progress-manager.js.map +1 -1
  82. package/dist/types/core.d.cts +4 -2
  83. package/dist/types/core.d.cts.map +1 -1
  84. package/dist/types/core.d.ts +4 -2
  85. package/dist/types/core.d.ts.map +1 -1
  86. package/dist/types/interfaces.d.cts +4 -0
  87. package/dist/types/interfaces.d.cts.map +1 -1
  88. package/dist/types/interfaces.d.ts +4 -0
  89. package/dist/types/interfaces.d.ts.map +1 -1
  90. package/dist/types/profiler.d.cts +2 -0
  91. package/dist/types/profiler.d.cts.map +1 -1
  92. package/dist/types/profiler.d.ts +2 -0
  93. package/dist/types/profiler.d.ts.map +1 -1
  94. package/package.json +9 -10
  95. package/src/cli/commands/init.ts +13 -12
  96. package/src/cli/commands/run.ts +17 -13
  97. package/src/config/schema.ts +2 -1
  98. package/src/core/engine.ts +18 -2
  99. package/src/core/engines/accurate-engine.ts +195 -44
  100. package/src/core/engines/tinybench-engine.ts +3 -2
  101. package/src/reporters/human.ts +350 -72
  102. package/src/reporters/profile-human.ts +9 -3
  103. package/src/reporters/simple.ts +5 -2
  104. package/src/services/config-manager.ts +1 -1
  105. package/src/services/profiler/profile-filter.ts +5 -1
  106. package/src/services/progress-manager.ts +12 -2
  107. package/src/types/core.ts +4 -2
  108. package/src/types/interfaces.ts +8 -0
  109. package/src/types/profiler.ts +3 -0
@@ -32,12 +32,16 @@ interface ProgressMetrics {
32
32
  export class ModestBenchProgressManager implements ProgressManager {
33
33
  private callbacks: ProgressCallback[] = [];
34
34
 
35
+ private lastMetricsUpdate = 0;
36
+
35
37
  private lastUpdate = 0;
36
38
 
37
39
  private readonly maxRecentTimings = 10;
38
40
 
39
41
  private metrics: null | ProgressMetrics = null;
40
42
 
43
+ private readonly metricsUpdateThrottleMs = 1000; // Throttle ETA calculations (1 second)
44
+
41
45
  private state: ProgressState;
42
46
 
43
47
  private readonly updateThrottleMs = 100; // Limit updates to avoid spam
@@ -53,6 +57,8 @@ export class ModestBenchProgressManager implements ProgressManager {
53
57
  this.callbacks = [];
54
58
  this.metrics = null;
55
59
  this.state = this.createInitialState();
60
+ this.lastUpdate = 0;
61
+ this.lastMetricsUpdate = 0;
56
62
  }
57
63
 
58
64
  /**
@@ -240,6 +246,7 @@ export class ModestBenchProgressManager implements ProgressManager {
240
246
  };
241
247
 
242
248
  this.lastUpdate = Date.now();
249
+ this.lastMetricsUpdate = Date.now();
243
250
  this.notifyCallbacks();
244
251
  }
245
252
 
@@ -314,8 +321,11 @@ export class ModestBenchProgressManager implements ProgressManager {
314
321
  percentage: this.calculatePercentage(updates),
315
322
  };
316
323
 
317
- // Update metrics for completion estimation
318
- this.updateMetrics(now);
324
+ // Update metrics for completion estimation (throttled separately for ETA)
325
+ if (now - this.lastMetricsUpdate >= this.metricsUpdateThrottleMs) {
326
+ this.updateMetrics(now);
327
+ this.lastMetricsUpdate = now;
328
+ }
319
329
 
320
330
  this.lastUpdate = now;
321
331
  this.notifyCallbacks();
package/src/types/core.ts CHANGED
@@ -327,8 +327,8 @@ export interface ModestBenchConfig {
327
327
  readonly limitBy: 'all' | 'any' | 'iterations' | 'time';
328
328
  /** Custom metadata to attach to runs */
329
329
  readonly metadata: Record<string, unknown>;
330
- /** Output directory for reports */
331
- readonly outputDir: string;
330
+ /** Output directory for reports (undefined means stdout for data reporters) */
331
+ readonly outputDir?: string;
332
332
  /** Pattern(s) for discovering benchmark files */
333
333
  readonly pattern: string | string[];
334
334
  /** Whether to run in quiet mode */
@@ -403,6 +403,8 @@ export interface SuiteResult {
403
403
  * Represents a single benchmark task execution result
404
404
  */
405
405
  export interface TaskResult {
406
+ /** Whether the task was aborted (via Ctrl+C or signal) */
407
+ readonly aborted?: boolean;
406
408
  /** Coefficient of variation (stdDev/mean × 100) */
407
409
  readonly cv: number;
408
410
  /** Any error that occurred during execution */
@@ -313,6 +313,14 @@ export interface Reporter {
313
313
  */
314
314
  onSuiteEnd?(result: SuiteResult): Promise<void> | void;
315
315
 
316
+ /**
317
+ * Called before a suite starts, providing task names for pre-calculation
318
+ */
319
+ onSuiteInit?(
320
+ suite: string,
321
+ taskNames: readonly string[],
322
+ ): Promise<void> | void;
323
+
316
324
  /**
317
325
  * Called when a suite starts execution
318
326
  */
@@ -23,6 +23,9 @@ export interface FilteredProfileData {
23
23
  /** Grouped by file (if requested) */
24
24
  groupedByFile?: Map<string, ProfiledFunction[]>;
25
25
 
26
+ /** Minimum execution percentage threshold used */
27
+ minExecutionPercent: number;
28
+
26
29
  /** Profile summary */
27
30
  summary: ProfileSummary;
28
31