patchright-bun 1.58.1 → 1.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +225 -225
- package/ThirdPartyNotices.txt +3918 -5041
- package/cli.js +19 -19
- package/index.d.ts +17 -17
- package/index.js +17 -17
- package/index.mjs +18 -18
- package/jsx-runtime.js +42 -42
- package/jsx-runtime.mjs +21 -21
- package/lib/agents/agentParser.js +89 -89
- package/lib/agents/copilot-setup-steps.yml +34 -34
- package/lib/agents/generateAgents.js +346 -348
- package/lib/agents/playwright-test-coverage.prompt.md +31 -31
- package/lib/agents/playwright-test-generate.prompt.md +8 -8
- package/lib/agents/playwright-test-generator.agent.md +88 -88
- package/lib/agents/playwright-test-heal.prompt.md +6 -6
- package/lib/agents/playwright-test-healer.agent.md +55 -55
- package/lib/agents/playwright-test-plan.prompt.md +9 -9
- package/lib/agents/playwright-test-planner.agent.md +73 -73
- package/lib/common/config.js +281 -282
- package/lib/common/configLoader.js +344 -344
- package/lib/common/esmLoaderHost.js +104 -104
- package/lib/common/expectBundle.js +28 -28
- package/lib/common/expectBundleImpl.js +407 -407
- package/lib/common/fixtures.js +302 -302
- package/lib/common/globals.js +58 -58
- package/lib/common/ipc.js +60 -60
- package/lib/common/poolBuilder.js +85 -85
- package/lib/common/process.js +133 -132
- package/lib/common/suiteUtils.js +140 -140
- package/lib/common/test.js +330 -321
- package/lib/common/testLoader.js +101 -101
- package/lib/common/testType.js +301 -298
- package/lib/common/validators.js +68 -68
- package/lib/errorContext.js +121 -0
- package/lib/fsWatcher.js +67 -67
- package/lib/index.js +764 -726
- package/lib/internalsForTest.js +42 -42
- package/lib/isomorphic/events.js +77 -77
- package/lib/isomorphic/folders.js +30 -30
- package/lib/isomorphic/stringInternPool.js +69 -69
- package/lib/isomorphic/teleReceiver.js +538 -521
- package/lib/isomorphic/teleSuiteUpdater.js +157 -157
- package/lib/isomorphic/testServerConnection.js +223 -225
- package/lib/isomorphic/testServerInterface.js +16 -16
- package/lib/isomorphic/testTree.js +329 -329
- package/lib/isomorphic/types.d.js +16 -16
- package/lib/loader/loaderMain.js +59 -59
- package/lib/matchers/expect.js +311 -311
- package/lib/matchers/matcherHint.js +44 -44
- package/lib/matchers/matchers.js +385 -383
- package/lib/matchers/toBeTruthy.js +75 -75
- package/lib/matchers/toEqual.js +100 -100
- package/lib/matchers/toHaveURL.js +101 -101
- package/lib/matchers/toMatchAriaSnapshot.js +163 -159
- package/lib/matchers/toMatchSnapshot.js +349 -342
- package/lib/matchers/toMatchText.js +99 -99
- package/lib/mcp/test/browserBackend.js +121 -98
- package/lib/mcp/test/generatorTools.js +122 -122
- package/lib/mcp/test/plannerTools.js +145 -145
- package/lib/mcp/test/seed.js +82 -82
- package/lib/mcp/test/streams.js +44 -44
- package/lib/mcp/test/testBackend.js +99 -99
- package/lib/mcp/test/testContext.js +283 -285
- package/lib/mcp/test/testTool.js +30 -30
- package/lib/mcp/test/testTools.js +108 -108
- package/lib/plugins/gitCommitInfoPlugin.js +198 -198
- package/lib/plugins/index.js +28 -28
- package/lib/plugins/webServerPlugin.js +238 -237
- package/lib/program.js +239 -417
- package/lib/reportActions.js +80 -0
- package/lib/reporters/base.js +633 -634
- package/lib/reporters/blob.js +138 -138
- package/lib/reporters/dot.js +99 -99
- package/lib/reporters/empty.js +32 -32
- package/lib/reporters/github.js +127 -128
- package/lib/reporters/html.js +666 -633
- package/lib/reporters/internalReporter.js +138 -138
- package/lib/reporters/json.js +254 -254
- package/lib/reporters/junit.js +321 -232
- package/lib/reporters/line.js +131 -131
- package/lib/reporters/list.js +252 -253
- package/lib/reporters/listModeReporter.js +69 -69
- package/lib/reporters/markdown.js +144 -144
- package/lib/reporters/merge.js +579 -558
- package/lib/reporters/multiplexer.js +116 -112
- package/lib/reporters/reporterV2.js +102 -102
- package/lib/reporters/teleEmitter.js +319 -317
- package/lib/reporters/versions/blobV1.js +16 -16
- package/lib/runner/dispatcher.js +522 -530
- package/lib/runner/failureTracker.js +72 -72
- package/lib/runner/lastRun.js +77 -77
- package/lib/runner/loadUtils.js +340 -334
- package/lib/runner/loaderHost.js +89 -89
- package/lib/runner/processHost.js +180 -180
- package/lib/runner/projectUtils.js +241 -241
- package/lib/runner/rebase.js +189 -189
- package/lib/runner/reporters.js +143 -138
- package/lib/runner/sigIntWatcher.js +96 -96
- package/lib/runner/taskRunner.js +127 -127
- package/lib/runner/tasks.js +413 -410
- package/lib/runner/testGroups.js +125 -125
- package/lib/runner/testRunner.js +398 -398
- package/lib/runner/testServer.js +269 -269
- package/lib/runner/uiModeReporter.js +30 -30
- package/lib/runner/vcs.js +72 -72
- package/lib/runner/watchMode.js +396 -396
- package/lib/runner/workerHost.js +101 -104
- package/lib/testActions.js +220 -0
- package/lib/third_party/pirates.js +62 -62
- package/lib/third_party/tsconfig-loader.js +103 -103
- package/lib/transform/babelBundle.js +43 -46
- package/lib/transform/babelBundleImpl.js +461 -461
- package/lib/transform/compilationCache.js +272 -274
- package/lib/transform/esmLoader.js +105 -103
- package/lib/transform/portTransport.js +67 -67
- package/lib/transform/transform.js +296 -303
- package/lib/util.js +400 -400
- package/lib/utilsBundle.js +43 -50
- package/lib/utilsBundleImpl.js +100 -103
- package/lib/worker/fixtureRunner.js +262 -262
- package/lib/worker/testInfo.js +532 -536
- package/lib/worker/testTracing.js +351 -345
- package/lib/worker/timeoutManager.js +185 -174
- package/lib/worker/util.js +31 -31
- package/lib/worker/workerMain.js +533 -530
- package/package.json +2 -6
- package/test.d.ts +18 -18
- package/test.js +24 -24
- package/test.mjs +34 -34
- package/types/test.d.ts +10322 -10251
- package/types/testReporter.d.ts +822 -822
- package/lib/mcp/browser/browserContextFactory.js +0 -329
- package/lib/mcp/browser/browserServerBackend.js +0 -84
- package/lib/mcp/browser/config.js +0 -421
- package/lib/mcp/browser/context.js +0 -244
- package/lib/mcp/browser/response.js +0 -278
- package/lib/mcp/browser/sessionLog.js +0 -75
- package/lib/mcp/browser/tab.js +0 -343
- package/lib/mcp/browser/tools/common.js +0 -65
- package/lib/mcp/browser/tools/console.js +0 -46
- package/lib/mcp/browser/tools/dialogs.js +0 -60
- package/lib/mcp/browser/tools/evaluate.js +0 -61
- package/lib/mcp/browser/tools/files.js +0 -58
- package/lib/mcp/browser/tools/form.js +0 -63
- package/lib/mcp/browser/tools/install.js +0 -72
- package/lib/mcp/browser/tools/keyboard.js +0 -107
- package/lib/mcp/browser/tools/mouse.js +0 -107
- package/lib/mcp/browser/tools/navigate.js +0 -71
- package/lib/mcp/browser/tools/network.js +0 -63
- package/lib/mcp/browser/tools/open.js +0 -57
- package/lib/mcp/browser/tools/pdf.js +0 -49
- package/lib/mcp/browser/tools/runCode.js +0 -78
- package/lib/mcp/browser/tools/screenshot.js +0 -93
- package/lib/mcp/browser/tools/snapshot.js +0 -173
- package/lib/mcp/browser/tools/tabs.js +0 -67
- package/lib/mcp/browser/tools/tool.js +0 -47
- package/lib/mcp/browser/tools/tracing.js +0 -74
- package/lib/mcp/browser/tools/utils.js +0 -94
- package/lib/mcp/browser/tools/verify.js +0 -143
- package/lib/mcp/browser/tools/wait.js +0 -63
- package/lib/mcp/browser/tools.js +0 -84
- package/lib/mcp/browser/watchdog.js +0 -44
- package/lib/mcp/config.d.js +0 -16
- package/lib/mcp/extension/cdpRelay.js +0 -351
- package/lib/mcp/extension/extensionContextFactory.js +0 -76
- package/lib/mcp/extension/protocol.js +0 -28
- package/lib/mcp/index.js +0 -61
- package/lib/mcp/log.js +0 -35
- package/lib/mcp/program.js +0 -111
- package/lib/mcp/sdk/exports.js +0 -28
- package/lib/mcp/sdk/http.js +0 -152
- package/lib/mcp/sdk/inProcessTransport.js +0 -71
- package/lib/mcp/sdk/server.js +0 -223
- package/lib/mcp/sdk/tool.js +0 -47
- package/lib/mcp/terminal/cli.js +0 -296
- package/lib/mcp/terminal/command.js +0 -56
- package/lib/mcp/terminal/commands.js +0 -333
- package/lib/mcp/terminal/daemon.js +0 -129
- package/lib/mcp/terminal/help.json +0 -32
- package/lib/mcp/terminal/helpGenerator.js +0 -88
- package/lib/mcp/terminal/socketConnection.js +0 -80
- package/lib/runner/storage.js +0 -91
- package/lib/transform/md.js +0 -221
|
@@ -1,99 +1,99 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var toMatchText_exports = {};
|
|
20
|
-
__export(toMatchText_exports, {
|
|
21
|
-
toMatchText: () => toMatchText
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(toMatchText_exports);
|
|
24
|
-
var import_utils = require("patchright-core/lib/utils");
|
|
25
|
-
var import_util = require("../util");
|
|
26
|
-
async function toMatchText(matcherName, receiver, receiverType, query, expected, options = {}) {
|
|
27
|
-
(0, import_util.expectTypes)(receiver, [receiverType], matcherName);
|
|
28
|
-
const locator = receiverType === "Locator" ? receiver : void 0;
|
|
29
|
-
if (!(typeof expected === "string") && !(expected && typeof expected.test === "function")) {
|
|
30
|
-
const errorMessage2 = `Error: ${this.utils.EXPECTED_COLOR("expected")} value must be a string or regular expression
|
|
31
|
-
${this.utils.printWithType("Expected", expected, this.utils.printExpected)}`;
|
|
32
|
-
throw new Error((0, import_utils.formatMatcherMessage)(this.utils, { promise: this.promise, isNot: this.isNot, locator: locator?.toString(), matcherName, expectation: "expected", errorMessage: errorMessage2 }));
|
|
33
|
-
}
|
|
34
|
-
const timeout = options.timeout ?? this.timeout;
|
|
35
|
-
const { matches: pass, received, log, timedOut, errorMessage } = await query(!!this.isNot, timeout);
|
|
36
|
-
if (pass === !this.isNot) {
|
|
37
|
-
return {
|
|
38
|
-
name: matcherName,
|
|
39
|
-
message: () => "",
|
|
40
|
-
pass,
|
|
41
|
-
expected
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
const expectedSuffix = typeof expected === "string" ? options.matchSubstring ? " substring" : "" : " pattern";
|
|
45
|
-
const receivedSuffix = typeof expected === "string" ? options.matchSubstring ? " string" : "" : " string";
|
|
46
|
-
const receivedString = received || "";
|
|
47
|
-
let printedReceived;
|
|
48
|
-
let printedExpected;
|
|
49
|
-
let printedDiff;
|
|
50
|
-
if (pass) {
|
|
51
|
-
if (typeof expected === "string") {
|
|
52
|
-
printedExpected = `Expected${expectedSuffix}: not ${this.utils.printExpected(expected)}`;
|
|
53
|
-
if (!errorMessage) {
|
|
54
|
-
const formattedReceived = (0, import_utils.printReceivedStringContainExpectedSubstring)(this.utils, receivedString, receivedString.indexOf(expected), expected.length);
|
|
55
|
-
printedReceived = `Received${receivedSuffix}: ${formattedReceived}`;
|
|
56
|
-
}
|
|
57
|
-
} else {
|
|
58
|
-
printedExpected = `Expected${expectedSuffix}: not ${this.utils.printExpected(expected)}`;
|
|
59
|
-
if (!errorMessage) {
|
|
60
|
-
const formattedReceived = (0, import_utils.printReceivedStringContainExpectedResult)(this.utils, receivedString, typeof expected.exec === "function" ? expected.exec(receivedString) : null);
|
|
61
|
-
printedReceived = `Received${receivedSuffix}: ${formattedReceived}`;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
} else {
|
|
65
|
-
if (errorMessage)
|
|
66
|
-
printedExpected = `Expected${expectedSuffix}: ${this.utils.printExpected(expected)}`;
|
|
67
|
-
else
|
|
68
|
-
printedDiff = this.utils.printDiffOrStringify(expected, receivedString, `Expected${expectedSuffix}`, `Received${receivedSuffix}`, false);
|
|
69
|
-
}
|
|
70
|
-
const message = () => {
|
|
71
|
-
return (0, import_utils.formatMatcherMessage)(this.utils, {
|
|
72
|
-
promise: this.promise,
|
|
73
|
-
isNot: this.isNot,
|
|
74
|
-
matcherName,
|
|
75
|
-
expectation: "expected",
|
|
76
|
-
locator: locator?.toString(),
|
|
77
|
-
timeout,
|
|
78
|
-
timedOut,
|
|
79
|
-
printedExpected,
|
|
80
|
-
printedReceived,
|
|
81
|
-
printedDiff,
|
|
82
|
-
log,
|
|
83
|
-
errorMessage
|
|
84
|
-
});
|
|
85
|
-
};
|
|
86
|
-
return {
|
|
87
|
-
name: matcherName,
|
|
88
|
-
expected,
|
|
89
|
-
message,
|
|
90
|
-
pass,
|
|
91
|
-
actual: received,
|
|
92
|
-
log,
|
|
93
|
-
timeout: timedOut ? timeout : void 0
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
97
|
-
0 && (module.exports = {
|
|
98
|
-
toMatchText
|
|
99
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var toMatchText_exports = {};
|
|
20
|
+
__export(toMatchText_exports, {
|
|
21
|
+
toMatchText: () => toMatchText
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(toMatchText_exports);
|
|
24
|
+
var import_utils = require("patchright-bun-core/lib/utils");
|
|
25
|
+
var import_util = require("../util");
|
|
26
|
+
async function toMatchText(matcherName, receiver, receiverType, query, expected, options = {}) {
|
|
27
|
+
(0, import_util.expectTypes)(receiver, [receiverType], matcherName);
|
|
28
|
+
const locator = receiverType === "Locator" ? receiver : void 0;
|
|
29
|
+
if (!(typeof expected === "string") && !(expected && typeof expected.test === "function")) {
|
|
30
|
+
const errorMessage2 = `Error: ${this.utils.EXPECTED_COLOR("expected")} value must be a string or regular expression
|
|
31
|
+
${this.utils.printWithType("Expected", expected, this.utils.printExpected)}`;
|
|
32
|
+
throw new Error((0, import_utils.formatMatcherMessage)(this.utils, { promise: this.promise, isNot: this.isNot, locator: locator?.toString(), matcherName, expectation: "expected", errorMessage: errorMessage2 }));
|
|
33
|
+
}
|
|
34
|
+
const timeout = options.timeout ?? this.timeout;
|
|
35
|
+
const { matches: pass, received, log, timedOut, errorMessage } = await query(!!this.isNot, timeout);
|
|
36
|
+
if (pass === !this.isNot) {
|
|
37
|
+
return {
|
|
38
|
+
name: matcherName,
|
|
39
|
+
message: () => "",
|
|
40
|
+
pass,
|
|
41
|
+
expected
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const expectedSuffix = typeof expected === "string" ? options.matchSubstring ? " substring" : "" : " pattern";
|
|
45
|
+
const receivedSuffix = typeof expected === "string" ? options.matchSubstring ? " string" : "" : " string";
|
|
46
|
+
const receivedString = received || "";
|
|
47
|
+
let printedReceived;
|
|
48
|
+
let printedExpected;
|
|
49
|
+
let printedDiff;
|
|
50
|
+
if (pass) {
|
|
51
|
+
if (typeof expected === "string") {
|
|
52
|
+
printedExpected = `Expected${expectedSuffix}: not ${this.utils.printExpected(expected)}`;
|
|
53
|
+
if (!errorMessage) {
|
|
54
|
+
const formattedReceived = (0, import_utils.printReceivedStringContainExpectedSubstring)(this.utils, receivedString, receivedString.indexOf(expected), expected.length);
|
|
55
|
+
printedReceived = `Received${receivedSuffix}: ${formattedReceived}`;
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
printedExpected = `Expected${expectedSuffix}: not ${this.utils.printExpected(expected)}`;
|
|
59
|
+
if (!errorMessage) {
|
|
60
|
+
const formattedReceived = (0, import_utils.printReceivedStringContainExpectedResult)(this.utils, receivedString, typeof expected.exec === "function" ? expected.exec(receivedString) : null);
|
|
61
|
+
printedReceived = `Received${receivedSuffix}: ${formattedReceived}`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
} else {
|
|
65
|
+
if (errorMessage)
|
|
66
|
+
printedExpected = `Expected${expectedSuffix}: ${this.utils.printExpected(expected)}`;
|
|
67
|
+
else
|
|
68
|
+
printedDiff = this.utils.printDiffOrStringify(expected, receivedString, `Expected${expectedSuffix}`, `Received${receivedSuffix}`, false);
|
|
69
|
+
}
|
|
70
|
+
const message = () => {
|
|
71
|
+
return (0, import_utils.formatMatcherMessage)(this.utils, {
|
|
72
|
+
promise: this.promise,
|
|
73
|
+
isNot: this.isNot,
|
|
74
|
+
matcherName,
|
|
75
|
+
expectation: "expected",
|
|
76
|
+
locator: locator?.toString(),
|
|
77
|
+
timeout,
|
|
78
|
+
timedOut,
|
|
79
|
+
printedExpected,
|
|
80
|
+
printedReceived,
|
|
81
|
+
printedDiff,
|
|
82
|
+
log,
|
|
83
|
+
errorMessage
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
return {
|
|
87
|
+
name: matcherName,
|
|
88
|
+
expected,
|
|
89
|
+
message,
|
|
90
|
+
pass,
|
|
91
|
+
actual: received,
|
|
92
|
+
log,
|
|
93
|
+
timeout: timedOut ? timeout : void 0
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
97
|
+
0 && (module.exports = {
|
|
98
|
+
toMatchText
|
|
99
|
+
});
|
|
@@ -1,98 +1,121 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (data.
|
|
46
|
-
if (
|
|
47
|
-
throw new Error("MCP backend is
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
""
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
"
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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 browserBackend_exports = {};
|
|
30
|
+
__export(browserBackend_exports, {
|
|
31
|
+
createCustomMessageHandler: () => createCustomMessageHandler,
|
|
32
|
+
runDaemonForContext: () => runDaemonForContext
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(browserBackend_exports);
|
|
35
|
+
var import_crypto = __toESM(require("crypto"));
|
|
36
|
+
var import_utils = require("patchright-bun-core/lib/utils");
|
|
37
|
+
function createCustomMessageHandler(testInfo, context) {
|
|
38
|
+
let backend;
|
|
39
|
+
const config = { capabilities: ["testing"] };
|
|
40
|
+
let tools;
|
|
41
|
+
return async (data) => {
|
|
42
|
+
if (!tools)
|
|
43
|
+
tools = await import("playwright-core/lib/tools/exports");
|
|
44
|
+
const toolList = tools.filteredTools(config);
|
|
45
|
+
if (data.initialize) {
|
|
46
|
+
if (backend)
|
|
47
|
+
throw new Error("MCP backend is already initialized");
|
|
48
|
+
backend = new tools.BrowserBackend(config, context, toolList);
|
|
49
|
+
await backend.initialize(data.initialize.clientInfo);
|
|
50
|
+
const pausedMessage = await generatePausedMessage(tools, testInfo, context);
|
|
51
|
+
return { initialize: { pausedMessage } };
|
|
52
|
+
}
|
|
53
|
+
if (data.callTool) {
|
|
54
|
+
if (!backend)
|
|
55
|
+
throw new Error("MCP backend is not initialized");
|
|
56
|
+
return { callTool: await backend.callTool(data.callTool.name, data.callTool.arguments) };
|
|
57
|
+
}
|
|
58
|
+
if (data.close) {
|
|
59
|
+
await backend?.dispose();
|
|
60
|
+
backend = void 0;
|
|
61
|
+
return { close: {} };
|
|
62
|
+
}
|
|
63
|
+
throw new Error("Unknown MCP request");
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async function generatePausedMessage(tools, testInfo, context) {
|
|
67
|
+
const lines = [];
|
|
68
|
+
if (testInfo.errors.length) {
|
|
69
|
+
lines.push(`### Paused on error:`);
|
|
70
|
+
for (const error of testInfo.errors)
|
|
71
|
+
lines.push((0, import_utils.stripAnsiEscapes)(error.message || ""));
|
|
72
|
+
} else {
|
|
73
|
+
lines.push(`### Paused at end of test. ready for interaction`);
|
|
74
|
+
}
|
|
75
|
+
for (let i = 0; i < context.pages().length; i++) {
|
|
76
|
+
const page = context.pages()[i];
|
|
77
|
+
const stateSuffix = context.pages().length > 1 ? i + 1 + " of " + context.pages().length : "state";
|
|
78
|
+
lines.push(
|
|
79
|
+
"",
|
|
80
|
+
`### Page ${stateSuffix}`,
|
|
81
|
+
`- Page URL: ${page.url()}`,
|
|
82
|
+
`- Page Title: ${await page.title()}`.trim()
|
|
83
|
+
);
|
|
84
|
+
let console2 = testInfo.errors.length ? await tools.Tab.collectConsoleMessages(page) : [];
|
|
85
|
+
console2 = console2.filter((msg) => msg.type === "error");
|
|
86
|
+
if (console2.length) {
|
|
87
|
+
lines.push("- Console Messages:");
|
|
88
|
+
for (const message of console2)
|
|
89
|
+
lines.push(` - ${message.toString()}`);
|
|
90
|
+
}
|
|
91
|
+
lines.push(
|
|
92
|
+
`- Page Snapshot:`,
|
|
93
|
+
"```yaml",
|
|
94
|
+
await page.ariaSnapshot({ mode: "ai" }),
|
|
95
|
+
"```"
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
lines.push("");
|
|
99
|
+
if (testInfo.errors.length)
|
|
100
|
+
lines.push(`### Task`, `Try recovering from the error prior to continuing`);
|
|
101
|
+
return lines.join("\n");
|
|
102
|
+
}
|
|
103
|
+
async function runDaemonForContext(testInfo, context) {
|
|
104
|
+
if (testInfo._configInternal.configCLIOverrides.debug !== "cli")
|
|
105
|
+
return false;
|
|
106
|
+
const sessionName = `tw-${import_crypto.default.randomBytes(3).toString("hex")}`;
|
|
107
|
+
await context.browser().bind(sessionName, { workspaceDir: testInfo.project.testDir });
|
|
108
|
+
console.log([
|
|
109
|
+
`### The test is currently paused at the start`,
|
|
110
|
+
``,
|
|
111
|
+
`### Debugging Instructions`,
|
|
112
|
+
`- Run "playwright-cli attach ${sessionName}" to attach to this test`
|
|
113
|
+
].join("\n"));
|
|
114
|
+
await context.debugger.requestPause();
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
118
|
+
0 && (module.exports = {
|
|
119
|
+
createCustomMessageHandler,
|
|
120
|
+
runDaemonForContext
|
|
121
|
+
});
|