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
@@ -0,0 +1,335 @@
1
+ "use strict";
2
+ /**
3
+ * ModestBench Node.js Test Runner Adapter
4
+ *
5
+ * Captures test definitions from node:test files using ES module loader hooks.
6
+ *
7
+ * Unlike Mocha (which uses globals), node:test requires ES module import
8
+ * interception. We use Node.js module.register() API to install a custom loader
9
+ * that returns our capturing mock instead of the real node:test.
10
+ *
11
+ * Architecture:
12
+ *
13
+ * 1. Register a custom loader that intercepts node:test imports
14
+ * 2. Import the test file - this triggers test/describe calls
15
+ * 3. Retrieve captured state from global storage
16
+ * 4. Unregister the loader
17
+ */
18
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ var desc = Object.getOwnPropertyDescriptor(m, k);
21
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
22
+ desc = { enumerable: true, get: function() { return m[k]; } };
23
+ }
24
+ Object.defineProperty(o, k2, desc);
25
+ }) : (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ o[k2] = m[k];
28
+ }));
29
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
30
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
31
+ }) : function(o, v) {
32
+ o["default"] = v;
33
+ });
34
+ var __importStar = (this && this.__importStar) || (function () {
35
+ var ownKeys = function(o) {
36
+ ownKeys = Object.getOwnPropertyNames || function (o) {
37
+ var ar = [];
38
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
39
+ return ar;
40
+ };
41
+ return ownKeys(o);
42
+ };
43
+ return function (mod) {
44
+ if (mod && mod.__esModule) return mod;
45
+ var result = {};
46
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
47
+ __setModuleDefault(result, mod);
48
+ return result;
49
+ };
50
+ })();
51
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
52
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
53
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
54
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
55
+ });
56
+ }
57
+ return path;
58
+ };
59
+ Object.defineProperty(exports, "__esModule", { value: true });
60
+ exports.NodeTestAdapter = void 0;
61
+ const node_url_1 = require("node:url");
62
+ /**
63
+ * Global capture state key
64
+ */
65
+ const CAPTURE_STATE_KEY = '__MODESTBENCH_NODE_TEST_CAPTURE__';
66
+ /**
67
+ * Node.js test runner adapter
68
+ *
69
+ * Captures test definitions by installing mock implementations before importing
70
+ * the test file.
71
+ *
72
+ * IMPORTANT: For this to work with actual node:test imports, you must run
73
+ * Node.js with our loader: node --import modestbench/node-test your-test.js
74
+ *
75
+ * Without the loader, this adapter only works with test files that use
76
+ * globalThis.**MODESTBENCH_NODE_TEST_MOCK** directly (not useful for real test
77
+ * files).
78
+ */
79
+ class NodeTestAdapter {
80
+ framework = 'node-test';
81
+ /**
82
+ * Capture test definitions from a node:test file
83
+ *
84
+ * @param filePath - Absolute path to the test file
85
+ * @returns Captured test structure
86
+ */
87
+ async capture(filePath) {
88
+ // Initialize capture state
89
+ const state = initCaptureState();
90
+ // Install mocks
91
+ installNodeTestMocks(state);
92
+ try {
93
+ // Import the test file
94
+ // The loader hook will intercept 'node:test' and use our mocks
95
+ const fileUrl = (0, node_url_1.pathToFileURL)(filePath).href;
96
+ const bustCache = `?t=${Date.now()}`;
97
+ await Promise.resolve(`${__rewriteRelativeImportExtension(fileUrl + bustCache)}`).then(s => __importStar(require(s)));
98
+ // Return captured structure
99
+ return toCapturedTestFile(state, filePath);
100
+ }
101
+ finally {
102
+ // Clean up
103
+ uninstallNodeTestMocks();
104
+ clearCaptureState();
105
+ }
106
+ }
107
+ }
108
+ exports.NodeTestAdapter = NodeTestAdapter;
109
+ /**
110
+ * Clear capture state from globalThis
111
+ */
112
+ const clearCaptureState = () => {
113
+ // @ts-expect-error - intentionally using globalThis
114
+ delete globalThis[CAPTURE_STATE_KEY];
115
+ };
116
+ /**
117
+ * Create empty hooks structure
118
+ */
119
+ const createEmptyHooks = () => {
120
+ return {
121
+ after: [],
122
+ afterEach: [],
123
+ before: [],
124
+ beforeEach: [],
125
+ };
126
+ };
127
+ /**
128
+ * Create a new suite structure
129
+ */
130
+ const createSuite = (name) => {
131
+ return {
132
+ children: [],
133
+ hooks: createEmptyHooks(),
134
+ name,
135
+ tests: [],
136
+ };
137
+ };
138
+ /**
139
+ * Initialize capture state on globalThis
140
+ */
141
+ const initCaptureState = () => {
142
+ const state = {
143
+ currentSuite: null,
144
+ rootSuites: [],
145
+ rootTests: [],
146
+ };
147
+ // @ts-expect-error - intentionally using globalThis for cross-module state
148
+ globalThis[CAPTURE_STATE_KEY] = state;
149
+ return state;
150
+ };
151
+ /**
152
+ * Install node:test mocks on globalThis for module interception
153
+ *
154
+ * Since we can't truly intercept ES imports without a loader, we use a
155
+ * workaround: install mocks that test files can import via a special path.
156
+ *
157
+ * For true node:test interception, users must run with: node --import
158
+ * modestbench/register test-file.js
159
+ */
160
+ const installNodeTestMocks = (state) => {
161
+ // Create mock test function
162
+ const mockTest = Object.assign((nameOrOptions, fnOrOptions, maybeFn) => {
163
+ let name;
164
+ let fn;
165
+ let skip = false;
166
+ let only = false;
167
+ // Parse arguments - node:test has flexible signatures
168
+ if (typeof nameOrOptions === 'string') {
169
+ name = nameOrOptions;
170
+ if (typeof fnOrOptions === 'function') {
171
+ fn = fnOrOptions;
172
+ }
173
+ else if (fnOrOptions && typeof fnOrOptions === 'object') {
174
+ skip = fnOrOptions.skip ?? false;
175
+ only = fnOrOptions.only ?? false;
176
+ fn = maybeFn ?? (() => { });
177
+ }
178
+ else {
179
+ fn = () => { };
180
+ }
181
+ }
182
+ else {
183
+ name = nameOrOptions.name ?? 'unnamed test';
184
+ skip = nameOrOptions.skip ?? false;
185
+ only = nameOrOptions.only ?? false;
186
+ fn = fnOrOptions ?? (() => { });
187
+ }
188
+ const test = { fn, name, only, skip };
189
+ if (state.currentSuite) {
190
+ state.currentSuite.tests.push(test);
191
+ }
192
+ else {
193
+ state.rootTests.push(test);
194
+ }
195
+ return Promise.resolve();
196
+ }, {
197
+ only: function only(name, fn) {
198
+ return mockTest(name, { only: true }, fn);
199
+ },
200
+ skip: function skip(name, fn) {
201
+ return mockTest(name, { skip: true }, fn);
202
+ },
203
+ todo: function todo(name, fn) {
204
+ return mockTest(name, { skip: true }, fn);
205
+ },
206
+ });
207
+ // Create mock describe function
208
+ const mockDescribe = Object.assign((nameOrOptions, fnOrOptions, maybeFn) => {
209
+ let name;
210
+ let fn;
211
+ if (typeof nameOrOptions === 'string') {
212
+ name = nameOrOptions;
213
+ if (typeof fnOrOptions === 'function') {
214
+ fn = fnOrOptions;
215
+ }
216
+ else {
217
+ fn = maybeFn;
218
+ }
219
+ }
220
+ else {
221
+ name = nameOrOptions.name ?? 'unnamed suite';
222
+ fn = fnOrOptions;
223
+ }
224
+ const suite = createSuite(name);
225
+ const parent = state.currentSuite;
226
+ if (parent) {
227
+ parent.children.push(suite);
228
+ }
229
+ else {
230
+ state.rootSuites.push(suite);
231
+ }
232
+ // Enter suite context
233
+ state.currentSuite = suite;
234
+ // Execute describe body
235
+ if (fn) {
236
+ fn();
237
+ }
238
+ // Exit back to parent
239
+ state.currentSuite = parent;
240
+ return Promise.resolve();
241
+ }, {
242
+ only: function only(name, fn) {
243
+ return mockDescribe(name, fn);
244
+ },
245
+ skip: function skip(_name, _fn) {
246
+ return Promise.resolve();
247
+ },
248
+ todo: function todo(_name, _fn) {
249
+ return Promise.resolve();
250
+ },
251
+ });
252
+ // Hook functions
253
+ const mockBefore = (fn) => {
254
+ if (state.currentSuite) {
255
+ state.currentSuite.hooks.before.push(fn);
256
+ }
257
+ };
258
+ const mockAfter = (fn) => {
259
+ if (state.currentSuite) {
260
+ state.currentSuite.hooks.after.push(fn);
261
+ }
262
+ };
263
+ const mockBeforeEach = (fn) => {
264
+ if (state.currentSuite) {
265
+ state.currentSuite.hooks.beforeEach.push(fn);
266
+ }
267
+ };
268
+ const mockAfterEach = (fn) => {
269
+ if (state.currentSuite) {
270
+ state.currentSuite.hooks.afterEach.push(fn);
271
+ }
272
+ };
273
+ // Install on globalThis for the loader to access
274
+ // @ts-expect-error - intentionally using globalThis
275
+ globalThis.__MODESTBENCH_NODE_TEST_MOCK__ = {
276
+ after: mockAfter,
277
+ afterEach: mockAfterEach,
278
+ before: mockBefore,
279
+ beforeEach: mockBeforeEach,
280
+ default: mockTest,
281
+ describe: mockDescribe,
282
+ it: mockTest,
283
+ mock: {
284
+ fn: () => () => { },
285
+ getter: () => { },
286
+ method: () => { },
287
+ reset: () => { },
288
+ restoreAll: () => { },
289
+ setter: () => { },
290
+ timers: {
291
+ enable: () => { },
292
+ reset: () => { },
293
+ runAll: () => { },
294
+ tick: () => { },
295
+ },
296
+ },
297
+ suite: mockDescribe,
298
+ test: mockTest,
299
+ };
300
+ };
301
+ /**
302
+ * Convert mutable capture state to immutable CapturedTestFile
303
+ */
304
+ const toCapturedTestFile = (state, filePath) => {
305
+ return {
306
+ filePath,
307
+ framework: 'node-test',
308
+ rootSuites: state.rootSuites.map(toImmutableSuite),
309
+ rootTests: state.rootTests.map(toImmutableTest),
310
+ };
311
+ };
312
+ const toImmutableSuite = (suite) => {
313
+ return {
314
+ children: suite.children.map(toImmutableSuite),
315
+ hooks: suite.hooks,
316
+ name: suite.name,
317
+ tests: suite.tests.map(toImmutableTest),
318
+ };
319
+ };
320
+ const toImmutableTest = (test) => {
321
+ return {
322
+ fn: test.fn,
323
+ name: test.name,
324
+ only: test.only,
325
+ skip: test.skip,
326
+ };
327
+ };
328
+ /**
329
+ * Uninstall node:test mocks
330
+ */
331
+ const uninstallNodeTestMocks = () => {
332
+ // @ts-expect-error - cleaning up globalThis
333
+ delete globalThis.__MODESTBENCH_NODE_TEST_MOCK__;
334
+ };
335
+ //# sourceMappingURL=node-test-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-test-adapter.js","sourceRoot":"","sources":["../../src/adapters/node-test-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ModestBench Node.js Test Runner Adapter
3
+ *
4
+ * Captures test definitions from node:test files using ES module loader hooks.
5
+ *
6
+ * Unlike Mocha (which uses globals), node:test requires ES module import
7
+ * interception. We use Node.js module.register() API to install a custom loader
8
+ * that returns our capturing mock instead of the real node:test.
9
+ *
10
+ * Architecture:
11
+ *
12
+ * 1. Register a custom loader that intercepts node:test imports
13
+ * 2. Import the test file - this triggers test/describe calls
14
+ * 3. Retrieve captured state from global storage
15
+ * 4. Unregister the loader
16
+ */
17
+ import type { CapturedTestFile, TestFrameworkAdapter } from "./types.cjs";
18
+ /**
19
+ * Node.js test runner adapter
20
+ *
21
+ * Captures test definitions by installing mock implementations before importing
22
+ * the test file.
23
+ *
24
+ * IMPORTANT: For this to work with actual node:test imports, you must run
25
+ * Node.js with our loader: node --import modestbench/node-test your-test.js
26
+ *
27
+ * Without the loader, this adapter only works with test files that use
28
+ * globalThis.**MODESTBENCH_NODE_TEST_MOCK** directly (not useful for real test
29
+ * files).
30
+ */
31
+ export declare class NodeTestAdapter implements TestFrameworkAdapter {
32
+ readonly framework: "node-test";
33
+ /**
34
+ * Capture test definitions from a node:test file
35
+ *
36
+ * @param filePath - Absolute path to the test file
37
+ * @returns Captured test structure
38
+ */
39
+ capture(filePath: string): Promise<CapturedTestFile>;
40
+ }
41
+ //# sourceMappingURL=node-test-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-test-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/node-test-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAGV,gBAAgB,EAEhB,oBAAoB,EACrB,oBAAmB;AA8CpB;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,YAAW,oBAAoB;IAC1D,QAAQ,CAAC,SAAS,EAAG,WAAW,CAAU;IAE1C;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsB3D"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ModestBench Node.js Test Runner Adapter
3
+ *
4
+ * Captures test definitions from node:test files using ES module loader hooks.
5
+ *
6
+ * Unlike Mocha (which uses globals), node:test requires ES module import
7
+ * interception. We use Node.js module.register() API to install a custom loader
8
+ * that returns our capturing mock instead of the real node:test.
9
+ *
10
+ * Architecture:
11
+ *
12
+ * 1. Register a custom loader that intercepts node:test imports
13
+ * 2. Import the test file - this triggers test/describe calls
14
+ * 3. Retrieve captured state from global storage
15
+ * 4. Unregister the loader
16
+ */
17
+ import type { CapturedTestFile, TestFrameworkAdapter } from "./types.js";
18
+ /**
19
+ * Node.js test runner adapter
20
+ *
21
+ * Captures test definitions by installing mock implementations before importing
22
+ * the test file.
23
+ *
24
+ * IMPORTANT: For this to work with actual node:test imports, you must run
25
+ * Node.js with our loader: node --import modestbench/node-test your-test.js
26
+ *
27
+ * Without the loader, this adapter only works with test files that use
28
+ * globalThis.**MODESTBENCH_NODE_TEST_MOCK** directly (not useful for real test
29
+ * files).
30
+ */
31
+ export declare class NodeTestAdapter implements TestFrameworkAdapter {
32
+ readonly framework: "node-test";
33
+ /**
34
+ * Capture test definitions from a node:test file
35
+ *
36
+ * @param filePath - Absolute path to the test file
37
+ * @returns Captured test structure
38
+ */
39
+ capture(filePath: string): Promise<CapturedTestFile>;
40
+ }
41
+ //# sourceMappingURL=node-test-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-test-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/node-test-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAGV,gBAAgB,EAEhB,oBAAoB,EACrB,mBAAmB;AA8CpB;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,YAAW,oBAAoB;IAC1D,QAAQ,CAAC,SAAS,EAAG,WAAW,CAAU;IAE1C;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsB3D"}