flashwright 0.0.0-stage → 1.64.1-flashwright.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.
Files changed (65) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +15 -2
  4. package/ThirdPartyNotices.txt +14 -0
  5. package/cli.js +39 -0
  6. package/index.d.ts +17 -0
  7. package/index.js +17 -0
  8. package/index.mjs +18 -0
  9. package/lib/agents/agentParser.js +89 -0
  10. package/lib/agents/copilot-setup-steps.yml +34 -0
  11. package/lib/agents/generateAgents.js +395 -0
  12. package/lib/agents/playwright-test-coverage.prompt.md +31 -0
  13. package/lib/agents/playwright-test-generate.prompt.md +8 -0
  14. package/lib/agents/playwright-test-generator.agent.md +88 -0
  15. package/lib/agents/playwright-test-heal.prompt.md +6 -0
  16. package/lib/agents/playwright-test-healer.agent.md +56 -0
  17. package/lib/agents/playwright-test-plan.prompt.md +9 -0
  18. package/lib/agents/playwright-test-planner.agent.md +74 -0
  19. package/lib/cli/reportActions.js +78 -0
  20. package/lib/cli/testActions.js +218 -0
  21. package/lib/codeCache.js +141 -0
  22. package/lib/codeCache.js.txt +8 -0
  23. package/lib/common/index.js +2974 -0
  24. package/lib/common/index.js.txt +33 -0
  25. package/lib/errorContext.js +129 -0
  26. package/lib/globals.js +58 -0
  27. package/lib/index.js +893 -0
  28. package/lib/isomorphic.js +260 -0
  29. package/lib/isomorphic.js.txt +9 -0
  30. package/lib/loader/loaderProcessEntry.js +34 -0
  31. package/lib/loader/loaderProcessEntry.js.txt +9 -0
  32. package/lib/matchers/expect.js +13496 -0
  33. package/lib/matchers/expect.js.LICENSE +640 -0
  34. package/lib/matchers/expect.js.txt +67 -0
  35. package/lib/mcp/test/browserBackend.js +135 -0
  36. package/lib/mcp/test/generatorTools.js +122 -0
  37. package/lib/mcp/test/plannerTools.js +150 -0
  38. package/lib/mcp/test/seed.js +82 -0
  39. package/lib/mcp/test/streams.js +44 -0
  40. package/lib/mcp/test/testBackend.js +99 -0
  41. package/lib/mcp/test/testContext.js +306 -0
  42. package/lib/mcp/test/testTool.js +30 -0
  43. package/lib/mcp/test/testTools.js +98 -0
  44. package/lib/package.js +47 -0
  45. package/lib/program.js +248 -0
  46. package/lib/runner/index.js +8815 -0
  47. package/lib/runner/index.js.txt +64 -0
  48. package/lib/runner/workerStandby.js +197 -0
  49. package/lib/runner/workerStandby.js.txt +7 -0
  50. package/lib/speculativeBrowser.js +128 -0
  51. package/lib/transform/babelBundle.js +72490 -0
  52. package/lib/transform/babelBundle.js.LICENSE +2384 -0
  53. package/lib/transform/babelBundle.js.txt +328 -0
  54. package/lib/transform/esmLoader.js +8090 -0
  55. package/lib/transform/esmLoader.js.LICENSE +355 -0
  56. package/lib/transform/esmLoader.js.txt +60 -0
  57. package/lib/util.js +373 -0
  58. package/lib/worker/workerProcessEntry.js +1915 -0
  59. package/lib/worker/workerProcessEntry.js.txt +22 -0
  60. package/package.json +63 -4
  61. package/test.d.ts +18 -0
  62. package/test.js +40 -0
  63. package/test.mjs +35 -0
  64. package/types/test.d.ts +11316 -0
  65. package/types/testReporter.d.ts +950 -0
