modestbench 0.3.2 → 0.5.0

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 (158) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +45 -2
  3. package/dist/adapters/ava-adapter.cjs +421 -0
  4. package/dist/adapters/ava-adapter.cjs.map +1 -0
  5. package/dist/adapters/ava-adapter.d.cts +39 -0
  6. package/dist/adapters/ava-adapter.d.cts.map +1 -0
  7. package/dist/adapters/ava-adapter.d.ts +39 -0
  8. package/dist/adapters/ava-adapter.d.ts.map +1 -0
  9. package/dist/adapters/ava-adapter.js +384 -0
  10. package/dist/adapters/ava-adapter.js.map +1 -0
  11. package/dist/adapters/ava-hooks.cjs +66 -0
  12. package/dist/adapters/ava-hooks.cjs.map +1 -0
  13. package/dist/adapters/ava-hooks.d.cts +24 -0
  14. package/dist/adapters/ava-hooks.d.cts.map +1 -0
  15. package/dist/adapters/ava-hooks.d.ts +24 -0
  16. package/dist/adapters/ava-hooks.d.ts.map +1 -0
  17. package/dist/adapters/ava-hooks.js +61 -0
  18. package/dist/adapters/ava-hooks.js.map +1 -0
  19. package/dist/adapters/ava-register.cjs +16 -0
  20. package/dist/adapters/ava-register.cjs.map +1 -0
  21. package/dist/adapters/ava-register.d.cts +11 -0
  22. package/dist/adapters/ava-register.d.cts.map +1 -0
  23. package/dist/adapters/ava-register.d.ts +11 -0
  24. package/dist/adapters/ava-register.d.ts.map +1 -0
  25. package/dist/adapters/ava-register.js +14 -0
  26. package/dist/adapters/ava-register.js.map +1 -0
  27. package/dist/adapters/mocha-adapter.cjs +254 -0
  28. package/dist/adapters/mocha-adapter.cjs.map +1 -0
  29. package/dist/adapters/mocha-adapter.d.cts +26 -0
  30. package/dist/adapters/mocha-adapter.d.cts.map +1 -0
  31. package/dist/adapters/mocha-adapter.d.ts +26 -0
  32. package/dist/adapters/mocha-adapter.d.ts.map +1 -0
  33. package/dist/adapters/mocha-adapter.js +217 -0
  34. package/dist/adapters/mocha-adapter.js.map +1 -0
  35. package/dist/adapters/node-test-adapter.cjs +335 -0
  36. package/dist/adapters/node-test-adapter.cjs.map +1 -0
  37. package/dist/adapters/node-test-adapter.d.cts +41 -0
  38. package/dist/adapters/node-test-adapter.d.cts.map +1 -0
  39. package/dist/adapters/node-test-adapter.d.ts +41 -0
  40. package/dist/adapters/node-test-adapter.d.ts.map +1 -0
  41. package/dist/adapters/node-test-adapter.js +298 -0
  42. package/dist/adapters/node-test-adapter.js.map +1 -0
  43. package/dist/adapters/node-test-hooks.cjs +72 -0
  44. package/dist/adapters/node-test-hooks.cjs.map +1 -0
  45. package/dist/adapters/node-test-hooks.d.cts +24 -0
  46. package/dist/adapters/node-test-hooks.d.cts.map +1 -0
  47. package/dist/adapters/node-test-hooks.d.ts +24 -0
  48. package/dist/adapters/node-test-hooks.d.ts.map +1 -0
  49. package/dist/adapters/node-test-hooks.js +67 -0
  50. package/dist/adapters/node-test-hooks.js.map +1 -0
  51. package/dist/adapters/node-test-register.cjs +7 -0
  52. package/dist/adapters/node-test-register.cjs.map +1 -0
  53. package/dist/adapters/node-test-register.d.cts +2 -0
  54. package/dist/adapters/node-test-register.d.cts.map +1 -0
  55. package/dist/adapters/node-test-register.d.ts +2 -0
  56. package/dist/adapters/node-test-register.d.ts.map +1 -0
  57. package/dist/adapters/node-test-register.js +5 -0
  58. package/dist/adapters/node-test-register.js.map +1 -0
  59. package/dist/adapters/types.cjs +152 -0
  60. package/dist/adapters/types.cjs.map +1 -0
  61. package/dist/adapters/types.d.cts +112 -0
  62. package/dist/adapters/types.d.cts.map +1 -0
  63. package/dist/adapters/types.d.ts +112 -0
  64. package/dist/adapters/types.d.ts.map +1 -0
  65. package/dist/adapters/types.js +148 -0
  66. package/dist/adapters/types.js.map +1 -0
  67. package/dist/cli/commands/init.cjs +21 -17
  68. package/dist/cli/commands/init.cjs.map +1 -1
  69. package/dist/cli/commands/init.d.cts.map +1 -1
  70. package/dist/cli/commands/init.d.ts.map +1 -1
  71. package/dist/cli/commands/init.js +21 -17
  72. package/dist/cli/commands/init.js.map +1 -1
  73. package/dist/cli/commands/run.cjs +6 -2
  74. package/dist/cli/commands/run.cjs.map +1 -1
  75. package/dist/cli/commands/run.js +6 -2
  76. package/dist/cli/commands/run.js.map +1 -1
  77. package/dist/cli/commands/test.cjs +392 -0
  78. package/dist/cli/commands/test.cjs.map +1 -0
  79. package/dist/cli/commands/test.d.cts +38 -0
  80. package/dist/cli/commands/test.d.cts.map +1 -0
  81. package/dist/cli/commands/test.d.ts +38 -0
  82. package/dist/cli/commands/test.d.ts.map +1 -0
  83. package/dist/cli/commands/test.js +388 -0
  84. package/dist/cli/commands/test.js.map +1 -0
  85. package/dist/cli/index.cjs +72 -1
  86. package/dist/cli/index.cjs.map +1 -1
  87. package/dist/cli/index.d.cts.map +1 -1
  88. package/dist/cli/index.d.ts.map +1 -1
  89. package/dist/cli/index.js +73 -2
  90. package/dist/cli/index.js.map +1 -1
  91. package/dist/constants.cjs +13 -1
  92. package/dist/constants.cjs.map +1 -1
  93. package/dist/constants.d.cts +12 -0
  94. package/dist/constants.d.cts.map +1 -1
  95. package/dist/constants.d.ts +12 -0
  96. package/dist/constants.d.ts.map +1 -1
  97. package/dist/constants.js +12 -0
  98. package/dist/constants.js.map +1 -1
  99. package/dist/core/engine.cjs +4 -0
  100. package/dist/core/engine.cjs.map +1 -1
  101. package/dist/core/engine.d.cts.map +1 -1
  102. package/dist/core/engine.d.ts.map +1 -1
  103. package/dist/core/engine.js +4 -0
  104. package/dist/core/engine.js.map +1 -1
  105. package/dist/core/engines/tinybench-engine.cjs +163 -131
  106. package/dist/core/engines/tinybench-engine.cjs.map +1 -1
  107. package/dist/core/engines/tinybench-engine.d.cts +6 -0
  108. package/dist/core/engines/tinybench-engine.d.cts.map +1 -1
  109. package/dist/core/engines/tinybench-engine.d.ts +6 -0
  110. package/dist/core/engines/tinybench-engine.d.ts.map +1 -1
  111. package/dist/core/engines/tinybench-engine.js +163 -131
  112. package/dist/core/engines/tinybench-engine.js.map +1 -1
  113. package/dist/errors/base.cjs +2 -1
  114. package/dist/errors/base.cjs.map +1 -1
  115. package/dist/errors/base.d.cts.map +1 -1
  116. package/dist/errors/base.d.ts.map +1 -1
  117. package/dist/errors/base.js +2 -1
  118. package/dist/errors/base.js.map +1 -1
  119. package/dist/reporters/human.cjs +83 -27
  120. package/dist/reporters/human.cjs.map +1 -1
  121. package/dist/reporters/human.d.cts +1 -0
  122. package/dist/reporters/human.d.cts.map +1 -1
  123. package/dist/reporters/human.d.ts +1 -0
  124. package/dist/reporters/human.d.ts.map +1 -1
  125. package/dist/reporters/human.js +83 -27
  126. package/dist/reporters/human.js.map +1 -1
  127. package/dist/reporters/simple.cjs +68 -21
  128. package/dist/reporters/simple.cjs.map +1 -1
  129. package/dist/reporters/simple.d.cts +1 -0
  130. package/dist/reporters/simple.d.cts.map +1 -1
  131. package/dist/reporters/simple.d.ts +1 -0
  132. package/dist/reporters/simple.d.ts.map +1 -1
  133. package/dist/reporters/simple.js +68 -21
  134. package/dist/reporters/simple.js.map +1 -1
  135. package/dist/services/config-manager.cjs +1 -1
  136. package/dist/services/config-manager.cjs.map +1 -1
  137. package/dist/services/config-manager.js +2 -2
  138. package/dist/services/config-manager.js.map +1 -1
  139. package/package.json +60 -31
  140. package/src/adapters/ava-adapter.ts +553 -0
  141. package/src/adapters/ava-hooks.ts +65 -0
  142. package/src/adapters/ava-register.ts +15 -0
  143. package/src/adapters/mocha-adapter.ts +284 -0
  144. package/src/adapters/node-test-adapter.ts +391 -0
  145. package/src/adapters/node-test-hooks.ts +71 -0
  146. package/src/adapters/node-test-register.ts +5 -0
  147. package/src/adapters/types.ts +281 -0
  148. package/src/cli/commands/init.ts +25 -17
  149. package/src/cli/commands/run.ts +9 -2
  150. package/src/cli/commands/test.ts +546 -0
  151. package/src/cli/index.ts +81 -1
  152. package/src/constants.ts +15 -0
  153. package/src/core/engine.ts +5 -0
  154. package/src/core/engines/tinybench-engine.ts +213 -141
  155. package/src/errors/base.ts +3 -2
  156. package/src/reporters/human.ts +107 -36
  157. package/src/reporters/simple.ts +81 -22
  158. package/src/services/config-manager.ts +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.5.0](https://github.com/boneskull/modestbench/compare/modestbench-v0.4.0...modestbench-v0.5.0) (2025-12-09)
4
+
5
+
6
+ ### Features
7
+
8
+ * **adapters:** add test framework adapters for node:test, Mocha, and AVA ([#157](https://github.com/boneskull/modestbench/issues/157)) ([f4f00e7](https://github.com/boneskull/modestbench/commit/f4f00e7a0d356455eba08840ad8b01ec4e155822))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **deps:** update dependency tinybench to v6 ([0d40694](https://github.com/boneskull/modestbench/commit/0d406941a587f393de033e923fccca22a097eb40))
14
+ * **deps:** update tinybench-engine for tinybench v6 ([d19fcd9](https://github.com/boneskull/modestbench/commit/d19fcd98fde626257707919817a6e1be3ec97e34))
15
+
16
+ ## [0.4.0](https://github.com/boneskull/modestbench/compare/modestbench-v0.3.3...modestbench-v0.4.0) (2025-12-05)
17
+
18
+
19
+ ### Features
20
+
21
+ * **reporters:** display iteration counts inline with low-count warnings ([e1bf06a](https://github.com/boneskull/modestbench/commit/e1bf06a99f6d8e488fb1c69c6ae983e2bfa2a641))
22
+
23
+
24
+ ### Bug Fixes
25
+
26
+ * **deps:** update dependency glob to v11.1.0 [security] ([#125](https://github.com/boneskull/modestbench/issues/125)) ([7e14a8b](https://github.com/boneskull/modestbench/commit/7e14a8bd27e72849766b9e84a9bf178764265b11))
27
+ * **deps:** update dependency glob to v13 ([#138](https://github.com/boneskull/modestbench/issues/138)) ([b63ab6a](https://github.com/boneskull/modestbench/commit/b63ab6a9979296d9fa32ce5f8774fe53a3f777dc))
28
+ * **deps:** update dependency zod to v4.1.13 ([#143](https://github.com/boneskull/modestbench/issues/143)) ([538ccf2](https://github.com/boneskull/modestbench/commit/538ccf241f870e78fe02bc89d791e558ba0b61e3))
29
+ * **init:** init templates now use proper default .modestbench/ dir for output ([a393236](https://github.com/boneskull/modestbench/commit/a393236e71c87502275e3e68f74bb1fdae4f8fd2))
30
+ * **README:** fix wrong options and path in README.md ([ea7caa4](https://github.com/boneskull/modestbench/commit/ea7caa46c53bd2bb70d67ecefec999ea0e14c425)), closes [#104](https://github.com/boneskull/modestbench/issues/104) [#109](https://github.com/boneskull/modestbench/issues/109)
31
+ * **run:** suite-level errors now caught properly and return non-zero exit code ([fba7a8a](https://github.com/boneskull/modestbench/commit/fba7a8a568b3863b40b04ca05469935c5db32ec7))
32
+
33
+ ## [0.3.3](https://github.com/boneskull/modestbench/compare/modestbench-v0.3.2...modestbench-v0.3.3) (2025-11-03)
34
+
35
+
36
+ ### Bug Fixes
37
+
38
+ * **deps:** update dependency minimatch to v10.1.1 ([#90](https://github.com/boneskull/modestbench/issues/90)) ([a3b77df](https://github.com/boneskull/modestbench/commit/a3b77df4f5b8464734a24df8eafae02365035ae1))
39
+
3
40
  ## [0.3.2](https://github.com/boneskull/modestbench/compare/modestbench-v0.3.1...modestbench-v0.3.2) (2025-10-30)
4
41
 
5
42
 
package/README.md CHANGED
@@ -14,6 +14,7 @@
14
14
  - **Multiple Output Formats**: Human-readable, JSON, and CSV reports (at the same time!!)
15
15
  - **Historical Tracking**: Store and compare benchmark results over time
16
16
  - **Code Profiling & Analysis**: Identify hot code paths that need benchmarking using V8's built-in profiler
17
+ - **Run Tests as Benchmarks**: Use your existing Mocha, AVA, or node:test tests as benchmarks
17
18
  - **Performance Budgets**: Enforce performance standards and prevent regressions
18
19
  - **CLI & API**: Command-line interface and programmatic API
19
20
  - **TypeScript Support**: Full type safety
@@ -403,6 +404,48 @@ The profile command uses Node.js's built-in V8 profiler to identify functions th
403
404
 
404
405
  Functions that appear at the top of the profile report are good candidates for benchmarking, as optimizing them will have the most impact on overall performance.
405
406
 
407
+ ### Run Tests as Benchmarks
408
+
409
+ Already have test files? Run them as benchmarks without writing any new code:
410
+
411
+ ```bash
412
+ # Run Mocha tests as benchmarks
413
+ modestbench test mocha "test/*.spec.js"
414
+
415
+ # Run node:test files as benchmarks
416
+ modestbench test node-test "test/*.test.js"
417
+
418
+ # Run AVA tests as benchmarks
419
+ modestbench test ava "test/*.js"
420
+
421
+ # With options
422
+ modestbench test mocha "test/unit/*.spec.js" --iterations 500 --json
423
+ ```
424
+
425
+ **Supported Frameworks:**
426
+
427
+ - `mocha` - Mocha test files with `describe`/`it` syntax
428
+ - `node-test` - Node.js built-in test runner (`node:test`)
429
+ - `ava` - AVA test files
430
+
431
+ **How It Works:**
432
+
433
+ The `test` command captures test definitions from your test files and runs each test as a benchmark task. Test suites map to benchmark suites, and individual tests become benchmark tasks. Setup/teardown hooks (`beforeEach`/`afterEach`) are preserved and run with each iteration.
434
+
435
+ This is useful for:
436
+
437
+ - **Quick performance checks** - See how fast your tests actually run
438
+ - **Regression detection** - Identify tests that have become slower
439
+ - **Optimization targets** - Find slow tests that might benefit from optimization
440
+
441
+ **Test Command Options:**
442
+
443
+ - `--iterations`, `-i` - Number of iterations per test (default: 100)
444
+ - `--warmup`, `-w` - Number of warmup iterations (default: 5)
445
+ - `--bail`, `-b` - Stop on first failure
446
+ - `--json` - Output results as JSON
447
+ - `--quiet`, `-q` - Minimal output
448
+
406
449
  ## Configuration
407
450
 
408
451
  ### Project Configuration
@@ -417,7 +460,7 @@ Create `modestbench.config.json`:
417
460
  "iterations": 1000, // Number of samples per benchmark
418
461
  "limitBy": "iterations", // Limit mode: 'iterations', 'time', 'any', 'all'
419
462
  "outputDir": "./benchmark-results", // Directory for results and reports
420
- "pattern": "benchmarks/**/*.bench.{js,ts}", // Glob pattern to discover benchmark files
463
+ "pattern": "bench/**/*.bench.{js,ts}", // Glob pattern to discover benchmark files
421
464
  "quiet": false, // Minimal output mode
422
465
  "reporters": ["human", "json"], // Output reporters to use
423
466
  "tags": ["fast", "critical"], // Tags to include (if empty, all benchmarks run)
@@ -618,7 +661,7 @@ modestbench run --tag string --tag array
618
661
  modestbench run -t fast -t optimized
619
662
  ```
620
663
 
621
- Use `--exclude-tag` (or `-e`) to skip benchmarks with specific tags:
664
+ Use `--exclude-tag` (or `-T`) to skip benchmarks with specific tags:
622
665
 
623
666
  ```bash
624
667
  # Exclude slow benchmarks
@@ -0,0 +1,421 @@
1
+ "use strict";
2
+ /**
3
+ * ModestBench AVA Adapter
4
+ *
5
+ * Captures test definitions from AVA test files using ES module loader hooks.
6
+ *
7
+ * AVA differs from Mocha and node:test:
8
+ *
9
+ * - No describe blocks - tests are flat
10
+ * - Tests receive an execution context `t` with assertions
11
+ * - Supports test.before/after/beforeEach/afterEach at file level
12
+ * - Each test file is isolated (we don't need to handle that)
13
+ *
14
+ * Architecture:
15
+ *
16
+ * 1. Install mock on globalThis
17
+ * 2. Loader intercepts 'ava' imports and returns the mock
18
+ * 3. Import test file to capture test definitions
19
+ */
20
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ var desc = Object.getOwnPropertyDescriptor(m, k);
23
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
24
+ desc = { enumerable: true, get: function() { return m[k]; } };
25
+ }
26
+ Object.defineProperty(o, k2, desc);
27
+ }) : (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ o[k2] = m[k];
30
+ }));
31
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
32
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
33
+ }) : function(o, v) {
34
+ o["default"] = v;
35
+ });
36
+ var __importStar = (this && this.__importStar) || (function () {
37
+ var ownKeys = function(o) {
38
+ ownKeys = Object.getOwnPropertyNames || function (o) {
39
+ var ar = [];
40
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
41
+ return ar;
42
+ };
43
+ return ownKeys(o);
44
+ };
45
+ return function (mod) {
46
+ if (mod && mod.__esModule) return mod;
47
+ var result = {};
48
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
49
+ __setModuleDefault(result, mod);
50
+ return result;
51
+ };
52
+ })();
53
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
54
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
55
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
56
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
57
+ });
58
+ }
59
+ return path;
60
+ };
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ exports.AvaAdapter = void 0;
63
+ const node_url_1 = require("node:url");
64
+ /**
65
+ * Global capture state key
66
+ */
67
+ const CAPTURE_STATE_KEY = '__MODESTBENCH_AVA_CAPTURE__';
68
+ /**
69
+ * Check if a value is an AVA macro object (has exec property)
70
+ */
71
+ const isMacroObject = (value) => {
72
+ return (typeof value === 'object' &&
73
+ value !== null &&
74
+ 'exec' in value &&
75
+ typeof value.exec === 'function');
76
+ };
77
+ /**
78
+ * Check if a value is a function (macro or test function)
79
+ */
80
+ const isFunction = (value) => {
81
+ return typeof value === 'function';
82
+ };
83
+ /**
84
+ * AVA test framework adapter
85
+ *
86
+ * Captures test definitions by installing mock implementations before importing
87
+ * the test file.
88
+ *
89
+ * IMPORTANT: For this to work with actual AVA imports, you must run Node.js
90
+ * with our loader: node --import modestbench/ava your-test.js
91
+ */
92
+ class AvaAdapter {
93
+ framework = 'ava';
94
+ /**
95
+ * Capture test definitions from an AVA test file
96
+ *
97
+ * @param filePath - Absolute path to the test file
98
+ * @returns Captured test structure
99
+ */
100
+ async capture(filePath) {
101
+ // Initialize capture state
102
+ const state = initCaptureState();
103
+ // Install mocks
104
+ installAvaMocks(state);
105
+ try {
106
+ // Import the test file
107
+ // The loader hook will intercept 'ava' and use our mocks
108
+ const fileUrl = (0, node_url_1.pathToFileURL)(filePath).href;
109
+ const bustCache = `?t=${Date.now()}`;
110
+ await Promise.resolve(`${__rewriteRelativeImportExtension(fileUrl + bustCache)}`).then(s => __importStar(require(s)));
111
+ // Return captured structure
112
+ return toCapturedTestFile(state, filePath);
113
+ }
114
+ finally {
115
+ // Clean up
116
+ uninstallAvaMocks();
117
+ clearCaptureState();
118
+ }
119
+ }
120
+ }
121
+ exports.AvaAdapter = AvaAdapter;
122
+ /**
123
+ * Clear capture state from globalThis
124
+ */
125
+ const clearCaptureState = () => {
126
+ // @ts-expect-error - intentionally using globalThis
127
+ delete globalThis[CAPTURE_STATE_KEY];
128
+ };
129
+ /**
130
+ * Create a mock AVA execution context
131
+ *
132
+ * This allows test functions to call t.is(), t.pass(), etc. without errors
133
+ * during benchmarking. We're measuring performance, not correctness.
134
+ */
135
+ const createMockContext = () => {
136
+ const noop = () => { };
137
+ const noopAsync = () => Promise.resolve();
138
+ return {
139
+ assert: noop,
140
+ context: {},
141
+ deepEqual: noop,
142
+ fail: noop,
143
+ false: noop,
144
+ falsy: noop,
145
+ is: noop,
146
+ like: noop,
147
+ log: noop,
148
+ not: noop,
149
+ notDeepEqual: noop,
150
+ notRegex: noop,
151
+ notThrows: noop,
152
+ notThrowsAsync: noopAsync,
153
+ pass: noop,
154
+ plan: noop,
155
+ regex: noop,
156
+ snapshot: noop,
157
+ teardown: noop,
158
+ throws: () => undefined,
159
+ throwsAsync: noopAsync,
160
+ timeout: noop,
161
+ true: noop,
162
+ truthy: noop,
163
+ try: async () => ({ commit: noop, discard: noop, passed: true }),
164
+ };
165
+ };
166
+ /**
167
+ * Initialize capture state on globalThis
168
+ */
169
+ const initCaptureState = () => {
170
+ const state = {
171
+ hooks: {
172
+ after: [],
173
+ afterAlways: [],
174
+ afterEach: [],
175
+ afterEachAlways: [],
176
+ before: [],
177
+ beforeEach: [],
178
+ },
179
+ tests: [],
180
+ };
181
+ // @ts-expect-error - intentionally using globalThis for cross-module state
182
+ globalThis[CAPTURE_STATE_KEY] = state;
183
+ return state;
184
+ };
185
+ /**
186
+ * Install AVA mocks on globalThis for module interception
187
+ */
188
+ const installAvaMocks = (state) => {
189
+ /**
190
+ * Parse test arguments and return name + wrapped function Used by
191
+ * registerTest and test variants (only, serial, skip)
192
+ */
193
+ const parseTestArgs = (titleOrMacroOrFn, rest) => {
194
+ let name;
195
+ let fn;
196
+ let args = [];
197
+ if (typeof titleOrMacroOrFn === 'string') {
198
+ name = titleOrMacroOrFn;
199
+ const [macroOrFn, ...restArgs] = rest;
200
+ if (isMacroObject(macroOrFn)) {
201
+ fn = macroOrFn.exec;
202
+ args = restArgs;
203
+ if (macroOrFn.title) {
204
+ name = macroOrFn.title(titleOrMacroOrFn, ...restArgs);
205
+ }
206
+ }
207
+ else if (isFunction(macroOrFn)) {
208
+ fn = macroOrFn;
209
+ args = restArgs;
210
+ }
211
+ else {
212
+ fn = () => { };
213
+ }
214
+ }
215
+ else if (isMacroObject(titleOrMacroOrFn)) {
216
+ fn = titleOrMacroOrFn.exec;
217
+ args = rest;
218
+ name = titleOrMacroOrFn.title
219
+ ? titleOrMacroOrFn.title(undefined, ...rest)
220
+ : fn.name || 'unnamed test';
221
+ }
222
+ else if (isFunction(titleOrMacroOrFn)) {
223
+ fn = titleOrMacroOrFn;
224
+ args = rest;
225
+ name = fn.name || 'unnamed test';
226
+ }
227
+ else {
228
+ name = 'unnamed test';
229
+ fn = () => { };
230
+ }
231
+ const wrappedFn = async () => {
232
+ const ctx = createMockContext();
233
+ await fn(ctx, ...args);
234
+ };
235
+ return { name, wrappedFn };
236
+ };
237
+ /**
238
+ * Process a test registration, handling all AVA calling conventions:
239
+ *
240
+ * - Test('title', fn)
241
+ * - Test('title', macro, ...args)
242
+ * - Test(macro, ...args)
243
+ * - Test(fn)
244
+ */
245
+ const registerTest = (titleOrMacroOrFn, ...rest) => {
246
+ const { name, wrappedFn } = parseTestArgs(titleOrMacroOrFn, rest);
247
+ state.tests.push({
248
+ fn: wrappedFn,
249
+ name,
250
+ });
251
+ };
252
+ // Create mock test function
253
+ const mockTest = Object.assign(registerTest, {
254
+ // test.after() - runs once after all tests
255
+ after: Object.assign((fn) => {
256
+ const wrappedFn = async () => {
257
+ const ctx = createMockContext();
258
+ await fn(ctx);
259
+ };
260
+ state.hooks.after.push(wrappedFn);
261
+ }, {
262
+ // test.after.always() - runs even if tests fail
263
+ always: function always(fn) {
264
+ const wrappedFn = async () => {
265
+ const ctx = createMockContext();
266
+ await fn(ctx);
267
+ };
268
+ state.hooks.afterAlways.push(wrappedFn);
269
+ },
270
+ }),
271
+ // test.afterEach() - runs after each test
272
+ afterEach: Object.assign((fn) => {
273
+ const wrappedFn = async () => {
274
+ const ctx = createMockContext();
275
+ await fn(ctx);
276
+ };
277
+ state.hooks.afterEach.push(wrappedFn);
278
+ }, {
279
+ // test.afterEach.always() - runs even if test fails
280
+ always: function always(fn) {
281
+ const wrappedFn = async () => {
282
+ const ctx = createMockContext();
283
+ await fn(ctx);
284
+ };
285
+ state.hooks.afterEachAlways.push(wrappedFn);
286
+ },
287
+ }),
288
+ // test.before() - runs once before all tests
289
+ before: function before(fn) {
290
+ const wrappedFn = async () => {
291
+ const ctx = createMockContext();
292
+ await fn(ctx);
293
+ };
294
+ state.hooks.before.push(wrappedFn);
295
+ },
296
+ // test.beforeEach() - runs before each test
297
+ beforeEach: function beforeEach(fn) {
298
+ const wrappedFn = async () => {
299
+ const ctx = createMockContext();
300
+ await fn(ctx);
301
+ };
302
+ state.hooks.beforeEach.push(wrappedFn);
303
+ },
304
+ // test.failing() - expected to fail (treat as regular for benchmarks)
305
+ failing: function failing(titleOrMacro, implementation) {
306
+ mockTest(titleOrMacro, implementation);
307
+ },
308
+ // test.macro() - create reusable test macro
309
+ // Accepts either a function or an object with exec/title
310
+ macro: function macro(fnOrObject) {
311
+ if (typeof fnOrObject === 'function') {
312
+ // Simple function macro - return as-is
313
+ return fnOrObject;
314
+ }
315
+ // Object macro with exec/title - return as AvaMacro
316
+ return {
317
+ exec: fnOrObject.exec,
318
+ title: fnOrObject.title,
319
+ };
320
+ },
321
+ // test.only() - marks test as exclusive
322
+ only: function only(titleOrMacroOrFn, ...rest) {
323
+ // Reuse registerTest logic but add only flag
324
+ const { name, wrappedFn } = parseTestArgs(titleOrMacroOrFn, rest);
325
+ state.tests.push({
326
+ fn: wrappedFn,
327
+ name,
328
+ only: true,
329
+ });
330
+ },
331
+ // test.serial() - run serially (we capture but ignore serial flag for benchmarks)
332
+ serial: function serial(titleOrMacroOrFn, ...rest) {
333
+ const { name, wrappedFn } = parseTestArgs(titleOrMacroOrFn, rest);
334
+ state.tests.push({
335
+ fn: wrappedFn,
336
+ name,
337
+ serial: true,
338
+ });
339
+ },
340
+ // test.skip() - marks test as skipped
341
+ skip: function skip(titleOrMacroOrFn, ...rest) {
342
+ const { name, wrappedFn } = parseTestArgs(titleOrMacroOrFn, rest);
343
+ state.tests.push({
344
+ fn: wrappedFn,
345
+ name,
346
+ skip: true,
347
+ });
348
+ },
349
+ // test.todo() - placeholder test
350
+ todo: function todo(title) {
351
+ state.tests.push({
352
+ fn: () => { },
353
+ name: title,
354
+ skip: true,
355
+ });
356
+ },
357
+ });
358
+ // Install on globalThis for the loader to access
359
+ // @ts-expect-error - intentionally using globalThis
360
+ globalThis.__MODESTBENCH_AVA_MOCK__ = {
361
+ default: mockTest,
362
+ test: mockTest,
363
+ };
364
+ };
365
+ /**
366
+ * Convert capture state to CapturedTestFile
367
+ *
368
+ * Since AVA doesn't have suites, we create a synthetic "default" suite to hold
369
+ * the file-level hooks and tests.
370
+ */
371
+ const toCapturedTestFile = (state, filePath) => {
372
+ // Combine after and afterAlways, afterEach and afterEachAlways
373
+ const combinedHooks = {
374
+ after: [...state.hooks.after, ...state.hooks.afterAlways],
375
+ afterEach: [...state.hooks.afterEach, ...state.hooks.afterEachAlways],
376
+ before: state.hooks.before,
377
+ beforeEach: state.hooks.beforeEach,
378
+ };
379
+ // Convert tests
380
+ const tests = state.tests.map((t) => ({
381
+ fn: t.fn,
382
+ name: t.name,
383
+ only: t.only,
384
+ skip: t.skip,
385
+ }));
386
+ // If there are hooks, wrap them in a synthetic suite
387
+ const hasHooks = combinedHooks.before.length > 0 ||
388
+ combinedHooks.after.length > 0 ||
389
+ combinedHooks.beforeEach.length > 0 ||
390
+ combinedHooks.afterEach.length > 0;
391
+ if (hasHooks) {
392
+ // Create a synthetic suite to hold hooks
393
+ const suite = {
394
+ children: [],
395
+ hooks: combinedHooks,
396
+ name: 'default',
397
+ tests,
398
+ };
399
+ return {
400
+ filePath,
401
+ framework: 'ava',
402
+ rootSuites: [suite],
403
+ rootTests: [],
404
+ };
405
+ }
406
+ // No hooks - just return flat tests
407
+ return {
408
+ filePath,
409
+ framework: 'ava',
410
+ rootSuites: [],
411
+ rootTests: tests,
412
+ };
413
+ };
414
+ /**
415
+ * Uninstall AVA mocks
416
+ */
417
+ const uninstallAvaMocks = () => {
418
+ // @ts-expect-error - cleaning up globalThis
419
+ delete globalThis.__MODESTBENCH_AVA_MOCK__;
420
+ };
421
+ //# sourceMappingURL=ava-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ava-adapter.js","sourceRoot":"","sources":["../../src/adapters/ava-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * ModestBench AVA Adapter
3
+ *
4
+ * Captures test definitions from AVA test files using ES module loader hooks.
5
+ *
6
+ * AVA differs from Mocha and node:test:
7
+ *
8
+ * - No describe blocks - tests are flat
9
+ * - Tests receive an execution context `t` with assertions
10
+ * - Supports test.before/after/beforeEach/afterEach at file level
11
+ * - Each test file is isolated (we don't need to handle that)
12
+ *
13
+ * Architecture:
14
+ *
15
+ * 1. Install mock on globalThis
16
+ * 2. Loader intercepts 'ava' imports and returns the mock
17
+ * 3. Import test file to capture test definitions
18
+ */
19
+ import type { CapturedTestFile, TestFrameworkAdapter } from "./types.cjs";
20
+ /**
21
+ * AVA test framework adapter
22
+ *
23
+ * Captures test definitions by installing mock implementations before importing
24
+ * the test file.
25
+ *
26
+ * IMPORTANT: For this to work with actual AVA imports, you must run Node.js
27
+ * with our loader: node --import modestbench/ava your-test.js
28
+ */
29
+ export declare class AvaAdapter implements TestFrameworkAdapter {
30
+ readonly framework: "ava";
31
+ /**
32
+ * Capture test definitions from an AVA test file
33
+ *
34
+ * @param filePath - Absolute path to the test file
35
+ * @returns Captured test structure
36
+ */
37
+ capture(filePath: string): Promise<CapturedTestFile>;
38
+ }
39
+ //# sourceMappingURL=ava-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ava-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ava-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAGV,gBAAgB,EAEhB,oBAAoB,EACrB,oBAAmB;AAsHpB;;;;;;;;GAQG;AACH,qBAAa,UAAW,YAAW,oBAAoB;IACrD,QAAQ,CAAC,SAAS,EAAG,KAAK,CAAU;IAEpC;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsB3D"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * ModestBench AVA Adapter
3
+ *
4
+ * Captures test definitions from AVA test files using ES module loader hooks.
5
+ *
6
+ * AVA differs from Mocha and node:test:
7
+ *
8
+ * - No describe blocks - tests are flat
9
+ * - Tests receive an execution context `t` with assertions
10
+ * - Supports test.before/after/beforeEach/afterEach at file level
11
+ * - Each test file is isolated (we don't need to handle that)
12
+ *
13
+ * Architecture:
14
+ *
15
+ * 1. Install mock on globalThis
16
+ * 2. Loader intercepts 'ava' imports and returns the mock
17
+ * 3. Import test file to capture test definitions
18
+ */
19
+ import type { CapturedTestFile, TestFrameworkAdapter } from "./types.js";
20
+ /**
21
+ * AVA test framework adapter
22
+ *
23
+ * Captures test definitions by installing mock implementations before importing
24
+ * the test file.
25
+ *
26
+ * IMPORTANT: For this to work with actual AVA imports, you must run Node.js
27
+ * with our loader: node --import modestbench/ava your-test.js
28
+ */
29
+ export declare class AvaAdapter implements TestFrameworkAdapter {
30
+ readonly framework: "ava";
31
+ /**
32
+ * Capture test definitions from an AVA test file
33
+ *
34
+ * @param filePath - Absolute path to the test file
35
+ * @returns Captured test structure
36
+ */
37
+ capture(filePath: string): Promise<CapturedTestFile>;
38
+ }
39
+ //# sourceMappingURL=ava-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ava-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ava-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAGV,gBAAgB,EAEhB,oBAAoB,EACrB,mBAAmB;AAsHpB;;;;;;;;GAQG;AACH,qBAAa,UAAW,YAAW,oBAAoB;IACrD,QAAQ,CAAC,SAAS,EAAG,KAAK,CAAU;IAEpC;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsB3D"}