patchright-core 1.51.3 → 1.52.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 (303) hide show
  1. package/browsers.json +15 -13
  2. package/lib/androidServerImpl.js +42 -48
  3. package/lib/browserServerImpl.js +54 -67
  4. package/lib/cli/driver.js +71 -69
  5. package/lib/cli/program.js +312 -328
  6. package/lib/cli/programWithTestStub.js +51 -45
  7. package/lib/client/accessibility.js +31 -32
  8. package/lib/client/android.js +141 -228
  9. package/lib/client/api.js +135 -283
  10. package/lib/client/artifact.js +39 -36
  11. package/lib/client/browser.js +57 -61
  12. package/lib/client/browserContext.js +297 -326
  13. package/lib/client/browserType.js +92 -106
  14. package/lib/client/cdpSession.js +29 -31
  15. package/lib/client/channelOwner.js +82 -95
  16. package/lib/client/clientHelper.js +46 -38
  17. package/lib/client/clientInstrumentation.js +40 -37
  18. package/lib/client/clientStackTrace.js +41 -37
  19. package/lib/client/clock.js +36 -36
  20. package/lib/client/connection.js +190 -212
  21. package/lib/client/consoleMessage.js +31 -28
  22. package/lib/client/coverage.js +25 -22
  23. package/lib/client/dialog.js +30 -31
  24. package/lib/client/download.js +25 -25
  25. package/lib/client/electron.js +73 -75
  26. package/lib/client/elementHandle.js +111 -147
  27. package/lib/client/errors.js +53 -53
  28. package/lib/client/eventEmitter.js +124 -121
  29. package/lib/client/events.js +72 -68
  30. package/lib/client/fetch.js +135 -158
  31. package/lib/client/fileChooser.js +25 -24
  32. package/lib/client/fileUtils.js +31 -28
  33. package/lib/client/frame.js +187 -306
  34. package/lib/client/harRouter.js +42 -52
  35. package/lib/client/input.js +40 -69
  36. package/lib/client/jsHandle.js +54 -69
  37. package/lib/client/jsonPipe.js +27 -23
  38. package/lib/client/localUtils.js +29 -28
  39. package/lib/client/locator.js +161 -245
  40. package/lib/client/network.js +277 -295
  41. package/lib/client/page.js +270 -318
  42. package/lib/client/platform.js +46 -43
  43. package/lib/client/playwright.js +51 -66
  44. package/lib/client/selectors.js +48 -46
  45. package/lib/client/stream.js +29 -25
  46. package/lib/client/timeoutSettings.js +49 -39
  47. package/lib/client/tracing.js +48 -84
  48. package/lib/client/types.js +26 -22
  49. package/lib/client/video.js +35 -27
  50. package/lib/client/waiter.js +69 -88
  51. package/lib/client/webError.js +25 -23
  52. package/lib/client/webSocket.js +61 -56
  53. package/lib/client/worker.js +48 -58
  54. package/lib/client/writableStream.js +27 -23
  55. package/lib/generated/clockSource.js +26 -5
  56. package/lib/generated/consoleApiSource.js +26 -5
  57. package/lib/generated/injectedScriptSource.js +26 -5
  58. package/lib/generated/pollingRecorderSource.js +26 -5
  59. package/lib/generated/utilityScriptSource.js +26 -5
  60. package/lib/generated/webSocketMockSource.js +375 -4
  61. package/lib/inProcessFactory.js +53 -53
  62. package/lib/inprocess.js +2 -19
  63. package/lib/outofprocess.js +53 -46
  64. package/lib/protocol/debug.js +209 -25
  65. package/lib/protocol/serializers.js +153 -134
  66. package/lib/protocol/validator.js +2714 -2714
  67. package/lib/protocol/validatorPrimitives.js +114 -73
  68. package/lib/remote/playwrightConnection.js +140 -157
  69. package/lib/remote/playwrightServer.js +99 -84
  70. package/lib/server/accessibility.js +44 -37
  71. package/lib/server/android/android.js +216 -209
  72. package/lib/server/android/backendAdb.js +89 -82
  73. package/lib/server/artifact.js +78 -55
  74. package/lib/server/bidi/bidiBrowser.js +221 -155
  75. package/lib/server/bidi/bidiChromium.js +106 -79
  76. package/lib/server/bidi/bidiConnection.js +66 -83
  77. package/lib/server/bidi/bidiExecutionContext.js +128 -113
  78. package/lib/server/bidi/bidiFirefox.js +76 -69
  79. package/lib/server/bidi/bidiInput.js +86 -97
  80. package/lib/server/bidi/bidiNetworkManager.js +137 -154
  81. package/lib/server/bidi/bidiOverCdp.js +57 -58
  82. package/lib/server/bidi/bidiPage.js +247 -219
  83. package/lib/server/bidi/bidiPdf.js +52 -86
  84. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  85. package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
  86. package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
  87. package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
  88. package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
  89. package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
  90. package/lib/server/browser.js +76 -84
  91. package/lib/server/browserContext.js +321 -346
  92. package/lib/server/browserType.js +169 -182
  93. package/lib/server/callLog.js +47 -44
  94. package/lib/server/chromium/chromium.js +212 -190
  95. package/lib/server/chromium/chromiumSwitches.js +86 -64
  96. package/lib/server/chromium/crAccessibility.js +157 -131
  97. package/lib/server/chromium/crBrowser.js +253 -273
  98. package/lib/server/chromium/crConnection.js +91 -116
  99. package/lib/server/chromium/crCoverage.js +113 -127
  100. package/lib/server/chromium/crDevTools.js +59 -51
  101. package/lib/server/chromium/crDragDrop.js +62 -79
  102. package/lib/server/chromium/crExecutionContext.js +88 -83
  103. package/lib/server/chromium/crInput.js +97 -95
  104. package/lib/server/chromium/crNetworkManager.js +284 -404
  105. package/lib/server/chromium/crPage.js +522 -608
  106. package/lib/server/chromium/crPdf.js +54 -86
  107. package/lib/server/chromium/crProtocolHelper.js +92 -80
  108. package/lib/server/chromium/crServiceWorker.js +82 -67
  109. package/lib/server/chromium/defaultFontFamilies.js +152 -135
  110. package/lib/server/chromium/protocol.d.js +16 -0
  111. package/lib/server/chromium/videoRecorder.js +65 -99
  112. package/lib/server/clock.js +62 -50
  113. package/lib/server/codegen/csharp.js +185 -160
  114. package/lib/server/codegen/java.js +155 -128
  115. package/lib/server/codegen/javascript.js +163 -148
  116. package/lib/server/codegen/jsonl.js +32 -28
  117. package/lib/server/codegen/language.js +75 -52
  118. package/lib/server/codegen/languages.js +65 -27
  119. package/lib/server/codegen/python.js +140 -125
  120. package/lib/server/codegen/types.js +15 -4
  121. package/lib/server/console.js +28 -32
  122. package/lib/server/cookieStore.js +105 -86
  123. package/lib/server/debugController.js +97 -124
  124. package/lib/server/debugger.js +82 -78
  125. package/lib/server/deviceDescriptors.js +37 -24
  126. package/lib/server/deviceDescriptorsSource.json +50 -50
  127. package/lib/server/dialog.js +36 -35
  128. package/lib/server/dispatchers/androidDispatcher.js +196 -107
  129. package/lib/server/dispatchers/artifactDispatcher.js +62 -62
  130. package/lib/server/dispatchers/browserContextDispatcher.js +176 -205
  131. package/lib/server/dispatchers/browserDispatcher.js +78 -97
  132. package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
  133. package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
  134. package/lib/server/dispatchers/debugControllerDispatcher.js +48 -66
  135. package/lib/server/dispatchers/dialogDispatcher.js +30 -27
  136. package/lib/server/dispatchers/dispatcher.js +169 -220
  137. package/lib/server/dispatchers/electronDispatcher.js +54 -57
  138. package/lib/server/dispatchers/elementHandlerDispatcher.js +77 -119
  139. package/lib/server/dispatchers/frameDispatcher.js +99 -163
  140. package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
  141. package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
  142. package/lib/server/dispatchers/localUtilsDispatcher.js +95 -80
  143. package/lib/server/dispatchers/networkDispatchers.js +90 -107
  144. package/lib/server/dispatchers/pageDispatcher.js +128 -169
  145. package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
  146. package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
  147. package/lib/server/dispatchers/streamDispatcher.js +42 -45
  148. package/lib/server/dispatchers/tracingDispatcher.js +36 -41
  149. package/lib/server/dispatchers/webSocketRouteDispatcher.js +96 -131
  150. package/lib/server/dispatchers/writableStreamDispatcher.js +54 -38
  151. package/lib/server/dom.js +413 -443
  152. package/lib/server/download.js +45 -35
  153. package/lib/server/electron/electron.js +156 -176
  154. package/lib/server/electron/loader.js +8 -36
  155. package/lib/server/errors.js +47 -46
  156. package/lib/server/fetch.js +289 -323
  157. package/lib/server/fileChooser.js +25 -24
  158. package/lib/server/fileUploadUtils.js +65 -59
  159. package/lib/server/firefox/ffAccessibility.js +153 -131
  160. package/lib/server/firefox/ffBrowser.js +213 -277
  161. package/lib/server/firefox/ffConnection.js +63 -84
  162. package/lib/server/firefox/ffExecutionContext.js +91 -73
  163. package/lib/server/firefox/ffInput.js +67 -69
  164. package/lib/server/firefox/ffNetworkManager.js +131 -110
  165. package/lib/server/firefox/ffPage.js +236 -273
  166. package/lib/server/firefox/firefox.js +76 -67
  167. package/lib/server/firefox/protocol.d.js +16 -0
  168. package/lib/server/formData.js +107 -35
  169. package/lib/server/frameSelectors.js +77 -111
  170. package/lib/server/frames.js +730 -894
  171. package/lib/server/har/harRecorder.js +85 -77
  172. package/lib/server/har/harTracer.js +287 -222
  173. package/lib/server/harBackend.js +80 -80
  174. package/lib/server/helper.js +56 -59
  175. package/lib/server/index.js +59 -99
  176. package/lib/server/input.js +134 -163
  177. package/lib/server/instrumentation.js +49 -44
  178. package/lib/server/javascript.js +143 -134
  179. package/lib/server/launchApp.js +92 -73
  180. package/lib/server/localUtils.js +130 -122
  181. package/lib/server/macEditingCommands.js +141 -137
  182. package/lib/server/network.js +262 -296
  183. package/lib/server/page.js +329 -426
  184. package/lib/server/pageBinding.js +88 -0
  185. package/lib/server/pipeTransport.js +49 -45
  186. package/lib/server/playwright.js +60 -67
  187. package/lib/server/progress.js +56 -51
  188. package/lib/server/protocolError.js +34 -31
  189. package/lib/server/recorder/chat.js +70 -86
  190. package/lib/server/recorder/contextRecorder.js +134 -138
  191. package/lib/server/recorder/recorderApp.js +127 -136
  192. package/lib/server/recorder/recorderCollection.js +56 -44
  193. package/lib/server/recorder/recorderFrontend.js +15 -4
  194. package/lib/server/recorder/recorderRunner.js +79 -103
  195. package/lib/server/recorder/recorderUtils.js +56 -45
  196. package/lib/server/recorder/throttledFile.js +42 -30
  197. package/lib/server/recorder.js +177 -186
  198. package/lib/server/registry/browserFetcher.js +106 -101
  199. package/lib/server/registry/dependencies.js +245 -196
  200. package/lib/server/registry/index.js +904 -792
  201. package/lib/server/registry/nativeDeps.js +1073 -464
  202. package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
  203. package/lib/server/screenshotter.js +166 -182
  204. package/lib/server/selectors.js +85 -46
  205. package/lib/server/socksClientCertificatesInterceptor.js +166 -185
  206. package/lib/server/socksInterceptor.js +62 -70
  207. package/lib/server/storageScript.js +94 -100
  208. package/lib/server/timeoutSettings.js +58 -43
  209. package/lib/server/trace/recorder/snapshotter.js +70 -89
  210. package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
  211. package/lib/server/trace/recorder/tracing.js +321 -333
  212. package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
  213. package/lib/server/trace/viewer/traceViewer.js +168 -146
  214. package/lib/server/transport.js +124 -133
  215. package/lib/server/types.js +26 -22
  216. package/lib/server/usKeyboardLayout.js +135 -545
  217. package/lib/server/utils/ascii.js +39 -26
  218. package/lib/server/utils/comparators.js +105 -103
  219. package/lib/server/utils/crypto.js +157 -112
  220. package/lib/server/utils/debug.js +37 -28
  221. package/lib/server/utils/debugLogger.js +69 -48
  222. package/lib/server/utils/env.js +52 -37
  223. package/lib/server/utils/eventsHelper.js +29 -28
  224. package/lib/server/utils/expectUtils.js +31 -26
  225. package/lib/server/utils/fileUtils.js +123 -136
  226. package/lib/server/utils/happyEyeballs.js +138 -123
  227. package/lib/server/utils/hostPlatform.js +84 -120
  228. package/lib/server/utils/httpServer.js +106 -121
  229. package/lib/server/utils/image_tools/colorUtils.js +42 -51
  230. package/lib/server/utils/image_tools/compare.js +44 -43
  231. package/lib/server/utils/image_tools/imageChannel.js +38 -30
  232. package/lib/server/utils/image_tools/stats.js +40 -40
  233. package/lib/server/utils/linuxUtils.js +50 -37
  234. package/lib/server/utils/network.js +143 -86
  235. package/lib/server/utils/nodePlatform.js +87 -79
  236. package/lib/server/utils/pipeTransport.js +44 -42
  237. package/lib/server/utils/processLauncher.js +111 -121
  238. package/lib/server/utils/profiler.js +52 -39
  239. package/lib/server/utils/socksProxy.js +280 -339
  240. package/lib/server/utils/spawnAsync.js +37 -41
  241. package/lib/server/utils/task.js +31 -38
  242. package/lib/server/utils/userAgent.js +73 -66
  243. package/lib/server/utils/wsServer.js +73 -69
  244. package/lib/server/utils/zipFile.js +36 -37
  245. package/lib/server/utils/zones.js +37 -34
  246. package/lib/server/webkit/protocol.d.js +16 -0
  247. package/lib/server/webkit/webkit.js +76 -63
  248. package/lib/server/webkit/wkAccessibility.js +161 -118
  249. package/lib/server/webkit/wkBrowser.js +159 -176
  250. package/lib/server/webkit/wkConnection.js +59 -83
  251. package/lib/server/webkit/wkExecutionContext.js +84 -70
  252. package/lib/server/webkit/wkInput.js +82 -80
  253. package/lib/server/webkit/wkInterceptableRequest.js +102 -95
  254. package/lib/server/webkit/wkPage.js +525 -619
  255. package/lib/server/webkit/wkProvisionalPage.js +45 -56
  256. package/lib/server/webkit/wkWorkers.js +77 -77
  257. package/lib/utils/isomorphic/ariaSnapshot.js +144 -152
  258. package/lib/utils/isomorphic/assert.js +28 -22
  259. package/lib/utils/isomorphic/builtins.js +90 -0
  260. package/lib/utils/isomorphic/colors.js +66 -59
  261. package/lib/utils/isomorphic/cssParser.js +121 -125
  262. package/lib/utils/isomorphic/cssTokenizer.js +436 -364
  263. package/lib/utils/isomorphic/headers.js +38 -37
  264. package/lib/utils/isomorphic/locatorGenerators.js +340 -357
  265. package/lib/utils/isomorphic/locatorParser.js +96 -105
  266. package/lib/utils/isomorphic/locatorUtils.js +63 -44
  267. package/lib/utils/isomorphic/manualPromise.js +47 -39
  268. package/lib/utils/isomorphic/mimeType.js +448 -25
  269. package/lib/utils/isomorphic/multimap.js +35 -27
  270. package/lib/utils/isomorphic/rtti.js +35 -33
  271. package/lib/utils/isomorphic/selectorParser.js +183 -193
  272. package/lib/utils/isomorphic/semaphore.js +27 -24
  273. package/lib/utils/isomorphic/stackTrace.js +87 -98
  274. package/lib/utils/isomorphic/stringUtils.js +113 -106
  275. package/lib/utils/isomorphic/time.js +41 -22
  276. package/lib/utils/isomorphic/timeoutRunner.js +55 -54
  277. package/lib/utils/isomorphic/traceUtils.js +38 -41
  278. package/lib/utils/isomorphic/types.js +15 -4
  279. package/lib/utils/isomorphic/urlMatch.js +112 -67
  280. package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
  281. package/lib/utils.js +97 -443
  282. package/lib/utilsBundle.js +101 -52
  283. package/lib/vite/htmlReport/index.html +21 -15
  284. package/lib/vite/recorder/assets/{codeMirrorModule-B9YMkrwa.js → codeMirrorModule-DVQi6prl.js} +1 -1
  285. package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
  286. package/lib/vite/recorder/index.html +1 -1
  287. package/lib/vite/traceViewer/assets/{codeMirrorModule-1DiydmYA.js → codeMirrorModule-dvXVzLxY.js} +1 -1
  288. package/lib/vite/traceViewer/assets/defaultSettingsView-BjymbO6M.js +265 -0
  289. package/lib/vite/traceViewer/{defaultSettingsView.5fN5lw10.css → defaultSettingsView.QdHITyLI.css} +1 -1
  290. package/lib/vite/traceViewer/index.ChIUCJnj.js +2 -0
  291. package/lib/vite/traceViewer/index.html +3 -3
  292. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  293. package/lib/vite/traceViewer/uiMode.html +3 -3
  294. package/lib/vite/traceViewer/uiMode.jUCiCtdp.js +5 -0
  295. package/lib/zipBundle.js +32 -23
  296. package/package.json +1 -1
  297. package/types/protocol.d.ts +436 -17
  298. package/types/types.d.ts +35 -16
  299. package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
  300. package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
  301. package/lib/vite/traceViewer/assets/defaultSettingsView-l0TyP_G8.js +0 -259
  302. package/lib/vite/traceViewer/index.BqUZLSro.js +0 -2
  303. package/lib/vite/traceViewer/uiMode.C1d2m5sF.js +0 -5