@@ -0,0 +1,64 @@
1
+ # packages/playwright/lib/runner/index.js
2
+ # total: 321.2 KB
3
+
4
+ ## Inlined (49)
5
+ 1.3 KB packages/playwright/src/isomorphic/events.ts
6
+ 0.1 KB packages/playwright/src/isomorphic/folders.ts
7
+ 0.9 KB packages/playwright/src/isomorphic/stringInternPool.ts
8
+ 16.1 KB packages/playwright/src/isomorphic/teleReceiver.ts
9
+ 3.9 KB packages/playwright/src/isomorphic/teleSuiteUpdater.ts
10
+ 4.8 KB packages/playwright/src/isomorphic/testServerConnection.ts
11
+ 0.0 KB packages/playwright/src/isomorphic/testTree.ts
12
+ 5.4 KB packages/playwright/src/plugins/gitCommitInfoPlugin.ts
13
+ 8.6 KB packages/playwright/src/plugins/webServerPlugin.ts
14
+ 21.7 KB packages/playwright/src/reporters/base.ts
15
+ 4.0 KB packages/playwright/src/reporters/blob.ts
16
+ 6.6 KB packages/playwright/src/reporters/coverage.ts
17
+ 2.5 KB packages/playwright/src/reporters/dot.ts
18
+ 0.1 KB packages/playwright/src/reporters/empty.ts
19
+ 3.7 KB packages/playwright/src/reporters/github.ts
20
+ 26.6 KB packages/playwright/src/reporters/html.ts
21
+ 3.3 KB packages/playwright/src/reporters/internalReporter.ts
22
+ 7.2 KB packages/playwright/src/reporters/json.ts
23
+ 10.5 KB packages/playwright/src/reporters/junit.ts
24
+ 4.0 KB packages/playwright/src/reporters/line.ts
25
+ 9.6 KB packages/playwright/src/reporters/list.ts
26
+ 1.4 KB packages/playwright/src/reporters/listModeReporter.ts
27
+ 18.5 KB packages/playwright/src/reporters/merge.ts
28
+ 3.0 KB packages/playwright/src/reporters/multiplexer.ts
29
+ 9.0 KB packages/playwright/src/reporters/perfetto.ts
30
+ 2.1 KB packages/playwright/src/reporters/reporterV2.ts
31
+ 8.8 KB packages/playwright/src/reporters/teleEmitter.ts
32
+ 20.6 KB packages/playwright/src/runner/dispatcher.ts
33
+ 1.8 KB packages/playwright/src/runner/fsWatcher.ts
34
+ 0.5 KB packages/playwright/src/runner/index.ts
35
+ 1.7 KB packages/playwright/src/runner/lastRun.ts
36
+ 1.6 KB packages/playwright/src/runner/loaderHost.ts
37
+ 13.3 KB packages/playwright/src/runner/loadUtils.ts
38
+ 6.3 KB packages/playwright/src/runner/processHost.ts
39
+ 7.9 KB packages/playwright/src/runner/projectUtils.ts
40
+ 5.5 KB packages/playwright/src/runner/rebase.ts
41
+ 3.4 KB packages/playwright/src/runner/reporters.ts
42
+ 2.4 KB packages/playwright/src/runner/reporterTestRun.ts
43
+ 1.6 KB packages/playwright/src/runner/sigIntWatcher.ts
44
+ 3.5 KB packages/playwright/src/runner/taskRunner.ts
45
+ 15.9 KB packages/playwright/src/runner/tasks.ts
46
+ 2.6 KB packages/playwright/src/runner/testDurations.ts
47
+ 4.4 KB packages/playwright/src/runner/testGroups.ts
48
+ 13.2 KB packages/playwright/src/runner/testRunner.ts
49
+ 9.3 KB packages/playwright/src/runner/testServer.ts
50
+ 0.2 KB packages/playwright/src/runner/uiModeReporter.ts
51
+ 1.7 KB packages/playwright/src/runner/vcs.ts
52
+ 13.0 KB packages/playwright/src/runner/watchMode.ts
53
+ 2.1 KB packages/playwright/src/runner/workerHost.ts
54
+
55
+ ## External (9)
56
+ ../common
57
+ ../loader/loaderProcessEntry.js
58
+ ../transform/babelBundle
59
+ ../util
60
+ ../worker/workerProcessEntry.js
61
+ ./workerStandby
62
+ playwright-core
63
+ playwright-core/lib/coreBundle
64
+ playwright-core/lib/utilsBundle
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // packages/playwright/src/runner/workerStandby.ts
31
+ var workerStandby_exports = {};
32
+ __export(workerStandby_exports, {
33
+ discardStandbys: () => discardStandbys,
34
+ ensureStandbys: () => ensureStandbys,
35
+ ensureStandbysForConfig: () => ensureStandbysForConfig,
36
+ prespawnWorkerForTestCommand: () => prespawnWorkerForTestCommand,
37
+ recordWorkerCount: () => recordWorkerCount,
38
+ recordWorkerRestart: () => recordWorkerRestart,
39
+ takeStandby: () => takeStandby,
40
+ workerEntryScript: () => workerEntryScript,
41
+ workerEnv: () => workerEnv
42
+ });
43
+ module.exports = __toCommonJS(workerStandby_exports);
44
+ var import_child_process = __toESM(require("child_process"));
45
+ var import_crypto = __toESM(require("crypto"));
46
+ var import_fs = __toESM(require("fs"));
47
+ var import_os = __toESM(require("os"));
48
+ var import_path = __toESM(require("path"));
49
+ var standbys = [];
50
+ var enabled = false;
51
+ var hintKey;
52
+ var workerCount = 0;
53
+ var restartCount = 0;
54
+ var keepSpare = false;
55
+ var cpus = 1;
56
+ var hadHint = false;
57
+ var loadTimeEnvPattern = /^(PW|PLAYWRIGHT|DEBUG|NODE|FORCE_COLOR|TS_NODE|TSX)/;
58
+ function workerEntryScript() {
59
+ return import_path.default.join(__dirname, "..", "worker", "workerProcessEntry.js");
60
+ }
61
+ function workerEnv(extraEnv) {
62
+ return {
63
+ ...process.env,
64
+ ...extraEnv,
65
+ FORCE_COLOR: "1",
66
+ DEBUG_COLORS: process.env.DEBUG_COLORS === void 0 ? "1" : process.env.DEBUG_COLORS
67
+ };
68
+ }
69
+ function prespawnWorkerForTestCommand(argv) {
70
+ if (enabled || argv[2] !== "test" || process.env.PW_DISABLE_WORKER_STANDBY || process.env.PWDEBUG)
71
+ return;
72
+ const interactive = ["--list", "--ui", "--ui-host", "--ui-port", "--debug", "-h", "--help", "--last-failed"];
73
+ if (argv.some((arg) => interactive.includes(arg.split("=")[0])))
74
+ return;
75
+ enabled = true;
76
+ hintKey = workerCountHintKey(argv);
77
+ process.env.FLASHWRIGHT_CONTEXT_HINT_KEY = hintKey;
78
+ cpus = import_os.default.availableParallelism?.() ?? import_os.default.cpus().length;
79
+ const hint = readWorkerCountHints()[hintKey];
80
+ hadHint = !!hint;
81
+ const count = Math.max(1, Math.min(hint?.workers || 1, cpus));
82
+ keepSpare = !!hint?.restarts && count < cpus;
83
+ for (let i = 0; i < count + (keepSpare ? 1 : 0); i++)
84
+ spawnStandby();
85
+ process.once("exit", () => {
86
+ discardStandbys();
87
+ writeWorkerCountHint();
88
+ });
89
+ }
90
+ function spawnStandby(waitsForNextPhase = false) {
91
+ const entryScript = workerEntryScript();
92
+ const env = { ...workerEnv({}), PLAYWRIGHT_TEST: "1", FLASHWRIGHT_SPECULATIVE_BROWSER: waitsForNextPhase ? "next-phase" : "1" };
93
+ const child = import_child_process.default.fork(entryScript, {
94
+ detached: false,
95
+ env,
96
+ stdio: ["ignore", "pipe", "pipe", "ipc"]
97
+ });
98
+ child.on("error", () => {
99
+ });
100
+ const ready = new Promise((resolve) => {
101
+ const onMessage = (message) => {
102
+ if (message?.method === "ready") {
103
+ child.off("message", onMessage);
104
+ resolve(true);
105
+ }
106
+ };
107
+ child.on("message", onMessage);
108
+ child.once("exit", () => resolve(false));
109
+ });
110
+ standbys.push({ child, entryScript, env, ready });
111
+ child.unref();
112
+ child.channel?.unref?.();
113
+ }
114
+ function recordWorkerRestart(moreTestsToRun) {
115
+ restartCount++;
116
+ if (!moreTestsToRun)
117
+ return;
118
+ keepSpare = keepSpare || workerCount < cpus;
119
+ setImmediate(() => ensureStandbys(1));
120
+ }
121
+ function ensureStandbys(count, forNextPhase = false) {
122
+ if (!enabled)
123
+ return;
124
+ while (standbys.length < count)
125
+ spawnStandby(forNextPhase);
126
+ }
127
+ function ensureStandbysForConfig(configuredWorkers) {
128
+ if (enabled && !hadHint)
129
+ ensureStandbys(Math.min(configuredWorkers, cpus));
130
+ }
131
+ function recordWorkerCount(count) {
132
+ workerCount = Math.max(workerCount, count);
133
+ }
134
+ function discardStandbys() {
135
+ for (const standby of standbys.splice(0))
136
+ release(standby.child);
137
+ }
138
+ function release(child) {
139
+ if (child.connected)
140
+ child.disconnect();
141
+ }
142
+ async function takeStandby(entryScript, env) {
143
+ const standby = standbys.shift();
144
+ if (!standby)
145
+ return;
146
+ if (keepSpare)
147
+ setImmediate(() => ensureStandbys(1));
148
+ const keys = /* @__PURE__ */ new Set([...Object.keys(env), ...Object.keys(standby.env)]);
149
+ const compatible = standby.entryScript === entryScript && [...keys].every((key) => !loadTimeEnvPattern.test(key) || env[key] === standby.env[key]);
150
+ if (!compatible || !await standby.ready) {
151
+ release(standby.child);
152
+ return;
153
+ }
154
+ standby.child.ref();
155
+ standby.child.channel?.ref?.();
156
+ return standby.child;
157
+ }
158
+ var hintFile = import_path.default.join(import_os.default.tmpdir(), "flashwright-worker-hints.json");
159
+ var maxHints = 500;
160
+ function workerCountHintKey(argv) {
161
+ const configIndex = argv.findIndex((arg) => arg === "-c" || arg === "--config" || arg.startsWith("--config="));
162
+ const config = configIndex === -1 ? "" : argv[configIndex].startsWith("--config=") ? argv[configIndex] : argv[configIndex + 1];
163
+ const workers = argv.find((arg) => arg.startsWith("--workers") || arg === "-j") ?? "";
164
+ return import_crypto.default.createHash("sha1").update([process.cwd(), config, workers].join("\0")).digest("hex").slice(0, 16);
165
+ }
166
+ function readWorkerCountHints() {
167
+ try {
168
+ return JSON.parse(import_fs.default.readFileSync(hintFile, "utf8"));
169
+ } catch {
170
+ return {};
171
+ }
172
+ }
173
+ function writeWorkerCountHint() {
174
+ if (!workerCount || !hintKey)
175
+ return;
176
+ try {
177
+ const hints = readWorkerCountHints();
178
+ hints[hintKey] = { workers: workerCount, restarts: restartCount, usedAt: Date.now() };
179
+ const recent = Object.entries(hints).sort((a, b) => b[1].usedAt - a[1].usedAt).slice(0, maxHints);
180
+ const temporary = `${hintFile}.${process.pid}`;
181
+ import_fs.default.writeFileSync(temporary, JSON.stringify(Object.fromEntries(recent)));
182
+ import_fs.default.renameSync(temporary, hintFile);
183
+ } catch {
184
+ }
185
+ }
186
+ // Annotate the CommonJS export names for ESM import in node:
187
+ 0 && (module.exports = {
188
+ discardStandbys,
189
+ ensureStandbys,
190
+ ensureStandbysForConfig,
191
+ prespawnWorkerForTestCommand,
192
+ recordWorkerCount,
193
+ recordWorkerRestart,
194
+ takeStandby,
195
+ workerEntryScript,
196
+ workerEnv
197
+ });
@@ -0,0 +1,7 @@
1
+ # packages/playwright/lib/runner/workerStandby.js
2
+ # total: 7.2 KB
3
+
4
+ ## Inlined (1)
5
+ 5.5 KB packages/playwright/src/runner/workerStandby.ts
6
+
7
+ ## External (0)
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var speculativeBrowser_exports = {};
30
+ __export(speculativeBrowser_exports, {
31
+ launchSpeculativeBrowser: () => launchSpeculativeBrowser,
32
+ prepareSpeculativeContext: () => prepareSpeculativeContext,
33
+ rememberRecycledContext: () => rememberRecycledContext,
34
+ takeSpeculativeBrowser: () => takeSpeculativeBrowser
35
+ });
36
+ module.exports = __toCommonJS(speculativeBrowser_exports);
37
+ var import_fs = __toESM(require("fs"));
38
+ var import_os = __toESM(require("os"));
39
+ var import_path = __toESM(require("path"));
40
+ var import_util = require("util");
41
+ const speculativeOptions = { handleSIGINT: false, headless: true, ...process.env.FLASHWRIGHT_ISOLATION === "strict" ? {} : { recycleContexts: true } };
42
+ const speculativeKey = /* @__PURE__ */ Symbol.for("flashwright.speculativeBrowser");
43
+ function launchSpeculativeBrowser() {
44
+ const playwright = require("playwright-core");
45
+ const launch = playwright.chromium.launch(speculativeOptions).catch(() => void 0);
46
+ globalThis[speculativeKey] = launch;
47
+ return launch;
48
+ }
49
+ function prepareSpeculativeContext() {
50
+ const launch = globalThis[speculativeKey];
51
+ const hint = speculativeOptions.recycleContexts ? readContextHint() : void 0;
52
+ if (!launch || !hint)
53
+ return;
54
+ globalThis[speculativeKey] = launch.then(async (browser) => {
55
+ const serverBrowser = browser && browser._connection.toImpl?.(browser);
56
+ await serverBrowser?.prepareRecycledContext(hint.params, { storageState: hint.storageState }).catch(() => {
57
+ });
58
+ return browser;
59
+ });
60
+ }
61
+ const contextHintFile = import_path.default.join(import_os.default.tmpdir(), "flashwright-context-hints.json");
62
+ const maxContextHints = 200;
63
+ let rememberedContextHint = false;
64
+ function readContextHints() {
65
+ try {
66
+ return JSON.parse(import_fs.default.readFileSync(contextHintFile, "utf8"));
67
+ } catch {
68
+ return {};
69
+ }
70
+ }
71
+ function readContextHint() {
72
+ const key = process.env.FLASHWRIGHT_CONTEXT_HINT_KEY;
73
+ return key ? readContextHints()[key] : void 0;
74
+ }
75
+ function rememberRecycledContext(browser) {
76
+ const key = process.env.FLASHWRIGHT_CONTEXT_HINT_KEY;
77
+ const params = { ...browser._lastRecycleParams };
78
+ const storageState = !!params.storageState;
79
+ delete params.storageState;
80
+ const mayHoldSecrets = params.httpCredentials || params.extraHTTPHeaders?.length || params.proxy || params.clientCertificates?.length;
81
+ if (rememberedContextHint || !key || !Object.keys(params).length || mayHoldSecrets || !isPlainJSON(params))
82
+ return;
83
+ rememberedContextHint = true;
84
+ try {
85
+ const hints = readContextHints();
86
+ if (JSON.stringify(hints[key]?.params) === JSON.stringify(params) && hints[key]?.storageState === storageState)
87
+ return;
88
+ hints[key] = { params, storageState, usedAt: Date.now() };
89
+ const recent = Object.entries(hints).sort((a, b) => b[1].usedAt - a[1].usedAt).slice(0, maxContextHints);
90
+ const temporary = `${contextHintFile}.${process.pid}`;
91
+ import_fs.default.writeFileSync(temporary, JSON.stringify(Object.fromEntries(recent)), { mode: 384 });
92
+ import_fs.default.renameSync(temporary, contextHintFile);
93
+ } catch {
94
+ }
95
+ }
96
+ function isPlainJSON(value) {
97
+ if (value === null || ["string", "number", "boolean", "undefined"].includes(typeof value))
98
+ return true;
99
+ if (Array.isArray(value))
100
+ return value.every(isPlainJSON);
101
+ return typeof value === "object" && Object.getPrototypeOf(value) === Object.prototype && Object.values(value).every(isPlainJSON);
102
+ }
103
+ async function takeSpeculativeBrowser(browserName, options) {
104
+ const launch = globalThis[speculativeKey];
105
+ if (!launch)
106
+ return;
107
+ delete globalThis[speculativeKey];
108
+ const { tracesDir, artifactsDir, ...rest } = options;
109
+ const browser = await launch;
110
+ if (!browser)
111
+ return;
112
+ const serverBrowser = browser._connection.toImpl?.(browser);
113
+ if (browserName !== "chromium" || !(0, import_util.isDeepStrictEqual)(rest, speculativeOptions) || !serverBrowser || !artifactsDir) {
114
+ browser._wrapApiCall(() => browser.close(), { internal: true }).catch(() => {
115
+ });
116
+ return;
117
+ }
118
+ await serverBrowser.setOutputDirs(artifactsDir, tracesDir || artifactsDir);
119
+ browser._connectToBrowserType(browser.browserType(), options, void 0);
120
+ return browser;
121
+ }
122
+ // Annotate the CommonJS export names for ESM import in node:
123
+ 0 && (module.exports = {
124
+ launchSpeculativeBrowser,
125
+ prepareSpeculativeContext,
126
+ rememberRecycledContext,
127
+ takeSpeculativeBrowser
128
+ });