@playwright-repl/runner 0.21.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.
- package/README.md +116 -0
- package/dist/args.d.ts +16 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +48 -0
- package/dist/args.js.map +1 -0
- package/dist/bridge-utils.cjs +197 -0
- package/dist/bridge-utils.cjs.map +1 -0
- package/dist/bridge-utils.d.cts +30 -0
- package/dist/bridge-utils.d.cts.map +1 -0
- package/dist/browser.d.ts +12 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +40 -0
- package/dist/browser.js.map +1 -0
- package/dist/bundler.d.ts +6 -0
- package/dist/bundler.d.ts.map +1 -0
- package/dist/bundler.js +32 -0
- package/dist/bundler.js.map +1 -0
- package/dist/cdpPreload.cjs +44 -0
- package/dist/cdpPreload.cjs.map +1 -0
- package/dist/cdpPreload.d.cts +11 -0
- package/dist/cdpPreload.d.cts.map +1 -0
- package/dist/chrome-extension/background.js +233485 -0
- package/dist/chrome-extension/background.js.map +1 -0
- package/dist/chrome-extension/content/picker.js +279 -0
- package/dist/chrome-extension/content/recorder.js +475 -0
- package/dist/chrome-extension/devtools/console.html +17 -0
- package/dist/chrome-extension/devtools/console.js +28 -0
- package/dist/chrome-extension/devtools/console.js.map +1 -0
- package/dist/chrome-extension/devtools/devtools.html +8 -0
- package/dist/chrome-extension/devtools/devtools.js +7 -0
- package/dist/chrome-extension/devtools/devtools.js.map +1 -0
- package/dist/chrome-extension/icons/dramaturg_icon_128.png +0 -0
- package/dist/chrome-extension/icons/dramaturg_icon_16.png +0 -0
- package/dist/chrome-extension/icons/dramaturg_icon_32.png +0 -0
- package/dist/chrome-extension/icons/dramaturg_icon_48.png +0 -0
- package/dist/chrome-extension/index.css +1333 -0
- package/dist/chrome-extension/index.js +12462 -0
- package/dist/chrome-extension/index.js.map +1 -0
- package/dist/chrome-extension/index2.js +27327 -0
- package/dist/chrome-extension/index2.js.map +1 -0
- package/dist/chrome-extension/manifest.json +46 -0
- package/dist/chrome-extension/modulepreload-polyfill.js +30 -0
- package/dist/chrome-extension/modulepreload-polyfill.js.map +1 -0
- package/dist/chrome-extension/newtab/newtab.html +202 -0
- package/dist/chrome-extension/offscreen/offscreen.html +6 -0
- package/dist/chrome-extension/offscreen/offscreen.js +54 -0
- package/dist/chrome-extension/offscreen/offscreen.js.map +1 -0
- package/dist/chrome-extension/panel/panel.html +16 -0
- package/dist/chrome-extension/panel/panel.js +2210 -0
- package/dist/chrome-extension/panel/panel.js.map +1 -0
- package/dist/chrome-extension/preferences/preferences.html +14 -0
- package/dist/chrome-extension/preferences/preferences.js +102 -0
- package/dist/chrome-extension/preferences/preferences.js.map +1 -0
- package/dist/chrome-extension/settings.js +13 -0
- package/dist/chrome-extension/settings.js.map +1 -0
- package/dist/chrome-extension/sw-debugger-core.js +1127 -0
- package/dist/chrome-extension/sw-debugger-core.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +43 -0
- package/dist/cli.js.map +1 -0
- package/dist/compiler/classify.d.ts +13 -0
- package/dist/compiler/classify.d.ts.map +1 -0
- package/dist/compiler/classify.js +143 -0
- package/dist/compiler/classify.js.map +1 -0
- package/dist/compiler/index.d.ts +24 -0
- package/dist/compiler/index.d.ts.map +1 -0
- package/dist/compiler/index.js +41 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/compiler/parser.d.ts +24 -0
- package/dist/compiler/parser.d.ts.map +1 -0
- package/dist/compiler/parser.js +77 -0
- package/dist/compiler/parser.js.map +1 -0
- package/dist/compiler/transform.d.ts +20 -0
- package/dist/compiler/transform.d.ts.map +1 -0
- package/dist/compiler/transform.js +36 -0
- package/dist/compiler/transform.js.map +1 -0
- package/dist/compiler.d.ts +24 -0
- package/dist/compiler.d.ts.map +1 -0
- package/dist/compiler.js +129 -0
- package/dist/compiler.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +16 -0
- package/dist/config.js.map +1 -0
- package/dist/discover.d.ts +5 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +46 -0
- package/dist/discover.js.map +1 -0
- package/dist/execute.d.ts +13 -0
- package/dist/execute.d.ts.map +1 -0
- package/dist/execute.js +281 -0
- package/dist/execute.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/mode-detect.d.ts +21 -0
- package/dist/mode-detect.d.ts.map +1 -0
- package/dist/mode-detect.js +67 -0
- package/dist/mode-detect.js.map +1 -0
- package/dist/proxy-page.d.ts +32 -0
- package/dist/proxy-page.d.ts.map +1 -0
- package/dist/proxy-page.js +192 -0
- package/dist/proxy-page.js.map +1 -0
- package/dist/pw-cli.d.ts +12 -0
- package/dist/pw-cli.d.ts.map +1 -0
- package/dist/pw-cli.js +73 -0
- package/dist/pw-cli.js.map +1 -0
- package/dist/pw-launch.d.ts +15 -0
- package/dist/pw-launch.d.ts.map +1 -0
- package/dist/pw-launch.js +97 -0
- package/dist/pw-launch.js.map +1 -0
- package/dist/pw-preload.cjs +164 -0
- package/dist/pw-preload.cjs.map +1 -0
- package/dist/pw-preload.d.cts +15 -0
- package/dist/pw-preload.d.cts.map +1 -0
- package/dist/pw-repl-extension.d.ts +12 -0
- package/dist/pw-repl-extension.d.ts.map +1 -0
- package/dist/pw-repl-extension.js +100 -0
- package/dist/pw-repl-extension.js.map +1 -0
- package/dist/pw-repl.d.ts +12 -0
- package/dist/pw-repl.d.ts.map +1 -0
- package/dist/pw-repl.js +111 -0
- package/dist/pw-repl.js.map +1 -0
- package/dist/pw-worker.cjs +216 -0
- package/dist/pw-worker.cjs.map +1 -0
- package/dist/pw-worker.d.cts +13 -0
- package/dist/pw-worker.d.cts.map +1 -0
- package/dist/pw-worker.d.ts +11 -0
- package/dist/pw-worker.d.ts.map +1 -0
- package/dist/pw-worker.js +51 -0
- package/dist/pw-worker.js.map +1 -0
- package/dist/run-test.d.ts +22 -0
- package/dist/run-test.d.ts.map +1 -0
- package/dist/run-test.js +358 -0
- package/dist/run-test.js.map +1 -0
- package/dist/runner.d.ts +10 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +82 -0
- package/dist/runner.js.map +1 -0
- package/dist/shim/alias.d.ts +11 -0
- package/dist/shim/alias.d.ts.map +1 -0
- package/dist/shim/alias.js +24 -0
- package/dist/shim/alias.js.map +1 -0
- package/dist/shim/framework.d.ts +11 -0
- package/dist/shim/framework.d.ts.map +1 -0
- package/dist/shim/framework.js +11 -0
- package/dist/shim/framework.js.map +1 -0
- package/dist/shim/test-runner-node.d.ts +49 -0
- package/dist/shim/test-runner-node.d.ts.map +1 -0
- package/dist/shim/test-runner-node.js +191 -0
- package/dist/shim/test-runner-node.js.map +1 -0
- package/dist/shim/test-runner.d.ts +44 -0
- package/dist/shim/test-runner.d.ts.map +1 -0
- package/dist/shim/test-runner.js +181 -0
- package/dist/shim/test-runner.js.map +1 -0
- package/dist/types.d.ts +41 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Runner Shim
|
|
3
|
+
*
|
|
4
|
+
* Lightweight test framework that replaces @playwright/test imports.
|
|
5
|
+
* esbuild aliases '@playwright/test' to this file, so test files
|
|
6
|
+
* use our runner without any code changes.
|
|
7
|
+
*
|
|
8
|
+
* Runs inside playwright-crx's service worker where `page`, `context`,
|
|
9
|
+
* and `expect` are already available in scope.
|
|
10
|
+
*/
|
|
11
|
+
// ─── State ─────────────────────────────────────────────────────────────────
|
|
12
|
+
const rootSuite = {
|
|
13
|
+
name: '',
|
|
14
|
+
tests: [],
|
|
15
|
+
beforeAll: [],
|
|
16
|
+
afterAll: [],
|
|
17
|
+
beforeEach: [],
|
|
18
|
+
afterEach: [],
|
|
19
|
+
children: [],
|
|
20
|
+
};
|
|
21
|
+
let currentSuite = rootSuite;
|
|
22
|
+
let hasOnly = false;
|
|
23
|
+
// ─── Registration API ──────────────────────────────────────────────────────
|
|
24
|
+
function test(name, fn) {
|
|
25
|
+
currentSuite.tests.push({ name, fn, only: false, skip: false });
|
|
26
|
+
}
|
|
27
|
+
test.only = (name, fn) => {
|
|
28
|
+
hasOnly = true;
|
|
29
|
+
currentSuite.tests.push({ name, fn, only: true, skip: false });
|
|
30
|
+
};
|
|
31
|
+
test.skip = (name, fn) => {
|
|
32
|
+
currentSuite.tests.push({ name, fn, only: false, skip: true });
|
|
33
|
+
};
|
|
34
|
+
test.describe = (name, fn) => {
|
|
35
|
+
const suite = {
|
|
36
|
+
name,
|
|
37
|
+
tests: [],
|
|
38
|
+
beforeAll: [],
|
|
39
|
+
afterAll: [],
|
|
40
|
+
beforeEach: [],
|
|
41
|
+
afterEach: [],
|
|
42
|
+
children: [],
|
|
43
|
+
};
|
|
44
|
+
currentSuite.children.push(suite);
|
|
45
|
+
const parent = currentSuite;
|
|
46
|
+
currentSuite = suite;
|
|
47
|
+
fn();
|
|
48
|
+
currentSuite = parent;
|
|
49
|
+
};
|
|
50
|
+
test.describe.configure = () => { };
|
|
51
|
+
test.fixme = test.skip; // treat fixme as skip
|
|
52
|
+
test.slow = () => { }; // no-op
|
|
53
|
+
test.info = () => ({ annotations: [] }); // no-op
|
|
54
|
+
test.beforeAll = (fn) => { currentSuite.beforeAll.push(fn); };
|
|
55
|
+
test.afterAll = (fn) => { currentSuite.afterAll.push(fn); };
|
|
56
|
+
test.beforeEach = (fn) => { currentSuite.beforeEach.push(fn); };
|
|
57
|
+
// test.extend() — creates a new test function with custom fixtures
|
|
58
|
+
// The fixture functions receive { page, context, expect } and can wrap them
|
|
59
|
+
test.extend = (fixtures) => {
|
|
60
|
+
const extendedTest = (name, fn) => {
|
|
61
|
+
// Wrap the test fn to apply fixtures
|
|
62
|
+
currentSuite.tests.push({
|
|
63
|
+
name, only: false, skip: false,
|
|
64
|
+
fn: async (baseFixtures) => {
|
|
65
|
+
const extended = { ...baseFixtures };
|
|
66
|
+
// Apply each fixture — call the fixture function, wait for use() callback
|
|
67
|
+
for (const [key, fixtureFn] of Object.entries(fixtures)) {
|
|
68
|
+
if (typeof fixtureFn === 'function') {
|
|
69
|
+
await new Promise((resolve, reject) => {
|
|
70
|
+
const useCallback = async (value) => {
|
|
71
|
+
extended[key] = value;
|
|
72
|
+
resolve();
|
|
73
|
+
};
|
|
74
|
+
// Call fixture fn — it does setup, then calls use(value)
|
|
75
|
+
Promise.resolve(fixtureFn({ ...extended, [key]: extended[key] }, useCallback)).catch(reject);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
await fn(extended);
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
// Copy all methods to the extended test function
|
|
84
|
+
extendedTest.only = test.only;
|
|
85
|
+
extendedTest.skip = test.skip;
|
|
86
|
+
extendedTest.describe = test.describe;
|
|
87
|
+
extendedTest.beforeAll = test.beforeAll;
|
|
88
|
+
extendedTest.afterAll = test.afterAll;
|
|
89
|
+
extendedTest.beforeEach = test.beforeEach;
|
|
90
|
+
extendedTest.afterEach = test.afterEach;
|
|
91
|
+
extendedTest.extend = test.extend;
|
|
92
|
+
return extendedTest;
|
|
93
|
+
};
|
|
94
|
+
test.afterEach = (fn) => { currentSuite.afterEach.push(fn); };
|
|
95
|
+
// ─── Runner ────────────────────────────────────────────────────────────────
|
|
96
|
+
// page = Proxy → bridge. expect = smart (proxy → bridge, value → native).
|
|
97
|
+
// Provided via globalThis by the execution engine.
|
|
98
|
+
async function runSuite(suite, parentBeforeEach, parentAfterEach, prefix) {
|
|
99
|
+
const results = [];
|
|
100
|
+
const _g = globalThis;
|
|
101
|
+
const fixtures = { page: _g.__proxyPage, context: null, expect: _g.__proxyExpect };
|
|
102
|
+
const allBeforeEach = [...parentBeforeEach, ...suite.beforeEach];
|
|
103
|
+
const allAfterEach = [...suite.afterEach, ...parentAfterEach];
|
|
104
|
+
// beforeAll
|
|
105
|
+
for (const fn of suite.beforeAll) {
|
|
106
|
+
await fn(fixtures);
|
|
107
|
+
}
|
|
108
|
+
// Run tests
|
|
109
|
+
for (const t of suite.tests) {
|
|
110
|
+
const fullName = prefix ? `${prefix} > ${t.name}` : t.name;
|
|
111
|
+
if (t.skip || (hasOnly && !t.only)) {
|
|
112
|
+
results.push({ name: fullName, passed: true, skipped: true, duration: 0 });
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const start = Date.now();
|
|
116
|
+
try {
|
|
117
|
+
// Clean up routes from previous tests (our shim reuses the same page)
|
|
118
|
+
if (fixtures.page?.unrouteAll)
|
|
119
|
+
await fixtures.page.unrouteAll();
|
|
120
|
+
for (const fn of allBeforeEach)
|
|
121
|
+
await fn(fixtures);
|
|
122
|
+
await t.fn(fixtures);
|
|
123
|
+
for (const fn of allAfterEach)
|
|
124
|
+
await fn(fixtures);
|
|
125
|
+
results.push({ name: fullName, passed: true, skipped: false, duration: Date.now() - start });
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
results.push({
|
|
129
|
+
name: fullName,
|
|
130
|
+
passed: false,
|
|
131
|
+
skipped: false,
|
|
132
|
+
error: err.message || String(err),
|
|
133
|
+
duration: Date.now() - start,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Run child suites
|
|
138
|
+
for (const child of suite.children) {
|
|
139
|
+
const childPrefix = prefix ? `${prefix} > ${child.name}` : child.name;
|
|
140
|
+
const childResults = await runSuite(child, allBeforeEach, allAfterEach, childPrefix);
|
|
141
|
+
results.push(...childResults);
|
|
142
|
+
}
|
|
143
|
+
// afterAll
|
|
144
|
+
for (const fn of suite.afterAll) {
|
|
145
|
+
await fn(fixtures);
|
|
146
|
+
}
|
|
147
|
+
return results;
|
|
148
|
+
}
|
|
149
|
+
function formatResults(results) {
|
|
150
|
+
const lines = [];
|
|
151
|
+
let passed = 0, failed = 0, skipped = 0;
|
|
152
|
+
for (const r of results) {
|
|
153
|
+
if (r.skipped) {
|
|
154
|
+
lines.push(` - ${r.name} (skipped)`);
|
|
155
|
+
skipped++;
|
|
156
|
+
}
|
|
157
|
+
else if (r.passed) {
|
|
158
|
+
lines.push(` ✓ ${r.name} (${r.duration}ms)`);
|
|
159
|
+
passed++;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
lines.push(` ✗ ${r.name} (${r.duration}ms)`);
|
|
163
|
+
lines.push(` ${r.error}`);
|
|
164
|
+
failed++;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
lines.push('');
|
|
168
|
+
lines.push(` ${passed} passed, ${failed} failed, ${skipped} skipped`);
|
|
169
|
+
return lines.join('\n');
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Run all registered tests and return formatted results.
|
|
173
|
+
* Called after the test file has been evaluated (all test/describe calls done).
|
|
174
|
+
*/
|
|
175
|
+
async function __runTests() {
|
|
176
|
+
const results = await runSuite(rootSuite, [], [], '');
|
|
177
|
+
return formatResults(results);
|
|
178
|
+
}
|
|
179
|
+
// ─── Exports ───────────────────────────────────────────────────────────────
|
|
180
|
+
// Expose __runTests on globalThis so the bundler can call it after the IIFE.
|
|
181
|
+
// esbuild tree-shakes unexported functions, but globalThis assignments survive.
|
|
182
|
+
globalThis.__runTests = __runTests;
|
|
183
|
+
// Smart expect: proxy → bridge, value → native assertion
|
|
184
|
+
function expect(target) {
|
|
185
|
+
const smartExpect = globalThis.__proxyExpect;
|
|
186
|
+
if (smartExpect)
|
|
187
|
+
return smartExpect(target);
|
|
188
|
+
throw new Error('expect() not available — __proxyExpect not set');
|
|
189
|
+
}
|
|
190
|
+
export { test, expect, __runTests };
|
|
191
|
+
//# sourceMappingURL=test-runner-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-runner-node.js","sourceRoot":"","sources":["../../src/shim/test-runner-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Runner Shim
|
|
3
|
+
*
|
|
4
|
+
* Lightweight test framework that replaces @playwright/test imports.
|
|
5
|
+
* esbuild aliases '@playwright/test' to this file, so test files
|
|
6
|
+
* use our runner without any code changes.
|
|
7
|
+
*
|
|
8
|
+
* Runs inside playwright-crx's service worker where `page`, `context`,
|
|
9
|
+
* and `expect` are already available in scope.
|
|
10
|
+
*/
|
|
11
|
+
type TestFn = (fixtures: {
|
|
12
|
+
page: unknown;
|
|
13
|
+
context: unknown;
|
|
14
|
+
expect: unknown;
|
|
15
|
+
}) => Promise<void>;
|
|
16
|
+
type HookFn = (fixtures: {
|
|
17
|
+
page: unknown;
|
|
18
|
+
context: unknown;
|
|
19
|
+
expect: unknown;
|
|
20
|
+
}) => Promise<void>;
|
|
21
|
+
declare function test(name: string, fn: TestFn): void;
|
|
22
|
+
declare namespace test {
|
|
23
|
+
var only: (name: string, fn: TestFn) => void;
|
|
24
|
+
var skip: (name: string, fn: TestFn) => void;
|
|
25
|
+
var describe: (name: string, fn: () => void) => void;
|
|
26
|
+
var beforeAll: (fn: HookFn) => void;
|
|
27
|
+
var afterAll: (fn: HookFn) => void;
|
|
28
|
+
var beforeEach: (fn: HookFn) => void;
|
|
29
|
+
var extend: (fixtures: Record<string, any>) => {
|
|
30
|
+
(name: string, fn: TestFn): void;
|
|
31
|
+
only: (name: string, fn: TestFn) => void;
|
|
32
|
+
skip: (name: string, fn: TestFn) => void;
|
|
33
|
+
describe: (name: string, fn: () => void) => void;
|
|
34
|
+
beforeAll: (fn: HookFn) => void;
|
|
35
|
+
afterAll: (fn: HookFn) => void;
|
|
36
|
+
beforeEach: (fn: HookFn) => void;
|
|
37
|
+
afterEach: (fn: HookFn) => void;
|
|
38
|
+
extend: /*elided*/ any;
|
|
39
|
+
};
|
|
40
|
+
var afterEach: (fn: HookFn) => void;
|
|
41
|
+
}
|
|
42
|
+
declare const _expect: any;
|
|
43
|
+
export { test, _expect as expect };
|
|
44
|
+
//# sourceMappingURL=test-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../src/shim/test-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,KAAK,MAAM,GAAG,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAChG,KAAK,MAAM,GAAG,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AA4ChG,iBAAS,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAErC;kBAFQ,IAAI;qBAIM,MAAM,MAAM,MAAM;qBAKlB,MAAM,MAAM,MAAM;yBAId,MAAM,MAAM,MAAM,IAAI;wBAiBvB,MAAM;uBACP,MAAM;yBACJ,MAAM;2BAIJ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;eACd,MAAM,MAAM,MAAM;qBAjC7B,MAAM,MAAM,MAAM;qBAKlB,MAAM,MAAM,MAAM;yBAId,MAAM,MAAM,MAAM,IAAI;wBAiBvB,MAAM;uBACP,MAAM;yBACJ,MAAM;wBA0CP,MAAM;;;wBAAN,MAAM;;AAS5B,QAAA,MAAM,OAAO,KAA6B,CAAC;AAkG3C,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Runner Shim
|
|
3
|
+
*
|
|
4
|
+
* Lightweight test framework that replaces @playwright/test imports.
|
|
5
|
+
* esbuild aliases '@playwright/test' to this file, so test files
|
|
6
|
+
* use our runner without any code changes.
|
|
7
|
+
*
|
|
8
|
+
* Runs inside playwright-crx's service worker where `page`, `context`,
|
|
9
|
+
* and `expect` are already available in scope.
|
|
10
|
+
*/
|
|
11
|
+
// ─── State ─────────────────────────────────────────────────────────────────
|
|
12
|
+
const rootSuite = {
|
|
13
|
+
name: '',
|
|
14
|
+
tests: [],
|
|
15
|
+
beforeAll: [],
|
|
16
|
+
afterAll: [],
|
|
17
|
+
beforeEach: [],
|
|
18
|
+
afterEach: [],
|
|
19
|
+
children: [],
|
|
20
|
+
};
|
|
21
|
+
let currentSuite = rootSuite;
|
|
22
|
+
let hasOnly = false;
|
|
23
|
+
// ─── Registration API ──────────────────────────────────────────────────────
|
|
24
|
+
function test(name, fn) {
|
|
25
|
+
currentSuite.tests.push({ name, fn, only: false, skip: false });
|
|
26
|
+
}
|
|
27
|
+
test.only = (name, fn) => {
|
|
28
|
+
hasOnly = true;
|
|
29
|
+
currentSuite.tests.push({ name, fn, only: true, skip: false });
|
|
30
|
+
};
|
|
31
|
+
test.skip = (name, fn) => {
|
|
32
|
+
currentSuite.tests.push({ name, fn, only: false, skip: true });
|
|
33
|
+
};
|
|
34
|
+
test.describe = (name, fn) => {
|
|
35
|
+
const suite = {
|
|
36
|
+
name,
|
|
37
|
+
tests: [],
|
|
38
|
+
beforeAll: [],
|
|
39
|
+
afterAll: [],
|
|
40
|
+
beforeEach: [],
|
|
41
|
+
afterEach: [],
|
|
42
|
+
children: [],
|
|
43
|
+
};
|
|
44
|
+
currentSuite.children.push(suite);
|
|
45
|
+
const parent = currentSuite;
|
|
46
|
+
currentSuite = suite;
|
|
47
|
+
fn();
|
|
48
|
+
currentSuite = parent;
|
|
49
|
+
};
|
|
50
|
+
test.beforeAll = (fn) => { currentSuite.beforeAll.push(fn); };
|
|
51
|
+
test.afterAll = (fn) => { currentSuite.afterAll.push(fn); };
|
|
52
|
+
test.beforeEach = (fn) => { currentSuite.beforeEach.push(fn); };
|
|
53
|
+
// test.extend() — creates a new test function with custom fixtures
|
|
54
|
+
// The fixture functions receive { page, context, expect } and can wrap them
|
|
55
|
+
test.extend = (fixtures) => {
|
|
56
|
+
const extendedTest = (name, fn) => {
|
|
57
|
+
// Wrap the test fn to apply fixtures
|
|
58
|
+
currentSuite.tests.push({
|
|
59
|
+
name, only: false, skip: false,
|
|
60
|
+
fn: async (baseFixtures) => {
|
|
61
|
+
const extended = { ...baseFixtures };
|
|
62
|
+
// Apply each fixture — call the fixture function, wait for use() callback
|
|
63
|
+
for (const [key, fixtureFn] of Object.entries(fixtures)) {
|
|
64
|
+
if (typeof fixtureFn === 'function') {
|
|
65
|
+
await new Promise((resolve, reject) => {
|
|
66
|
+
const useCallback = async (value) => {
|
|
67
|
+
extended[key] = value;
|
|
68
|
+
resolve();
|
|
69
|
+
};
|
|
70
|
+
// Call fixture fn — it does setup, then calls use(value)
|
|
71
|
+
Promise.resolve(fixtureFn({ ...extended, [key]: extended[key] }, useCallback)).catch(reject);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
await fn(extended);
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
// Copy all methods to the extended test function
|
|
80
|
+
extendedTest.only = test.only;
|
|
81
|
+
extendedTest.skip = test.skip;
|
|
82
|
+
extendedTest.describe = test.describe;
|
|
83
|
+
extendedTest.beforeAll = test.beforeAll;
|
|
84
|
+
extendedTest.afterAll = test.afterAll;
|
|
85
|
+
extendedTest.beforeEach = test.beforeEach;
|
|
86
|
+
extendedTest.afterEach = test.afterEach;
|
|
87
|
+
extendedTest.extend = test.extend;
|
|
88
|
+
return extendedTest;
|
|
89
|
+
};
|
|
90
|
+
test.afterEach = (fn) => { currentSuite.afterEach.push(fn); };
|
|
91
|
+
// ─── Runner ────────────────────────────────────────────────────────────────
|
|
92
|
+
// These globals are provided by playwright-crx's service worker scope.
|
|
93
|
+
// We access them via globalThis so esbuild doesn't try to resolve them.
|
|
94
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
95
|
+
const _page = globalThis.page;
|
|
96
|
+
const _context = globalThis.context;
|
|
97
|
+
const _expect = globalThis.expect;
|
|
98
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
99
|
+
async function runSuite(suite, parentBeforeEach, parentAfterEach, prefix) {
|
|
100
|
+
const results = [];
|
|
101
|
+
const fixtures = { page: _page, context: _context, expect: _expect };
|
|
102
|
+
const allBeforeEach = [...parentBeforeEach, ...suite.beforeEach];
|
|
103
|
+
const allAfterEach = [...suite.afterEach, ...parentAfterEach];
|
|
104
|
+
// beforeAll
|
|
105
|
+
for (const fn of suite.beforeAll) {
|
|
106
|
+
await fn(fixtures);
|
|
107
|
+
}
|
|
108
|
+
// Run tests
|
|
109
|
+
for (const t of suite.tests) {
|
|
110
|
+
const fullName = prefix ? `${prefix} > ${t.name}` : t.name;
|
|
111
|
+
if (t.skip || (hasOnly && !t.only)) {
|
|
112
|
+
results.push({ name: fullName, passed: true, skipped: true, duration: 0 });
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const start = Date.now();
|
|
116
|
+
try {
|
|
117
|
+
for (const fn of allBeforeEach)
|
|
118
|
+
await fn(fixtures);
|
|
119
|
+
await t.fn(fixtures);
|
|
120
|
+
for (const fn of allAfterEach)
|
|
121
|
+
await fn(fixtures);
|
|
122
|
+
results.push({ name: fullName, passed: true, skipped: false, duration: Date.now() - start });
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
results.push({
|
|
126
|
+
name: fullName,
|
|
127
|
+
passed: false,
|
|
128
|
+
skipped: false,
|
|
129
|
+
error: err.message || String(err),
|
|
130
|
+
duration: Date.now() - start,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Run child suites
|
|
135
|
+
for (const child of suite.children) {
|
|
136
|
+
const childPrefix = prefix ? `${prefix} > ${child.name}` : child.name;
|
|
137
|
+
const childResults = await runSuite(child, allBeforeEach, allAfterEach, childPrefix);
|
|
138
|
+
results.push(...childResults);
|
|
139
|
+
}
|
|
140
|
+
// afterAll
|
|
141
|
+
for (const fn of suite.afterAll) {
|
|
142
|
+
await fn(fixtures);
|
|
143
|
+
}
|
|
144
|
+
return results;
|
|
145
|
+
}
|
|
146
|
+
function formatResults(results) {
|
|
147
|
+
const lines = [];
|
|
148
|
+
let passed = 0, failed = 0, skipped = 0;
|
|
149
|
+
for (const r of results) {
|
|
150
|
+
if (r.skipped) {
|
|
151
|
+
lines.push(` - ${r.name} (skipped)`);
|
|
152
|
+
skipped++;
|
|
153
|
+
}
|
|
154
|
+
else if (r.passed) {
|
|
155
|
+
lines.push(` ✓ ${r.name} (${r.duration}ms)`);
|
|
156
|
+
passed++;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
lines.push(` ✗ ${r.name} (${r.duration}ms)`);
|
|
160
|
+
lines.push(` ${r.error}`);
|
|
161
|
+
failed++;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
lines.push('');
|
|
165
|
+
lines.push(` ${passed} passed, ${failed} failed, ${skipped} skipped`);
|
|
166
|
+
return lines.join('\n');
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Run all registered tests and return formatted results.
|
|
170
|
+
* Called after the test file has been evaluated (all test/describe calls done).
|
|
171
|
+
*/
|
|
172
|
+
async function __runTests() {
|
|
173
|
+
const results = await runSuite(rootSuite, [], [], '');
|
|
174
|
+
return formatResults(results);
|
|
175
|
+
}
|
|
176
|
+
// ─── Exports ───────────────────────────────────────────────────────────────
|
|
177
|
+
// Expose __runTests on globalThis so the bundler can call it after the IIFE.
|
|
178
|
+
// esbuild tree-shakes unexported functions, but globalThis assignments survive.
|
|
179
|
+
globalThis.__runTests = __runTests;
|
|
180
|
+
export { test, _expect as expect };
|
|
181
|
+
//# sourceMappingURL=test-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../src/shim/test-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgCH,8EAA8E;AAE9E,MAAM,SAAS,GAAU;IACvB,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,EAAE;IACd,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,IAAI,YAAY,GAAG,SAAS,CAAC;AAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,8EAA8E;AAE9E,SAAS,IAAI,CAAC,IAAY,EAAE,EAAU;IACpC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,IAAI,CAAC,IAAI,GAAG,CAAC,IAAY,EAAE,EAAU,EAAE,EAAE;IACvC,OAAO,GAAG,IAAI,CAAC;IACf,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,IAAI,CAAC,IAAI,GAAG,CAAC,IAAY,EAAE,EAAU,EAAE,EAAE;IACvC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAc,EAAE,EAAE;IAC/C,MAAM,KAAK,GAAU;QACnB,IAAI;QACJ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE;KACb,CAAC;IACF,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,YAAY,CAAC;IAC5B,YAAY,GAAG,KAAK,CAAC;IACrB,EAAE,EAAE,CAAC;IACL,YAAY,GAAG,MAAM,CAAC;AACxB,CAAC,CAAC;AAEF,IAAI,CAAC,SAAS,GAAG,CAAC,EAAU,EAAE,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAU,EAAE,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,IAAI,CAAC,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAExE,mEAAmE;AACnE,4EAA4E;AAC5E,IAAI,CAAC,MAAM,GAAG,CAAC,QAA6B,EAAE,EAAE;IAC9C,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAU,EAAE,EAAE;QAChD,qCAAqC;QACrC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;YAC9B,EAAE,EAAE,KAAK,EAAE,YAAiB,EAAE,EAAE;gBAC9B,MAAM,QAAQ,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;gBACrC,0EAA0E;gBAC1E,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACxD,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;wBACpC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;4BAC1C,MAAM,WAAW,GAAG,KAAK,EAAE,KAAU,EAAE,EAAE;gCACvC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gCACtB,OAAO,EAAE,CAAC;4BACZ,CAAC,CAAC;4BACF,yDAAyD;4BACzD,OAAO,CAAC,OAAO,CAAC,SAAS,CACvB,EAAE,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,EACrC,WAAW,CACZ,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBACnB,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBACD,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;YACrB,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC;IACF,iDAAiD;IACjD,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAC9B,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAC9B,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACtC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACxC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACtC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IAC1C,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACxC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAClC,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AACF,IAAI,CAAC,SAAS,GAAG,CAAC,EAAU,EAAE,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtE,8EAA8E;AAE9E,uEAAuE;AACvE,wEAAwE;AACxE,uDAAuD;AACvD,MAAM,KAAK,GAAI,UAAkB,CAAC,IAAI,CAAC;AACvC,MAAM,QAAQ,GAAI,UAAkB,CAAC,OAAO,CAAC;AAC7C,MAAM,OAAO,GAAI,UAAkB,CAAC,MAAM,CAAC;AAC3C,sDAAsD;AAEtD,KAAK,UAAU,QAAQ,CACrB,KAAY,EACZ,gBAA0B,EAC1B,eAAyB,EACzB,MAAc;IAEd,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACrE,MAAM,aAAa,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,GAAG,eAAe,CAAC,CAAC;IAE9D,YAAY;IACZ,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;IAED,YAAY;IACZ,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3D,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YAC3E,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,KAAK,MAAM,EAAE,IAAI,aAAa;gBAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YACrB,KAAK,MAAM,EAAE,IAAI,YAAY;gBAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAC/F,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,KAAK;gBACd,KAAK,EAAG,GAAa,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;gBAC5C,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC7B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACtE,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,WAAW;IACX,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,OAAqB;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;IAExC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC;YACtC,OAAO,EAAE,CAAC;QACZ,CAAC;aAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC;YAC9C,MAAM,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7B,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,YAAY,MAAM,YAAY,OAAO,UAAU,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,UAAU;IACvB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtD,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,8EAA8E;AAE9E,6EAA6E;AAC7E,gFAAgF;AAC/E,UAAkB,CAAC,UAAU,GAAG,UAAU,CAAC;AAE5C,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface RunOptions {
|
|
2
|
+
testDir: string;
|
|
3
|
+
timeout: number;
|
|
4
|
+
headed: boolean;
|
|
5
|
+
grep?: string;
|
|
6
|
+
retries: number;
|
|
7
|
+
workers: number;
|
|
8
|
+
baseURL?: string;
|
|
9
|
+
forceNode?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface TestResult {
|
|
12
|
+
name: string;
|
|
13
|
+
file: string;
|
|
14
|
+
passed: boolean;
|
|
15
|
+
skipped: boolean;
|
|
16
|
+
error?: string;
|
|
17
|
+
duration: number;
|
|
18
|
+
line?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface DiscoveredTest {
|
|
21
|
+
title: string;
|
|
22
|
+
fullName: string;
|
|
23
|
+
line: number;
|
|
24
|
+
column: number;
|
|
25
|
+
}
|
|
26
|
+
export interface PlaywrightConfig {
|
|
27
|
+
testDir?: string;
|
|
28
|
+
timeout?: number;
|
|
29
|
+
retries?: number;
|
|
30
|
+
workers?: number;
|
|
31
|
+
use?: {
|
|
32
|
+
baseURL?: string;
|
|
33
|
+
storageState?: string;
|
|
34
|
+
[key: string]: unknown;
|
|
35
|
+
};
|
|
36
|
+
globalSetup?: string;
|
|
37
|
+
globalTeardown?: string;
|
|
38
|
+
reporter?: string | string[][] | unknown;
|
|
39
|
+
projects?: unknown[];
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE;QACJ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@playwright-repl/runner",
|
|
3
|
+
"version": "0.21.2",
|
|
4
|
+
"description": "Playwright test utilities — bridge-mode compilation, node detection, and CLI subcommands",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"pw": "./dist/pw-cli.js"
|
|
8
|
+
},
|
|
9
|
+
"exports": {
|
|
10
|
+
".": "./dist/index.js",
|
|
11
|
+
"./dist/bridge-utils.cjs": "./dist/bridge-utils.cjs",
|
|
12
|
+
"./dist/cdpPreload.cjs": "./dist/cdpPreload.cjs"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist/"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc -b tsconfig.build.json && node -e \"const{cpSync}=require('fs');cpSync('../extension/dist','dist/chrome-extension',{recursive:true})\"",
|
|
19
|
+
"test": "vitest run",
|
|
20
|
+
"test:e2e": "node dist/pw-cli.js test",
|
|
21
|
+
"test:benchmark": "echo '--- Standard Playwright ---' && npx playwright test --workers=1 && echo '--- pw ---' && node dist/pw-cli.js test"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@playwright-repl/core": "workspace:*",
|
|
25
|
+
"acorn": "^8.16.0",
|
|
26
|
+
"acorn-walk": "^8.3.5",
|
|
27
|
+
"esbuild": "^0.25.0",
|
|
28
|
+
"magic-string": "^0.30.21"
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"@playwright/test": ">=1.57.0"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@playwright/test": "^1.58.0",
|
|
35
|
+
"typescript": "^5.0.0"
|
|
36
|
+
}
|
|
37
|
+
}
|