@smoothdeploy/playwright 1.58.4 → 1.60.0-beta-1780662356000

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 (182) hide show
  1. package/ThirdPartyNotices.txt +8 -5036
  2. package/lib/agents/agentParser.js +2 -2
  3. package/lib/agents/generateAgents.js +21 -22
  4. package/lib/agents/playwright-test-healer.agent.md +1 -0
  5. package/lib/agents/playwright-test-planner.agent.md +2 -1
  6. package/lib/cli/reportActions.js +78 -0
  7. package/lib/cli/testActions.js +211 -0
  8. package/lib/common/index.js +2898 -0
  9. package/lib/common/index.js.txt +35 -0
  10. package/lib/errorContext.js +130 -0
  11. package/lib/index.js +258 -206
  12. package/lib/{isomorphic/testServerConnection.js → isomorphic.js} +70 -35
  13. package/lib/isomorphic.js.txt +9 -0
  14. package/lib/loader/loaderProcessEntry.js +34 -0
  15. package/lib/loader/loaderProcessEntry.js.txt +9 -0
  16. package/lib/matchers/expect.js +12988 -249
  17. package/lib/matchers/expect.js.LICENSE +693 -0
  18. package/lib/matchers/expect.js.txt +72 -0
  19. package/lib/mcp/test/browserBackend.js +49 -22
  20. package/lib/mcp/test/generatorTools.js +16 -16
  21. package/lib/mcp/test/plannerTools.js +25 -20
  22. package/lib/mcp/test/seed.js +7 -7
  23. package/lib/mcp/test/testBackend.js +30 -30
  24. package/lib/mcp/test/testContext.js +50 -33
  25. package/lib/mcp/test/testTools.js +15 -25
  26. package/lib/{internalsForTest.js → package.js} +13 -8
  27. package/lib/program.js +63 -263
  28. package/lib/runner/index.js +8339 -0
  29. package/lib/runner/index.js.txt +60 -0
  30. package/lib/transform/babelBundle.js +71002 -18
  31. package/lib/transform/babelBundle.js.LICENSE +2359 -0
  32. package/lib/transform/babelBundle.js.txt +325 -0
  33. package/lib/transform/esmLoader.js +5884 -30
  34. package/lib/transform/esmLoader.js.LICENSE +335 -0
  35. package/lib/transform/esmLoader.js.txt +55 -0
  36. package/lib/util.js +37 -34
  37. package/lib/worker/workerProcessEntry.js +3251 -0
  38. package/lib/worker/workerProcessEntry.js.txt +24 -0
  39. package/package.json +5 -16
  40. package/test.mjs +1 -0
  41. package/types/test.d.ts +172 -12
  42. package/types/testReporter.d.ts +7 -5
  43. package/lib/common/config.js +0 -282
  44. package/lib/common/configLoader.js +0 -344
  45. package/lib/common/esmLoaderHost.js +0 -104
  46. package/lib/common/expectBundle.js +0 -28
  47. package/lib/common/expectBundleImpl.js +0 -407
  48. package/lib/common/fixtures.js +0 -302
  49. package/lib/common/ipc.js +0 -60
  50. package/lib/common/poolBuilder.js +0 -85
  51. package/lib/common/process.js +0 -132
  52. package/lib/common/suiteUtils.js +0 -140
  53. package/lib/common/test.js +0 -321
  54. package/lib/common/testLoader.js +0 -101
  55. package/lib/common/testType.js +0 -298
  56. package/lib/common/validators.js +0 -68
  57. package/lib/fsWatcher.js +0 -67
  58. package/lib/isomorphic/events.js +0 -77
  59. package/lib/isomorphic/folders.js +0 -30
  60. package/lib/isomorphic/stringInternPool.js +0 -69
  61. package/lib/isomorphic/teleReceiver.js +0 -521
  62. package/lib/isomorphic/teleSuiteUpdater.js +0 -157
  63. package/lib/isomorphic/testServerInterface.js +0 -16
  64. package/lib/isomorphic/testTree.js +0 -329
  65. package/lib/isomorphic/types.d.js +0 -16
  66. package/lib/loader/loaderMain.js +0 -59
  67. package/lib/matchers/matcherHint.js +0 -44
  68. package/lib/matchers/matchers.js +0 -383
  69. package/lib/matchers/toBeTruthy.js +0 -75
  70. package/lib/matchers/toEqual.js +0 -100
  71. package/lib/matchers/toHaveURL.js +0 -101
  72. package/lib/matchers/toMatchAriaSnapshot.js +0 -159
  73. package/lib/matchers/toMatchSnapshot.js +0 -342
  74. package/lib/matchers/toMatchText.js +0 -99
  75. package/lib/mcp/browser/browserContextFactory.js +0 -329
  76. package/lib/mcp/browser/browserServerBackend.js +0 -84
  77. package/lib/mcp/browser/config.js +0 -421
  78. package/lib/mcp/browser/context.js +0 -244
  79. package/lib/mcp/browser/response.js +0 -278
  80. package/lib/mcp/browser/sessionLog.js +0 -75
  81. package/lib/mcp/browser/tab.js +0 -343
  82. package/lib/mcp/browser/tools/common.js +0 -65
  83. package/lib/mcp/browser/tools/console.js +0 -46
  84. package/lib/mcp/browser/tools/dialogs.js +0 -60
  85. package/lib/mcp/browser/tools/evaluate.js +0 -61
  86. package/lib/mcp/browser/tools/files.js +0 -58
  87. package/lib/mcp/browser/tools/form.js +0 -63
  88. package/lib/mcp/browser/tools/install.js +0 -72
  89. package/lib/mcp/browser/tools/keyboard.js +0 -107
  90. package/lib/mcp/browser/tools/mouse.js +0 -107
  91. package/lib/mcp/browser/tools/navigate.js +0 -71
  92. package/lib/mcp/browser/tools/network.js +0 -63
  93. package/lib/mcp/browser/tools/open.js +0 -57
  94. package/lib/mcp/browser/tools/pdf.js +0 -49
  95. package/lib/mcp/browser/tools/runCode.js +0 -78
  96. package/lib/mcp/browser/tools/screenshot.js +0 -93
  97. package/lib/mcp/browser/tools/snapshot.js +0 -173
  98. package/lib/mcp/browser/tools/tabs.js +0 -67
  99. package/lib/mcp/browser/tools/tool.js +0 -47
  100. package/lib/mcp/browser/tools/tracing.js +0 -74
  101. package/lib/mcp/browser/tools/utils.js +0 -94
  102. package/lib/mcp/browser/tools/verify.js +0 -143
  103. package/lib/mcp/browser/tools/wait.js +0 -63
  104. package/lib/mcp/browser/tools.js +0 -84
  105. package/lib/mcp/browser/watchdog.js +0 -44
  106. package/lib/mcp/config.d.js +0 -16
  107. package/lib/mcp/extension/cdpRelay.js +0 -351
  108. package/lib/mcp/extension/extensionContextFactory.js +0 -76
  109. package/lib/mcp/extension/protocol.js +0 -28
  110. package/lib/mcp/index.js +0 -61
  111. package/lib/mcp/log.js +0 -35
  112. package/lib/mcp/program.js +0 -111
  113. package/lib/mcp/sdk/exports.js +0 -28
  114. package/lib/mcp/sdk/http.js +0 -152
  115. package/lib/mcp/sdk/inProcessTransport.js +0 -71
  116. package/lib/mcp/sdk/server.js +0 -223
  117. package/lib/mcp/sdk/tool.js +0 -47
  118. package/lib/mcp/terminal/cli.js +0 -296
  119. package/lib/mcp/terminal/command.js +0 -56
  120. package/lib/mcp/terminal/commands.js +0 -333
  121. package/lib/mcp/terminal/daemon.js +0 -129
  122. package/lib/mcp/terminal/help.json +0 -32
  123. package/lib/mcp/terminal/helpGenerator.js +0 -88
  124. package/lib/mcp/terminal/socketConnection.js +0 -80
  125. package/lib/plugins/gitCommitInfoPlugin.js +0 -198
  126. package/lib/plugins/index.js +0 -28
  127. package/lib/plugins/webServerPlugin.js +0 -237
  128. package/lib/reporters/base.js +0 -634
  129. package/lib/reporters/blob.js +0 -138
  130. package/lib/reporters/dot.js +0 -99
  131. package/lib/reporters/empty.js +0 -32
  132. package/lib/reporters/github.js +0 -128
  133. package/lib/reporters/html.js +0 -633
  134. package/lib/reporters/internalReporter.js +0 -138
  135. package/lib/reporters/json.js +0 -254
  136. package/lib/reporters/junit.js +0 -232
  137. package/lib/reporters/line.js +0 -131
  138. package/lib/reporters/list.js +0 -253
  139. package/lib/reporters/listModeReporter.js +0 -69
  140. package/lib/reporters/markdown.js +0 -144
  141. package/lib/reporters/merge.js +0 -558
  142. package/lib/reporters/multiplexer.js +0 -112
  143. package/lib/reporters/reporterV2.js +0 -102
  144. package/lib/reporters/smoothdeploy.js +0 -333
  145. package/lib/reporters/teleEmitter.js +0 -317
  146. package/lib/reporters/versions/blobV1.js +0 -16
  147. package/lib/runner/dispatcher.js +0 -531
  148. package/lib/runner/failureTracker.js +0 -72
  149. package/lib/runner/lastRun.js +0 -77
  150. package/lib/runner/loadUtils.js +0 -334
  151. package/lib/runner/loaderHost.js +0 -89
  152. package/lib/runner/processHost.js +0 -180
  153. package/lib/runner/projectUtils.js +0 -241
  154. package/lib/runner/rebase.js +0 -189
  155. package/lib/runner/reporters.js +0 -140
  156. package/lib/runner/sigIntWatcher.js +0 -96
  157. package/lib/runner/storage.js +0 -91
  158. package/lib/runner/taskRunner.js +0 -127
  159. package/lib/runner/tasks.js +0 -410
  160. package/lib/runner/testGroups.js +0 -125
  161. package/lib/runner/testRunner.js +0 -398
  162. package/lib/runner/testServer.js +0 -269
  163. package/lib/runner/uiModeReporter.js +0 -30
  164. package/lib/runner/vcs.js +0 -72
  165. package/lib/runner/watchMode.js +0 -396
  166. package/lib/runner/workerHost.js +0 -104
  167. package/lib/third_party/pirates.js +0 -62
  168. package/lib/third_party/tsconfig-loader.js +0 -103
  169. package/lib/transform/babelBundleImpl.js +0 -461
  170. package/lib/transform/compilationCache.js +0 -274
  171. package/lib/transform/md.js +0 -221
  172. package/lib/transform/portTransport.js +0 -67
  173. package/lib/transform/transform.js +0 -303
  174. package/lib/utilsBundle.js +0 -50
  175. package/lib/utilsBundleImpl.js +0 -103
  176. package/lib/worker/fixtureRunner.js +0 -262
  177. package/lib/worker/testInfo.js +0 -536
  178. package/lib/worker/testTracing.js +0 -345
  179. package/lib/worker/timeoutManager.js +0 -174
  180. package/lib/worker/util.js +0 -31
  181. package/lib/worker/workerMain.js +0 -530
  182. /package/lib/{common/globals.js → globals.js} +0 -0
