modestbench 0.3.2 → 0.5.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.
- package/CHANGELOG.md +44 -0
- package/README.md +45 -2
- package/dist/adapters/ava-adapter.cjs +421 -0
- package/dist/adapters/ava-adapter.cjs.map +1 -0
- package/dist/adapters/ava-adapter.d.cts +39 -0
- package/dist/adapters/ava-adapter.d.cts.map +1 -0
- package/dist/adapters/ava-adapter.d.ts +39 -0
- package/dist/adapters/ava-adapter.d.ts.map +1 -0
- package/dist/adapters/ava-adapter.js +384 -0
- package/dist/adapters/ava-adapter.js.map +1 -0
- package/dist/adapters/ava-hooks.cjs +66 -0
- package/dist/adapters/ava-hooks.cjs.map +1 -0
- package/dist/adapters/ava-hooks.d.cts +24 -0
- package/dist/adapters/ava-hooks.d.cts.map +1 -0
- package/dist/adapters/ava-hooks.d.ts +24 -0
- package/dist/adapters/ava-hooks.d.ts.map +1 -0
- package/dist/adapters/ava-hooks.js +61 -0
- package/dist/adapters/ava-hooks.js.map +1 -0
- package/dist/adapters/ava-register.cjs +16 -0
- package/dist/adapters/ava-register.cjs.map +1 -0
- package/dist/adapters/ava-register.d.cts +11 -0
- package/dist/adapters/ava-register.d.cts.map +1 -0
- package/dist/adapters/ava-register.d.ts +11 -0
- package/dist/adapters/ava-register.d.ts.map +1 -0
- package/dist/adapters/ava-register.js +14 -0
- package/dist/adapters/ava-register.js.map +1 -0
- package/dist/adapters/mocha-adapter.cjs +254 -0
- package/dist/adapters/mocha-adapter.cjs.map +1 -0
- package/dist/adapters/mocha-adapter.d.cts +26 -0
- package/dist/adapters/mocha-adapter.d.cts.map +1 -0
- package/dist/adapters/mocha-adapter.d.ts +26 -0
- package/dist/adapters/mocha-adapter.d.ts.map +1 -0
- package/dist/adapters/mocha-adapter.js +217 -0
- package/dist/adapters/mocha-adapter.js.map +1 -0
- package/dist/adapters/node-test-adapter.cjs +335 -0
- package/dist/adapters/node-test-adapter.cjs.map +1 -0
- package/dist/adapters/node-test-adapter.d.cts +41 -0
- package/dist/adapters/node-test-adapter.d.cts.map +1 -0
- package/dist/adapters/node-test-adapter.d.ts +41 -0
- package/dist/adapters/node-test-adapter.d.ts.map +1 -0
- package/dist/adapters/node-test-adapter.js +298 -0
- package/dist/adapters/node-test-adapter.js.map +1 -0
- package/dist/adapters/node-test-hooks.cjs +72 -0
- package/dist/adapters/node-test-hooks.cjs.map +1 -0
- package/dist/adapters/node-test-hooks.d.cts +24 -0
- package/dist/adapters/node-test-hooks.d.cts.map +1 -0
- package/dist/adapters/node-test-hooks.d.ts +24 -0
- package/dist/adapters/node-test-hooks.d.ts.map +1 -0
- package/dist/adapters/node-test-hooks.js +67 -0
- package/dist/adapters/node-test-hooks.js.map +1 -0
- package/dist/adapters/node-test-register.cjs +7 -0
- package/dist/adapters/node-test-register.cjs.map +1 -0
- package/dist/adapters/node-test-register.d.cts +2 -0
- package/dist/adapters/node-test-register.d.cts.map +1 -0
- package/dist/adapters/node-test-register.d.ts +2 -0
- package/dist/adapters/node-test-register.d.ts.map +1 -0
- package/dist/adapters/node-test-register.js +5 -0
- package/dist/adapters/node-test-register.js.map +1 -0
- package/dist/adapters/types.cjs +152 -0
- package/dist/adapters/types.cjs.map +1 -0
- package/dist/adapters/types.d.cts +112 -0
- package/dist/adapters/types.d.cts.map +1 -0
- package/dist/adapters/types.d.ts +112 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +148 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/cli/commands/init.cjs +21 -17
- package/dist/cli/commands/init.cjs.map +1 -1
- package/dist/cli/commands/init.d.cts.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +21 -17
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/run.cjs +6 -2
- package/dist/cli/commands/run.cjs.map +1 -1
- package/dist/cli/commands/run.js +6 -2
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/test.cjs +392 -0
- package/dist/cli/commands/test.cjs.map +1 -0
- package/dist/cli/commands/test.d.cts +38 -0
- package/dist/cli/commands/test.d.cts.map +1 -0
- package/dist/cli/commands/test.d.ts +38 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +388 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/index.cjs +72 -1
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +73 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/constants.cjs +13 -1
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +12 -0
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.ts +12 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +12 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/engine.cjs +4 -0
- package/dist/core/engine.cjs.map +1 -1
- package/dist/core/engine.d.cts.map +1 -1
- package/dist/core/engine.d.ts.map +1 -1
- package/dist/core/engine.js +4 -0
- package/dist/core/engine.js.map +1 -1
- package/dist/core/engines/tinybench-engine.cjs +163 -131
- package/dist/core/engines/tinybench-engine.cjs.map +1 -1
- package/dist/core/engines/tinybench-engine.d.cts +6 -0
- package/dist/core/engines/tinybench-engine.d.cts.map +1 -1
- package/dist/core/engines/tinybench-engine.d.ts +6 -0
- package/dist/core/engines/tinybench-engine.d.ts.map +1 -1
- package/dist/core/engines/tinybench-engine.js +163 -131
- package/dist/core/engines/tinybench-engine.js.map +1 -1
- package/dist/core/stats-utils.cjs +4 -2
- package/dist/core/stats-utils.cjs.map +1 -1
- package/dist/core/stats-utils.d.cts +1 -1
- package/dist/core/stats-utils.d.cts.map +1 -1
- package/dist/core/stats-utils.d.ts +1 -1
- package/dist/core/stats-utils.d.ts.map +1 -1
- package/dist/core/stats-utils.js +4 -2
- package/dist/core/stats-utils.js.map +1 -1
- package/dist/errors/base.cjs +2 -1
- package/dist/errors/base.cjs.map +1 -1
- package/dist/errors/base.d.cts.map +1 -1
- package/dist/errors/base.d.ts.map +1 -1
- package/dist/errors/base.js +2 -1
- package/dist/errors/base.js.map +1 -1
- package/dist/formatters/history/compare.cjs.map +1 -1
- package/dist/formatters/history/compare.d.cts.map +1 -1
- package/dist/formatters/history/compare.d.ts.map +1 -1
- package/dist/formatters/history/compare.js.map +1 -1
- package/dist/formatters/history/list.cjs.map +1 -1
- package/dist/formatters/history/list.d.cts.map +1 -1
- package/dist/formatters/history/list.d.ts.map +1 -1
- package/dist/formatters/history/list.js.map +1 -1
- package/dist/reporters/human.cjs +83 -27
- package/dist/reporters/human.cjs.map +1 -1
- package/dist/reporters/human.d.cts +1 -0
- package/dist/reporters/human.d.cts.map +1 -1
- package/dist/reporters/human.d.ts +1 -0
- package/dist/reporters/human.d.ts.map +1 -1
- package/dist/reporters/human.js +83 -27
- package/dist/reporters/human.js.map +1 -1
- package/dist/reporters/simple.cjs +68 -21
- package/dist/reporters/simple.cjs.map +1 -1
- package/dist/reporters/simple.d.cts +1 -0
- package/dist/reporters/simple.d.cts.map +1 -1
- package/dist/reporters/simple.d.ts +1 -0
- package/dist/reporters/simple.d.ts.map +1 -1
- package/dist/reporters/simple.js +68 -21
- package/dist/reporters/simple.js.map +1 -1
- package/dist/services/config-manager.cjs +1 -1
- package/dist/services/config-manager.cjs.map +1 -1
- package/dist/services/config-manager.d.cts.map +1 -1
- package/dist/services/config-manager.d.ts.map +1 -1
- package/dist/services/config-manager.js +2 -2
- package/dist/services/config-manager.js.map +1 -1
- package/dist/services/file-loader.cjs.map +1 -1
- package/dist/services/file-loader.d.cts.map +1 -1
- package/dist/services/file-loader.d.ts.map +1 -1
- package/dist/services/file-loader.js.map +1 -1
- package/package.json +63 -35
- package/src/adapters/ava-adapter.ts +553 -0
- package/src/adapters/ava-hooks.ts +65 -0
- package/src/adapters/ava-register.ts +15 -0
- package/src/adapters/mocha-adapter.ts +284 -0
- package/src/adapters/node-test-adapter.ts +391 -0
- package/src/adapters/node-test-hooks.ts +71 -0
- package/src/adapters/node-test-register.ts +5 -0
- package/src/adapters/types.ts +281 -0
- package/src/cli/commands/init.ts +25 -17
- package/src/cli/commands/run.ts +9 -2
- package/src/cli/commands/test.ts +546 -0
- package/src/cli/index.ts +81 -1
- package/src/constants.ts +15 -0
- package/src/core/engine.ts +5 -0
- package/src/core/engines/tinybench-engine.ts +213 -141
- package/src/core/stats-utils.ts +5 -3
- package/src/errors/base.ts +3 -2
- package/src/formatters/history/compare.ts +1 -3
- package/src/formatters/history/list.ts +1 -3
- package/src/reporters/human.ts +107 -36
- package/src/reporters/simple.ts +81 -22
- package/src/services/config-manager.ts +4 -5
- package/src/services/file-loader.ts +2 -3
|
@@ -0,0 +1,384 @@
|
|
|
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
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
20
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
21
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
22
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return path;
|
|
26
|
+
};
|
|
27
|
+
import { pathToFileURL } from 'node:url';
|
|
28
|
+
/**
|
|
29
|
+
* Global capture state key
|
|
30
|
+
*/
|
|
31
|
+
const CAPTURE_STATE_KEY = '__MODESTBENCH_AVA_CAPTURE__';
|
|
32
|
+
/**
|
|
33
|
+
* Check if a value is an AVA macro object (has exec property)
|
|
34
|
+
*/
|
|
35
|
+
const isMacroObject = (value) => {
|
|
36
|
+
return (typeof value === 'object' &&
|
|
37
|
+
value !== null &&
|
|
38
|
+
'exec' in value &&
|
|
39
|
+
typeof value.exec === 'function');
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Check if a value is a function (macro or test function)
|
|
43
|
+
*/
|
|
44
|
+
const isFunction = (value) => {
|
|
45
|
+
return typeof value === 'function';
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* AVA test framework adapter
|
|
49
|
+
*
|
|
50
|
+
* Captures test definitions by installing mock implementations before importing
|
|
51
|
+
* the test file.
|
|
52
|
+
*
|
|
53
|
+
* IMPORTANT: For this to work with actual AVA imports, you must run Node.js
|
|
54
|
+
* with our loader: node --import modestbench/ava your-test.js
|
|
55
|
+
*/
|
|
56
|
+
export class AvaAdapter {
|
|
57
|
+
framework = 'ava';
|
|
58
|
+
/**
|
|
59
|
+
* Capture test definitions from an AVA test file
|
|
60
|
+
*
|
|
61
|
+
* @param filePath - Absolute path to the test file
|
|
62
|
+
* @returns Captured test structure
|
|
63
|
+
*/
|
|
64
|
+
async capture(filePath) {
|
|
65
|
+
// Initialize capture state
|
|
66
|
+
const state = initCaptureState();
|
|
67
|
+
// Install mocks
|
|
68
|
+
installAvaMocks(state);
|
|
69
|
+
try {
|
|
70
|
+
// Import the test file
|
|
71
|
+
// The loader hook will intercept 'ava' and use our mocks
|
|
72
|
+
const fileUrl = pathToFileURL(filePath).href;
|
|
73
|
+
const bustCache = `?t=${Date.now()}`;
|
|
74
|
+
await import(__rewriteRelativeImportExtension(fileUrl + bustCache));
|
|
75
|
+
// Return captured structure
|
|
76
|
+
return toCapturedTestFile(state, filePath);
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
// Clean up
|
|
80
|
+
uninstallAvaMocks();
|
|
81
|
+
clearCaptureState();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Clear capture state from globalThis
|
|
87
|
+
*/
|
|
88
|
+
const clearCaptureState = () => {
|
|
89
|
+
// @ts-expect-error - intentionally using globalThis
|
|
90
|
+
delete globalThis[CAPTURE_STATE_KEY];
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Create a mock AVA execution context
|
|
94
|
+
*
|
|
95
|
+
* This allows test functions to call t.is(), t.pass(), etc. without errors
|
|
96
|
+
* during benchmarking. We're measuring performance, not correctness.
|
|
97
|
+
*/
|
|
98
|
+
const createMockContext = () => {
|
|
99
|
+
const noop = () => { };
|
|
100
|
+
const noopAsync = () => Promise.resolve();
|
|
101
|
+
return {
|
|
102
|
+
assert: noop,
|
|
103
|
+
context: {},
|
|
104
|
+
deepEqual: noop,
|
|
105
|
+
fail: noop,
|
|
106
|
+
false: noop,
|
|
107
|
+
falsy: noop,
|
|
108
|
+
is: noop,
|
|
109
|
+
like: noop,
|
|
110
|
+
log: noop,
|
|
111
|
+
not: noop,
|
|
112
|
+
notDeepEqual: noop,
|
|
113
|
+
notRegex: noop,
|
|
114
|
+
notThrows: noop,
|
|
115
|
+
notThrowsAsync: noopAsync,
|
|
116
|
+
pass: noop,
|
|
117
|
+
plan: noop,
|
|
118
|
+
regex: noop,
|
|
119
|
+
snapshot: noop,
|
|
120
|
+
teardown: noop,
|
|
121
|
+
throws: () => undefined,
|
|
122
|
+
throwsAsync: noopAsync,
|
|
123
|
+
timeout: noop,
|
|
124
|
+
true: noop,
|
|
125
|
+
truthy: noop,
|
|
126
|
+
try: async () => ({ commit: noop, discard: noop, passed: true }),
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Initialize capture state on globalThis
|
|
131
|
+
*/
|
|
132
|
+
const initCaptureState = () => {
|
|
133
|
+
const state = {
|
|
134
|
+
hooks: {
|
|
135
|
+
after: [],
|
|
136
|
+
afterAlways: [],
|
|
137
|
+
afterEach: [],
|
|
138
|
+
afterEachAlways: [],
|
|
139
|
+
before: [],
|
|
140
|
+
beforeEach: [],
|
|
141
|
+
},
|
|
142
|
+
tests: [],
|
|
143
|
+
};
|
|
144
|
+
// @ts-expect-error - intentionally using globalThis for cross-module state
|
|
145
|
+
globalThis[CAPTURE_STATE_KEY] = state;
|
|
146
|
+
return state;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Install AVA mocks on globalThis for module interception
|
|
150
|
+
*/
|
|
151
|
+
const installAvaMocks = (state) => {
|
|
152
|
+
/**
|
|
153
|
+
* Parse test arguments and return name + wrapped function Used by
|
|
154
|
+
* registerTest and test variants (only, serial, skip)
|
|
155
|
+
*/
|
|
156
|
+
const parseTestArgs = (titleOrMacroOrFn, rest) => {
|
|
157
|
+
let name;
|
|
158
|
+
let fn;
|
|
159
|
+
let args = [];
|
|
160
|
+
if (typeof titleOrMacroOrFn === 'string') {
|
|
161
|
+
name = titleOrMacroOrFn;
|
|
162
|
+
const [macroOrFn, ...restArgs] = rest;
|
|
163
|
+
if (isMacroObject(macroOrFn)) {
|
|
164
|
+
fn = macroOrFn.exec;
|
|
165
|
+
args = restArgs;
|
|
166
|
+
if (macroOrFn.title) {
|
|
167
|
+
name = macroOrFn.title(titleOrMacroOrFn, ...restArgs);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else if (isFunction(macroOrFn)) {
|
|
171
|
+
fn = macroOrFn;
|
|
172
|
+
args = restArgs;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
fn = () => { };
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else if (isMacroObject(titleOrMacroOrFn)) {
|
|
179
|
+
fn = titleOrMacroOrFn.exec;
|
|
180
|
+
args = rest;
|
|
181
|
+
name = titleOrMacroOrFn.title
|
|
182
|
+
? titleOrMacroOrFn.title(undefined, ...rest)
|
|
183
|
+
: fn.name || 'unnamed test';
|
|
184
|
+
}
|
|
185
|
+
else if (isFunction(titleOrMacroOrFn)) {
|
|
186
|
+
fn = titleOrMacroOrFn;
|
|
187
|
+
args = rest;
|
|
188
|
+
name = fn.name || 'unnamed test';
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
name = 'unnamed test';
|
|
192
|
+
fn = () => { };
|
|
193
|
+
}
|
|
194
|
+
const wrappedFn = async () => {
|
|
195
|
+
const ctx = createMockContext();
|
|
196
|
+
await fn(ctx, ...args);
|
|
197
|
+
};
|
|
198
|
+
return { name, wrappedFn };
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Process a test registration, handling all AVA calling conventions:
|
|
202
|
+
*
|
|
203
|
+
* - Test('title', fn)
|
|
204
|
+
* - Test('title', macro, ...args)
|
|
205
|
+
* - Test(macro, ...args)
|
|
206
|
+
* - Test(fn)
|
|
207
|
+
*/
|
|
208
|
+
const registerTest = (titleOrMacroOrFn, ...rest) => {
|
|
209
|
+
const { name, wrappedFn } = parseTestArgs(titleOrMacroOrFn, rest);
|
|
210
|
+
state.tests.push({
|
|
211
|
+
fn: wrappedFn,
|
|
212
|
+
name,
|
|
213
|
+
});
|
|
214
|
+
};
|
|
215
|
+
// Create mock test function
|
|
216
|
+
const mockTest = Object.assign(registerTest, {
|
|
217
|
+
// test.after() - runs once after all tests
|
|
218
|
+
after: Object.assign((fn) => {
|
|
219
|
+
const wrappedFn = async () => {
|
|
220
|
+
const ctx = createMockContext();
|
|
221
|
+
await fn(ctx);
|
|
222
|
+
};
|
|
223
|
+
state.hooks.after.push(wrappedFn);
|
|
224
|
+
}, {
|
|
225
|
+
// test.after.always() - runs even if tests fail
|
|
226
|
+
always: function always(fn) {
|
|
227
|
+
const wrappedFn = async () => {
|
|
228
|
+
const ctx = createMockContext();
|
|
229
|
+
await fn(ctx);
|
|
230
|
+
};
|
|
231
|
+
state.hooks.afterAlways.push(wrappedFn);
|
|
232
|
+
},
|
|
233
|
+
}),
|
|
234
|
+
// test.afterEach() - runs after each test
|
|
235
|
+
afterEach: Object.assign((fn) => {
|
|
236
|
+
const wrappedFn = async () => {
|
|
237
|
+
const ctx = createMockContext();
|
|
238
|
+
await fn(ctx);
|
|
239
|
+
};
|
|
240
|
+
state.hooks.afterEach.push(wrappedFn);
|
|
241
|
+
}, {
|
|
242
|
+
// test.afterEach.always() - runs even if test fails
|
|
243
|
+
always: function always(fn) {
|
|
244
|
+
const wrappedFn = async () => {
|
|
245
|
+
const ctx = createMockContext();
|
|
246
|
+
await fn(ctx);
|
|
247
|
+
};
|
|
248
|
+
state.hooks.afterEachAlways.push(wrappedFn);
|
|
249
|
+
},
|
|
250
|
+
}),
|
|
251
|
+
// test.before() - runs once before all tests
|
|
252
|
+
before: function before(fn) {
|
|
253
|
+
const wrappedFn = async () => {
|
|
254
|
+
const ctx = createMockContext();
|
|
255
|
+
await fn(ctx);
|
|
256
|
+
};
|
|
257
|
+
state.hooks.before.push(wrappedFn);
|
|
258
|
+
},
|
|
259
|
+
// test.beforeEach() - runs before each test
|
|
260
|
+
beforeEach: function beforeEach(fn) {
|
|
261
|
+
const wrappedFn = async () => {
|
|
262
|
+
const ctx = createMockContext();
|
|
263
|
+
await fn(ctx);
|
|
264
|
+
};
|
|
265
|
+
state.hooks.beforeEach.push(wrappedFn);
|
|
266
|
+
},
|
|
267
|
+
// test.failing() - expected to fail (treat as regular for benchmarks)
|
|
268
|
+
failing: function failing(titleOrMacro, implementation) {
|
|
269
|
+
mockTest(titleOrMacro, implementation);
|
|
270
|
+
},
|
|
271
|
+
// test.macro() - create reusable test macro
|
|
272
|
+
// Accepts either a function or an object with exec/title
|
|
273
|
+
macro: function macro(fnOrObject) {
|
|
274
|
+
if (typeof fnOrObject === 'function') {
|
|
275
|
+
// Simple function macro - return as-is
|
|
276
|
+
return fnOrObject;
|
|
277
|
+
}
|
|
278
|
+
// Object macro with exec/title - return as AvaMacro
|
|
279
|
+
return {
|
|
280
|
+
exec: fnOrObject.exec,
|
|
281
|
+
title: fnOrObject.title,
|
|
282
|
+
};
|
|
283
|
+
},
|
|
284
|
+
// test.only() - marks test as exclusive
|
|
285
|
+
only: function only(titleOrMacroOrFn, ...rest) {
|
|
286
|
+
// Reuse registerTest logic but add only flag
|
|
287
|
+
const { name, wrappedFn } = parseTestArgs(titleOrMacroOrFn, rest);
|
|
288
|
+
state.tests.push({
|
|
289
|
+
fn: wrappedFn,
|
|
290
|
+
name,
|
|
291
|
+
only: true,
|
|
292
|
+
});
|
|
293
|
+
},
|
|
294
|
+
// test.serial() - run serially (we capture but ignore serial flag for benchmarks)
|
|
295
|
+
serial: function serial(titleOrMacroOrFn, ...rest) {
|
|
296
|
+
const { name, wrappedFn } = parseTestArgs(titleOrMacroOrFn, rest);
|
|
297
|
+
state.tests.push({
|
|
298
|
+
fn: wrappedFn,
|
|
299
|
+
name,
|
|
300
|
+
serial: true,
|
|
301
|
+
});
|
|
302
|
+
},
|
|
303
|
+
// test.skip() - marks test as skipped
|
|
304
|
+
skip: function skip(titleOrMacroOrFn, ...rest) {
|
|
305
|
+
const { name, wrappedFn } = parseTestArgs(titleOrMacroOrFn, rest);
|
|
306
|
+
state.tests.push({
|
|
307
|
+
fn: wrappedFn,
|
|
308
|
+
name,
|
|
309
|
+
skip: true,
|
|
310
|
+
});
|
|
311
|
+
},
|
|
312
|
+
// test.todo() - placeholder test
|
|
313
|
+
todo: function todo(title) {
|
|
314
|
+
state.tests.push({
|
|
315
|
+
fn: () => { },
|
|
316
|
+
name: title,
|
|
317
|
+
skip: true,
|
|
318
|
+
});
|
|
319
|
+
},
|
|
320
|
+
});
|
|
321
|
+
// Install on globalThis for the loader to access
|
|
322
|
+
// @ts-expect-error - intentionally using globalThis
|
|
323
|
+
globalThis.__MODESTBENCH_AVA_MOCK__ = {
|
|
324
|
+
default: mockTest,
|
|
325
|
+
test: mockTest,
|
|
326
|
+
};
|
|
327
|
+
};
|
|
328
|
+
/**
|
|
329
|
+
* Convert capture state to CapturedTestFile
|
|
330
|
+
*
|
|
331
|
+
* Since AVA doesn't have suites, we create a synthetic "default" suite to hold
|
|
332
|
+
* the file-level hooks and tests.
|
|
333
|
+
*/
|
|
334
|
+
const toCapturedTestFile = (state, filePath) => {
|
|
335
|
+
// Combine after and afterAlways, afterEach and afterEachAlways
|
|
336
|
+
const combinedHooks = {
|
|
337
|
+
after: [...state.hooks.after, ...state.hooks.afterAlways],
|
|
338
|
+
afterEach: [...state.hooks.afterEach, ...state.hooks.afterEachAlways],
|
|
339
|
+
before: state.hooks.before,
|
|
340
|
+
beforeEach: state.hooks.beforeEach,
|
|
341
|
+
};
|
|
342
|
+
// Convert tests
|
|
343
|
+
const tests = state.tests.map((t) => ({
|
|
344
|
+
fn: t.fn,
|
|
345
|
+
name: t.name,
|
|
346
|
+
only: t.only,
|
|
347
|
+
skip: t.skip,
|
|
348
|
+
}));
|
|
349
|
+
// If there are hooks, wrap them in a synthetic suite
|
|
350
|
+
const hasHooks = combinedHooks.before.length > 0 ||
|
|
351
|
+
combinedHooks.after.length > 0 ||
|
|
352
|
+
combinedHooks.beforeEach.length > 0 ||
|
|
353
|
+
combinedHooks.afterEach.length > 0;
|
|
354
|
+
if (hasHooks) {
|
|
355
|
+
// Create a synthetic suite to hold hooks
|
|
356
|
+
const suite = {
|
|
357
|
+
children: [],
|
|
358
|
+
hooks: combinedHooks,
|
|
359
|
+
name: 'default',
|
|
360
|
+
tests,
|
|
361
|
+
};
|
|
362
|
+
return {
|
|
363
|
+
filePath,
|
|
364
|
+
framework: 'ava',
|
|
365
|
+
rootSuites: [suite],
|
|
366
|
+
rootTests: [],
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
// No hooks - just return flat tests
|
|
370
|
+
return {
|
|
371
|
+
filePath,
|
|
372
|
+
framework: 'ava',
|
|
373
|
+
rootSuites: [],
|
|
374
|
+
rootTests: tests,
|
|
375
|
+
};
|
|
376
|
+
};
|
|
377
|
+
/**
|
|
378
|
+
* Uninstall AVA mocks
|
|
379
|
+
*/
|
|
380
|
+
const uninstallAvaMocks = () => {
|
|
381
|
+
// @ts-expect-error - cleaning up globalThis
|
|
382
|
+
delete globalThis.__MODESTBENCH_AVA_MOCK__;
|
|
383
|
+
};
|
|
384
|
+
//# 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,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ModestBench AVA Loader Hooks
|
|
4
|
+
*
|
|
5
|
+
* ES module loader hooks that intercept `ava` imports and return our capturing
|
|
6
|
+
* mock from globalThis.
|
|
7
|
+
*
|
|
8
|
+
* Usage: node --import modestbench/ava test-file.js
|
|
9
|
+
*
|
|
10
|
+
* This loader exports async `resolve` and `load` hooks that get registered via
|
|
11
|
+
* module.register() when imported through ava-register.ts.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.load = exports.resolve = void 0;
|
|
15
|
+
/**
|
|
16
|
+
* Generate the mock module source code
|
|
17
|
+
*
|
|
18
|
+
* Uses top-level await to conditionally get mock or real module. Note: Uses
|
|
19
|
+
* 'ava?passthrough' to bypass our hook when falling back.
|
|
20
|
+
*/
|
|
21
|
+
const generateMockSource = () => `
|
|
22
|
+
const mock = globalThis.__MODESTBENCH_AVA_MOCK__;
|
|
23
|
+
|
|
24
|
+
// If no mock installed, fall through to real ava
|
|
25
|
+
// The '?passthrough' query tells our hook to not intercept this import
|
|
26
|
+
const source = mock ?? await import('ava?passthrough');
|
|
27
|
+
|
|
28
|
+
export const test = source.test ?? source.default;
|
|
29
|
+
export default source.default ?? source.test;
|
|
30
|
+
`;
|
|
31
|
+
/**
|
|
32
|
+
* Resolve hook - intercepts ava specifier
|
|
33
|
+
*
|
|
34
|
+
* Uses query param '?passthrough' to prevent infinite recursion when falling
|
|
35
|
+
* back to real ava (when no mock is installed).
|
|
36
|
+
*/
|
|
37
|
+
const resolve = async (specifier, context, nextResolve) => {
|
|
38
|
+
// Only intercept bare 'ava', not 'ava?passthrough'
|
|
39
|
+
if (specifier === 'ava') {
|
|
40
|
+
return {
|
|
41
|
+
shortCircuit: true,
|
|
42
|
+
url: 'modestbench://capture/ava',
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Strip passthrough query to resolve real ava
|
|
46
|
+
if (specifier === 'ava?passthrough') {
|
|
47
|
+
return nextResolve('ava', context);
|
|
48
|
+
}
|
|
49
|
+
return nextResolve(specifier, context);
|
|
50
|
+
};
|
|
51
|
+
exports.resolve = resolve;
|
|
52
|
+
/**
|
|
53
|
+
* Load hook - returns mock module for our custom URL
|
|
54
|
+
*/
|
|
55
|
+
const load = async (url, context, nextLoad) => {
|
|
56
|
+
if (url === 'modestbench://capture/ava') {
|
|
57
|
+
return {
|
|
58
|
+
format: 'module',
|
|
59
|
+
shortCircuit: true,
|
|
60
|
+
source: generateMockSource(),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return nextLoad(url, context);
|
|
64
|
+
};
|
|
65
|
+
exports.load = load;
|
|
66
|
+
//# sourceMappingURL=ava-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ava-hooks.js","sourceRoot":"","sources":["../../src/adapters/ava-hooks.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAIH;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,GAAW,EAAE,CAAC;;;;;;;;;CASxC,CAAC;AAEF;;;;;GAKG;AACI,MAAM,OAAO,GAAgB,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAC5E,mDAAmD;IACnD,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,GAAG,EAAE,2BAA2B;SACjC,CAAC;IACJ,CAAC;IACD,8CAA8C;IAC9C,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC,CAAC;AAbW,QAAA,OAAO,WAalB;AAEF;;GAEG;AACI,MAAM,IAAI,GAAa,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAC7D,IAAI,GAAG,KAAK,2BAA2B,EAAE,CAAC;QACxC,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,kBAAkB,EAAE;SAC7B,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC,CAAC;AATW,QAAA,IAAI,QASf"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench AVA Loader Hooks
|
|
3
|
+
*
|
|
4
|
+
* ES module loader hooks that intercept `ava` imports and return our capturing
|
|
5
|
+
* mock from globalThis.
|
|
6
|
+
*
|
|
7
|
+
* Usage: node --import modestbench/ava test-file.js
|
|
8
|
+
*
|
|
9
|
+
* This loader exports async `resolve` and `load` hooks that get registered via
|
|
10
|
+
* module.register() when imported through ava-register.ts.
|
|
11
|
+
*/
|
|
12
|
+
import type { LoadHook, ResolveHook } from 'node:module';
|
|
13
|
+
/**
|
|
14
|
+
* Resolve hook - intercepts ava specifier
|
|
15
|
+
*
|
|
16
|
+
* Uses query param '?passthrough' to prevent infinite recursion when falling
|
|
17
|
+
* back to real ava (when no mock is installed).
|
|
18
|
+
*/
|
|
19
|
+
export declare const resolve: ResolveHook;
|
|
20
|
+
/**
|
|
21
|
+
* Load hook - returns mock module for our custom URL
|
|
22
|
+
*/
|
|
23
|
+
export declare const load: LoadHook;
|
|
24
|
+
//# sourceMappingURL=ava-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ava-hooks.d.ts","sourceRoot":"","sources":["../../src/adapters/ava-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAmBzD;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,WAarB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,QASlB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench AVA Loader Hooks
|
|
3
|
+
*
|
|
4
|
+
* ES module loader hooks that intercept `ava` imports and return our capturing
|
|
5
|
+
* mock from globalThis.
|
|
6
|
+
*
|
|
7
|
+
* Usage: node --import modestbench/ava test-file.js
|
|
8
|
+
*
|
|
9
|
+
* This loader exports async `resolve` and `load` hooks that get registered via
|
|
10
|
+
* module.register() when imported through ava-register.ts.
|
|
11
|
+
*/
|
|
12
|
+
import type { LoadHook, ResolveHook } from 'node:module';
|
|
13
|
+
/**
|
|
14
|
+
* Resolve hook - intercepts ava specifier
|
|
15
|
+
*
|
|
16
|
+
* Uses query param '?passthrough' to prevent infinite recursion when falling
|
|
17
|
+
* back to real ava (when no mock is installed).
|
|
18
|
+
*/
|
|
19
|
+
export declare const resolve: ResolveHook;
|
|
20
|
+
/**
|
|
21
|
+
* Load hook - returns mock module for our custom URL
|
|
22
|
+
*/
|
|
23
|
+
export declare const load: LoadHook;
|
|
24
|
+
//# sourceMappingURL=ava-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ava-hooks.d.ts","sourceRoot":"","sources":["../../src/adapters/ava-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAmBzD;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,WAarB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,QASlB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench AVA Loader Hooks
|
|
3
|
+
*
|
|
4
|
+
* ES module loader hooks that intercept `ava` imports and return our capturing
|
|
5
|
+
* mock from globalThis.
|
|
6
|
+
*
|
|
7
|
+
* Usage: node --import modestbench/ava test-file.js
|
|
8
|
+
*
|
|
9
|
+
* This loader exports async `resolve` and `load` hooks that get registered via
|
|
10
|
+
* module.register() when imported through ava-register.ts.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Generate the mock module source code
|
|
14
|
+
*
|
|
15
|
+
* Uses top-level await to conditionally get mock or real module. Note: Uses
|
|
16
|
+
* 'ava?passthrough' to bypass our hook when falling back.
|
|
17
|
+
*/
|
|
18
|
+
const generateMockSource = () => `
|
|
19
|
+
const mock = globalThis.__MODESTBENCH_AVA_MOCK__;
|
|
20
|
+
|
|
21
|
+
// If no mock installed, fall through to real ava
|
|
22
|
+
// The '?passthrough' query tells our hook to not intercept this import
|
|
23
|
+
const source = mock ?? await import('ava?passthrough');
|
|
24
|
+
|
|
25
|
+
export const test = source.test ?? source.default;
|
|
26
|
+
export default source.default ?? source.test;
|
|
27
|
+
`;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve hook - intercepts ava specifier
|
|
30
|
+
*
|
|
31
|
+
* Uses query param '?passthrough' to prevent infinite recursion when falling
|
|
32
|
+
* back to real ava (when no mock is installed).
|
|
33
|
+
*/
|
|
34
|
+
export const resolve = async (specifier, context, nextResolve) => {
|
|
35
|
+
// Only intercept bare 'ava', not 'ava?passthrough'
|
|
36
|
+
if (specifier === 'ava') {
|
|
37
|
+
return {
|
|
38
|
+
shortCircuit: true,
|
|
39
|
+
url: 'modestbench://capture/ava',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// Strip passthrough query to resolve real ava
|
|
43
|
+
if (specifier === 'ava?passthrough') {
|
|
44
|
+
return nextResolve('ava', context);
|
|
45
|
+
}
|
|
46
|
+
return nextResolve(specifier, context);
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Load hook - returns mock module for our custom URL
|
|
50
|
+
*/
|
|
51
|
+
export const load = async (url, context, nextLoad) => {
|
|
52
|
+
if (url === 'modestbench://capture/ava') {
|
|
53
|
+
return {
|
|
54
|
+
format: 'module',
|
|
55
|
+
shortCircuit: true,
|
|
56
|
+
source: generateMockSource(),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return nextLoad(url, context);
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=ava-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ava-hooks.js","sourceRoot":"","sources":["../../src/adapters/ava-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,GAAW,EAAE,CAAC;;;;;;;;;CASxC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAgB,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAC5E,mDAAmD;IACnD,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,GAAG,EAAE,2BAA2B;SACjC,CAAC;IACJ,CAAC;IACD,8CAA8C;IAC9C,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAa,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAC7D,IAAI,GAAG,KAAK,2BAA2B,EAAE,CAAC;QACxC,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,kBAAkB,EAAE;SAC7B,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ModestBench AVA Loader Registration
|
|
4
|
+
*
|
|
5
|
+
* Registers the AVA ESM loader hooks via module.register().
|
|
6
|
+
*
|
|
7
|
+
* Usage: node --import modestbench/ava your-test.js
|
|
8
|
+
*
|
|
9
|
+
* This file registers the hooks module which intercepts 'ava' imports.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const node_module_1 = require("node:module");
|
|
13
|
+
(0, node_module_1.register)('./ava-hooks.js', {
|
|
14
|
+
parentURL: require("url").pathToFileURL(__filename),
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=ava-register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ava-register.js","sourceRoot":"","sources":["../../src/adapters/ava-register.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAEH,6CAAuC;AAEvC,IAAA,sBAAQ,EAAC,gBAAgB,EAAE;IACzB,SAAS,0CAAiB;CAC3B,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench AVA Loader Registration
|
|
3
|
+
*
|
|
4
|
+
* Registers the AVA ESM loader hooks via module.register().
|
|
5
|
+
*
|
|
6
|
+
* Usage: node --import modestbench/ava your-test.js
|
|
7
|
+
*
|
|
8
|
+
* This file registers the hooks module which intercepts 'ava' imports.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=ava-register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ava-register.d.ts","sourceRoot":"","sources":["../../src/adapters/ava-register.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench AVA Loader Registration
|
|
3
|
+
*
|
|
4
|
+
* Registers the AVA ESM loader hooks via module.register().
|
|
5
|
+
*
|
|
6
|
+
* Usage: node --import modestbench/ava your-test.js
|
|
7
|
+
*
|
|
8
|
+
* This file registers the hooks module which intercepts 'ava' imports.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=ava-register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ava-register.d.ts","sourceRoot":"","sources":["../../src/adapters/ava-register.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench AVA Loader Registration
|
|
3
|
+
*
|
|
4
|
+
* Registers the AVA ESM loader hooks via module.register().
|
|
5
|
+
*
|
|
6
|
+
* Usage: node --import modestbench/ava your-test.js
|
|
7
|
+
*
|
|
8
|
+
* This file registers the hooks module which intercepts 'ava' imports.
|
|
9
|
+
*/
|
|
10
|
+
import { register } from 'node:module';
|
|
11
|
+
register('./ava-hooks.js', {
|
|
12
|
+
parentURL: import.meta.url,
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=ava-register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ava-register.js","sourceRoot":"","sources":["../../src/adapters/ava-register.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,QAAQ,CAAC,gBAAgB,EAAE;IACzB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;CAC3B,CAAC,CAAC"}
|