@smoothdeploy/playwright 1.58.4 → 1.61.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.
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 +69 -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 +213 -0
  8. package/lib/common/index.js +2931 -0
  9. package/lib/common/index.js.txt +35 -0
  10. package/lib/errorContext.js +130 -0
  11. package/lib/index.js +276 -219
  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 +12990 -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 +54 -33
  25. package/lib/mcp/test/testTools.js +15 -25
  26. package/lib/{internalsForTest.js → package.js} +13 -8
  27. package/lib/program.js +71 -265
  28. package/lib/runner/index.js +8389 -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 +5994 -33
  34. package/lib/transform/esmLoader.js.LICENSE +335 -0
  35. package/lib/transform/esmLoader.js.txt +57 -0
  36. package/lib/util.js +48 -48
  37. package/lib/worker/workerProcessEntry.js +1868 -0
  38. package/lib/worker/workerProcessEntry.js.txt +20 -0
  39. package/package.json +5 -16
  40. package/test.mjs +1 -0
  41. package/types/test.d.ts +238 -28
  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,22 @@ ${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
+ });
94
+ return await next;
95
+ }
89
96
  existingTestRunner() {
90
97
  return this._testRunnerAndScreen?.testRunner;
91
98
  }
@@ -103,16 +110,16 @@ class TestContext {
103
110
  }
