@one2x/playwright 1.57.0-alpha.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 (331) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +168 -0
  4. package/ThirdPartyNotices.txt +6277 -0
  5. package/cli.js +19 -0
  6. package/index.d.ts +17 -0
  7. package/index.js +17 -0
  8. package/index.mjs +18 -0
  9. package/jsx-runtime.js +42 -0
  10. package/jsx-runtime.mjs +21 -0
  11. package/lib/agents/copilot-setup-steps.yml +34 -0
  12. package/lib/agents/generateAgents.js +394 -0
  13. package/lib/agents/generateAgents.js.map +7 -0
  14. package/lib/agents/playwright-test-coverage.prompt.md +31 -0
  15. package/lib/agents/playwright-test-generate.prompt.md +8 -0
  16. package/lib/agents/playwright-test-generator.agent.md +88 -0
  17. package/lib/agents/playwright-test-heal.prompt.md +6 -0
  18. package/lib/agents/playwright-test-healer.agent.md +55 -0
  19. package/lib/agents/playwright-test-plan.prompt.md +9 -0
  20. package/lib/agents/playwright-test-planner.agent.md +117 -0
  21. package/lib/common/config.js +280 -0
  22. package/lib/common/config.js.map +7 -0
  23. package/lib/common/configLoader.js +344 -0
  24. package/lib/common/configLoader.js.map +7 -0
  25. package/lib/common/esmLoaderHost.js +102 -0
  26. package/lib/common/esmLoaderHost.js.map +7 -0
  27. package/lib/common/expectBundle.js +52 -0
  28. package/lib/common/expectBundle.js.map +7 -0
  29. package/lib/common/expectBundleImpl.js +389 -0
  30. package/lib/common/expectBundleImpl.js.map +7 -0
  31. package/lib/common/fixtures.js +302 -0
  32. package/lib/common/fixtures.js.map +7 -0
  33. package/lib/common/globals.js +58 -0
  34. package/lib/common/globals.js.map +7 -0
  35. package/lib/common/ipc.js +60 -0
  36. package/lib/common/ipc.js.map +7 -0
  37. package/lib/common/poolBuilder.js +85 -0
  38. package/lib/common/poolBuilder.js.map +7 -0
  39. package/lib/common/process.js +104 -0
  40. package/lib/common/process.js.map +7 -0
  41. package/lib/common/suiteUtils.js +140 -0
  42. package/lib/common/suiteUtils.js.map +7 -0
  43. package/lib/common/test.js +321 -0
  44. package/lib/common/test.js.map +7 -0
  45. package/lib/common/testLoader.js +101 -0
  46. package/lib/common/testLoader.js.map +7 -0
  47. package/lib/common/testType.js +298 -0
  48. package/lib/common/testType.js.map +7 -0
  49. package/lib/common/validators.js +68 -0
  50. package/lib/common/validators.js.map +7 -0
  51. package/lib/fsWatcher.js +67 -0
  52. package/lib/fsWatcher.js.map +7 -0
  53. package/lib/index.js +682 -0
  54. package/lib/index.js.map +7 -0
  55. package/lib/internalsForTest.js +42 -0
  56. package/lib/internalsForTest.js.map +7 -0
  57. package/lib/isomorphic/events.js +77 -0
  58. package/lib/isomorphic/events.js.map +7 -0
  59. package/lib/isomorphic/folders.js +30 -0
  60. package/lib/isomorphic/folders.js.map +7 -0
  61. package/lib/isomorphic/stringInternPool.js +69 -0
  62. package/lib/isomorphic/stringInternPool.js.map +7 -0
  63. package/lib/isomorphic/teleReceiver.js +508 -0
  64. package/lib/isomorphic/teleReceiver.js.map +7 -0
  65. package/lib/isomorphic/teleSuiteUpdater.js +137 -0
  66. package/lib/isomorphic/teleSuiteUpdater.js.map +7 -0
  67. package/lib/isomorphic/testServerConnection.js +211 -0
  68. package/lib/isomorphic/testServerConnection.js.map +7 -0
  69. package/lib/isomorphic/testServerInterface.js +16 -0
  70. package/lib/isomorphic/testServerInterface.js.map +7 -0
  71. package/lib/isomorphic/testTree.js +334 -0
  72. package/lib/isomorphic/testTree.js.map +7 -0
  73. package/lib/isomorphic/types.d.js +16 -0
  74. package/lib/isomorphic/types.d.js.map +7 -0
  75. package/lib/loader/loaderMain.js +59 -0
  76. package/lib/loader/loaderMain.js.map +7 -0
  77. package/lib/matchers/expect.js +325 -0
  78. package/lib/matchers/expect.js.map +7 -0
  79. package/lib/matchers/matcherHint.js +87 -0
  80. package/lib/matchers/matcherHint.js.map +7 -0
  81. package/lib/matchers/matchers.js +366 -0
  82. package/lib/matchers/matchers.js.map +7 -0
  83. package/lib/matchers/toBeTruthy.js +73 -0
  84. package/lib/matchers/toBeTruthy.js.map +7 -0
  85. package/lib/matchers/toEqual.js +99 -0
  86. package/lib/matchers/toEqual.js.map +7 -0
  87. package/lib/matchers/toHaveURL.js +102 -0
  88. package/lib/matchers/toHaveURL.js.map +7 -0
  89. package/lib/matchers/toMatchAriaSnapshot.js +159 -0
  90. package/lib/matchers/toMatchAriaSnapshot.js.map +7 -0
  91. package/lib/matchers/toMatchSnapshot.js +341 -0
  92. package/lib/matchers/toMatchSnapshot.js.map +7 -0
  93. package/lib/matchers/toMatchText.js +99 -0
  94. package/lib/matchers/toMatchText.js.map +7 -0
  95. package/lib/mcp/browser/actions.d.js +16 -0
  96. package/lib/mcp/browser/actions.d.js.map +7 -0
  97. package/lib/mcp/browser/browserContextFactory.js +357 -0
  98. package/lib/mcp/browser/browserContextFactory.js.map +7 -0
  99. package/lib/mcp/browser/browserServerBackend.js +76 -0
  100. package/lib/mcp/browser/browserServerBackend.js.map +7 -0
  101. package/lib/mcp/browser/codegen.js +66 -0
  102. package/lib/mcp/browser/codegen.js.map +7 -0
  103. package/lib/mcp/browser/config.js +425 -0
  104. package/lib/mcp/browser/config.js.map +7 -0
  105. package/lib/mcp/browser/context.js +287 -0
  106. package/lib/mcp/browser/context.js.map +7 -0
  107. package/lib/mcp/browser/response.js +228 -0
  108. package/lib/mcp/browser/response.js.map +7 -0
  109. package/lib/mcp/browser/sessionLog.js +160 -0
  110. package/lib/mcp/browser/sessionLog.js.map +7 -0
  111. package/lib/mcp/browser/tab.js +280 -0
  112. package/lib/mcp/browser/tab.js.map +7 -0
  113. package/lib/mcp/browser/tools/actionRetry.js +40 -0
  114. package/lib/mcp/browser/tools/actionRetry.js.map +7 -0
  115. package/lib/mcp/browser/tools/common.js +63 -0
  116. package/lib/mcp/browser/tools/common.js.map +7 -0
  117. package/lib/mcp/browser/tools/console.js +44 -0
  118. package/lib/mcp/browser/tools/console.js.map +7 -0
  119. package/lib/mcp/browser/tools/dialogs.js +60 -0
  120. package/lib/mcp/browser/tools/dialogs.js.map +7 -0
  121. package/lib/mcp/browser/tools/evaluate.js +69 -0
  122. package/lib/mcp/browser/tools/evaluate.js.map +7 -0
  123. package/lib/mcp/browser/tools/files.js +58 -0
  124. package/lib/mcp/browser/tools/files.js.map +7 -0
  125. package/lib/mcp/browser/tools/form.js +79 -0
  126. package/lib/mcp/browser/tools/form.js.map +7 -0
  127. package/lib/mcp/browser/tools/install.js +69 -0
  128. package/lib/mcp/browser/tools/install.js.map +7 -0
  129. package/lib/mcp/browser/tools/keyboard.js +84 -0
  130. package/lib/mcp/browser/tools/keyboard.js.map +7 -0
  131. package/lib/mcp/browser/tools/mouse.js +107 -0
  132. package/lib/mcp/browser/tools/mouse.js.map +7 -0
  133. package/lib/mcp/browser/tools/navigate.js +62 -0
  134. package/lib/mcp/browser/tools/navigate.js.map +7 -0
  135. package/lib/mcp/browser/tools/network.js +54 -0
  136. package/lib/mcp/browser/tools/network.js.map +7 -0
  137. package/lib/mcp/browser/tools/pdf.js +59 -0
  138. package/lib/mcp/browser/tools/pdf.js.map +7 -0
  139. package/lib/mcp/browser/tools/screenshot.js +106 -0
  140. package/lib/mcp/browser/tools/screenshot.js.map +7 -0
  141. package/lib/mcp/browser/tools/snapshot.js +312 -0
  142. package/lib/mcp/browser/tools/snapshot.js.map +7 -0
  143. package/lib/mcp/browser/tools/tabs.js +67 -0
  144. package/lib/mcp/browser/tools/tabs.js.map +7 -0
  145. package/lib/mcp/browser/tools/tool.js +49 -0
  146. package/lib/mcp/browser/tools/tool.js.map +7 -0
  147. package/lib/mcp/browser/tools/tracing.js +74 -0
  148. package/lib/mcp/browser/tools/tracing.js.map +7 -0
  149. package/lib/mcp/browser/tools/utils.js +96 -0
  150. package/lib/mcp/browser/tools/utils.js.map +7 -0
  151. package/lib/mcp/browser/tools/verify.js +153 -0
  152. package/lib/mcp/browser/tools/verify.js.map +7 -0
  153. package/lib/mcp/browser/tools/wait.js +63 -0
  154. package/lib/mcp/browser/tools/wait.js.map +7 -0
  155. package/lib/mcp/browser/tools.js +80 -0
  156. package/lib/mcp/browser/tools.js.map +7 -0
  157. package/lib/mcp/browser/watchdog.js +44 -0
  158. package/lib/mcp/browser/watchdog.js.map +7 -0
  159. package/lib/mcp/config.d.js +16 -0
  160. package/lib/mcp/config.d.js.map +7 -0
  161. package/lib/mcp/extension/cdpRelay.js +351 -0
  162. package/lib/mcp/extension/cdpRelay.js.map +7 -0
  163. package/lib/mcp/extension/extensionContextFactory.js +75 -0
  164. package/lib/mcp/extension/extensionContextFactory.js.map +7 -0
  165. package/lib/mcp/extension/protocol.js +28 -0
  166. package/lib/mcp/extension/protocol.js.map +7 -0
  167. package/lib/mcp/index.js +61 -0
  168. package/lib/mcp/index.js.map +7 -0
  169. package/lib/mcp/log.js +35 -0
  170. package/lib/mcp/log.js.map +7 -0
  171. package/lib/mcp/program.js +118 -0
  172. package/lib/mcp/program.js.map +7 -0
  173. package/lib/mcp/sdk/bundle.js +81 -0
  174. package/lib/mcp/sdk/bundle.js.map +7 -0
  175. package/lib/mcp/sdk/exports.js +32 -0
  176. package/lib/mcp/sdk/exports.js.map +7 -0
  177. package/lib/mcp/sdk/http.js +276 -0
  178. package/lib/mcp/sdk/http.js.map +7 -0
  179. package/lib/mcp/sdk/inProcessTransport.js +71 -0
  180. package/lib/mcp/sdk/inProcessTransport.js.map +7 -0
  181. package/lib/mcp/sdk/mdb.js +208 -0
  182. package/lib/mcp/sdk/mdb.js.map +7 -0
  183. package/lib/mcp/sdk/proxyBackend.js +128 -0
  184. package/lib/mcp/sdk/proxyBackend.js.map +7 -0
  185. package/lib/mcp/sdk/server.js +190 -0
  186. package/lib/mcp/sdk/server.js.map +7 -0
  187. package/lib/mcp/sdk/tool.js +51 -0
  188. package/lib/mcp/sdk/tool.js.map +7 -0
  189. package/lib/mcp/test/browserBackend.js +98 -0
  190. package/lib/mcp/test/browserBackend.js.map +7 -0
  191. package/lib/mcp/test/generatorTools.js +122 -0
  192. package/lib/mcp/test/generatorTools.js.map +7 -0
  193. package/lib/mcp/test/plannerTools.js +46 -0
  194. package/lib/mcp/test/plannerTools.js.map +7 -0
  195. package/lib/mcp/test/seed.js +82 -0
  196. package/lib/mcp/test/seed.js.map +7 -0
  197. package/lib/mcp/test/streams.js +41 -0
  198. package/lib/mcp/test/streams.js.map +7 -0
  199. package/lib/mcp/test/testBackend.js +97 -0
  200. package/lib/mcp/test/testBackend.js.map +7 -0
  201. package/lib/mcp/test/testContext.js +216 -0
  202. package/lib/mcp/test/testContext.js.map +7 -0
  203. package/lib/mcp/test/testTool.js +30 -0
  204. package/lib/mcp/test/testTool.js.map +7 -0
  205. package/lib/mcp/test/testTools.js +111 -0
  206. package/lib/mcp/test/testTools.js.map +7 -0
  207. package/lib/mcpBundleImpl.js +41 -0
  208. package/lib/mcpBundleImpl.js.map +7 -0
  209. package/lib/plugins/gitCommitInfoPlugin.js +198 -0
  210. package/lib/plugins/gitCommitInfoPlugin.js.map +7 -0
  211. package/lib/plugins/index.js +28 -0
  212. package/lib/plugins/index.js.map +7 -0
  213. package/lib/plugins/webServerPlugin.js +233 -0
  214. package/lib/plugins/webServerPlugin.js.map +7 -0
  215. package/lib/program.js +412 -0
  216. package/lib/program.js.map +7 -0
  217. package/lib/reporters/base.js +609 -0
  218. package/lib/reporters/base.js.map +7 -0
  219. package/lib/reporters/blob.js +135 -0
  220. package/lib/reporters/blob.js.map +7 -0
  221. package/lib/reporters/dot.js +82 -0
  222. package/lib/reporters/dot.js.map +7 -0
  223. package/lib/reporters/empty.js +32 -0
  224. package/lib/reporters/empty.js.map +7 -0
  225. package/lib/reporters/github.js +128 -0
  226. package/lib/reporters/github.js.map +7 -0
  227. package/lib/reporters/html.js +623 -0
  228. package/lib/reporters/html.js.map +7 -0
  229. package/lib/reporters/internalReporter.js +130 -0
  230. package/lib/reporters/internalReporter.js.map +7 -0
  231. package/lib/reporters/json.js +254 -0
  232. package/lib/reporters/json.js.map +7 -0
  233. package/lib/reporters/junit.js +232 -0
  234. package/lib/reporters/junit.js.map +7 -0
  235. package/lib/reporters/line.js +113 -0
  236. package/lib/reporters/line.js.map +7 -0
  237. package/lib/reporters/list.js +231 -0
  238. package/lib/reporters/list.js.map +7 -0
  239. package/lib/reporters/listModeReporter.js +69 -0
  240. package/lib/reporters/listModeReporter.js.map +7 -0
  241. package/lib/reporters/markdown.js +144 -0
  242. package/lib/reporters/markdown.js.map +7 -0
  243. package/lib/reporters/merge.js +541 -0
  244. package/lib/reporters/merge.js.map +7 -0
  245. package/lib/reporters/multiplexer.js +104 -0
  246. package/lib/reporters/multiplexer.js.map +7 -0
  247. package/lib/reporters/reporterV2.js +102 -0
  248. package/lib/reporters/reporterV2.js.map +7 -0
  249. package/lib/reporters/teleEmitter.js +298 -0
  250. package/lib/reporters/teleEmitter.js.map +7 -0
  251. package/lib/reporters/versions/blobV1.js +16 -0
  252. package/lib/reporters/versions/blobV1.js.map +7 -0
  253. package/lib/runner/dispatcher.js +491 -0
  254. package/lib/runner/dispatcher.js.map +7 -0
  255. package/lib/runner/failureTracker.js +72 -0
  256. package/lib/runner/failureTracker.js.map +7 -0
  257. package/lib/runner/lastRun.js +77 -0
  258. package/lib/runner/lastRun.js.map +7 -0
  259. package/lib/runner/loadUtils.js +334 -0
  260. package/lib/runner/loadUtils.js.map +7 -0
  261. package/lib/runner/loaderHost.js +89 -0
  262. package/lib/runner/loaderHost.js.map +7 -0
  263. package/lib/runner/processHost.js +161 -0
  264. package/lib/runner/processHost.js.map +7 -0
  265. package/lib/runner/projectUtils.js +241 -0
  266. package/lib/runner/projectUtils.js.map +7 -0
  267. package/lib/runner/rebase.js +189 -0
  268. package/lib/runner/rebase.js.map +7 -0
  269. package/lib/runner/reporters.js +138 -0
  270. package/lib/runner/reporters.js.map +7 -0
  271. package/lib/runner/runner.js +110 -0
  272. package/lib/runner/sigIntWatcher.js +96 -0
  273. package/lib/runner/sigIntWatcher.js.map +7 -0
  274. package/lib/runner/taskRunner.js +127 -0
  275. package/lib/runner/taskRunner.js.map +7 -0
  276. package/lib/runner/tasks.js +410 -0
  277. package/lib/runner/tasks.js.map +7 -0
  278. package/lib/runner/testGroups.js +117 -0
  279. package/lib/runner/testGroups.js.map +7 -0
  280. package/lib/runner/testRunner.js +390 -0
  281. package/lib/runner/testRunner.js.map +7 -0
  282. package/lib/runner/testServer.js +267 -0
  283. package/lib/runner/testServer.js.map +7 -0
  284. package/lib/runner/uiModeReporter.js +30 -0
  285. package/lib/runner/uiModeReporter.js.map +7 -0
  286. package/lib/runner/vcs.js +72 -0
  287. package/lib/runner/vcs.js.map +7 -0
  288. package/lib/runner/watchMode.js +395 -0
  289. package/lib/runner/watchMode.js.map +7 -0
  290. package/lib/runner/workerHost.js +95 -0
  291. package/lib/runner/workerHost.js.map +7 -0
  292. package/lib/third_party/pirates.js +62 -0
  293. package/lib/third_party/pirates.js.map +7 -0
  294. package/lib/third_party/tsconfig-loader.js +103 -0
  295. package/lib/third_party/tsconfig-loader.js.map +7 -0
  296. package/lib/transform/babelBundle.js +43 -0
  297. package/lib/transform/babelBundle.js.map +7 -0
  298. package/lib/transform/babelBundleImpl.js +461 -0
  299. package/lib/transform/babelBundleImpl.js.map +7 -0
  300. package/lib/transform/compilationCache.js +272 -0
  301. package/lib/transform/compilationCache.js.map +7 -0
  302. package/lib/transform/esmLoader.js +104 -0
  303. package/lib/transform/esmLoader.js.map +7 -0
  304. package/lib/transform/portTransport.js +67 -0
  305. package/lib/transform/portTransport.js.map +7 -0
  306. package/lib/transform/transform.js +293 -0
  307. package/lib/transform/transform.js.map +7 -0
  308. package/lib/util.js +403 -0
  309. package/lib/util.js.map +7 -0
  310. package/lib/utilsBundle.js +43 -0
  311. package/lib/utilsBundle.js.map +7 -0
  312. package/lib/utilsBundleImpl.js +100 -0
  313. package/lib/utilsBundleImpl.js.map +7 -0
  314. package/lib/worker/fixtureRunner.js +258 -0
  315. package/lib/worker/fixtureRunner.js.map +7 -0
  316. package/lib/worker/testInfo.js +514 -0
  317. package/lib/worker/testInfo.js.map +7 -0
  318. package/lib/worker/testTracing.js +344 -0
  319. package/lib/worker/testTracing.js.map +7 -0
  320. package/lib/worker/timeoutManager.js +174 -0
  321. package/lib/worker/timeoutManager.js.map +7 -0
  322. package/lib/worker/util.js +31 -0
  323. package/lib/worker/util.js.map +7 -0
  324. package/lib/worker/workerMain.js +520 -0
  325. package/lib/worker/workerMain.js.map +7 -0
  326. package/package.json +74 -0
  327. package/test.d.ts +18 -0
  328. package/test.js +24 -0
  329. package/test.mjs +33 -0
  330. package/types/test.d.ts +10196 -0
  331. package/types/testReporter.d.ts +821 -0
