@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.
Files changed (162) hide show
  1. package/README.md +116 -0
  2. package/dist/args.d.ts +16 -0
  3. package/dist/args.d.ts.map +1 -0
  4. package/dist/args.js +48 -0
  5. package/dist/args.js.map +1 -0
  6. package/dist/bridge-utils.cjs +197 -0
  7. package/dist/bridge-utils.cjs.map +1 -0
  8. package/dist/bridge-utils.d.cts +30 -0
  9. package/dist/bridge-utils.d.cts.map +1 -0
  10. package/dist/browser.d.ts +12 -0
  11. package/dist/browser.d.ts.map +1 -0
  12. package/dist/browser.js +40 -0
  13. package/dist/browser.js.map +1 -0
  14. package/dist/bundler.d.ts +6 -0
  15. package/dist/bundler.d.ts.map +1 -0
  16. package/dist/bundler.js +32 -0
  17. package/dist/bundler.js.map +1 -0
  18. package/dist/cdpPreload.cjs +44 -0
  19. package/dist/cdpPreload.cjs.map +1 -0
  20. package/dist/cdpPreload.d.cts +11 -0
  21. package/dist/cdpPreload.d.cts.map +1 -0
  22. package/dist/chrome-extension/background.js +233485 -0
  23. package/dist/chrome-extension/background.js.map +1 -0
  24. package/dist/chrome-extension/content/picker.js +279 -0
  25. package/dist/chrome-extension/content/recorder.js +475 -0
  26. package/dist/chrome-extension/devtools/console.html +17 -0
  27. package/dist/chrome-extension/devtools/console.js +28 -0
  28. package/dist/chrome-extension/devtools/console.js.map +1 -0
  29. package/dist/chrome-extension/devtools/devtools.html +8 -0
  30. package/dist/chrome-extension/devtools/devtools.js +7 -0
  31. package/dist/chrome-extension/devtools/devtools.js.map +1 -0
  32. package/dist/chrome-extension/icons/dramaturg_icon_128.png +0 -0
  33. package/dist/chrome-extension/icons/dramaturg_icon_16.png +0 -0
  34. package/dist/chrome-extension/icons/dramaturg_icon_32.png +0 -0
  35. package/dist/chrome-extension/icons/dramaturg_icon_48.png +0 -0
  36. package/dist/chrome-extension/index.css +1333 -0
  37. package/dist/chrome-extension/index.js +12462 -0
  38. package/dist/chrome-extension/index.js.map +1 -0
  39. package/dist/chrome-extension/index2.js +27327 -0
  40. package/dist/chrome-extension/index2.js.map +1 -0
  41. package/dist/chrome-extension/manifest.json +46 -0
  42. package/dist/chrome-extension/modulepreload-polyfill.js +30 -0
  43. package/dist/chrome-extension/modulepreload-polyfill.js.map +1 -0
  44. package/dist/chrome-extension/newtab/newtab.html +202 -0
  45. package/dist/chrome-extension/offscreen/offscreen.html +6 -0
  46. package/dist/chrome-extension/offscreen/offscreen.js +54 -0
  47. package/dist/chrome-extension/offscreen/offscreen.js.map +1 -0
  48. package/dist/chrome-extension/panel/panel.html +16 -0
  49. package/dist/chrome-extension/panel/panel.js +2210 -0
  50. package/dist/chrome-extension/panel/panel.js.map +1 -0
  51. package/dist/chrome-extension/preferences/preferences.html +14 -0
  52. package/dist/chrome-extension/preferences/preferences.js +102 -0
  53. package/dist/chrome-extension/preferences/preferences.js.map +1 -0
  54. package/dist/chrome-extension/settings.js +13 -0
  55. package/dist/chrome-extension/settings.js.map +1 -0
  56. package/dist/chrome-extension/sw-debugger-core.js +1127 -0
  57. package/dist/chrome-extension/sw-debugger-core.js.map +1 -0
  58. package/dist/cli.d.ts +14 -0
  59. package/dist/cli.d.ts.map +1 -0
  60. package/dist/cli.js +43 -0
  61. package/dist/cli.js.map +1 -0
  62. package/dist/compiler/classify.d.ts +13 -0
  63. package/dist/compiler/classify.d.ts.map +1 -0
  64. package/dist/compiler/classify.js +143 -0
  65. package/dist/compiler/classify.js.map +1 -0
  66. package/dist/compiler/index.d.ts +24 -0
  67. package/dist/compiler/index.d.ts.map +1 -0
  68. package/dist/compiler/index.js +41 -0
  69. package/dist/compiler/index.js.map +1 -0
  70. package/dist/compiler/parser.d.ts +24 -0
  71. package/dist/compiler/parser.d.ts.map +1 -0
  72. package/dist/compiler/parser.js +77 -0
  73. package/dist/compiler/parser.js.map +1 -0
  74. package/dist/compiler/transform.d.ts +20 -0
  75. package/dist/compiler/transform.d.ts.map +1 -0
  76. package/dist/compiler/transform.js +36 -0
  77. package/dist/compiler/transform.js.map +1 -0
  78. package/dist/compiler.d.ts +24 -0
  79. package/dist/compiler.d.ts.map +1 -0
  80. package/dist/compiler.js +129 -0
  81. package/dist/compiler.js.map +1 -0
  82. package/dist/config.d.ts +6 -0
  83. package/dist/config.d.ts.map +1 -0
  84. package/dist/config.js +16 -0
  85. package/dist/config.js.map +1 -0
  86. package/dist/discover.d.ts +5 -0
  87. package/dist/discover.d.ts.map +1 -0
  88. package/dist/discover.js +46 -0
  89. package/dist/discover.js.map +1 -0
  90. package/dist/execute.d.ts +13 -0
  91. package/dist/execute.d.ts.map +1 -0
  92. package/dist/execute.js +281 -0
  93. package/dist/execute.js.map +1 -0
  94. package/dist/index.d.ts +3 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +2 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/mode-detect.d.ts +21 -0
  99. package/dist/mode-detect.d.ts.map +1 -0
  100. package/dist/mode-detect.js +67 -0
  101. package/dist/mode-detect.js.map +1 -0
  102. package/dist/proxy-page.d.ts +32 -0
  103. package/dist/proxy-page.d.ts.map +1 -0
  104. package/dist/proxy-page.js +192 -0
  105. package/dist/proxy-page.js.map +1 -0
  106. package/dist/pw-cli.d.ts +12 -0
  107. package/dist/pw-cli.d.ts.map +1 -0
  108. package/dist/pw-cli.js +73 -0
  109. package/dist/pw-cli.js.map +1 -0
  110. package/dist/pw-launch.d.ts +15 -0
  111. package/dist/pw-launch.d.ts.map +1 -0
  112. package/dist/pw-launch.js +97 -0
  113. package/dist/pw-launch.js.map +1 -0
  114. package/dist/pw-preload.cjs +164 -0
  115. package/dist/pw-preload.cjs.map +1 -0
  116. package/dist/pw-preload.d.cts +15 -0
  117. package/dist/pw-preload.d.cts.map +1 -0
  118. package/dist/pw-repl-extension.d.ts +12 -0
  119. package/dist/pw-repl-extension.d.ts.map +1 -0
  120. package/dist/pw-repl-extension.js +100 -0
  121. package/dist/pw-repl-extension.js.map +1 -0
  122. package/dist/pw-repl.d.ts +12 -0
  123. package/dist/pw-repl.d.ts.map +1 -0
  124. package/dist/pw-repl.js +111 -0
  125. package/dist/pw-repl.js.map +1 -0
  126. package/dist/pw-worker.cjs +216 -0
  127. package/dist/pw-worker.cjs.map +1 -0
  128. package/dist/pw-worker.d.cts +13 -0
  129. package/dist/pw-worker.d.cts.map +1 -0
  130. package/dist/pw-worker.d.ts +11 -0
  131. package/dist/pw-worker.d.ts.map +1 -0
  132. package/dist/pw-worker.js +51 -0
  133. package/dist/pw-worker.js.map +1 -0
  134. package/dist/run-test.d.ts +22 -0
  135. package/dist/run-test.d.ts.map +1 -0
  136. package/dist/run-test.js +358 -0
  137. package/dist/run-test.js.map +1 -0
  138. package/dist/runner.d.ts +10 -0
  139. package/dist/runner.d.ts.map +1 -0
  140. package/dist/runner.js +82 -0
  141. package/dist/runner.js.map +1 -0
  142. package/dist/shim/alias.d.ts +11 -0
  143. package/dist/shim/alias.d.ts.map +1 -0
  144. package/dist/shim/alias.js +24 -0
  145. package/dist/shim/alias.js.map +1 -0
  146. package/dist/shim/framework.d.ts +11 -0
  147. package/dist/shim/framework.d.ts.map +1 -0
  148. package/dist/shim/framework.js +11 -0
  149. package/dist/shim/framework.js.map +1 -0
  150. package/dist/shim/test-runner-node.d.ts +49 -0
  151. package/dist/shim/test-runner-node.d.ts.map +1 -0
  152. package/dist/shim/test-runner-node.js +191 -0
  153. package/dist/shim/test-runner-node.js.map +1 -0
  154. package/dist/shim/test-runner.d.ts +44 -0
  155. package/dist/shim/test-runner.d.ts.map +1 -0
  156. package/dist/shim/test-runner.js +181 -0
  157. package/dist/shim/test-runner.js.map +1 -0
  158. package/dist/types.d.ts +41 -0
  159. package/dist/types.d.ts.map +1 -0
  160. package/dist/types.js +2 -0
  161. package/dist/types.js.map +1 -0
  162. 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":"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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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
+ }