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,230 +1,205 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
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 playwrightConnection_exports = {};
20
+ __export(playwrightConnection_exports, {
21
+ PlaywrightConnection: () => PlaywrightConnection
5
22
  });
6
- exports.PlaywrightConnection = void 0;
7
- var _socksProxy = require("../server/utils/socksProxy");
8
- var _server = require("../server");
9
- var _android = require("../server/android/android");
10
- var _browser = require("../server/browser");
11
- var _debugControllerDispatcher = require("../server/dispatchers/debugControllerDispatcher");
12
- var _instrumentation = require("../server/instrumentation");
13
- var _assert = require("../utils/isomorphic/assert");
14
- var _debug = require("../server/utils/debug");
15
- var _profiler = require("../server/utils/profiler");
16
- var _utils = require("../utils");
17
- var _debugLogger = require("../server/utils/debugLogger");
18
- /**
19
- * Copyright (c) Microsoft Corporation.
20
- *
21
- * Licensed under the Apache License, Version 2.0 (the "License");
22
- * you may not use this file except in compliance with the License.
23
- * You may obtain a copy of the License at
24
- *
25
- * http://www.apache.org/licenses/LICENSE-2.0
26
- *
27
- * Unless required by applicable law or agreed to in writing, software
28
- * distributed under the License is distributed on an "AS IS" BASIS,
29
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
30
- * See the License for the specific language governing permissions and
31
- * limitations under the License.
32
- */
33
-
23
+ module.exports = __toCommonJS(playwrightConnection_exports);
24
+ var import_socksProxy = require("../server/utils/socksProxy");
25
+ var import_server = require("../server");
26
+ var import_android = require("../server/android/android");
27
+ var import_browser = require("../server/browser");
28
+ var import_debugControllerDispatcher = require("../server/dispatchers/debugControllerDispatcher");
29
+ var import_instrumentation = require("../server/instrumentation");
30
+ var import_assert = require("../utils/isomorphic/assert");
31
+ var import_debug = require("../server/utils/debug");
32
+ var import_profiler = require("../server/utils/profiler");
33
+ var import_utils = require("../utils");
34
+ var import_debugLogger = require("../server/utils/debugLogger");
34
35
  class PlaywrightConnection {
35
36
  constructor(lock, clientType, ws, options, preLaunched, id, onClose) {
36
- this._ws = void 0;
37
- this._onClose = void 0;
38
- this._dispatcherConnection = void 0;
39
37
  this._cleanups = [];
40
- this._id = void 0;
41
38
  this._disconnected = false;
42
- this._preLaunched = void 0;
43
- this._options = void 0;
44
- this._root = void 0;
45
- this._profileName = void 0;
46
39
  this._ws = ws;
47
40
  this._preLaunched = preLaunched;
48
41
  this._options = options;
49
42
  options.launchOptions = filterLaunchOptions(options.launchOptions, options.allowFSPaths);
50
- if (clientType === 'reuse-browser' || clientType === 'pre-launched-browser-or-android') (0, _assert.assert)(preLaunched.playwright);
51
- if (clientType === 'pre-launched-browser-or-android') (0, _assert.assert)(preLaunched.browser || preLaunched.androidDevice);
43
+ if (clientType === "reuse-browser" || clientType === "pre-launched-browser-or-android")
44
+ (0, import_assert.assert)(preLaunched.playwright);
45
+ if (clientType === "pre-launched-browser-or-android")
46
+ (0, import_assert.assert)(preLaunched.browser || preLaunched.androidDevice);
52
47
  this._onClose = onClose;
53
48
  this._id = id;
54
- this._profileName = `${new Date().toISOString()}-${clientType}`;
55
- this._dispatcherConnection = new _server.DispatcherConnection();
56
- this._dispatcherConnection.onmessage = async message => {
49
+ this._profileName = `${(/* @__PURE__ */ new Date()).toISOString()}-${clientType}`;
50
+ this._dispatcherConnection = new import_server.DispatcherConnection();
51
+ this._dispatcherConnection.onmessage = async (message) => {
57
52
  await lock;
58
53
  if (ws.readyState !== ws.CLOSING) {
59
54
  const messageString = JSON.stringify(message);
60
- if (_debugLogger.debugLogger.isEnabled('server:channel')) _debugLogger.debugLogger.log('server:channel', `[${this._id}] ${(0, _utils.monotonicTime)() * 1000} SEND ► ${messageString}`);
61
- if (_debugLogger.debugLogger.isEnabled('server:metadata')) this.logServerMetadata(message, messageString, 'SEND');
55
+ if (import_debugLogger.debugLogger.isEnabled("server:channel"))
56
+ import_debugLogger.debugLogger.log("server:channel", `[${this._id}] ${(0, import_utils.monotonicTime)() * 1e3} SEND \u25BA ${messageString}`);
57
+ if (import_debugLogger.debugLogger.isEnabled("server:metadata"))
58
+ this.logServerMetadata(message, messageString, "SEND");
62
59
  ws.send(messageString);
63
60
  }
64
61
  };
65
- ws.on('message', async message => {
62
+ ws.on("message", async (message) => {
66
63
  await lock;
67
64
  const messageString = Buffer.from(message).toString();
68
65
  const jsonMessage = JSON.parse(messageString);
69
- if (_debugLogger.debugLogger.isEnabled('server:channel')) _debugLogger.debugLogger.log('server:channel', `[${this._id}] ${(0, _utils.monotonicTime)() * 1000} ◀ RECV ${messageString}`);
70
- if (_debugLogger.debugLogger.isEnabled('server:metadata')) this.logServerMetadata(jsonMessage, messageString, 'RECV');
66
+ if (import_debugLogger.debugLogger.isEnabled("server:channel"))
67
+ import_debugLogger.debugLogger.log("server:channel", `[${this._id}] ${(0, import_utils.monotonicTime)() * 1e3} \u25C0 RECV ${messageString}`);
68
+ if (import_debugLogger.debugLogger.isEnabled("server:metadata"))
69
+ this.logServerMetadata(jsonMessage, messageString, "RECV");
71
70
  this._dispatcherConnection.dispatch(jsonMessage);
72
71
  });
73
- ws.on('close', () => this._onDisconnect());
74
- ws.on('error', error => this._onDisconnect(error));
75
- if (clientType === 'controller') {
72
+ ws.on("close", () => this._onDisconnect());
73
+ ws.on("error", (error) => this._onDisconnect(error));
74
+ if (clientType === "controller") {
76
75
  this._root = this._initDebugControllerMode();
77
76
  return;
78
77
  }
79
- this._root = new _server.RootDispatcher(this._dispatcherConnection, async (scope, options) => {
80
- await (0, _profiler.startProfiling)();
81
- if (clientType === 'reuse-browser') return await this._initReuseBrowsersMode(scope);
82
- if (clientType === 'pre-launched-browser-or-android') return this._preLaunched.browser ? await this._initPreLaunchedBrowserMode(scope) : await this._initPreLaunchedAndroidMode(scope);
83
- if (clientType === 'launch-browser') return await this._initLaunchBrowserMode(scope, options);
84
- throw new Error('Unsupported client type: ' + clientType);
78
+ this._root = new import_server.RootDispatcher(this._dispatcherConnection, async (scope, options2) => {
79
+ await (0, import_profiler.startProfiling)();
80
+ if (clientType === "reuse-browser")
81
+ return await this._initReuseBrowsersMode(scope);
82
+ if (clientType === "pre-launched-browser-or-android")
83
+ return this._preLaunched.browser ? await this._initPreLaunchedBrowserMode(scope) : await this._initPreLaunchedAndroidMode(scope);
84
+ if (clientType === "launch-browser")
85
+ return await this._initLaunchBrowserMode(scope, options2);
86
+ throw new Error("Unsupported client type: " + clientType);
85
87
  });
86
88
  }
87
89
  async _initLaunchBrowserMode(scope, options) {
88
- _debugLogger.debugLogger.log('server', `[${this._id}] engaged launch mode for "${this._options.browserName}"`);
89
- const playwright = (0, _server.createPlaywright)({
90
- sdkLanguage: options.sdkLanguage,
91
- isServer: true
92
- });
90
+ import_debugLogger.debugLogger.log("server", `[${this._id}] engaged launch mode for "${this._options.browserName}"`);
91
+ const playwright = (0, import_server.createPlaywright)({ sdkLanguage: options.sdkLanguage, isServer: true });
93
92
  const ownedSocksProxy = await this._createOwnedSocksProxy(playwright);
94
93
  let browserName = this._options.browserName;
95
- if ('bidi' === browserName) {
96
- var _this$_options$launch;
97
- if ((_this$_options$launch = this._options.launchOptions) !== null && _this$_options$launch !== void 0 && (_this$_options$launch = _this$_options$launch.channel) !== null && _this$_options$launch !== void 0 && _this$_options$launch.toLocaleLowerCase().includes('firefox')) browserName = 'bidiFirefox';else browserName = 'bidiChromium';
94
+ if ("bidi" === browserName) {
95
+ if (this._options.launchOptions?.channel?.toLocaleLowerCase().includes("firefox"))
96
+ browserName = "bidiFirefox";
97
+ else
98
+ browserName = "bidiChromium";
98
99
  }
99
- const browser = await playwright[browserName].launch((0, _instrumentation.serverSideCallMetadata)(), this._options.launchOptions);
100
+ const browser = await playwright[browserName].launch((0, import_instrumentation.serverSideCallMetadata)(), this._options.launchOptions);
100
101
  this._cleanups.push(async () => {
101
- for (const browser of playwright.allBrowsers()) await browser.close({
102
- reason: 'Connection terminated'
103
- });
102
+ for (const browser2 of playwright.allBrowsers())
103
+ await browser2.close({ reason: "Connection terminated" });
104
104
  });
105
- browser.on(_browser.Browser.Events.Disconnected, () => {
106
- // Underlying browser did close for some reason - force disconnect the client.
107
- this.close({
108
- code: 1001,
109
- reason: 'Browser closed'
110
- });
105
+ browser.on(import_browser.Browser.Events.Disconnected, () => {
106
+ this.close({ code: 1001, reason: "Browser closed" });
111
107
  });
112
- return new _server.PlaywrightDispatcher(scope, playwright, ownedSocksProxy, browser);
108
+ return new import_server.PlaywrightDispatcher(scope, playwright, ownedSocksProxy, browser);
113
109
  }
114
110
  async _initPreLaunchedBrowserMode(scope) {
115
- var _this$_preLaunched$so;
116
- _debugLogger.debugLogger.log('server', `[${this._id}] engaged pre-launched (browser) mode`);
111
+ import_debugLogger.debugLogger.log("server", `[${this._id}] engaged pre-launched (browser) mode`);
117
112
  const playwright = this._preLaunched.playwright;
118
-
119
- // Note: connected client owns the socks proxy and configures the pattern.
120
- (_this$_preLaunched$so = this._preLaunched.socksProxy) === null || _this$_preLaunched$so === void 0 || _this$_preLaunched$so.setPattern(this._options.socksProxyPattern);
113
+ this._preLaunched.socksProxy?.setPattern(this._options.socksProxyPattern);
121
114
  const browser = this._preLaunched.browser;
122
- browser.on(_browser.Browser.Events.Disconnected, () => {
123
- // Underlying browser did close for some reason - force disconnect the client.
124
- this.close({
125
- code: 1001,
126
- reason: 'Browser closed'
127
- });
115
+ browser.on(import_browser.Browser.Events.Disconnected, () => {
116
+ this.close({ code: 1001, reason: "Browser closed" });
128
117
  });
129
- const playwrightDispatcher = new _server.PlaywrightDispatcher(scope, playwright, this._preLaunched.socksProxy, browser);
130
- // In pre-launched mode, keep only the pre-launched browser.
118
+ const playwrightDispatcher = new import_server.PlaywrightDispatcher(scope, playwright, this._preLaunched.socksProxy, browser);
131
119
  for (const b of playwright.allBrowsers()) {
132
- if (b !== browser) await b.close({
133
- reason: 'Connection terminated'
134
- });
120
+ if (b !== browser)
121
+ await b.close({ reason: "Connection terminated" });
135
122
  }
136
123
  this._cleanups.push(() => playwrightDispatcher.cleanup());
137
124
  return playwrightDispatcher;
138
125
  }
139
126
  async _initPreLaunchedAndroidMode(scope) {
140
- _debugLogger.debugLogger.log('server', `[${this._id}] engaged pre-launched (Android) mode`);
127
+ import_debugLogger.debugLogger.log("server", `[${this._id}] engaged pre-launched (Android) mode`);
141
128
  const playwright = this._preLaunched.playwright;
142
129
  const androidDevice = this._preLaunched.androidDevice;
143
- androidDevice.on(_android.AndroidDevice.Events.Close, () => {
144
- // Underlying browser did close for some reason - force disconnect the client.
145
- this.close({
146
- code: 1001,
147
- reason: 'Android device disconnected'
148
- });
130
+ androidDevice.on(import_android.AndroidDevice.Events.Close, () => {
131
+ this.close({ code: 1001, reason: "Android device disconnected" });
149
132
  });
150
- const playwrightDispatcher = new _server.PlaywrightDispatcher(scope, playwright, undefined, undefined, androidDevice);
133
+ const playwrightDispatcher = new import_server.PlaywrightDispatcher(scope, playwright, void 0, void 0, androidDevice);
151
134
  this._cleanups.push(() => playwrightDispatcher.cleanup());
152
135
  return playwrightDispatcher;
153
136
  }
154
137
  _initDebugControllerMode() {
155
- _debugLogger.debugLogger.log('server', `[${this._id}] engaged reuse controller mode`);
138
+ import_debugLogger.debugLogger.log("server", `[${this._id}] engaged reuse controller mode`);
156
139
  const playwright = this._preLaunched.playwright;
157
- // Always create new instance based on the reused Playwright instance.
158
- return new _debugControllerDispatcher.DebugControllerDispatcher(this._dispatcherConnection, playwright.debugController);
140
+ return new import_debugControllerDispatcher.DebugControllerDispatcher(this._dispatcherConnection, playwright.debugController);
159
141
  }
160
142
  async _initReuseBrowsersMode(scope) {
161
- // Note: reuse browser mode does not support socks proxy, because
162
- // clients come and go, while the browser stays the same.
163
-
164
- _debugLogger.debugLogger.log('server', `[${this._id}] engaged reuse browsers mode for ${this._options.browserName}`);
143
+ import_debugLogger.debugLogger.log("server", `[${this._id}] engaged reuse browsers mode for ${this._options.browserName}`);
165
144
  const playwright = this._preLaunched.playwright;
166
145
  const requestedOptions = launchOptionsHash(this._options.launchOptions);
167
- let browser = playwright.allBrowsers().find(b => {
168
- if (b.options.name !== this._options.browserName) return false;
146
+ let browser = playwright.allBrowsers().find((b) => {
147
+ if (b.options.name !== this._options.browserName)
148
+ return false;
169
149
  const existingOptions = launchOptionsHash(b.options.originalLaunchOptions);
170
150
  return existingOptions === requestedOptions;
171
151
  });
172
-
173
- // Close remaining browsers of this type+channel. Keep different browser types for the speed.
174
152
  for (const b of playwright.allBrowsers()) {
175
- if (b === browser) continue;
176
- if (b.options.name === this._options.browserName && b.options.channel === this._options.launchOptions.channel) await b.close({
177
- reason: 'Connection terminated'
178
- });
153
+ if (b === browser)
154
+ continue;
155
+ if (b.options.name === this._options.browserName && b.options.channel === this._options.launchOptions.channel)
156
+ await b.close({ reason: "Connection terminated" });
179
157
  }
180
158
  if (!browser) {
181
- browser = await playwright[this._options.browserName || 'chromium'].launch((0, _instrumentation.serverSideCallMetadata)(), {
159
+ browser = await playwright[this._options.browserName || "chromium"].launch((0, import_instrumentation.serverSideCallMetadata)(), {
182
160
  ...this._options.launchOptions,
183
161
  headless: !!process.env.PW_DEBUG_CONTROLLER_HEADLESS
184
162
  });
185
- browser.on(_browser.Browser.Events.Disconnected, () => {
186
- // Underlying browser did close for some reason - force disconnect the client.
187
- this.close({
188
- code: 1001,
189
- reason: 'Browser closed'
190
- });
163
+ browser.on(import_browser.Browser.Events.Disconnected, () => {
164
+ this.close({ code: 1001, reason: "Browser closed" });
191
165
  });
192
166
  }
193
167
  this._cleanups.push(async () => {
194
- // Don't close the pages so that user could debug them,
195
- // but close all the empty browsers and contexts to clean up.
196
- for (const browser of playwright.allBrowsers()) {
197
- for (const context of browser.contexts()) {
198
- if (!context.pages().length) await context.close({
199
- reason: 'Connection terminated'
200
- });else await context.stopPendingOperations('Connection closed');
168
+ for (const browser2 of playwright.allBrowsers()) {
169
+ for (const context of browser2.contexts()) {
170
+ if (!context.pages().length)
171
+ await context.close({ reason: "Connection terminated" });
172
+ else
173
+ await context.stopPendingOperations("Connection closed");
201
174
  }
202
- if (!browser.contexts()) await browser.close({
203
- reason: 'Connection terminated'
204
- });
175
+ if (!browser2.contexts())
176
+ await browser2.close({ reason: "Connection terminated" });
205
177
  }
206
178
  });
207
- const playwrightDispatcher = new _server.PlaywrightDispatcher(scope, playwright, undefined, browser);
179
+ const playwrightDispatcher = new import_server.PlaywrightDispatcher(scope, playwright, void 0, browser);
208
180
  return playwrightDispatcher;
209
181
  }
210
182
  async _createOwnedSocksProxy(playwright) {
211
- if (!this._options.socksProxyPattern) return;
212
- const socksProxy = new _socksProxy.SocksProxy();
183
+ if (!this._options.socksProxyPattern)
184
+ return;
185
+ const socksProxy = new import_socksProxy.SocksProxy();
213
186
  socksProxy.setPattern(this._options.socksProxyPattern);
214
187
  playwright.options.socksProxyPort = await socksProxy.listen(0);
215
- _debugLogger.debugLogger.log('server', `[${this._id}] started socks proxy on port ${playwright.options.socksProxyPort}`);
188
+ import_debugLogger.debugLogger.log("server", `[${this._id}] started socks proxy on port ${playwright.options.socksProxyPort}`);
216
189
  this._cleanups.push(() => socksProxy.close());
217
190
  return socksProxy;
218
191
  }
219
192
  async _onDisconnect(error) {
220
193
  this._disconnected = true;
221
- _debugLogger.debugLogger.log('server', `[${this._id}] disconnected. error: ${error}`);
194
+ import_debugLogger.debugLogger.log("server", `[${this._id}] disconnected. error: ${error}`);
222
195
  this._root._dispose();
223
- _debugLogger.debugLogger.log('server', `[${this._id}] starting cleanup`);
224
- for (const cleanup of this._cleanups) await cleanup().catch(() => {});
225
- await (0, _profiler.stopProfiling)(this._profileName);
196
+ import_debugLogger.debugLogger.log("server", `[${this._id}] starting cleanup`);
197
+ for (const cleanup of this._cleanups)
198
+ await cleanup().catch(() => {
199
+ });
200
+ await (0, import_profiler.stopProfiling)(this._profileName);
226
201
  this._onClose();
227
- _debugLogger.debugLogger.log('server', `[${this._id}] finished cleanup`);
202
+ import_debugLogger.debugLogger.log("server", `[${this._id}] finished cleanup`);
228
203
  }
229
204
  logServerMetadata(message, messageString, direction) {
230
205
  const serverLogMetadata = {
@@ -232,28 +207,29 @@ class PlaywrightConnection {
232
207
  id: message.id,
233
208
  guid: message.guid,
234
209
  method: message.method,
235
- payloadSizeInBytes: Buffer.byteLength(messageString, 'utf-8')
210
+ payloadSizeInBytes: Buffer.byteLength(messageString, "utf-8")
236
211
  };
237
- _debugLogger.debugLogger.log('server:metadata', (direction === 'SEND' ? 'SEND ' : '◀ RECV ') + JSON.stringify(serverLogMetadata));
212
+ import_debugLogger.debugLogger.log("server:metadata", (direction === "SEND" ? "SEND \u25BA " : "\u25C0 RECV ") + JSON.stringify(serverLogMetadata));
238
213
  }
239
214
  async close(reason) {
240
- if (this._disconnected) return;
241
- _debugLogger.debugLogger.log('server', `[${this._id}] force closing connection: ${(reason === null || reason === void 0 ? void 0 : reason.reason) || ''} (${(reason === null || reason === void 0 ? void 0 : reason.code) || 0})`);
215
+ if (this._disconnected)
216
+ return;
217
+ import_debugLogger.debugLogger.log("server", `[${this._id}] force closing connection: ${reason?.reason || ""} (${reason?.code || 0})`);
242
218
  try {
243
- this._ws.close(reason === null || reason === void 0 ? void 0 : reason.code, reason === null || reason === void 0 ? void 0 : reason.reason);
244
- } catch (e) {}
219
+ this._ws.close(reason?.code, reason?.reason);
220
+ } catch (e) {
221
+ }
245
222
  }
246
223
  }
247
- exports.PlaywrightConnection = PlaywrightConnection;
248
224
  function launchOptionsHash(options) {
249
- const copy = {
250
- ...options
251
- };
225
+ const copy = { ...options };
252
226
  for (const k of Object.keys(copy)) {
253
227
  const key = k;
254
- if (copy[key] === defaultLaunchOptions[key]) delete copy[key];
228
+ if (copy[key] === defaultLaunchOptions[key])
229
+ delete copy[key];
255
230
  }
256
- for (const key of optionsThatAllowBrowserReuse) delete copy[key];
231
+ for (const key of optionsThatAllowBrowserReuse)
232
+ delete copy[key];
257
233
  return JSON.stringify(copy);
258
234
  }
259
235
  function filterLaunchOptions(options, allowFSPaths) {
@@ -268,8 +244,8 @@ function filterLaunchOptions(options, allowFSPaths) {
268
244
  chromiumSandbox: options.chromiumSandbox,
269
245
  firefoxUserPrefs: options.firefoxUserPrefs,
270
246
  slowMo: options.slowMo,
271
- executablePath: (0, _debug.isUnderTest)() || allowFSPaths ? options.executablePath : undefined,
272
- downloadsPath: allowFSPaths ? options.downloadsPath : undefined
247
+ executablePath: (0, import_debug.isUnderTest)() || allowFSPaths ? options.executablePath : void 0,
248
+ downloadsPath: allowFSPaths ? options.downloadsPath : void 0
273
249
  };
274
250
  }
275
251
  const defaultLaunchOptions = {
@@ -280,4 +256,11 @@ const defaultLaunchOptions = {
280
256
  headless: true,
281
257
  devtools: false
282
258
  };
283
- const optionsThatAllowBrowserReuse = ['headless', 'tracesDir'];
259
+ const optionsThatAllowBrowserReuse = [
260
+ "headless",
261
+ "tracesDir"
262
+ ];
263
+ // Annotate the CommonJS export names for ESM import in node:
264
+ 0 && (module.exports = {
265
+ PlaywrightConnection
266
+ });
@@ -1,104 +1,105 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
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 playwrightServer_exports = {};
20
+ __export(playwrightServer_exports, {
21
+ PlaywrightServer: () => PlaywrightServer
5
22
  });
6
- exports.PlaywrightServer = void 0;
7
- var _playwrightConnection = require("./playwrightConnection");
8
- var _playwright = require("../server/playwright");
9
- var _debugLogger = require("../server/utils/debugLogger");
10
- var _semaphore = require("../utils/isomorphic/semaphore");
11
- var _wsServer = require("../server/utils/wsServer");
12
- var _ascii = require("../server/utils/ascii");
13
- var _userAgent = require("../server/utils/userAgent");
14
- /**
15
- * Copyright (c) Microsoft Corporation.
16
- *
17
- * Licensed under the Apache License, Version 2.0 (the "License");
18
- * you may not use this file except in compliance with the License.
19
- * You may obtain a copy of the License at
20
- *
21
- * http://www.apache.org/licenses/LICENSE-2.0
22
- *
23
- * Unless required by applicable law or agreed to in writing, software
24
- * distributed under the License is distributed on an "AS IS" BASIS,
25
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26
- * See the License for the specific language governing permissions and
27
- * limitations under the License.
28
- */
29
-
23
+ module.exports = __toCommonJS(playwrightServer_exports);
24
+ var import_playwrightConnection = require("./playwrightConnection");
25
+ var import_playwright = require("../server/playwright");
26
+ var import_debugLogger = require("../server/utils/debugLogger");
27
+ var import_semaphore = require("../utils/isomorphic/semaphore");
28
+ var import_wsServer = require("../server/utils/wsServer");
29
+ var import_ascii = require("../server/utils/ascii");
30
+ var import_userAgent = require("../server/utils/userAgent");
30
31
  class PlaywrightServer {
31
32
  constructor(options) {
32
- this._preLaunchedPlaywright = void 0;
33
- this._options = void 0;
34
- this._wsServer = void 0;
35
33
  this._options = options;
36
- if (options.preLaunchedBrowser) this._preLaunchedPlaywright = options.preLaunchedBrowser.attribution.playwright;
37
- if (options.preLaunchedAndroidDevice) this._preLaunchedPlaywright = options.preLaunchedAndroidDevice._android.attribution.playwright;
38
- const browserSemaphore = new _semaphore.Semaphore(this._options.maxConnections);
39
- const controllerSemaphore = new _semaphore.Semaphore(1);
40
- const reuseBrowserSemaphore = new _semaphore.Semaphore(1);
41
- this._wsServer = new _wsServer.WSServer({
34
+ if (options.preLaunchedBrowser)
35
+ this._preLaunchedPlaywright = options.preLaunchedBrowser.attribution.playwright;
36
+ if (options.preLaunchedAndroidDevice)
37
+ this._preLaunchedPlaywright = options.preLaunchedAndroidDevice._android.attribution.playwright;
38
+ const browserSemaphore = new import_semaphore.Semaphore(this._options.maxConnections);
39
+ const controllerSemaphore = new import_semaphore.Semaphore(1);
40
+ const reuseBrowserSemaphore = new import_semaphore.Semaphore(1);
41
+ this._wsServer = new import_wsServer.WSServer({
42
42
  onUpgrade: (request, socket) => {
43
- const uaError = userAgentVersionMatchesErrorMessage(request.headers['user-agent'] || '');
44
- if (uaError) return {
45
- error: `HTTP/${request.httpVersion} 428 Precondition Required\r\n\r\n${uaError}`
46
- };
43
+ const uaError = userAgentVersionMatchesErrorMessage(request.headers["user-agent"] || "");
44
+ if (uaError)
45
+ return { error: `HTTP/${request.httpVersion} 428 Precondition Required\r
46
+ \r
47
+ ${uaError}` };
47
48
  },
48
- onHeaders: headers => {
49
- if (process.env.PWTEST_SERVER_WS_HEADERS) headers.push(process.env.PWTEST_SERVER_WS_HEADERS);
49
+ onHeaders: (headers) => {
50
+ if (process.env.PWTEST_SERVER_WS_HEADERS)
51
+ headers.push(process.env.PWTEST_SERVER_WS_HEADERS);
50
52
  },
51
53
  onConnection: (request, url, ws, id) => {
52
- const browserHeader = request.headers['x-playwright-browser'];
53
- const browserName = url.searchParams.get('browser') || (Array.isArray(browserHeader) ? browserHeader[0] : browserHeader) || null;
54
- const proxyHeader = request.headers['x-playwright-proxy'];
55
- const proxyValue = url.searchParams.get('proxy') || (Array.isArray(proxyHeader) ? proxyHeader[0] : proxyHeader);
56
- const launchOptionsHeader = request.headers['x-playwright-launch-options'] || '';
54
+ const browserHeader = request.headers["x-playwright-browser"];
55
+ const browserName = url.searchParams.get("browser") || (Array.isArray(browserHeader) ? browserHeader[0] : browserHeader) || null;
56
+ const proxyHeader = request.headers["x-playwright-proxy"];
57
+ const proxyValue = url.searchParams.get("proxy") || (Array.isArray(proxyHeader) ? proxyHeader[0] : proxyHeader);
58
+ const launchOptionsHeader = request.headers["x-playwright-launch-options"] || "";
57
59
  const launchOptionsHeaderValue = Array.isArray(launchOptionsHeader) ? launchOptionsHeader[0] : launchOptionsHeader;
58
- const launchOptionsParam = url.searchParams.get('launch-options');
60
+ const launchOptionsParam = url.searchParams.get("launch-options");
59
61
  let launchOptions = {};
60
62
  try {
61
63
  launchOptions = JSON.parse(launchOptionsParam || launchOptionsHeaderValue);
62
- } catch (e) {}
63
-
64
- // Instantiate playwright for the extension modes.
65
- const isExtension = this._options.mode === 'extension';
64
+ } catch (e) {
65
+ }
66
+ const isExtension = this._options.mode === "extension";
66
67
  if (isExtension) {
67
- if (!this._preLaunchedPlaywright) this._preLaunchedPlaywright = (0, _playwright.createPlaywright)({
68
- sdkLanguage: 'javascript',
69
- isServer: true
70
- });
68
+ if (!this._preLaunchedPlaywright)
69
+ this._preLaunchedPlaywright = (0, import_playwright.createPlaywright)({ sdkLanguage: "javascript", isServer: true });
71
70
  }
72
- let clientType = 'launch-browser';
71
+ let clientType = "launch-browser";
73
72
  let semaphore = browserSemaphore;
74
- if (isExtension && url.searchParams.has('debug-controller')) {
75
- clientType = 'controller';
73
+ if (isExtension && url.searchParams.has("debug-controller")) {
74
+ clientType = "controller";
76
75
  semaphore = controllerSemaphore;
77
76
  } else if (isExtension) {
78
- clientType = 'reuse-browser';
77
+ clientType = "reuse-browser";
79
78
  semaphore = reuseBrowserSemaphore;
80
- } else if (this._options.mode === 'launchServer') {
81
- clientType = 'pre-launched-browser-or-android';
79
+ } else if (this._options.mode === "launchServer") {
80
+ clientType = "pre-launched-browser-or-android";
82
81
  semaphore = browserSemaphore;
83
82
  }
84
- return new _playwrightConnection.PlaywrightConnection(semaphore.acquire(), clientType, ws, {
85
- socksProxyPattern: proxyValue,
86
- browserName,
87
- launchOptions,
88
- allowFSPaths: this._options.mode === 'extension'
89
- }, {
90
- playwright: this._preLaunchedPlaywright,
91
- browser: this._options.preLaunchedBrowser,
92
- androidDevice: this._options.preLaunchedAndroidDevice,
93
- socksProxy: this._options.preLaunchedSocksProxy
94
- }, id, () => semaphore.release());
83
+ return new import_playwrightConnection.PlaywrightConnection(
84
+ semaphore.acquire(),
85
+ clientType,
86
+ ws,
87
+ { socksProxyPattern: proxyValue, browserName, launchOptions, allowFSPaths: this._options.mode === "extension" },
88
+ {
89
+ playwright: this._preLaunchedPlaywright,
90
+ browser: this._options.preLaunchedBrowser,
91
+ androidDevice: this._options.preLaunchedAndroidDevice,
92
+ socksProxy: this._options.preLaunchedSocksProxy
93
+ },
94
+ id,
95
+ () => semaphore.release()
96
+ );
95
97
  },
96
98
  onClose: async () => {
97
- _debugLogger.debugLogger.log('server', 'closing browsers');
98
- if (this._preLaunchedPlaywright) await Promise.all(this._preLaunchedPlaywright.allBrowsers().map(browser => browser.close({
99
- reason: 'Playwright Server stopped'
100
- })));
101
- _debugLogger.debugLogger.log('server', 'closed browsers');
99
+ import_debugLogger.debugLogger.log("server", "closing browsers");
100
+ if (this._preLaunchedPlaywright)
101
+ await Promise.all(this._preLaunchedPlaywright.allBrowsers().map((browser) => browser.close({ reason: "Playwright Server stopped" })));
102
+ import_debugLogger.debugLogger.log("server", "closed browsers");
102
103
  }
103
104
  });
104
105
  }
@@ -109,16 +110,30 @@ class PlaywrightServer {
109
110
  await this._wsServer.close();
110
111
  }
111
112
  }
112
- exports.PlaywrightServer = PlaywrightServer;
113
113
  function userAgentVersionMatchesErrorMessage(userAgent) {
114
114
  const match = userAgent.match(/^Playwright\/(\d+\.\d+\.\d+)/);
115
115
  if (!match) {
116
- // Cannot parse user agent - be lax.
117
116
  return;
118
117
  }
119
- const received = match[1].split('.').slice(0, 2).join('.');
120
- const expected = (0, _userAgent.getPlaywrightVersion)(true);
118
+ const received = match[1].split(".").slice(0, 2).join(".");
119
+ const expected = (0, import_userAgent.getPlaywrightVersion)(true);
121
120
  if (received !== expected) {
122
- return (0, _ascii.wrapInASCIIBox)([`Playwright version mismatch:`, ` - server version: v${expected}`, ` - client version: v${received}`, ``, `If you are using VSCode extension, restart VSCode.`, ``, `If you are connecting to a remote service,`, `keep your local Playwright version in sync`, `with the remote service version.`, ``, `<3 Playwright Team`].join('\n'), 1);
121
+ return (0, import_ascii.wrapInASCIIBox)([
122
+ `Playwright version mismatch:`,
123
+ ` - server version: v${expected}`,
124
+ ` - client version: v${received}`,
125
+ ``,
126
+ `If you are using VSCode extension, restart VSCode.`,
127
+ ``,
128
+ `If you are connecting to a remote service,`,
129
+ `keep your local Playwright version in sync`,
130
+ `with the remote service version.`,
131
+ ``,
132
+ `<3 Playwright Team`
133
+ ].join("\n"), 1);
123
134
  }
124
- }
135
+ }
136
+ // Annotate the CommonJS export names for ESM import in node:
137
+ 0 && (module.exports = {
138
+ PlaywrightServer
139
+ });