@@ -36,17 +36,17 @@ module.exports = __toCommonJS(testContext_exports);
36
36
  var import_fs = __toESM(require("fs"));
37
37
  var import_os = __toESM(require("os"));
38
38
  var import_path = __toESM(require("path"));
39
- var import_utils = require("playwright-core/lib/utils");
40
- var import_base = require("../../reporters/base");
41
- var import_list = __toESM(require("../../reporters/list"));
39
+ var import_coreBundle = require("playwright-core/lib/coreBundle");
40
+ var import_runner = require("../../runner");
42
41
  var import_streams = require("./streams");
43
42
  var import_util = require("../../util");
44
- var import_testRunner = require("../../runner/testRunner");
45
43
  var import_seed = require("./seed");
46
- var import_exports = require("../sdk/exports");
47
- var import_configLoader = require("../../common/configLoader");
48
- var import_response = require("../browser/response");
49
- var import_log = require("../log");
44
+ var import_common = require("../../common");
45
+ const debug = require("playwright-core/lib/utilsBundle").debug;
46
+ const { noColors } = require("playwright-core/lib/coreBundle").iso;
47
+ const { ManualPromise, signalToPromise } = require("playwright-core/lib/coreBundle").iso;
48
+ const { escapeRegExp } = require("playwright-core/lib/coreBundle").iso;
49
+ const { toPosixPath } = require("playwright-core/lib/coreBundle").utils;
50
50
  class GeneratorJournal {
51
51
  constructor(rootPath, plan, seed) {
52
52
  this._rootPath = rootPath;
@@ -62,7 +62,7 @@ class GeneratorJournal {
62
62
  const result = [];
63
63
  result.push(`# Plan`);
64
64
  result.push(this._plan);
65
- result.push(`# Seed file: ${(0, import_utils.toPosixPath)(import_path.default.relative(this._rootPath, this._seed.file))}`);
65
+ result.push(`# Seed file: ${toPosixPath(import_path.default.relative(this._rootPath, this._seed.file))}`);
66
66
  result.push("```ts");
67
67
  result.push(this._seed.content);
68
68
  result.push("```");
@@ -77,15 +77,21 @@ ${step.code}
77
77
  }
78
78
  class TestContext {
79
79
  constructor(clientInfo, configPath, options) {
80
+ this._testOpQueue = Promise.resolve();
80
81
  this._clientInfo = clientInfo;
81
- const rootPath = (0, import_exports.firstRootPath)(clientInfo);
82
- this._configLocation = (0, import_configLoader.resolveConfigLocation)(configPath || rootPath);
83
- this.rootPath = rootPath || this._configLocation.configDir;
82
+ this._configLocation = import_common.configLoader.resolveConfigLocation(configPath || clientInfo.cwd);
83
+ this.rootPath = clientInfo.cwd || this._configLocation.configDir;
84
84
  if (options?.headless !== void 0)
85
85
  this.computedHeaded = !options.headless;
86
86
  else
87
87
  this.computedHeaded = !process.env.CI && !(import_os.default.platform() === "linux" && !process.env.DISPLAY);
88
88
  }
89
+ async _enqueue(fn) {
90
+ const next = this._testOpQueue.then(fn);
91
+ this._testOpQueue = next.then(() => {
92
+ });
93
+ return await next;
94
+ }
89
95
  existingTestRunner() {
90
96
  return this._testRunnerAndScreen?.testRunner;
91
97
  }
@@ -103,16 +109,16 @@ class TestContext {
103
109
  }
104
110
  async createTestRunner() {
105
111
  await this._cleanupTestRunner();
106
- const testRunner = new import_testRunner.TestRunner(this._configLocation, {});
107
- await testRunner.initialize({});
108
- const testPaused = new import_utils.ManualPromise();
112
+ const runner = new import_runner.testRunner.TestRunner(this._configLocation, {});
113
+ await runner.initialize({});
114
+ const testPaused = new ManualPromise();
109
115
  const testRunnerAndScreen = {
110
116
  ...createScreen(),
111
- testRunner,
117
+ testRunner: runner,
112
118
  waitForTestPaused: () => testPaused
113
119
  };
114
120
  this._testRunnerAndScreen = testRunnerAndScreen;
115
- testRunner.on(import_testRunner.TestRunnerEvent.TestPaused, (params) => {
121
+ runner.on(import_runner.testRunner.TestRunnerEvent.TestPaused, (params) => {
116
122
  testRunnerAndScreen.sendMessageToPausedTest = params.sendMessage;
117
123
  testPaused.resolve();
118
124
  });
@@ -120,8 +126,8 @@ class TestContext {
120
126
  }
121
127
  async getOrCreateSeedFile(seedFile, projectName) {
122
128
  const configDir = this._configLocation.configDir;
123
- const { testRunner } = await this.createTestRunner();
124
- const config = await testRunner.loadConfig();
129
+ const { testRunner: runner } = await this.createTestRunner();
130
+ const config = await runner.loadConfig();
125
131
  const project = (0, import_seed.seedProject)(config, projectName);
126
132
  if (!seedFile) {
127
133
  seedFile = await (0, import_seed.ensureSeedFile)(project);
@@ -149,31 +155,34 @@ class TestContext {
149
155
  projectName: project.project.name
150
156
  };
151
157
  }
152
- async runSeedTest(seedFile, projectName) {
158
+ async runSeedTest(seedFile, projectName, signal) {
153
159
  const result = await this.runTestsWithGlobalSetupAndPossiblePause({
154
160
  headed: this.computedHeaded,
155
- locations: ["/" + (0, import_utils.escapeRegExp)(seedFile) + "/"],
161
+ locations: ["/" + escapeRegExp(seedFile) + "/"],
156
162
  projects: [projectName],
157
163
  timeout: 0,
158
164
  workers: 1,
159
165
  pauseAtEnd: true,
160
166
  disableConfigReporters: true,
161
167
  failOnLoadErrors: true
162
- });
168
+ }, signal);
163
169
  if (result.status === "passed")
164
170
  result.output += "\nError: seed test not found.";
165
171
  else if (result.status !== "paused")
166
172
  result.output += "\nError while running the seed test.";
167
173
  return result;
168
174
  }
169
- async runTestsWithGlobalSetupAndPossiblePause(params) {
175
+ async runTestsWithGlobalSetupAndPossiblePause(params, signal) {
176
+ return this._enqueue(() => this._runTestsImpl(params, signal));
177
+ }
178
+ async _runTestsImpl(params, signal) {
170
179
  const configDir = this._configLocation.configDir;
171
180
  const testRunnerAndScreen = await this.createTestRunner();
172
- const { testRunner, screen, claimStdio, releaseStdio } = testRunnerAndScreen;
181
+ const { testRunner: runner, screen, claimStdio, releaseStdio } = testRunnerAndScreen;
173
182
  claimStdio();
174
183
  try {
175
184
  const setupReporter = new MCPListReporter({ configDir, screen, includeTestId: true });
176
- const { status: status2 } = await testRunner.runGlobalSetup([setupReporter]);
185
+ const { status: status2 } = await runner.runGlobalSetup([setupReporter]);
177
186
  if (status2 !== "passed")
178
187
  return { output: testRunnerAndScreen.output.join("\n"), status: status2 };
179
188
  } finally {
@@ -183,19 +192,27 @@ class TestContext {
183
192
  const cleanup = async () => {
184
193
  claimStdio();
185
194
  try {
186
- const result = await testRunner.runGlobalTeardown();
195
+ const result = await runner.runGlobalTeardown();
187
196
  if (status === "passed")
188
197
  status = result.status;
189
198
  } finally {
190
199
  releaseStdio();
191
200
  }
192
201
  };
202
+ const abortPromise = signal ? signalToPromise(signal).promise.then(() => "interrupted") : new Promise(() => {
203
+ });
193
204
  try {
194
205
  const reporter = new MCPListReporter({ configDir, screen, includeTestId: true });
195
206
  status = await Promise.race([
196
- testRunner.runTests(reporter, params).then((result) => result.status),
197
- testRunnerAndScreen.waitForTestPaused().then(() => "paused")
207
+ runner.runTests(reporter, params).then((result) => result.status),
208
+ testRunnerAndScreen.waitForTestPaused().then(() => "paused"),
209
+ abortPromise
198
210
  ]);
211
+ if (status === "interrupted") {
212
+ await runner.stopTests();
213
+ await cleanup();
214
+ return { output: testRunnerAndScreen.output.join("\n"), status };
215
+ }
199
216
  if (status === "paused") {
200
217
  const response = await testRunnerAndScreen.sendMessageToPausedTest({ request: { initialize: { clientInfo: this._clientInfo } } });
201
218
  if (response.error)
@@ -213,7 +230,7 @@ class TestContext {
213
230
  return { output: testRunnerAndScreen.output.join("\n"), status };
214
231
  }
215
232
  async close() {
216
- await this._cleanupTestRunner().catch(import_log.logUnhandledError);
233
+ await this._enqueue(() => this._cleanupTestRunner()).catch((e) => debug("pw:mcp:error")(e));
217
234
  }
218
235
  async sendMessageToPausedTest(request) {
219
236
  const sendMessage = this._testRunnerAndScreen?.sendMessageToPausedTest;
@@ -223,7 +240,7 @@ class TestContext {
223
240
  if (result.error)
224
241
  throw new Error(result.error.message);
225
242
  if (typeof request?.callTool?.arguments?.["intent"] === "string") {
226
- const response = (0, import_response.parseResponse)(result.response.callTool);
243
+ const response = import_coreBundle.tools.parseResponse(result.response.callTool);
227
244
  if (response && !response.isError && response.code)
228
245
  this.generatorJournal?.logStep(request.callTool.arguments["intent"], response.code);
229
246
  }
@@ -235,9 +252,9 @@ function createScreen() {
235
252
  const stdout = new import_streams.StringWriteStream(output, "stdout");
236
253
  const stderr = new import_streams.StringWriteStream(output, "stderr");
237
254
  const screen = {
238
- ...import_base.terminalScreen,
255
+ ...import_runner.base.terminalScreen,
239
256
  isTTY: false,
240
- colors: import_utils.noColors,
257
+ colors: noColors,
241
258
  stdout,
242
259
  stderr
243
260
  };
@@ -271,7 +288,7 @@ const bestPracticesMarkdown = `
271
288
  - NEVER! use page.waitForTimeout()
272
289
  - NEVER! use page.evaluate()
273
290
  `;
274
- class MCPListReporter extends import_list.default {
291
+ class MCPListReporter extends import_runner.ListReporter {
275
292
  async onTestPaused() {
276
293
  await new Promise(() => {
277
294
  });
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
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
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
  var testTools_exports = {};
30
20
  __export(testTools_exports, {
@@ -33,20 +23,20 @@ __export(testTools_exports, {
33
23
  runTests: () => runTests
34
24
  });
35
25
  module.exports = __toCommonJS(testTools_exports);
36
- var import_mcpBundle = require("playwright-core/lib/mcpBundle");
37
- var import_listModeReporter = __toESM(require("../../reporters/listModeReporter"));
26
+ var import_runner = require("../../runner");
38
27
  var import_testTool = require("./testTool");
28
+ const z = require("playwright-core/lib/utilsBundle").z;
39
29
  const listTests = (0, import_testTool.defineTestTool)({
40
30
  schema: {
41
31
  name: "test_list",
42
32
  title: "List tests",
43
33
  description: "List tests",
44
- inputSchema: import_mcpBundle.z.object({}),
34
+ inputSchema: z.object({}),
45
35
  type: "readOnly"
46
36
  },
47
37
  handle: async (context) => {
48
38
  const { testRunner, screen, output } = await context.createTestRunner();
49
- const reporter = new import_listModeReporter.default({ screen, includeTestId: true });
39
+ const reporter = new import_runner.ListModeReporter({ screen, includeTestId: true });
50
40
  await testRunner.listTests(reporter, {});
51
41
  return { content: output.map((text) => ({ type: "text", text })) };
52
42
  }
@@ -56,18 +46,18 @@ const runTests = (0, import_testTool.defineTestTool)({
56
46
  name: "test_run",
57
47
  title: "Run tests",
58
48
  description: "Run tests",
59
- inputSchema: import_mcpBundle.z.object({
60
- locations: import_mcpBundle.z.array(import_mcpBundle.z.string()).optional().describe('Folder, file or location to run: "test/e2e" or "test/e2e/file.spec.ts" or "test/e2e/file.spec.ts:20"'),
61
- projects: import_mcpBundle.z.array(import_mcpBundle.z.string()).optional().describe('Projects to run, projects from playwright.config.ts, by default runs all projects. Running with "chromium" is a good start')
49
+ inputSchema: z.object({
50
+ locations: z.array(z.string()).optional().describe('Folder, file or location to run: "test/e2e" or "test/e2e/file.spec.ts" or "test/e2e/file.spec.ts:20"'),
51
+ projects: z.array(z.string()).optional().describe('Projects to run, projects from playwright.config.ts, by default runs all projects. Running with "chromium" is a good start')
62
52
  }),
63
53
  type: "readOnly"
64
54
  },
65
- handle: async (context, params) => {
55
+ handle: async (context, params, signal) => {
66
56
  const { output } = await context.runTestsWithGlobalSetupAndPossiblePause({
67
57
  locations: params.locations ?? [],
68
58
  projects: params.projects,
69
59
  disableConfigReporters: true
70
- });
60
+ }, signal);
71
61
  return { content: [{ type: "text", text: output }] };
72
62
  }
73
63
  });
@@ -76,15 +66,15 @@ const debugTest = (0, import_testTool.defineTestTool)({
76
66
  name: "test_debug",
77
67
  title: "Debug single test",
78
68
  description: "Debug single test",
79
- inputSchema: import_mcpBundle.z.object({
80
- test: import_mcpBundle.z.object({
81
- id: import_mcpBundle.z.string().describe("Test ID to debug."),
82
- title: import_mcpBundle.z.string().describe("Human readable test title for granting permission to debug the test.")
69
+ inputSchema: z.object({
70
+ test: z.object({
71
+ id: z.string().describe("Test ID to debug."),
72
+ title: z.string().describe("Human readable test title for granting permission to debug the test.")
83
73
  })
84
74
  }),
85
75
  type: "readOnly"
86
76
  },
87
- handle: async (context, params) => {
77
+ handle: async (context, params, signal) => {
88
78
  const { output, status } = await context.runTestsWithGlobalSetupAndPossiblePause({
89
79
  headed: context.computedHeaded,
90
80
  locations: [],
@@ -96,7 +86,7 @@ const debugTest = (0, import_testTool.defineTestTool)({
96
86
  pauseOnError: true,
97
87
  disableConfigReporters: true,
98
88
  actionTimeout: 5e3
99
- });
89
+ }, signal);
100
90
  return { content: [{ type: "text", text: output }], isError: status !== "paused" && status !== "passed" };
101
91
  }
102
92
  });
@@ -26,17 +26,22 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var internalsForTest_exports = {};
30
- __export(internalsForTest_exports, {
31
- fileDependencies: () => fileDependencies
29
+ var package_exports = {};
30
+ __export(package_exports, {
31
+ libPath: () => libPath,
32
+ packageJSON: () => packageJSON,
33
+ packageRoot: () => packageRoot
32
34
  });
33
- module.exports = __toCommonJS(internalsForTest_exports);
35
+ module.exports = __toCommonJS(package_exports);
34
36
  var import_path = __toESM(require("path"));
35
- var import_compilationCache = require("./transform/compilationCache");
36
- function fileDependencies() {
37
- return Object.fromEntries([...(0, import_compilationCache.fileDependenciesForTest)().entries()].map((entry) => [import_path.default.basename(entry[0]), [...entry[1]].map((f) => import_path.default.basename(f)).sort()]));
37
+ const packageRoot = import_path.default.join(__dirname, "..");
38
+ const packageJSON = require(import_path.default.join(packageRoot, "package.json"));
39
+ function libPath(...parts) {
40
+ return import_path.default.join(packageRoot, "lib", ...parts);
38
41
  }
39
42
  // Annotate the CommonJS export names for ESM import in node:
40
43
  0 && (module.exports = {
41
- fileDependencies
44
+ libPath,
45
+ packageJSON,
46
+ packageRoot
42
47
  });