104
111
  async createTestRunner() {
105
112
  await this._cleanupTestRunner();
106
- const testRunner = new import_testRunner.TestRunner(this._configLocation, {});
107
- await testRunner.initialize({});
108
- const testPaused = new import_utils.ManualPromise();
113
+ const runner = new import_runner.testRunner.TestRunner(this._configLocation, {});
114
+ await runner.initialize({});
115
+ const testPaused = new ManualPromise();
109
116
  const testRunnerAndScreen = {
110
117
  ...createScreen(),
111
- testRunner,
118
+ testRunner: runner,
112
119
  waitForTestPaused: () => testPaused
113
120
  };
114
121
  this._testRunnerAndScreen = testRunnerAndScreen;
115
- testRunner.on(import_testRunner.TestRunnerEvent.TestPaused, (params) => {
122
+ runner.on(import_runner.testRunner.TestRunnerEvent.TestPaused, (params) => {
116
123
  testRunnerAndScreen.sendMessageToPausedTest = params.sendMessage;
117
124
  testPaused.resolve();
118
125
  });
@@ -120,8 +127,8 @@ class TestContext {
120
127
  }
121
128
  async getOrCreateSeedFile(seedFile, projectName) {
122
129
  const configDir = this._configLocation.configDir;
123
- const { testRunner } = await this.createTestRunner();
124
- const config = await testRunner.loadConfig();
130
+ const { testRunner: runner } = await this.createTestRunner();
131
+ const config = await runner.loadConfig();
125
132
  const project = (0, import_seed.seedProject)(config, projectName);
126
133
  if (!seedFile) {
127
134
  seedFile = await (0, import_seed.ensureSeedFile)(project);
@@ -149,31 +156,34 @@ class TestContext {
149
156
  projectName: project.project.name
150
157
  };
151
158
  }
152
- async runSeedTest(seedFile, projectName) {
159
+ async runSeedTest(seedFile, projectName, signal) {
153
160
  const result = await this.runTestsWithGlobalSetupAndPossiblePause({
154
161
  headed: this.computedHeaded,
155
- locations: ["/" + (0, import_utils.escapeRegExp)(seedFile) + "/"],
162
+ locations: ["/" + escapeRegExp(seedFile) + "/"],
156
163
  projects: [projectName],
157
164
  timeout: 0,
158
165
  workers: 1,
159
166
  pauseAtEnd: true,
160
167
  disableConfigReporters: true,
161
168
  failOnLoadErrors: true
162
- });
169
+ }, signal);
163
170
  if (result.status === "passed")
164
171
  result.output += "\nError: seed test not found.";
165
172
  else if (result.status !== "paused")
166
173
  result.output += "\nError while running the seed test.";
167
174
  return result;
168
175
  }
169
- async runTestsWithGlobalSetupAndPossiblePause(params) {
176
+ async runTestsWithGlobalSetupAndPossiblePause(params, signal) {
177
+ return this._enqueue(() => this._runTestsImpl(params, signal));
178
+ }
179
+ async _runTestsImpl(params, signal) {
170
180
  const configDir = this._configLocation.configDir;
171
181
  const testRunnerAndScreen = await this.createTestRunner();
172
- const { testRunner, screen, claimStdio, releaseStdio } = testRunnerAndScreen;
182
+ const { testRunner: runner, screen, claimStdio, releaseStdio } = testRunnerAndScreen;
173
183
  claimStdio();
174
184
  try {
175
185
  const setupReporter = new MCPListReporter({ configDir, screen, includeTestId: true });
176
- const { status: status2 } = await testRunner.runGlobalSetup([setupReporter]);
186
+ const { status: status2 } = await runner.runGlobalSetup([setupReporter]);
177
187
  if (status2 !== "passed")
178
188
  return { output: testRunnerAndScreen.output.join("\n"), status: status2 };
179
189
  } finally {
@@ -183,19 +193,28 @@ class TestContext {
183
193
  const cleanup = async () => {
184
194
  claimStdio();
185
195
  try {
186
- const result = await testRunner.runGlobalTeardown();
196
+ const result = await runner.runGlobalTeardown();
187
197
  if (status === "passed")
188
198
  status = result.status;
189
199
  } finally {
190
200
  releaseStdio();
191
201
  }
192
202
  };
203
+ const abort = signal ? signalToPromise(signal) : void 0;
204
+ const abortPromise = abort ? abort.promise.then(() => "interrupted") : new Promise(() => {
205
+ });
193
206
  try {
194
207
  const reporter = new MCPListReporter({ configDir, screen, includeTestId: true });
195
208
  status = await Promise.race([
196
- testRunner.runTests(reporter, params).then((result) => result.status),
197
- testRunnerAndScreen.waitForTestPaused().then(() => "paused")
209
+ runner.runTests(reporter, params).then((result) => result.status),
210
+ testRunnerAndScreen.waitForTestPaused().then(() => "paused"),
211
+ abortPromise
198
212
  ]);
213
+ if (status === "interrupted") {
214
+ await runner.stopTests();
215
+ await cleanup();
216
+ return { output: testRunnerAndScreen.output.join("\n"), status };
217
+ }
199
218
  if (status === "paused") {
200
219
  const response = await testRunnerAndScreen.sendMessageToPausedTest({ request: { initialize: { clientInfo: this._clientInfo } } });
201
220
  if (response.error)
@@ -208,12 +227,14 @@ class TestContext {
208
227
  testRunnerAndScreen.output.push(String(e));
209
228
  await cleanup();
210
229
  return { output: testRunnerAndScreen.output.join("\n"), status };
230
+ } finally {
231
+ abort?.dispose();
211
232
  }
212
233
  await cleanup();
213
234
  return { output: testRunnerAndScreen.output.join("\n"), status };
214
235
  }
215
236
  async close() {
216
- await this._cleanupTestRunner().catch(import_log.logUnhandledError);
237
+ await this._enqueue(() => this._cleanupTestRunner()).catch((e) => debug("pw:mcp:error")(e));
217
238
  }
218
239
  async sendMessageToPausedTest(request) {
219
240
  const sendMessage = this._testRunnerAndScreen?.sendMessageToPausedTest;
@@ -223,7 +244,7 @@ class TestContext {
223
244
  if (result.error)
224
245
  throw new Error(result.error.message);
225
246
  if (typeof request?.callTool?.arguments?.["intent"] === "string") {
226
- const response = (0, import_response.parseResponse)(result.response.callTool);
247
+ const response = import_coreBundle.tools.parseResponse(result.response.callTool);
227
248
  if (response && !response.isError && response.code)
228
249
  this.generatorJournal?.logStep(request.callTool.arguments["intent"], response.code);
229
250
  }
@@ -235,9 +256,9 @@ function createScreen() {
235
256
  const stdout = new import_streams.StringWriteStream(output, "stdout");
236
257
  const stderr = new import_streams.StringWriteStream(output, "stderr");
237
258
  const screen = {
238
- ...import_base.terminalScreen,
259
+ ...import_runner.base.terminalScreen,
239
260
  isTTY: false,
240
- colors: import_utils.noColors,
261
+ colors: noColors,
241
262
  stdout,
242
263
  stderr
243
264
  };
@@ -271,7 +292,7 @@ const bestPracticesMarkdown = `
271
292
  - NEVER! use page.waitForTimeout()
272
293
  - NEVER! use page.evaluate()
273
294
  `;
274
- class MCPListReporter extends import_list.default {
295
+ class MCPListReporter extends import_runner.ListReporter {
275
296
  async onTestPaused() {
276
297
  await new Promise(() => {
277
298
  });
@@ -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
  });