@@ -1,51 +1,58 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
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 download_exports = {};
30
+ __export(download_exports, {
31
+ Download: () => Download
5
32
  });
6
- exports.Download = void 0;
7
- var _path = _interopRequireDefault(require("path"));
8
- var _page = require("./page");
9
- var _utils = require("../utils");
10
- var _artifact = require("./artifact");
11
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
- /**
13
- * Copyright (c) Microsoft Corporation.
14
- *
15
- * Licensed under the Apache License, Version 2.0 (the "License");
16
- * you may not use this file except in compliance with the License.
17
- * You may obtain a copy of the License at
18
- *
19
- * http://www.apache.org/licenses/LICENSE-2.0
20
- *
21
- * Unless required by applicable law or agreed to in writing, software
22
- * distributed under the License is distributed on an "AS IS" BASIS,
23
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
- * See the License for the specific language governing permissions and
25
- * limitations under the License.
26
- */
27
-
33
+ module.exports = __toCommonJS(download_exports);
34
+ var import_path = __toESM(require("path"));
35
+ var import_page = require("./page");
36
+ var import_utils = require("../utils");
37
+ var import_artifact = require("./artifact");
28
38
  class Download {
29
39
  constructor(page, downloadsPath, uuid, url, suggestedFilename) {
30
- this.artifact = void 0;
31
- this.url = void 0;
32
- this._page = void 0;
33
- this._suggestedFilename = void 0;
34
- const unaccessibleErrorMessage = page._browserContext._options.acceptDownloads === 'deny' ? 'Pass { acceptDownloads: true } when you are creating your browser context.' : undefined;
35
- this.artifact = new _artifact.Artifact(page, _path.default.join(downloadsPath, uuid), unaccessibleErrorMessage, () => {
40
+ const unaccessibleErrorMessage = page._browserContext._options.acceptDownloads === "deny" ? "Pass { acceptDownloads: true } when you are creating your browser context." : void 0;
41
+ this.artifact = new import_artifact.Artifact(page, import_path.default.join(downloadsPath, uuid), unaccessibleErrorMessage, () => {
36
42
  return this._page._browserContext.cancelDownload(uuid);
37
43
  });
38
44
  this._page = page;
39
45
  this.url = url;
40
46
  this._suggestedFilename = suggestedFilename;
41
47
  page._browserContext._downloads.add(this);
42
- if (suggestedFilename !== undefined) this._fireDownloadEvent();
48
+ if (suggestedFilename !== void 0)
49
+ this._fireDownloadEvent();
43
50
  }
44
51
  page() {
45
52
  return this._page;
46
53
  }
47
54
  _filenameSuggested(suggestedFilename) {
48
- (0, _utils.assert)(this._suggestedFilename === undefined);
55
+ (0, import_utils.assert)(this._suggestedFilename === void 0);
49
56
  this._suggestedFilename = suggestedFilename;
50
57
  this._fireDownloadEvent();
51
58
  }
@@ -54,7 +61,10 @@ class Download {
54
61
  }
55
62
  _fireDownloadEvent() {
56
63
  this._page.instrumentation.onDownload(this._page, this);
57
- this._page.emit(_page.Page.Events.Download, this);
64
+ this._page.emit(import_page.Page.Events.Download, this);
58
65
  }
59
66
  }
60
- exports.Download = Download;
67
+ // Annotate the CommonJS export names for ESM import in node:
68
+ 0 && (module.exports = {
69
+ Download
70
+ });
@@ -1,118 +1,111 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
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 electron_exports = {};
30
+ __export(electron_exports, {
31
+ Electron: () => Electron,
32
+ ElectronApplication: () => ElectronApplication
5
33
  });
6
- exports.ElectronApplication = exports.Electron = void 0;
7
- var _fs = _interopRequireDefault(require("fs"));
8
- var _os = _interopRequireDefault(require("os"));
9
- var _path = _interopRequireDefault(require("path"));
10
- var readline = _interopRequireWildcard(require("readline"));
11
- var _timeoutSettings = require("../timeoutSettings");
12
- var _utils = require("../../utils");
13
- var _ascii = require("../utils/ascii");
14
- var _debugLogger = require("../utils/debugLogger");
15
- var _eventsHelper = require("../utils/eventsHelper");
16
- var _browserContext = require("../browserContext");
17
- var _crBrowser = require("../chromium/crBrowser");
18
- var _crConnection = require("../chromium/crConnection");
19
- var _crExecutionContext = require("../chromium/crExecutionContext");
20
- var _crProtocolHelper = require("../chromium/crProtocolHelper");
21
- var _console = require("../console");
22
- var _helper = require("../helper");
23
- var _instrumentation = require("../instrumentation");
24
- var js = _interopRequireWildcard(require("../javascript"));
25
- var _processLauncher = require("../utils/processLauncher");
26
- var _progress = require("../progress");
27
- var _transport = require("../transport");
28
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
29
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
30
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
31
- /**
32
- * Copyright (c) Microsoft Corporation.
33
- *
34
- * Licensed under the Apache License, Version 2.0 (the "License");
35
- * you may not use this file except in compliance with the License.
36
- * You may obtain a copy of the License at
37
- *
38
- * http://www.apache.org/licenses/LICENSE-2.0
39
- *
40
- * Unless required by applicable law or agreed to in writing, software
41
- * distributed under the License is distributed on an "AS IS" BASIS,
42
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
43
- * See the License for the specific language governing permissions and
44
- * limitations under the License.
45
- */
46
-
47
- const ARTIFACTS_FOLDER = _path.default.join(_os.default.tmpdir(), 'playwright-artifacts-');
48
- class ElectronApplication extends _instrumentation.SdkObject {
49
- constructor(parent, browser, nodeConnection, process) {
50
- super(parent, 'electron-app');
51
- this._browserContext = void 0;
52
- this._nodeConnection = void 0;
53
- this._nodeSession = void 0;
54
- this._nodeExecutionContext = void 0;
55
- this._nodeElectronHandlePromise = new _utils.ManualPromise();
56
- this._timeoutSettings = new _timeoutSettings.TimeoutSettings();
57
- this._process = void 0;
58
- this._process = process;
34
+ module.exports = __toCommonJS(electron_exports);
35
+ var import_fs = __toESM(require("fs"));
36
+ var import_os = __toESM(require("os"));
37
+ var import_path = __toESM(require("path"));
38
+ var readline = __toESM(require("readline"));
39
+ var import_timeoutSettings = require("../timeoutSettings");
40
+ var import_utils = require("../../utils");
41
+ var import_ascii = require("../utils/ascii");
42
+ var import_debugLogger = require("../utils/debugLogger");
43
+ var import_eventsHelper = require("../utils/eventsHelper");
44
+ var import_browserContext = require("../browserContext");
45
+ var import_crBrowser = require("../chromium/crBrowser");
46
+ var import_crConnection = require("../chromium/crConnection");
47
+ var import_crExecutionContext = require("../chromium/crExecutionContext");
48
+ var import_crProtocolHelper = require("../chromium/crProtocolHelper");
49
+ var import_console = require("../console");
50
+ var import_helper = require("../helper");
51
+ var import_instrumentation = require("../instrumentation");
52
+ var js = __toESM(require("../javascript"));
53
+ var import_processLauncher = require("../utils/processLauncher");
54
+ var import_progress = require("../progress");
55
+ var import_transport = require("../transport");
56
+ const ARTIFACTS_FOLDER = import_path.default.join(import_os.default.tmpdir(), "playwright-artifacts-");
57
+ class ElectronApplication extends import_instrumentation.SdkObject {
58
+ constructor(parent, browser, nodeConnection, process2) {
59
+ super(parent, "electron-app");
60
+ this._nodeElectronHandlePromise = new import_utils.ManualPromise();
61
+ this._timeoutSettings = new import_timeoutSettings.TimeoutSettings();
62
+ this._process = process2;
59
63
  this._browserContext = browser._defaultContext;
60
64
  this._nodeConnection = nodeConnection;
61
65
  this._nodeSession = nodeConnection.rootSession;
62
- this._nodeSession.on('Runtime.executionContextCreated', async event => {
63
- if (!event.context.auxData || !event.context.auxData.isDefault) return;
64
- const crExecutionContext = new _crExecutionContext.CRExecutionContext(this._nodeSession, event.context);
65
- this._nodeExecutionContext = new js.ExecutionContext(this, crExecutionContext, 'electron');
66
- const {
67
- result: remoteObject
68
- } = await crExecutionContext._client.send('Runtime.evaluate', {
66
+ this._nodeSession.on("Runtime.executionContextCreated", async (event) => {
67
+ if (!event.context.auxData || !event.context.auxData.isDefault)
68
+ return;
69
+ const crExecutionContext = new import_crExecutionContext.CRExecutionContext(this._nodeSession, event.context);
70
+ this._nodeExecutionContext = new js.ExecutionContext(this, crExecutionContext, "electron");
71
+ const { result: remoteObject } = await crExecutionContext._client.send("Runtime.evaluate", {
69
72
  expression: `require('electron')`,
70
73
  contextId: event.context.id,
71
74
  // Needed after Electron 28 to get access to require: https://github.com/microsoft/playwright/issues/28048
72
75
  includeCommandLineAPI: true
73
76
  });
74
- this._nodeElectronHandlePromise.resolve(new js.JSHandle(this._nodeExecutionContext, 'object', 'ElectronModule', remoteObject.objectId));
77
+ this._nodeElectronHandlePromise.resolve(new js.JSHandle(this._nodeExecutionContext, "object", "ElectronModule", remoteObject.objectId));
75
78
  });
76
- this._nodeSession.on('Runtime.consoleAPICalled', event => this._onConsoleAPI(event));
77
- const appClosePromise = new Promise(f => this.once(ElectronApplication.Events.Close, f));
79
+ this._nodeSession.on("Runtime.consoleAPICalled", (event) => this._onConsoleAPI(event));
80
+ const appClosePromise = new Promise((f) => this.once(ElectronApplication.Events.Close, f));
78
81
  this._browserContext.setCustomCloseHandler(async () => {
79
82
  await this._browserContext.stopVideoRecording();
80
83
  const electronHandle = await this._nodeElectronHandlePromise;
81
- await electronHandle.evaluate(({
82
- app
83
- }) => app.quit()).catch(() => {});
84
+ await electronHandle.evaluate(({ app }) => app.quit()).catch(() => {
85
+ });
84
86
  this._nodeConnection.close();
85
87
  await appClosePromise;
86
88
  });
87
89
  }
90
+ static {
91
+ this.Events = {
92
+ Close: "close",
93
+ Console: "console"
94
+ };
95
+ }
88
96
  async _onConsoleAPI(event) {
89
97
  if (event.executionContextId === 0) {
90
- // DevTools protocol stores the last 1000 console messages. These
91
- // messages are always reported even for removed execution contexts. In
92
- // this case, they are marked with executionContextId = 0 and are
93
- // reported upon enabling Runtime agent.
94
- //
95
- // Ignore these messages since:
96
- // - there's no execution context we can use to operate with message
97
- // arguments
98
- // - these messages are reported before Playwright clients can subscribe
99
- // to the 'console'
100
- // page event.
101
- //
102
- // @see https://github.com/GoogleChrome/puppeteer/issues/3865
103
98
  return;
104
99
  }
105
- if (!this._nodeExecutionContext) return;
106
- const args = event.args.map(arg => (0, _crExecutionContext.createHandle)(this._nodeExecutionContext, arg));
107
- const message = new _console.ConsoleMessage(null, event.type, undefined, args, (0, _crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
100
+ if (!this._nodeExecutionContext)
101
+ return;
102
+ const args = event.args.map((arg) => (0, import_crExecutionContext.createHandle)(this._nodeExecutionContext, arg));
103
+ const message = new import_console.ConsoleMessage(null, event.type, void 0, args, (0, import_crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
108
104
  this.emit(ElectronApplication.Events.Console, message);
109
105
  }
110
106
  async initialize() {
111
- await this._nodeSession.send('Runtime.enable', {});
112
- // Delay loading the app until browser is started and the browser targets are configured to auto-attach.
113
- await this._nodeSession.send('Runtime.evaluate', {
114
- expression: '__playwright_run()'
115
- });
107
+ await this._nodeSession.send("Runtime.enable", {});
108
+ await this._nodeSession.send("Runtime.evaluate", { expression: "__playwright_run()" });
116
109
  }
117
110
  process() {
118
111
  return this._process;
@@ -121,129 +114,109 @@ class ElectronApplication extends _instrumentation.SdkObject {
121
114
  return this._browserContext;
122
115
  }
123
116
  async close() {
124
- // This will call BrowserContext.setCustomCloseHandler.
125
- await this._browserContext.close({
126
- reason: 'Application exited'
127
- });
117
+ await this._browserContext.close({ reason: "Application exited" });
128
118
  }
129
119
  async browserWindow(page) {
130
- // Assume CRPage as Electron is always Chromium.
131
120
  const targetId = page._delegate._targetId;
132
121
  const electronHandle = await this._nodeElectronHandlePromise;
133
- return await electronHandle.evaluateHandle(({
134
- BrowserWindow,
135
- webContents
136
- }, targetId) => {
137
- const wc = webContents.fromDevToolsTargetId(targetId);
122
+ return await electronHandle.evaluateHandle(({ BrowserWindow, webContents }, targetId2) => {
123
+ const wc = webContents.fromDevToolsTargetId(targetId2);
138
124
  return BrowserWindow.fromWebContents(wc);
139
125
  }, targetId);
140
126
  }
141
127
  }
142
- exports.ElectronApplication = ElectronApplication;
143
- ElectronApplication.Events = {
144
- Close: 'close',
145
- Console: 'console'
146
- };
147
- class Electron extends _instrumentation.SdkObject {
128
+ class Electron extends import_instrumentation.SdkObject {
148
129
  constructor(playwright) {
149
- super(playwright, 'electron');
130
+ super(playwright, "electron");
150
131
  }
151
132
  async launch(options) {
152
133
  const {
153
134
  args = []
154
135
  } = options;
155
- const controller = new _progress.ProgressController((0, _instrumentation.serverSideCallMetadata)(), this);
156
- controller.setLogName('browser');
157
- return controller.run(async progress => {
158
- let app = undefined;
159
- // --remote-debugging-port=0 must be the last playwright's argument, loader.ts relies on it.
160
- let electronArguments = ['--inspect=0', '--remote-debugging-port=0', ...args];
161
- if (_os.default.platform() === 'linux') {
136
+ const controller = new import_progress.ProgressController((0, import_instrumentation.serverSideCallMetadata)(), this);
137
+ controller.setLogName("browser");
138
+ return controller.run(async (progress) => {
139
+ let app = void 0;
140
+ let electronArguments = ["--inspect=0", "--remote-debugging-port=0", ...args];
141
+ if (import_os.default.platform() === "linux") {
162
142
  const runningAsRoot = process.geteuid && process.geteuid() === 0;
163
- if (runningAsRoot && electronArguments.indexOf('--no-sandbox') === -1) electronArguments.unshift('--no-sandbox');
143
+ if (runningAsRoot && electronArguments.indexOf("--no-sandbox") === -1)
144
+ electronArguments.unshift("--no-sandbox");
164
145
  }
165
- const artifactsDir = await _fs.default.promises.mkdtemp(ARTIFACTS_FOLDER);
166
- const browserLogsCollector = new _debugLogger.RecentLogsCollector();
167
- const env = options.env ? (0, _processLauncher.envArrayToObject)(options.env) : process.env;
146
+ const artifactsDir = await import_fs.default.promises.mkdtemp(ARTIFACTS_FOLDER);
147
+ const browserLogsCollector = new import_debugLogger.RecentLogsCollector();
148
+ const env = options.env ? (0, import_processLauncher.envArrayToObject)(options.env) : process.env;
168
149
  let command;
169
150
  if (options.executablePath) {
170
151
  command = options.executablePath;
171
152
  } else {
172
153
  try {
173
- // By default we fallback to the Electron App executable path.
174
- // 'electron/index.js' resolves to the actual Electron App.
175
- command = require('electron/index.js');
154
+ command = require("electron/index.js");
176
155
  } catch (error) {
177
- if ((error === null || error === void 0 ? void 0 : error.code) === 'MODULE_NOT_FOUND') {
178
- throw new Error('\n' + (0, _ascii.wrapInASCIIBox)(['Electron executablePath not found!', 'Please install it using `npm install -D electron` or set the executablePath to your Electron executable.'].join('\n'), 1));
156
+ if (error?.code === "MODULE_NOT_FOUND") {
157
+ throw new Error("\n" + (0, import_ascii.wrapInASCIIBox)([
158
+ "Electron executablePath not found!",
159
+ "Please install it using `npm install -D electron` or set the executablePath to your Electron executable."
160
+ ].join("\n"), 1));
179
161
  }
180
162
  throw error;
181
163
  }
182
- // Only use our own loader for non-packaged apps.
183
- // Packaged apps might have their own command line handling.
184
- electronArguments.unshift('-r', require.resolve('./loader'));
164
+ electronArguments.unshift("-r", require.resolve("./loader"));
185
165
  }
186
166
  let shell = false;
187
- if (process.platform === 'win32') {
188
- // On Windows in order to run .cmd files, shell: true is required.
189
- // https://github.com/nodejs/node/issues/52554
167
+ if (process.platform === "win32") {
190
168
  shell = true;
191
- // On Windows, we need to quote the executable path due to shell: true.
192
169
  command = `"${command}"`;
193
- // On Windows, we need to quote the arguments due to shell: true.
194
- electronArguments = electronArguments.map(arg => `"${arg}"`);
170
+ electronArguments = electronArguments.map((arg) => `"${arg}"`);
195
171
  }
196
-
197
- // When debugging Playwright test that runs Electron, NODE_OPTIONS
198
- // will make the debugger attach to Electron's Node. But Playwright
199
- // also needs to attach to drive the automation. Disable external debugging.
200
172
  delete env.NODE_OPTIONS;
201
- const {
202
- launchedProcess,
203
- gracefullyClose,
204
- kill
205
- } = await (0, _processLauncher.launchProcess)({
173
+ const { launchedProcess, gracefullyClose, kill } = await (0, import_processLauncher.launchProcess)({
206
174
  command,
207
175
  args: electronArguments,
208
176
  env,
209
- log: message => {
177
+ log: (message) => {
210
178
  progress.log(message);
211
179
  browserLogsCollector.log(message);
212
180
  },
213
181
  shell,
214
- stdio: 'pipe',
182
+ stdio: "pipe",
215
183
  cwd: options.cwd,
216
184
  tempDirectories: [artifactsDir],
217
185
  attemptToGracefullyClose: () => app.close(),
218
186
  handleSIGINT: true,
219
187
  handleSIGTERM: true,
220
188
  handleSIGHUP: true,
221
- onExit: () => {
222
- var _app;
223
- return (_app = app) === null || _app === void 0 ? void 0 : _app.emit(ElectronApplication.Events.Close);
224
- }
189
+ onExit: () => app?.emit(ElectronApplication.Events.Close)
225
190
  });
226
-
227
- // All waitForLines must be started immediately.
228
- // Otherwise the lines might come before we are ready.
229
191
  const waitForXserverError = new Promise(async (resolve, reject) => {
230
- waitForLine(progress, launchedProcess, /Unable to open X display/).then(() => reject(new Error(['Unable to open X display!', `================================`, 'Most likely this is because there is no X server available.', "Use 'xvfb-run' on Linux to launch your tests with an emulated display server.", "For example: 'xvfb-run npm run test:e2e'", `================================`, progress.metadata.log].join('\n')))).catch(() => {});
192
+ waitForLine(progress, launchedProcess, /Unable to open X display/).then(() => reject(new Error([
193
+ "Unable to open X display!",
194
+ `================================`,
195
+ "Most likely this is because there is no X server available.",
196
+ "Use 'xvfb-run' on Linux to launch your tests with an emulated display server.",
197
+ "For example: 'xvfb-run npm run test:e2e'",
198
+ `================================`,
199
+ progress.metadata.log
200
+ ].join("\n")))).catch(() => {
201
+ });
231
202
  });
232
203
  const nodeMatchPromise = waitForLine(progress, launchedProcess, /^Debugger listening on (ws:\/\/.*)$/);
233
204
  const chromeMatchPromise = waitForLine(progress, launchedProcess, /^DevTools listening on (ws:\/\/.*)$/);
234
205
  const debuggerDisconnectPromise = waitForLine(progress, launchedProcess, /Waiting for the debugger to disconnect\.\.\./);
235
206
  const nodeMatch = await nodeMatchPromise;
236
- const nodeTransport = await _transport.WebSocketTransport.connect(progress, nodeMatch[1]);
237
- const nodeConnection = new _crConnection.CRConnection(nodeTransport, _helper.helper.debugProtocolLogger(), browserLogsCollector);
238
-
239
- // Immediately release exiting process under debug.
207
+ const nodeTransport = await import_transport.WebSocketTransport.connect(progress, nodeMatch[1]);
208
+ const nodeConnection = new import_crConnection.CRConnection(nodeTransport, import_helper.helper.debugProtocolLogger(), browserLogsCollector);
240
209
  debuggerDisconnectPromise.then(() => {
241
210
  nodeTransport.close();
242
- }).catch(() => {});
243
- const chromeMatch = await Promise.race([chromeMatchPromise, waitForXserverError]);
244
- const chromeTransport = await _transport.WebSocketTransport.connect(progress, chromeMatch[1]);
211
+ }).catch(() => {
212
+ });
213
+ const chromeMatch = await Promise.race([
214
+ chromeMatchPromise,
215
+ waitForXserverError
216
+ ]);
217
+ const chromeTransport = await import_transport.WebSocketTransport.connect(progress, chromeMatch[1]);
245
218
  const browserProcess = {
246
- onclose: undefined,
219
+ onclose: void 0,
247
220
  process: launchedProcess,
248
221
  close: gracefullyClose,
249
222
  kill
@@ -253,45 +226,52 @@ class Electron extends _instrumentation.SdkObject {
253
226
  noDefaultViewport: true
254
227
  };
255
228
  const browserOptions = {
256
- name: 'electron',
229
+ name: "electron",
257
230
  isChromium: true,
258
231
  headful: true,
259
232
  persistent: contextOptions,
260
233
  browserProcess,
261
- protocolLogger: _helper.helper.debugProtocolLogger(),
234
+ protocolLogger: import_helper.helper.debugProtocolLogger(),
262
235
  browserLogsCollector,
263
236
  artifactsDir,
264
237
  downloadsPath: artifactsDir,
265
238
  tracesDir: options.tracesDir || artifactsDir,
266
239
  originalLaunchOptions: {}
267
240
  };
268
- (0, _browserContext.validateBrowserContextOptions)(contextOptions, browserOptions);
269
- const browser = await _crBrowser.CRBrowser.connect(this.attribution.playwright, chromeTransport, browserOptions);
241
+ (0, import_browserContext.validateBrowserContextOptions)(contextOptions, browserOptions);
242
+ const browser = await import_crBrowser.CRBrowser.connect(this.attribution.playwright, chromeTransport, browserOptions);
270
243
  app = new ElectronApplication(this, browser, nodeConnection, launchedProcess);
271
244
  await app.initialize();
272
245
  return app;
273
- }, _timeoutSettings.TimeoutSettings.launchTimeout(options));
246
+ }, import_timeoutSettings.TimeoutSettings.launchTimeout(options));
274
247
  }
275
248
  }
276
- exports.Electron = Electron;
277
- function waitForLine(progress, process, regex) {
249
+ function waitForLine(progress, process2, regex) {
278
250
  return new Promise((resolve, reject) => {
279
- const rl = readline.createInterface({
280
- input: process.stderr
281
- });
282
- const failError = new Error('Process failed to launch!');
283
- const listeners = [_eventsHelper.eventsHelper.addEventListener(rl, 'line', onLine), _eventsHelper.eventsHelper.addEventListener(rl, 'close', reject.bind(null, failError)), _eventsHelper.eventsHelper.addEventListener(process, 'exit', reject.bind(null, failError)),
284
- // It is Ok to remove error handler because we did not create process and there is another listener.
285
- _eventsHelper.eventsHelper.addEventListener(process, 'error', reject.bind(null, failError))];
251
+ const rl = readline.createInterface({ input: process2.stderr });
252
+ const failError = new Error("Process failed to launch!");
253
+ const listeners = [
254
+ import_eventsHelper.eventsHelper.addEventListener(rl, "line", onLine),
255
+ import_eventsHelper.eventsHelper.addEventListener(rl, "close", reject.bind(null, failError)),
256
+ import_eventsHelper.eventsHelper.addEventListener(process2, "exit", reject.bind(null, failError)),
257
+ // It is Ok to remove error handler because we did not create process and there is another listener.
258
+ import_eventsHelper.eventsHelper.addEventListener(process2, "error", reject.bind(null, failError))
259
+ ];
286
260
  progress.cleanupWhenAborted(cleanup);
287
261
  function onLine(line) {
288
262
  const match = line.match(regex);
289
- if (!match) return;
263
+ if (!match)
264
+ return;
290
265
  cleanup();
291
266
  resolve(match);
292
267
  }
293
268
  function cleanup() {
294
- _eventsHelper.eventsHelper.removeEventListeners(listeners);
269
+ import_eventsHelper.eventsHelper.removeEventListeners(listeners);
295
270
  }
296
271
  });
297
- }
272
+ }
273
+ // Annotate the CommonJS export names for ESM import in node:
274
+ 0 && (module.exports = {
275
+ Electron,
276
+ ElectronApplication
277
+ });
@@ -1,57 +1,29 @@
1
1
  "use strict";
2
-
3
- /**
4
- * Copyright (c) Microsoft Corporation.
5
- *
6
- * Licensed under the Apache License, Version 2.0 (the "License");
7
- * you may not use this file except in compliance with the License.
8
- * You may obtain a copy of the License at
9
- *
10
- * http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing, software
13
- * distributed under the License is distributed on an "AS IS" BASIS,
14
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- * See the License for the specific language governing permissions and
16
- * limitations under the License.
17
- */
18
-
19
- const {
20
- app
21
- } = require('electron');
22
- const {
23
- chromiumSwitches
24
- } = require('../chromium/chromiumSwitches');
25
-
26
- // Always pass user arguments first, see https://github.com/microsoft/playwright/issues/16614 and
27
- // https://github.com/microsoft/playwright/issues/29198.
28
- // [Electron, -r, loader.js[, --no-sandbox>], --inspect=0, --remote-debugging-port=0, ...args]
29
- process.argv.splice(1, process.argv.indexOf('--remote-debugging-port=0'));
2
+ const { app } = require("electron");
3
+ const { chromiumSwitches } = require("../chromium/chromiumSwitches");
4
+ process.argv.splice(1, process.argv.indexOf("--remote-debugging-port=0"));
30
5
  for (const arg of chromiumSwitches) {
31
6
  const match = arg.match(/--([^=]*)=?(.*)/);
32
7
  app.commandLine.appendSwitch(match[1], match[2]);
33
8
  }
34
-
35
- // Defer ready event.
36
9
  const originalWhenReady = app.whenReady();
37
10
  const originalEmit = app.emit.bind(app);
38
11
  let readyEventArgs;
39
12
  app.emit = (event, ...args) => {
40
- if (event === 'ready') {
13
+ if (event === "ready") {
41
14
  readyEventArgs = args;
42
- return app.listenerCount('ready') > 0;
15
+ return app.listenerCount("ready") > 0;
43
16
  }
44
17
  return originalEmit(event, ...args);
45
18
  };
46
19
  let isReady = false;
47
20
  let whenReadyCallback;
48
- const whenReadyPromise = new Promise(f => whenReadyCallback = f);
21
+ const whenReadyPromise = new Promise((f) => whenReadyCallback = f);
49
22
  app.isReady = () => isReady;
50
23
  app.whenReady = () => whenReadyPromise;
51
24
  globalThis.__playwright_run = async () => {
52
- // Wait for app to be ready to avoid browser initialization races.
53
25
  const event = await originalWhenReady;
54
26
  isReady = true;
55
27
  whenReadyCallback(event);
56
- originalEmit('ready', ...readyEventArgs);
57
- };
28
+ originalEmit("ready", ...readyEventArgs);
29
+ };