@@ -0,0 +1,267 @@
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 testServer_exports = {};
30
+ __export(testServer_exports, {
31
+ TestServerDispatcher: () => TestServerDispatcher,
32
+ runTestServer: () => runTestServer,
33
+ runUIMode: () => runUIMode
34
+ });
35
+ module.exports = __toCommonJS(testServer_exports);
36
+ var import_util = __toESM(require("util"));
37
+ var import_server = require("playwright-core/lib/server");
38
+ var import_utils = require("playwright-core/lib/utils");
39
+ var import_utilsBundle = require("playwright-core/lib/utilsBundle");
40
+ var import_configLoader = require("../common/configLoader");
41
+ var import_list = __toESM(require("../reporters/list"));
42
+ var import_reporters = require("./reporters");
43
+ var import_sigIntWatcher = require("./sigIntWatcher");
44
+ var import_testRunner = require("./testRunner");
45
+ const originalDebugLog = import_utilsBundle.debug.log;
46
+ const originalStdoutWrite = process.stdout.write;
47
+ const originalStderrWrite = process.stderr.write;
48
+ const originalStdinIsTTY = process.stdin.isTTY;
49
+ class TestServer {
50
+ constructor(configLocation, configCLIOverrides) {
51
+ this._configLocation = configLocation;
52
+ this._configCLIOverrides = configCLIOverrides;
53
+ }
54
+ async start(options) {
55
+ this._dispatcher = new TestServerDispatcher(this._configLocation, this._configCLIOverrides);
56
+ return await (0, import_server.startTraceViewerServer)({ ...options, transport: this._dispatcher.transport });
57
+ }
58
+ async stop() {
59
+ await this._dispatcher?.stop();
60
+ }
61
+ }
62
+ class TestServerDispatcher {
63
+ constructor(configLocation, configCLIOverrides) {
64
+ this._serializer = require.resolve("./uiModeReporter");
65
+ this._closeOnDisconnect = false;
66
+ this._testRunner = new import_testRunner.TestRunner(configLocation, configCLIOverrides);
67
+ this.transport = {
68
+ onconnect: () => {
69
+ },
70
+ dispatch: (method, params) => this[method](params),
71
+ onclose: () => {
72
+ if (this._closeOnDisconnect)
73
+ (0, import_utils.gracefullyProcessExitDoNotHang)(0);
74
+ }
75
+ };
76
+ this._dispatchEvent = (method, params) => this.transport.sendEvent?.(method, params);
77
+ this._testRunner.on(import_testRunner.TestRunnerEvent.TestFilesChanged, (testFiles) => this._dispatchEvent("testFilesChanged", { testFiles }));
78
+ }
79
+ async _wireReporter(messageSink) {
80
+ return await (0, import_reporters.createReporterForTestServer)(this._serializer, messageSink);
81
+ }
82
+ async _collectingReporter() {
83
+ const report = [];
84
+ return {
85
+ reporter: await (0, import_reporters.createReporterForTestServer)(this._serializer, (e) => report.push(e)),
86
+ report
87
+ };
88
+ }
89
+ async initialize(params) {
90
+ this._serializer = params.serializer || require.resolve("./uiModeReporter");
91
+ this._closeOnDisconnect = !!params.closeOnDisconnect;
92
+ await this._testRunner.initialize({
93
+ ...params
94
+ });
95
+ this._setInterceptStdio(!!params.interceptStdio);
96
+ }
97
+ async ping() {
98
+ }
99
+ async open(params) {
100
+ if ((0, import_utils.isUnderTest)())
101
+ return;
102
+ (0, import_utilsBundle.open)("vscode://file/" + params.location.file + ":" + params.location.line).catch((e) => console.error(e));
103
+ }
104
+ async resizeTerminal(params) {
105
+ this._testRunner.resizeTerminal(params);
106
+ }
107
+ async checkBrowsers() {
108
+ return { hasBrowsers: this._testRunner.hasSomeBrowsers() };
109
+ }
110
+ async installBrowsers() {
111
+ await this._testRunner.installBrowsers();
112
+ }
113
+ async runGlobalSetup(params) {
114
+ await this.runGlobalTeardown();
115
+ const { reporter, report } = await this._collectingReporter();
116
+ this._globalSetupReport = report;
117
+ const { status } = await this._testRunner.runGlobalSetup([reporter, new import_list.default()]);
118
+ return { report, status };
119
+ }
120
+ async runGlobalTeardown() {
121
+ const { status } = await this._testRunner.runGlobalTeardown();
122
+ const report = this._globalSetupReport || [];
123
+ this._globalSetupReport = void 0;
124
+ return { status, report };
125
+ }
126
+ async startDevServer(params) {
127
+ await this.stopDevServer({});
128
+ const { reporter, report } = await this._collectingReporter();
129
+ const { status } = await this._testRunner.startDevServer(reporter, "out-of-process");
130
+ return { report, status };
131
+ }
132
+ async stopDevServer(params) {
133
+ const { status } = await this._testRunner.stopDevServer();
134
+ const report = this._devServerReport || [];
135
+ this._devServerReport = void 0;
136
+ return { status, report };
137
+ }
138
+ async clearCache(params) {
139
+ await this._testRunner.clearCache();
140
+ }
141
+ async listFiles(params) {
142
+ const { reporter, report } = await this._collectingReporter();
143
+ const { status } = await this._testRunner.listFiles(reporter, params.projects);
144
+ return { report, status };
145
+ }
146
+ async listTests(params) {
147
+ const { reporter, report } = await this._collectingReporter();
148
+ const { status } = await this._testRunner.listTests(reporter, params);
149
+ return { report, status };
150
+ }
151
+ async runTests(params) {
152
+ const wireReporter = await this._wireReporter((e) => this._dispatchEvent("report", e));
153
+ const { status } = await this._testRunner.runTests(wireReporter, {
154
+ ...params,
155
+ doNotRunDepsOutsideProjectFilter: true
156
+ });
157
+ return { status };
158
+ }
159
+ async watch(params) {
160
+ await this._testRunner.watch(params.fileNames);
161
+ }
162
+ async findRelatedTestFiles(params) {
163
+ return this._testRunner.findRelatedTestFiles(params.files);
164
+ }
165
+ async stopTests() {
166
+ await this._testRunner.stopTests();
167
+ }
168
+ async stop() {
169
+ this._setInterceptStdio(false);
170
+ await this._testRunner.stop();
171
+ }
172
+ async closeGracefully() {
173
+ await this._testRunner.closeGracefully();
174
+ }
175
+ _setInterceptStdio(interceptStdio) {
176
+ if (process.env.PWTEST_DEBUG)
177
+ return;
178
+ if (interceptStdio) {
179
+ if (import_utilsBundle.debug.log === originalDebugLog) {
180
+ import_utilsBundle.debug.log = (...args) => {
181
+ const string = import_util.default.format(...args) + "\n";
182
+ return originalStderrWrite.apply(process.stderr, [string]);
183
+ };
184
+ }
185
+ const stdoutWrite = (chunk) => {
186
+ this._dispatchEvent("stdio", chunkToPayload("stdout", chunk));
187
+ return true;
188
+ };
189
+ const stderrWrite = (chunk) => {
190
+ this._dispatchEvent("stdio", chunkToPayload("stderr", chunk));
191
+ return true;
192
+ };
193
+ process.stdout.write = stdoutWrite;
194
+ process.stderr.write = stderrWrite;
195
+ process.stdin.isTTY = void 0;
196
+ } else {
197
+ import_utilsBundle.debug.log = originalDebugLog;
198
+ process.stdout.write = originalStdoutWrite;
199
+ process.stderr.write = originalStderrWrite;
200
+ process.stdin.isTTY = originalStdinIsTTY;
201
+ }
202
+ }
203
+ }
204
+ async function runUIMode(configFile, configCLIOverrides, options) {
205
+ const configLocation = (0, import_configLoader.resolveConfigLocation)(configFile);
206
+ return await innerRunTestServer(configLocation, configCLIOverrides, options, async (server, cancelPromise) => {
207
+ await (0, import_server.installRootRedirect)(server, void 0, { ...options, webApp: "uiMode.html" });
208
+ if (options.host !== void 0 || options.port !== void 0) {
209
+ await (0, import_server.openTraceInBrowser)(server.urlPrefix("human-readable"));
210
+ } else {
211
+ const channel = await installedChromiumChannelForUI(configLocation, configCLIOverrides);
212
+ const page = await (0, import_server.openTraceViewerApp)(server.urlPrefix("precise"), "chromium", {
213
+ headless: (0, import_utils.isUnderTest)() && process.env.PWTEST_HEADED_FOR_TEST !== "1",
214
+ persistentContextOptions: {
215
+ handleSIGINT: false,
216
+ channel
217
+ }
218
+ });
219
+ page.on("close", () => cancelPromise.resolve());
220
+ }
221
+ });
222
+ }
223
+ async function installedChromiumChannelForUI(configLocation, configCLIOverrides) {
224
+ const config = await (0, import_configLoader.loadConfig)(configLocation, configCLIOverrides).catch((e) => null);
225
+ if (!config)
226
+ return void 0;
227
+ if (config.projects.some((p) => (!p.project.use.browserName || p.project.use.browserName === "chromium") && !p.project.use.channel))
228
+ return void 0;
229
+ for (const channel of ["chromium", "chrome", "msedge"]) {
230
+ if (config.projects.some((p) => p.project.use.channel === channel))
231
+ return channel;
232
+ }
233
+ return void 0;
234
+ }
235
+ async function runTestServer(configFile, configCLIOverrides, options) {
236
+ const configLocation = (0, import_configLoader.resolveConfigLocation)(configFile);
237
+ return await innerRunTestServer(configLocation, configCLIOverrides, options, async (server) => {
238
+ console.log("Listening on " + server.urlPrefix("precise").replace("http:", "ws:") + "/" + server.wsGuid());
239
+ });
240
+ }
241
+ async function innerRunTestServer(configLocation, configCLIOverrides, options, openUI) {
242
+ const testServer = new TestServer(configLocation, configCLIOverrides);
243
+ const cancelPromise = new import_utils.ManualPromise();
244
+ const sigintWatcher = new import_sigIntWatcher.SigIntWatcher();
245
+ process.stdin.on("close", () => (0, import_utils.gracefullyProcessExitDoNotHang)(0));
246
+ void sigintWatcher.promise().then(() => cancelPromise.resolve());
247
+ try {
248
+ const server = await testServer.start(options);
249
+ await openUI(server, cancelPromise);
250
+ await cancelPromise;
251
+ } finally {
252
+ await testServer.stop();
253
+ sigintWatcher.disarm();
254
+ }
255
+ return sigintWatcher.hadSignal() ? "interrupted" : "passed";
256
+ }
257
+ function chunkToPayload(type, chunk) {
258
+ if (chunk instanceof Uint8Array)
259
+ return { type, buffer: chunk.toString("base64") };
260
+ return { type, text: chunk };
261
+ }
262
+ // Annotate the CommonJS export names for ESM import in node:
263
+ 0 && (module.exports = {
264
+ TestServerDispatcher,
265
+ runTestServer,
266
+ runUIMode
267
+ });
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/runner/testServer.ts"],
4
+ "sourcesContent": ["/**\n * Copyright Microsoft Corporation. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport util from 'util';\n\nimport { installRootRedirect, openTraceInBrowser, openTraceViewerApp, startTraceViewerServer } from 'playwright-core/lib/server';\nimport { ManualPromise, gracefullyProcessExitDoNotHang, isUnderTest } from 'playwright-core/lib/utils';\nimport { debug, open } from 'playwright-core/lib/utilsBundle';\n\nimport { loadConfig, resolveConfigLocation } from '../common/configLoader';\nimport ListReporter from '../reporters/list';\nimport { createReporterForTestServer } from './reporters';\nimport { SigIntWatcher } from './sigIntWatcher';\nimport { TestRunner, TestRunnerEvent } from './testRunner';\n\nimport type { TraceViewerRedirectOptions, TraceViewerServerOptions } from 'playwright-core/lib/server/trace/viewer/traceViewer';\nimport type { HttpServer, Transport } from 'playwright-core/lib/utils';\nimport type * as reporterTypes from '../../types/testReporter';\nimport type { ConfigLocation } from '../common/config';\nimport type { ConfigCLIOverrides } from '../common/ipc';\nimport type { ReportEntry, TestServerInterface, TestServerInterfaceEventEmitters } from '../isomorphic/testServerInterface';\nimport type { ReporterV2 } from '../reporters/reporterV2';\n\nconst originalDebugLog = debug.log;\n// eslint-disable-next-line no-restricted-properties\nconst originalStdoutWrite = process.stdout.write;\n// eslint-disable-next-line no-restricted-properties\nconst originalStderrWrite = process.stderr.write;\n\nconst originalStdinIsTTY = process.stdin.isTTY;\n\nclass TestServer {\n private _configLocation: ConfigLocation;\n private _configCLIOverrides: ConfigCLIOverrides;\n private _dispatcher: TestServerDispatcher | undefined;\n\n constructor(configLocation: ConfigLocation, configCLIOverrides: ConfigCLIOverrides) {\n this._configLocation = configLocation;\n this._configCLIOverrides = configCLIOverrides;\n }\n\n async start(options: { host?: string, port?: number }): Promise<HttpServer> {\n this._dispatcher = new TestServerDispatcher(this._configLocation, this._configCLIOverrides);\n return await startTraceViewerServer({ ...options, transport: this._dispatcher.transport });\n }\n\n async stop() {\n await this._dispatcher?.stop();\n }\n}\n\nexport type ListTestsParams = {\n projects?: string[];\n locations?: string[];\n grep?: string;\n grepInvert?: string;\n};\n\nexport type RunTestsParams = {\n locations?: string[];\n grep?: string;\n grepInvert?: string;\n testIds?: string[];\n headed?: boolean;\n workers?: number | string;\n updateSnapshots?: 'all' | 'changed' | 'missing' | 'none';\n updateSourceMethod?: 'overwrite' | 'patch' | '3way';\n reporters?: string[],\n trace?: 'on' | 'off';\n video?: 'on' | 'off';\n projects?: string[];\n reuseContext?: boolean;\n connectWsEndpoint?: string;\n};\n\nexport class TestServerDispatcher implements TestServerInterface {\n readonly transport: Transport;\n private _serializer = require.resolve('./uiModeReporter');\n private _closeOnDisconnect = false;\n private _testRunner: TestRunner;\n private _globalSetupReport: ReportEntry[] | undefined;\n private _devServerReport: ReportEntry[] | undefined;\n readonly _dispatchEvent: TestServerInterfaceEventEmitters['dispatchEvent'];\n\n constructor(configLocation: ConfigLocation, configCLIOverrides: ConfigCLIOverrides) {\n this._testRunner = new TestRunner(configLocation, configCLIOverrides);\n this.transport = {\n onconnect: () => {},\n dispatch: (method, params) => (this as any)[method](params),\n onclose: () => {\n if (this._closeOnDisconnect)\n gracefullyProcessExitDoNotHang(0);\n },\n };\n\n this._dispatchEvent = (method, params) => this.transport.sendEvent?.(method, params);\n this._testRunner.on(TestRunnerEvent.TestFilesChanged, testFiles => this._dispatchEvent('testFilesChanged', { testFiles }));\n }\n\n private async _wireReporter(messageSink: (message: any) => void) {\n return await createReporterForTestServer(this._serializer, messageSink);\n }\n\n private async _collectingReporter(): Promise<{ reporter: ReporterV2, report: ReportEntry[] }> {\n const report: ReportEntry[] = [];\n return {\n reporter: await createReporterForTestServer(this._serializer, e => report.push(e)),\n report,\n };\n }\n\n async initialize(params: Parameters<TestServerInterface['initialize']>[0]): ReturnType<TestServerInterface['initialize']> {\n // Note: this method can be called multiple times, for example from a new connection after UI mode reload.\n this._serializer = params.serializer || require.resolve('./uiModeReporter');\n this._closeOnDisconnect = !!params.closeOnDisconnect;\n await this._testRunner.initialize({\n ...params,\n });\n this._setInterceptStdio(!!params.interceptStdio);\n }\n\n async ping() {}\n\n async open(params: Parameters<TestServerInterface['open']>[0]): ReturnType<TestServerInterface['open']> {\n if (isUnderTest())\n return;\n // eslint-disable-next-line no-console\n open('vscode://file/' + params.location.file + ':' + params.location.line).catch(e => console.error(e));\n }\n\n async resizeTerminal(params: Parameters<TestServerInterface['resizeTerminal']>[0]): ReturnType<TestServerInterface['resizeTerminal']> {\n this._testRunner.resizeTerminal(params);\n }\n\n async checkBrowsers(): Promise<{ hasBrowsers: boolean; }> {\n return { hasBrowsers: this._testRunner.hasSomeBrowsers() };\n }\n\n async installBrowsers() {\n await this._testRunner.installBrowsers();\n }\n\n async runGlobalSetup(params: Parameters<TestServerInterface['runGlobalSetup']>[0]): ReturnType<TestServerInterface['runGlobalSetup']> {\n await this.runGlobalTeardown();\n\n const { reporter, report } = await this._collectingReporter();\n this._globalSetupReport = report;\n const { status } = await this._testRunner.runGlobalSetup([reporter, new ListReporter()]);\n return { report, status };\n }\n\n async runGlobalTeardown() {\n const { status } = await this._testRunner.runGlobalTeardown();\n const report = this._globalSetupReport || [];\n this._globalSetupReport = undefined;\n return { status, report };\n }\n\n async startDevServer(params: Parameters<TestServerInterface['startDevServer']>[0]): ReturnType<TestServerInterface['startDevServer']> {\n await this.stopDevServer({});\n\n const { reporter, report } = await this._collectingReporter();\n const { status } = await this._testRunner.startDevServer(reporter, 'out-of-process');\n return { report, status };\n }\n\n async stopDevServer(params: Parameters<TestServerInterface['stopDevServer']>[0]): ReturnType<TestServerInterface['stopDevServer']> {\n const { status } = await this._testRunner.stopDevServer();\n const report = this._devServerReport || [];\n this._devServerReport = undefined;\n return { status, report };\n }\n\n async clearCache(params: Parameters<TestServerInterface['clearCache']>[0]): ReturnType<TestServerInterface['clearCache']> {\n await this._testRunner.clearCache();\n }\n\n async listFiles(params: Parameters<TestServerInterface['listFiles']>[0]): ReturnType<TestServerInterface['listFiles']> {\n const { reporter, report } = await this._collectingReporter();\n const { status } = await this._testRunner.listFiles(reporter, params.projects);\n return { report, status };\n }\n\n async listTests(params: Parameters<TestServerInterface['listTests']>[0]): ReturnType<TestServerInterface['listTests']> {\n const { reporter, report } = await this._collectingReporter();\n const { status } = await this._testRunner.listTests(reporter, params);\n return { report, status };\n }\n\n async runTests(params: Parameters<TestServerInterface['runTests']>[0]): ReturnType<TestServerInterface['runTests']> {\n const wireReporter = await this._wireReporter(e => this._dispatchEvent('report', e));\n const { status } = await this._testRunner.runTests(wireReporter, {\n ...params,\n doNotRunDepsOutsideProjectFilter: true,\n });\n return { status };\n }\n\n async watch(params: { fileNames: string[]; }) {\n await this._testRunner.watch(params.fileNames);\n }\n\n async findRelatedTestFiles(params: Parameters<TestServerInterface['findRelatedTestFiles']>[0]): ReturnType<TestServerInterface['findRelatedTestFiles']> {\n return this._testRunner.findRelatedTestFiles(params.files);\n }\n\n async stopTests() {\n await this._testRunner.stopTests();\n }\n\n async stop() {\n this._setInterceptStdio(false);\n await this._testRunner.stop();\n }\n\n async closeGracefully() {\n await this._testRunner.closeGracefully();\n }\n\n private _setInterceptStdio(interceptStdio: boolean) {\n /* eslint-disable no-restricted-properties */\n if (process.env.PWTEST_DEBUG)\n return;\n if (interceptStdio) {\n if (debug.log === originalDebugLog) {\n // Only if debug.log hasn't already been tampered with, don't intercept any DEBUG=* logging\n debug.log = (...args) => {\n const string = util.format(...args) + '\\n';\n return (originalStderrWrite as any).apply(process.stderr, [string]);\n };\n }\n const stdoutWrite = (chunk: string | Buffer) => {\n this._dispatchEvent('stdio', chunkToPayload('stdout', chunk));\n return true;\n };\n const stderrWrite = (chunk: string | Buffer) => {\n this._dispatchEvent('stdio', chunkToPayload('stderr', chunk));\n return true;\n };\n process.stdout.write = stdoutWrite;\n process.stderr.write = stderrWrite;\n\n // Override isTTY to prevent reporters from thinking they can block and wait for user SIGINT.\n // We don't have a test for this, so be careful!\n // https://github.com/microsoft/playwright/issues/37867\n // @ts-expect-error types are wrong, isTTY can be undefined\n process.stdin.isTTY = undefined;\n } else {\n debug.log = originalDebugLog;\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n process.stdin.isTTY = originalStdinIsTTY;\n }\n /* eslint-enable no-restricted-properties */\n }\n}\n\nexport async function runUIMode(configFile: string | undefined, configCLIOverrides: ConfigCLIOverrides, options: TraceViewerServerOptions & TraceViewerRedirectOptions): Promise<reporterTypes.FullResult['status']> {\n const configLocation = resolveConfigLocation(configFile);\n return await innerRunTestServer(configLocation, configCLIOverrides, options, async (server: HttpServer, cancelPromise: ManualPromise<void>) => {\n await installRootRedirect(server, undefined, { ...options, webApp: 'uiMode.html' });\n if (options.host !== undefined || options.port !== undefined) {\n await openTraceInBrowser(server.urlPrefix('human-readable'));\n } else {\n const channel = await installedChromiumChannelForUI(configLocation, configCLIOverrides);\n const page = await openTraceViewerApp(server.urlPrefix('precise'), 'chromium', {\n headless: isUnderTest() && process.env.PWTEST_HEADED_FOR_TEST !== '1',\n persistentContextOptions: {\n handleSIGINT: false,\n channel,\n },\n });\n page.on('close', () => cancelPromise.resolve());\n }\n });\n}\n\n// Pick first channel that is used by one of the projects, to ensure it is installed on the machine.\nasync function installedChromiumChannelForUI(configLocation: ConfigLocation, configCLIOverrides: ConfigCLIOverrides) {\n const config = await loadConfig(configLocation, configCLIOverrides).catch(e => null);\n if (!config)\n return undefined;\n if (config.projects.some(p => (!p.project.use.browserName || p.project.use.browserName === 'chromium') && !p.project.use.channel))\n return undefined;\n for (const channel of ['chromium', 'chrome', 'msedge']) {\n if (config.projects.some(p => p.project.use.channel === channel))\n return channel;\n }\n return undefined;\n}\n\nexport async function runTestServer(configFile: string | undefined, configCLIOverrides: ConfigCLIOverrides, options: { host?: string, port?: number }): Promise<reporterTypes.FullResult['status']> {\n const configLocation = resolveConfigLocation(configFile);\n return await innerRunTestServer(configLocation, configCLIOverrides, options, async server => {\n // eslint-disable-next-line no-console\n console.log('Listening on ' + server.urlPrefix('precise').replace('http:', 'ws:') + '/' + server.wsGuid());\n });\n}\n\nasync function innerRunTestServer(configLocation: ConfigLocation, configCLIOverrides: ConfigCLIOverrides, options: { host?: string, port?: number }, openUI: (server: HttpServer, cancelPromise: ManualPromise<void>) => Promise<void>): Promise<reporterTypes.FullResult['status']> {\n const testServer = new TestServer(configLocation, configCLIOverrides);\n const cancelPromise = new ManualPromise<void>();\n const sigintWatcher = new SigIntWatcher();\n process.stdin.on('close', () => gracefullyProcessExitDoNotHang(0));\n void sigintWatcher.promise().then(() => cancelPromise.resolve());\n try {\n const server = await testServer.start(options);\n await openUI(server, cancelPromise);\n await cancelPromise;\n } finally {\n await testServer.stop();\n sigintWatcher.disarm();\n }\n return sigintWatcher.hadSignal() ? 'interrupted' : 'passed';\n}\n\ntype StdioPayload = {\n type: 'stdout' | 'stderr';\n text?: string;\n buffer?: string;\n};\n\nfunction chunkToPayload(type: 'stdout' | 'stderr', chunk: Buffer | string): StdioPayload {\n if (chunk instanceof Uint8Array)\n return { type, buffer: chunk.toString('base64') };\n return { type, text: chunk };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["ListReporter", "util"]
7
+ }
@@ -0,0 +1,30 @@
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 uiModeReporter_exports = {};
20
+ __export(uiModeReporter_exports, {
21
+ default: () => uiModeReporter_default
22
+ });
23
+ module.exports = __toCommonJS(uiModeReporter_exports);
24
+ var import_teleEmitter = require("../reporters/teleEmitter");
25
+ class UIModeReporter extends import_teleEmitter.TeleReporterEmitter {
26
+ constructor(options) {
27
+ super(options._send, { omitBuffers: true });
28
+ }
29
+ }
30
+ var uiModeReporter_default = UIModeReporter;
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/runner/uiModeReporter.ts"],
4
+ "sourcesContent": ["/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TeleReporterEmitter } from '../reporters/teleEmitter';\n\nclass UIModeReporter extends TeleReporterEmitter {\n constructor(options: any) {\n super(options._send, { omitBuffers: true });\n }\n}\n\nexport default UIModeReporter;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,yBAAoC;AAEpC,MAAM,uBAAuB,uCAAoB;AAAA,EAC/C,YAAY,SAAc;AACxB,UAAM,QAAQ,OAAO,EAAE,aAAa,KAAK,CAAC;AAAA,EAC5C;AACF;AAEA,IAAO,yBAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,72 @@
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 vcs_exports = {};
30
+ __export(vcs_exports, {
31
+ detectChangedTestFiles: () => detectChangedTestFiles
32
+ });
33
+ module.exports = __toCommonJS(vcs_exports);
34
+ var import_child_process = __toESM(require("child_process"));
35
+ var import_path = __toESM(require("path"));
36
+ var import_compilationCache = require("../transform/compilationCache");
37
+ async function detectChangedTestFiles(baseCommit, configDir) {
38
+ function gitFileList(command) {
39
+ try {
40
+ return import_child_process.default.execSync(
41
+ `git ${command}`,
42
+ { encoding: "utf-8", stdio: "pipe", cwd: configDir }
43
+ ).split("\n").filter(Boolean);
44
+ } catch (_error) {
45
+ const error = _error;
46
+ const unknownRevision = error.output.some((line) => line?.includes("unknown revision"));
47
+ if (unknownRevision) {
48
+ const isShallowClone = import_child_process.default.execSync("git rev-parse --is-shallow-repository", { encoding: "utf-8", stdio: "pipe", cwd: configDir }).trim() === "true";
49
+ if (isShallowClone) {
50
+ throw new Error([
51
+ `The repository is a shallow clone and does not have '${baseCommit}' available locally.`,
52
+ `Note that GitHub Actions checkout is shallow by default: https://github.com/actions/checkout`
53
+ ].join("\n"));
54
+ }
55
+ }
56
+ throw new Error([
57
+ `Cannot detect changed files for --only-changed mode:`,
58
+ `git ${command}`,
59
+ "",
60
+ ...error.output
61
+ ].join("\n"));
62
+ }
63
+ }
64
+ const untrackedFiles = gitFileList(`ls-files --others --exclude-standard`).map((file) => import_path.default.join(configDir, file));
65
+ const [gitRoot] = gitFileList("rev-parse --show-toplevel");
66
+ const trackedFilesWithChanges = gitFileList(`diff ${baseCommit} --name-only`).map((file) => import_path.default.join(gitRoot, file));
67
+ return new Set((0, import_compilationCache.affectedTestFiles)([...untrackedFiles, ...trackedFilesWithChanges]));
68
+ }
69
+ // Annotate the CommonJS export names for ESM import in node:
70
+ 0 && (module.exports = {
71
+ detectChangedTestFiles
72
+ });
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/runner/vcs.ts"],
4
+ "sourcesContent": ["/**\n * Copyright Microsoft Corporation. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport childProcess from 'child_process';\nimport path from 'path';\n\nimport { affectedTestFiles } from '../transform/compilationCache';\n\nexport async function detectChangedTestFiles(baseCommit: string, configDir: string): Promise<Set<string>> {\n function gitFileList(command: string) {\n try {\n return childProcess.execSync(\n `git ${command}`,\n { encoding: 'utf-8', stdio: 'pipe', cwd: configDir }\n ).split('\\n').filter(Boolean);\n } catch (_error) {\n const error = _error as childProcess.SpawnSyncReturns<string>;\n\n const unknownRevision = error.output.some(line => line?.includes('unknown revision'));\n if (unknownRevision) {\n const isShallowClone = childProcess.execSync('git rev-parse --is-shallow-repository', { encoding: 'utf-8', stdio: 'pipe', cwd: configDir }).trim() === 'true';\n if (isShallowClone) {\n throw new Error([\n `The repository is a shallow clone and does not have '${baseCommit}' available locally.`,\n `Note that GitHub Actions checkout is shallow by default: https://github.com/actions/checkout`\n ].join('\\n'));\n }\n }\n\n throw new Error([\n `Cannot detect changed files for --only-changed mode:`,\n `git ${command}`,\n '',\n ...error.output,\n ].join('\\n'));\n }\n }\n\n const untrackedFiles = gitFileList(`ls-files --others --exclude-standard`).map(file => path.join(configDir, file));\n\n const [gitRoot] = gitFileList('rev-parse --show-toplevel');\n const trackedFilesWithChanges = gitFileList(`diff ${baseCommit} --name-only`).map(file => path.join(gitRoot, file));\n\n return new Set(affectedTestFiles([...untrackedFiles, ...trackedFilesWithChanges]));\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,2BAAyB;AACzB,kBAAiB;AAEjB,8BAAkC;AAElC,eAAsB,uBAAuB,YAAoB,WAAyC;AACxG,WAAS,YAAY,SAAiB;AACpC,QAAI;AACF,aAAO,qBAAAA,QAAa;AAAA,QAChB,OAAO,OAAO;AAAA,QACd,EAAE,UAAU,SAAS,OAAO,QAAQ,KAAK,UAAU;AAAA,MACvD,EAAE,MAAM,IAAI,EAAE,OAAO,OAAO;AAAA,IAC9B,SAAS,QAAQ;AACf,YAAM,QAAQ;AAEd,YAAM,kBAAkB,MAAM,OAAO,KAAK,UAAQ,MAAM,SAAS,kBAAkB,CAAC;AACpF,UAAI,iBAAiB;AACnB,cAAM,iBAAiB,qBAAAA,QAAa,SAAS,yCAAyC,EAAE,UAAU,SAAU,OAAO,QAAQ,KAAK,UAAU,CAAC,EAAE,KAAK,MAAM;AACxJ,YAAI,gBAAgB;AAClB,gBAAM,IAAI,MAAM;AAAA,YACd,wDAAwD,UAAU;AAAA,YAClE;AAAA,UACF,EAAE,KAAK,IAAI,CAAC;AAAA,QACd;AAAA,MACF;AAEA,YAAM,IAAI,MAAM;AAAA,QACd;AAAA,QACA,OAAO,OAAO;AAAA,QACd;AAAA,QACA,GAAG,MAAM;AAAA,MACX,EAAE,KAAK,IAAI,CAAC;AAAA,IACd;AAAA,EACF;AAEA,QAAM,iBAAiB,YAAY,sCAAsC,EAAE,IAAI,UAAQ,YAAAC,QAAK,KAAK,WAAW,IAAI,CAAC;AAEjH,QAAM,CAAC,OAAO,IAAI,YAAY,2BAA2B;AACzD,QAAM,0BAA0B,YAAY,QAAQ,UAAU,cAAc,EAAE,IAAI,UAAQ,YAAAA,QAAK,KAAK,SAAS,IAAI,CAAC;AAElH,SAAO,IAAI,QAAI,2CAAkB,CAAC,GAAG,gBAAgB,GAAG,uBAAuB,CAAC,CAAC;AACnF;",
6
+ "names": ["childProcess", "path"]
7
+ }