patchright-core 1.48.2

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 (333) hide show
  1. package/README.md +3 -0
  2. package/ThirdPartyNotices.txt +1548 -0
  3. package/bin/PrintDeps.exe +0 -0
  4. package/bin/README.md +2 -0
  5. package/bin/install_media_pack.ps1 +5 -0
  6. package/bin/reinstall_chrome_beta_linux.sh +40 -0
  7. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  8. package/bin/reinstall_chrome_beta_win.ps1 +24 -0
  9. package/bin/reinstall_chrome_stable_linux.sh +40 -0
  10. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  11. package/bin/reinstall_chrome_stable_win.ps1 +24 -0
  12. package/bin/reinstall_msedge_beta_linux.sh +40 -0
  13. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  14. package/bin/reinstall_msedge_beta_win.ps1 +23 -0
  15. package/bin/reinstall_msedge_dev_linux.sh +40 -0
  16. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  17. package/bin/reinstall_msedge_dev_win.ps1 +23 -0
  18. package/bin/reinstall_msedge_stable_linux.sh +40 -0
  19. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  20. package/bin/reinstall_msedge_stable_win.ps1 +24 -0
  21. package/browsers.json +57 -0
  22. package/cli.js +18 -0
  23. package/index.d.ts +17 -0
  24. package/index.js +33 -0
  25. package/index.mjs +28 -0
  26. package/lib/androidServerImpl.js +69 -0
  27. package/lib/browserServerImpl.js +92 -0
  28. package/lib/cli/driver.js +95 -0
  29. package/lib/cli/program.js +589 -0
  30. package/lib/cli/programWithTestStub.js +67 -0
  31. package/lib/client/accessibility.js +50 -0
  32. package/lib/client/android.js +473 -0
  33. package/lib/client/api.js +285 -0
  34. package/lib/client/artifact.js +79 -0
  35. package/lib/client/browser.js +145 -0
  36. package/lib/client/browserContext.js +583 -0
  37. package/lib/client/browserType.js +241 -0
  38. package/lib/client/cdpSession.js +53 -0
  39. package/lib/client/channelOwner.js +235 -0
  40. package/lib/client/clientHelper.js +57 -0
  41. package/lib/client/clientInstrumentation.js +50 -0
  42. package/lib/client/clock.js +69 -0
  43. package/lib/client/connection.js +333 -0
  44. package/lib/client/consoleMessage.js +55 -0
  45. package/lib/client/coverage.js +41 -0
  46. package/lib/client/dialog.js +57 -0
  47. package/lib/client/download.js +62 -0
  48. package/lib/client/electron.js +135 -0
  49. package/lib/client/elementHandle.js +321 -0
  50. package/lib/client/errors.js +77 -0
  51. package/lib/client/eventEmitter.js +314 -0
  52. package/lib/client/events.js +94 -0
  53. package/lib/client/fetch.js +391 -0
  54. package/lib/client/fileChooser.js +45 -0
  55. package/lib/client/frame.js +504 -0
  56. package/lib/client/harRouter.js +99 -0
  57. package/lib/client/input.js +111 -0
  58. package/lib/client/jsHandle.js +121 -0
  59. package/lib/client/jsonPipe.js +35 -0
  60. package/lib/client/localUtils.js +36 -0
  61. package/lib/client/locator.js +441 -0
  62. package/lib/client/network.js +762 -0
  63. package/lib/client/page.js +770 -0
  64. package/lib/client/playwright.js +80 -0
  65. package/lib/client/selectors.js +67 -0
  66. package/lib/client/stream.js +54 -0
  67. package/lib/client/tracing.js +134 -0
  68. package/lib/client/types.js +24 -0
  69. package/lib/client/video.js +51 -0
  70. package/lib/client/waiter.js +158 -0
  71. package/lib/client/webError.js +37 -0
  72. package/lib/client/worker.js +71 -0
  73. package/lib/client/writableStream.js +54 -0
  74. package/lib/common/socksProxy.js +569 -0
  75. package/lib/common/timeoutSettings.js +73 -0
  76. package/lib/common/types.js +5 -0
  77. package/lib/generated/clockSource.js +7 -0
  78. package/lib/generated/consoleApiSource.js +7 -0
  79. package/lib/generated/injectedScriptSource.js +7 -0
  80. package/lib/generated/pollingRecorderSource.js +7 -0
  81. package/lib/generated/utilityScriptSource.js +7 -0
  82. package/lib/generated/webSocketMockSource.js +7 -0
  83. package/lib/image_tools/colorUtils.js +98 -0
  84. package/lib/image_tools/compare.js +108 -0
  85. package/lib/image_tools/imageChannel.js +70 -0
  86. package/lib/image_tools/stats.js +102 -0
  87. package/lib/inProcessFactory.js +54 -0
  88. package/lib/inprocess.js +20 -0
  89. package/lib/outofprocess.js +67 -0
  90. package/lib/protocol/debug.js +27 -0
  91. package/lib/protocol/serializers.js +173 -0
  92. package/lib/protocol/transport.js +82 -0
  93. package/lib/protocol/validator.js +2760 -0
  94. package/lib/protocol/validatorPrimitives.js +139 -0
  95. package/lib/remote/playwrightConnection.js +274 -0
  96. package/lib/remote/playwrightServer.js +110 -0
  97. package/lib/server/accessibility.js +62 -0
  98. package/lib/server/android/android.js +441 -0
  99. package/lib/server/android/backendAdb.js +172 -0
  100. package/lib/server/artifact.js +104 -0
  101. package/lib/server/bidi/bidiBrowser.js +311 -0
  102. package/lib/server/bidi/bidiChromium.js +124 -0
  103. package/lib/server/bidi/bidiConnection.js +206 -0
  104. package/lib/server/bidi/bidiExecutionContext.js +159 -0
  105. package/lib/server/bidi/bidiFirefox.js +104 -0
  106. package/lib/server/bidi/bidiInput.js +158 -0
  107. package/lib/server/bidi/bidiNetworkManager.js +338 -0
  108. package/lib/server/bidi/bidiOverCdp.js +103 -0
  109. package/lib/server/bidi/bidiPage.js +529 -0
  110. package/lib/server/bidi/bidiPdf.js +140 -0
  111. package/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
  112. package/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
  113. package/lib/server/bidi/third_party/bidiProtocol.js +139 -0
  114. package/lib/server/bidi/third_party/bidiSerializer.js +144 -0
  115. package/lib/server/bidi/third_party/firefoxPrefs.js +221 -0
  116. package/lib/server/browser.js +148 -0
  117. package/lib/server/browserContext.js +666 -0
  118. package/lib/server/browserType.js +335 -0
  119. package/lib/server/chromium/appIcon.png +0 -0
  120. package/lib/server/chromium/chromium.js +350 -0
  121. package/lib/server/chromium/chromiumSwitches.js +36 -0
  122. package/lib/server/chromium/crAccessibility.js +237 -0
  123. package/lib/server/chromium/crBrowser.js +522 -0
  124. package/lib/server/chromium/crConnection.js +228 -0
  125. package/lib/server/chromium/crCoverage.js +246 -0
  126. package/lib/server/chromium/crDevTools.js +104 -0
  127. package/lib/server/chromium/crDragDrop.js +143 -0
  128. package/lib/server/chromium/crExecutionContext.js +149 -0
  129. package/lib/server/chromium/crInput.js +171 -0
  130. package/lib/server/chromium/crNetworkManager.js +809 -0
  131. package/lib/server/chromium/crPage.js +1235 -0
  132. package/lib/server/chromium/crPdf.js +153 -0
  133. package/lib/server/chromium/crProtocolHelper.js +133 -0
  134. package/lib/server/chromium/crServiceWorker.js +111 -0
  135. package/lib/server/chromium/defaultFontFamilies.js +145 -0
  136. package/lib/server/chromium/videoRecorder.js +155 -0
  137. package/lib/server/clock.js +133 -0
  138. package/lib/server/codegen/csharp.js +299 -0
  139. package/lib/server/codegen/java.js +235 -0
  140. package/lib/server/codegen/javascript.js +223 -0
  141. package/lib/server/codegen/jsonl.js +47 -0
  142. package/lib/server/codegen/language.js +88 -0
  143. package/lib/server/codegen/languages.js +30 -0
  144. package/lib/server/codegen/python.js +265 -0
  145. package/lib/server/codegen/types.js +5 -0
  146. package/lib/server/console.js +57 -0
  147. package/lib/server/cookieStore.js +185 -0
  148. package/lib/server/debugController.js +234 -0
  149. package/lib/server/debugger.js +132 -0
  150. package/lib/server/deviceDescriptors.js +26 -0
  151. package/lib/server/deviceDescriptorsSource.json +1669 -0
  152. package/lib/server/dialog.js +71 -0
  153. package/lib/server/dispatchers/androidDispatcher.js +193 -0
  154. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  155. package/lib/server/dispatchers/browserContextDispatcher.js +368 -0
  156. package/lib/server/dispatchers/browserDispatcher.js +170 -0
  157. package/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
  158. package/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
  159. package/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
  160. package/lib/server/dispatchers/dialogDispatcher.js +44 -0
  161. package/lib/server/dispatchers/dispatcher.js +395 -0
  162. package/lib/server/dispatchers/electronDispatcher.js +93 -0
  163. package/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
  164. package/lib/server/dispatchers/frameDispatcher.js +286 -0
  165. package/lib/server/dispatchers/jsHandleDispatcher.js +97 -0
  166. package/lib/server/dispatchers/jsonPipeDispatcher.js +59 -0
  167. package/lib/server/dispatchers/localUtilsDispatcher.js +413 -0
  168. package/lib/server/dispatchers/networkDispatchers.js +221 -0
  169. package/lib/server/dispatchers/pageDispatcher.js +367 -0
  170. package/lib/server/dispatchers/playwrightDispatcher.js +107 -0
  171. package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
  172. package/lib/server/dispatchers/streamDispatcher.js +62 -0
  173. package/lib/server/dispatchers/tracingDispatcher.js +54 -0
  174. package/lib/server/dispatchers/webSocketRouteDispatcher.js +189 -0
  175. package/lib/server/dispatchers/writableStreamDispatcher.js +58 -0
  176. package/lib/server/dom.js +845 -0
  177. package/lib/server/download.js +60 -0
  178. package/lib/server/electron/electron.js +296 -0
  179. package/lib/server/electron/loader.js +57 -0
  180. package/lib/server/errors.js +68 -0
  181. package/lib/server/fetch.js +656 -0
  182. package/lib/server/fileChooser.js +42 -0
  183. package/lib/server/fileUploadUtils.js +75 -0
  184. package/lib/server/firefox/ffAccessibility.js +216 -0
  185. package/lib/server/firefox/ffBrowser.js +460 -0
  186. package/lib/server/firefox/ffConnection.js +168 -0
  187. package/lib/server/firefox/ffExecutionContext.js +135 -0
  188. package/lib/server/firefox/ffInput.js +150 -0
  189. package/lib/server/firefox/ffNetworkManager.js +233 -0
  190. package/lib/server/firefox/ffPage.js +559 -0
  191. package/lib/server/firefox/firefox.js +99 -0
  192. package/lib/server/formData.js +75 -0
  193. package/lib/server/frameSelectors.js +171 -0
  194. package/lib/server/frames.js +1808 -0
  195. package/lib/server/har/harRecorder.js +139 -0
  196. package/lib/server/har/harTracer.js +542 -0
  197. package/lib/server/helper.js +103 -0
  198. package/lib/server/index.js +114 -0
  199. package/lib/server/input.js +310 -0
  200. package/lib/server/instrumentation.js +70 -0
  201. package/lib/server/isomorphic/utilityScriptSerializers.js +226 -0
  202. package/lib/server/javascript.js +299 -0
  203. package/lib/server/launchApp.js +91 -0
  204. package/lib/server/macEditingCommands.js +139 -0
  205. package/lib/server/network.js +617 -0
  206. package/lib/server/page.js +819 -0
  207. package/lib/server/pipeTransport.js +85 -0
  208. package/lib/server/playwright.js +88 -0
  209. package/lib/server/progress.js +102 -0
  210. package/lib/server/protocolError.js +49 -0
  211. package/lib/server/recorder/contextRecorder.js +299 -0
  212. package/lib/server/recorder/recorderApp.js +196 -0
  213. package/lib/server/recorder/recorderCollection.js +116 -0
  214. package/lib/server/recorder/recorderFrontend.js +5 -0
  215. package/lib/server/recorder/recorderInTraceViewer.js +144 -0
  216. package/lib/server/recorder/recorderRunner.js +155 -0
  217. package/lib/server/recorder/recorderUtils.js +112 -0
  218. package/lib/server/recorder/throttledFile.js +46 -0
  219. package/lib/server/recorder.js +329 -0
  220. package/lib/server/registry/browserFetcher.js +168 -0
  221. package/lib/server/registry/dependencies.js +322 -0
  222. package/lib/server/registry/index.js +1005 -0
  223. package/lib/server/registry/nativeDeps.js +490 -0
  224. package/lib/server/registry/oopDownloadBrowserMain.js +138 -0
  225. package/lib/server/screenshotter.js +348 -0
  226. package/lib/server/selectors.js +73 -0
  227. package/lib/server/socksClientCertificatesInterceptor.js +340 -0
  228. package/lib/server/socksInterceptor.js +100 -0
  229. package/lib/server/trace/recorder/snapshotter.js +172 -0
  230. package/lib/server/trace/recorder/snapshotterInjected.js +493 -0
  231. package/lib/server/trace/recorder/tracing.js +542 -0
  232. package/lib/server/trace/test/inMemorySnapshotter.js +93 -0
  233. package/lib/server/trace/viewer/traceViewer.js +213 -0
  234. package/lib/server/transport.js +191 -0
  235. package/lib/server/types.js +24 -0
  236. package/lib/server/usKeyboardLayout.js +555 -0
  237. package/lib/server/webkit/webkit.js +87 -0
  238. package/lib/server/webkit/wkAccessibility.js +194 -0
  239. package/lib/server/webkit/wkBrowser.js +329 -0
  240. package/lib/server/webkit/wkConnection.js +173 -0
  241. package/lib/server/webkit/wkExecutionContext.js +143 -0
  242. package/lib/server/webkit/wkInput.js +169 -0
  243. package/lib/server/webkit/wkInterceptableRequest.js +162 -0
  244. package/lib/server/webkit/wkPage.js +1219 -0
  245. package/lib/server/webkit/wkProvisionalPage.js +94 -0
  246. package/lib/server/webkit/wkWorkers.js +104 -0
  247. package/lib/third_party/diff_match_patch.js +2222 -0
  248. package/lib/third_party/pixelmatch.js +255 -0
  249. package/lib/utils/ascii.js +31 -0
  250. package/lib/utils/comparators.js +171 -0
  251. package/lib/utils/crypto.js +174 -0
  252. package/lib/utils/debug.js +46 -0
  253. package/lib/utils/debugLogger.js +91 -0
  254. package/lib/utils/env.js +49 -0
  255. package/lib/utils/eventsHelper.js +38 -0
  256. package/lib/utils/expectUtils.js +33 -0
  257. package/lib/utils/fileUtils.js +205 -0
  258. package/lib/utils/happy-eyeballs.js +194 -0
  259. package/lib/utils/headers.js +52 -0
  260. package/lib/utils/hostPlatform.js +133 -0
  261. package/lib/utils/httpServer.js +237 -0
  262. package/lib/utils/index.js +368 -0
  263. package/lib/utils/isomorphic/cssParser.js +250 -0
  264. package/lib/utils/isomorphic/cssTokenizer.js +979 -0
  265. package/lib/utils/isomorphic/locatorGenerators.js +642 -0
  266. package/lib/utils/isomorphic/locatorParser.js +179 -0
  267. package/lib/utils/isomorphic/locatorUtils.js +62 -0
  268. package/lib/utils/isomorphic/mimeType.js +29 -0
  269. package/lib/utils/isomorphic/recorderUtils.js +195 -0
  270. package/lib/utils/isomorphic/selectorParser.js +397 -0
  271. package/lib/utils/isomorphic/stringUtils.js +139 -0
  272. package/lib/utils/isomorphic/traceUtils.js +39 -0
  273. package/lib/utils/isomorphic/urlMatch.js +120 -0
  274. package/lib/utils/linuxUtils.js +78 -0
  275. package/lib/utils/manualPromise.js +109 -0
  276. package/lib/utils/multimap.js +75 -0
  277. package/lib/utils/network.js +160 -0
  278. package/lib/utils/processLauncher.js +248 -0
  279. package/lib/utils/profiler.js +53 -0
  280. package/lib/utils/rtti.js +44 -0
  281. package/lib/utils/semaphore.js +51 -0
  282. package/lib/utils/spawnAsync.js +45 -0
  283. package/lib/utils/stackTrace.js +121 -0
  284. package/lib/utils/task.js +58 -0
  285. package/lib/utils/time.js +37 -0
  286. package/lib/utils/timeoutRunner.js +66 -0
  287. package/lib/utils/traceUtils.js +44 -0
  288. package/lib/utils/userAgent.js +105 -0
  289. package/lib/utils/wsServer.js +127 -0
  290. package/lib/utils/zipFile.js +75 -0
  291. package/lib/utils/zones.js +62 -0
  292. package/lib/utilsBundle.js +82 -0
  293. package/lib/utilsBundleImpl/index.js +53 -0
  294. package/lib/utilsBundleImpl/xdg-open +1066 -0
  295. package/lib/vite/htmlReport/index.html +66 -0
  296. package/lib/vite/recorder/assets/codeMirrorModule-baozm8ur.js +24 -0
  297. package/lib/vite/recorder/assets/codeMirrorModule-ez37Vkbh.css +1 -0
  298. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  299. package/lib/vite/recorder/assets/index-2ElAIWFB.js +42 -0
  300. package/lib/vite/recorder/assets/index-BW-aOBcL.css +1 -0
  301. package/lib/vite/recorder/index.html +29 -0
  302. package/lib/vite/recorder/playwright-logo.svg +9 -0
  303. package/lib/vite/traceViewer/assets/codeMirrorModule-Bh1rfd2w.js +24 -0
  304. package/lib/vite/traceViewer/assets/inspectorTab-7GHnKvSD.js +64 -0
  305. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
  306. package/lib/vite/traceViewer/assets/workbench-DPQnTHYP.js +9 -0
  307. package/lib/vite/traceViewer/assets/xtermModule-BeNbaIVa.js +9 -0
  308. package/lib/vite/traceViewer/codeMirrorModule.ez37Vkbh.css +1 -0
  309. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  310. package/lib/vite/traceViewer/embedded.BlHoW5LY.js +2 -0
  311. package/lib/vite/traceViewer/embedded.html +18 -0
  312. package/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
  313. package/lib/vite/traceViewer/index.CrbWWHbf.css +1 -0
  314. package/lib/vite/traceViewer/index.DaWVfou1.js +2 -0
  315. package/lib/vite/traceViewer/index.html +29 -0
  316. package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +1 -0
  317. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  318. package/lib/vite/traceViewer/recorder.B_SY1GJM.css +0 -0
  319. package/lib/vite/traceViewer/recorder.C4zxcvd2.js +2 -0
  320. package/lib/vite/traceViewer/recorder.html +17 -0
  321. package/lib/vite/traceViewer/snapshot.html +21 -0
  322. package/lib/vite/traceViewer/sw.bundle.js +3 -0
  323. package/lib/vite/traceViewer/uiMode.CAYqod-m.css +1 -0
  324. package/lib/vite/traceViewer/uiMode.html +20 -0
  325. package/lib/vite/traceViewer/uiMode.mTXWniJb.js +5 -0
  326. package/lib/vite/traceViewer/workbench.D3JVcA9K.css +1 -0
  327. package/lib/vite/traceViewer/xtermModule.DSXBckUd.css +32 -0
  328. package/lib/zipBundle.js +25 -0
  329. package/lib/zipBundleImpl.js +5 -0
  330. package/package.json +44 -0
  331. package/types/protocol.d.ts +21571 -0
  332. package/types/structs.d.ts +45 -0
  333. package/types/types.d.ts +22519 -0
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.installRootRedirect = installRootRedirect;
7
+ exports.openTraceInBrowser = openTraceInBrowser;
8
+ exports.openTraceViewerApp = openTraceViewerApp;
9
+ exports.runTraceInBrowser = runTraceInBrowser;
10
+ exports.runTraceViewerApp = runTraceViewerApp;
11
+ exports.startTraceViewerServer = startTraceViewerServer;
12
+ var _path = _interopRequireDefault(require("path"));
13
+ var _fs = _interopRequireDefault(require("fs"));
14
+ var _httpServer = require("../../../utils/httpServer");
15
+ var _utils = require("../../../utils");
16
+ var _launchApp = require("../../launchApp");
17
+ var _instrumentation = require("../../instrumentation");
18
+ var _playwright = require("../../playwright");
19
+ var _progress = require("../../progress");
20
+ var _utilsBundle = require("../../../utilsBundle");
21
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
+ /**
23
+ * Copyright (c) Microsoft Corporation.
24
+ *
25
+ * Licensed under the Apache License, Version 2.0 (the "License");
26
+ * you may not use this file except in compliance with the License.
27
+ * You may obtain a copy of the License at
28
+ *
29
+ * http://www.apache.org/licenses/LICENSE-2.0
30
+ *
31
+ * Unless required by applicable law or agreed to in writing, software
32
+ * distributed under the License is distributed on an "AS IS" BASIS,
33
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
34
+ * See the License for the specific language governing permissions and
35
+ * limitations under the License.
36
+ */
37
+
38
+ function validateTraceUrls(traceUrls) {
39
+ for (const traceUrl of traceUrls) {
40
+ let traceFile = traceUrl;
41
+ // If .json is requested, we'll synthesize it.
42
+ if (traceUrl.endsWith('.json')) traceFile = traceUrl.substring(0, traceUrl.length - '.json'.length);
43
+ if (!traceUrl.startsWith('http://') && !traceUrl.startsWith('https://') && !_fs.default.existsSync(traceFile) && !_fs.default.existsSync(traceFile + '.trace')) throw new Error(`Trace file ${traceUrl} does not exist!`);
44
+ }
45
+ }
46
+ async function startTraceViewerServer(options) {
47
+ const server = new _httpServer.HttpServer();
48
+ server.routePrefix('/trace', (request, response) => {
49
+ const url = new URL('http://localhost' + request.url);
50
+ const relativePath = url.pathname.slice('/trace'.length);
51
+ if (relativePath.endsWith('/stall.js')) return true;
52
+ if (relativePath.startsWith('/file')) {
53
+ try {
54
+ const filePath = url.searchParams.get('path');
55
+ if (_fs.default.existsSync(filePath)) return server.serveFile(request, response, url.searchParams.get('path'));
56
+
57
+ // If .json is requested, we'll synthesize it for zip-less operation.
58
+ if (filePath.endsWith('.json')) {
59
+ const traceName = filePath.substring(0, filePath.length - '.json'.length);
60
+ response.statusCode = 200;
61
+ response.setHeader('Content-Type', 'application/json');
62
+ response.end(JSON.stringify(traceDescriptor(traceName)));
63
+ return true;
64
+ }
65
+ } catch (e) {}
66
+ response.statusCode = 404;
67
+ response.end();
68
+ return true;
69
+ }
70
+ const absolutePath = _path.default.join(__dirname, '..', '..', '..', 'vite', 'traceViewer', ...relativePath.split('/'));
71
+ return server.serveFile(request, response, absolutePath);
72
+ });
73
+ const transport = (options === null || options === void 0 ? void 0 : options.transport) || (options !== null && options !== void 0 && options.isServer ? new StdinServer() : undefined);
74
+ if (transport) server.createWebSocket(transport);
75
+ const {
76
+ host,
77
+ port
78
+ } = options || {};
79
+ await server.start({
80
+ preferredPort: port,
81
+ host
82
+ });
83
+ return server;
84
+ }
85
+ async function installRootRedirect(server, traceUrls, options) {
86
+ const params = new URLSearchParams();
87
+ if (_path.default.sep !== _path.default.posix.sep) params.set('pathSeparator', _path.default.sep);
88
+ for (const traceUrl of traceUrls) params.append('trace', traceUrl);
89
+ if (server.wsGuid()) params.append('ws', server.wsGuid());
90
+ if (options !== null && options !== void 0 && options.isServer) params.append('isServer', '');
91
+ if ((0, _utils.isUnderTest)()) params.append('isUnderTest', 'true');
92
+ for (const arg of options.args || []) params.append('arg', arg);
93
+ if (options.grep) params.append('grep', options.grep);
94
+ if (options.grepInvert) params.append('grepInvert', options.grepInvert);
95
+ for (const project of options.project || []) params.append('project', project);
96
+ for (const reporter of options.reporter || []) params.append('reporter', reporter);
97
+ const urlPath = `./trace/${options.webApp || 'index.html'}?${params.toString()}`;
98
+ server.routePath('/', (_, response) => {
99
+ response.statusCode = 302;
100
+ response.setHeader('Location', urlPath);
101
+ response.end();
102
+ return true;
103
+ });
104
+ }
105
+ async function runTraceViewerApp(traceUrls, browserName, options, exitOnClose) {
106
+ validateTraceUrls(traceUrls);
107
+ const server = await startTraceViewerServer(options);
108
+ await installRootRedirect(server, traceUrls, options);
109
+ const page = await openTraceViewerApp(server.urlPrefix('precise'), browserName, options);
110
+ if (exitOnClose) page.on('close', () => (0, _utils.gracefullyProcessExitDoNotHang)(0));
111
+ return page;
112
+ }
113
+ async function runTraceInBrowser(traceUrls, options) {
114
+ validateTraceUrls(traceUrls);
115
+ const server = await startTraceViewerServer(options);
116
+ await installRootRedirect(server, traceUrls, options);
117
+ await openTraceInBrowser(server.urlPrefix('human-readable'));
118
+ }
119
+ async function openTraceViewerApp(url, browserName, options) {
120
+ const traceViewerPlaywright = (0, _playwright.createPlaywright)({
121
+ sdkLanguage: 'javascript',
122
+ isInternalPlaywright: true
123
+ });
124
+ const traceViewerBrowser = (0, _utils.isUnderTest)() ? 'chromium' : browserName;
125
+ const {
126
+ context,
127
+ page
128
+ } = await (0, _launchApp.launchApp)(traceViewerPlaywright[traceViewerBrowser], {
129
+ // TODO: store language in the trace.
130
+ sdkLanguage: traceViewerPlaywright.options.sdkLanguage,
131
+ windowSize: {
132
+ width: 1280,
133
+ height: 800
134
+ },
135
+ persistentContextOptions: {
136
+ ...(options === null || options === void 0 ? void 0 : options.persistentContextOptions),
137
+ useWebSocket: (0, _utils.isUnderTest)(),
138
+ headless: !!(options !== null && options !== void 0 && options.headless)
139
+ }
140
+ });
141
+ const controller = new _progress.ProgressController((0, _instrumentation.serverSideCallMetadata)(), context._browser);
142
+ await controller.run(async progress => {
143
+ await context._browser._defaultContext._loadDefaultContextAsIs(progress);
144
+ });
145
+ if (process.env.PWTEST_PRINT_WS_ENDPOINT) process.stderr.write('DevTools listening on: ' + context._browser.options.wsEndpoint + '\n');
146
+ if (!(0, _utils.isUnderTest)()) await (0, _launchApp.syncLocalStorageWithSettings)(page, 'traceviewer');
147
+ if ((0, _utils.isUnderTest)()) page.on('close', () => context.close({
148
+ reason: 'Trace viewer closed'
149
+ }).catch(() => {}));
150
+ await page.mainFrame().goto((0, _instrumentation.serverSideCallMetadata)(), url);
151
+ return page;
152
+ }
153
+ async function openTraceInBrowser(url) {
154
+ // eslint-disable-next-line no-console
155
+ console.log('\nListening on ' + url);
156
+ if (!(0, _utils.isUnderTest)()) await (0, _utilsBundle.open)(url.replace('0.0.0.0', 'localhost')).catch(() => {});
157
+ }
158
+ class StdinServer {
159
+ constructor() {
160
+ this._pollTimer = void 0;
161
+ this._traceUrl = void 0;
162
+ this.sendEvent = void 0;
163
+ this.close = void 0;
164
+ process.stdin.on('data', data => {
165
+ const url = data.toString().trim();
166
+ if (url === this._traceUrl) return;
167
+ if (url.endsWith('.json')) this._pollLoadTrace(url);else this._loadTrace(url);
168
+ });
169
+ process.stdin.on('close', () => (0, _utils.gracefullyProcessExitDoNotHang)(0));
170
+ }
171
+ onconnect() {}
172
+ async dispatch(method, params) {
173
+ if (method === 'initialize') {
174
+ if (this._traceUrl) this._loadTrace(this._traceUrl);
175
+ }
176
+ }
177
+ onclose() {}
178
+ _loadTrace(traceUrl) {
179
+ var _this$sendEvent;
180
+ this._traceUrl = traceUrl;
181
+ clearTimeout(this._pollTimer);
182
+ (_this$sendEvent = this.sendEvent) === null || _this$sendEvent === void 0 || _this$sendEvent.call(this, 'loadTraceRequested', {
183
+ traceUrl
184
+ });
185
+ }
186
+ _pollLoadTrace(url) {
187
+ this._loadTrace(url);
188
+ this._pollTimer = setTimeout(() => {
189
+ this._pollLoadTrace(url);
190
+ }, 500);
191
+ }
192
+ }
193
+ function traceDescriptor(traceName) {
194
+ const result = {
195
+ entries: []
196
+ };
197
+ const traceDir = _path.default.dirname(traceName);
198
+ const traceFile = _path.default.basename(traceName);
199
+ for (const name of _fs.default.readdirSync(traceDir)) {
200
+ if (name.startsWith(traceFile)) result.entries.push({
201
+ name,
202
+ path: _path.default.join(traceDir, name)
203
+ });
204
+ }
205
+ const resourcesDir = _path.default.join(traceDir, 'resources');
206
+ if (_fs.default.existsSync(resourcesDir)) {
207
+ for (const name of _fs.default.readdirSync(resourcesDir)) result.entries.push({
208
+ name: 'resources/' + name,
209
+ path: _path.default.join(resourcesDir, name)
210
+ });
211
+ }
212
+ return result;
213
+ }
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.perMessageDeflate = exports.WebSocketTransport = void 0;
7
+ var _utilsBundle = require("../utilsBundle");
8
+ var _utils = require("../utils");
9
+ var _happyEyeballs = require("../utils/happy-eyeballs");
10
+ /**
11
+ * Copyright 2018 Google Inc. All rights reserved.
12
+ * Modifications copyright (c) Microsoft Corporation.
13
+ *
14
+ * Licensed under the Apache License, Version 2.0 (the "License");
15
+ * you may not use this file except in compliance with the License.
16
+ * You may obtain a copy of the License at
17
+ *
18
+ * http://www.apache.org/licenses/LICENSE-2.0
19
+ *
20
+ * Unless required by applicable law or agreed to in writing, software
21
+ * distributed under the License is distributed on an "AS IS" BASIS,
22
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ * See the License for the specific language governing permissions and
24
+ * limitations under the License.
25
+ */
26
+
27
+ const perMessageDeflate = exports.perMessageDeflate = {
28
+ zlibDeflateOptions: {
29
+ level: 3
30
+ },
31
+ zlibInflateOptions: {
32
+ chunkSize: 10 * 1024
33
+ },
34
+ threshold: 10 * 1024
35
+ };
36
+ class WebSocketTransport {
37
+ static async connect(progress, url, headers, followRedirects, debugLogHeader) {
38
+ return await WebSocketTransport._connect(progress, url, headers || {}, {
39
+ follow: !!followRedirects,
40
+ hadRedirects: false
41
+ }, debugLogHeader);
42
+ }
43
+ static async _connect(progress, url, headers, redirect, debugLogHeader) {
44
+ const logUrl = stripQueryParams(url);
45
+ progress === null || progress === void 0 || progress.log(`<ws connecting> ${logUrl}`);
46
+ const transport = new WebSocketTransport(progress, url, logUrl, headers, redirect.follow && redirect.hadRedirects, debugLogHeader);
47
+ let success = false;
48
+ progress === null || progress === void 0 || progress.cleanupWhenAborted(async () => {
49
+ if (!success) await transport.closeAndWait().catch(e => null);
50
+ });
51
+ const result = await new Promise((fulfill, reject) => {
52
+ transport._ws.on('open', async () => {
53
+ progress === null || progress === void 0 || progress.log(`<ws connected> ${logUrl}`);
54
+ fulfill({
55
+ transport
56
+ });
57
+ });
58
+ transport._ws.on('error', event => {
59
+ progress === null || progress === void 0 || progress.log(`<ws connect error> ${logUrl} ${event.message}`);
60
+ reject(new Error('WebSocket error: ' + event.message));
61
+ transport._ws.close();
62
+ });
63
+ transport._ws.on('unexpected-response', (request, response) => {
64
+ if (redirect.follow && !redirect.hadRedirects && (response.statusCode === 301 || response.statusCode === 302 || response.statusCode === 307 || response.statusCode === 308)) {
65
+ fulfill({
66
+ redirect: response
67
+ });
68
+ transport._ws.close();
69
+ return;
70
+ }
71
+ for (let i = 0; i < response.rawHeaders.length; i += 2) {
72
+ if (debugLogHeader && response.rawHeaders[i] === debugLogHeader) progress === null || progress === void 0 || progress.log(response.rawHeaders[i + 1]);
73
+ }
74
+ const chunks = [];
75
+ const errorPrefix = `${logUrl} ${response.statusCode} ${response.statusMessage}`;
76
+ response.on('data', chunk => chunks.push(chunk));
77
+ response.on('close', () => {
78
+ const error = chunks.length ? `${errorPrefix}\n${Buffer.concat(chunks)}` : errorPrefix;
79
+ progress === null || progress === void 0 || progress.log(`<ws unexpected response> ${error}`);
80
+ reject(new Error('WebSocket error: ' + error));
81
+ transport._ws.close();
82
+ });
83
+ });
84
+ });
85
+ if (result.redirect) {
86
+ // Strip authorization headers from the redirected request.
87
+ const newHeaders = Object.fromEntries(Object.entries(headers || {}).filter(([name]) => {
88
+ return !name.includes('access-key') && name.toLowerCase() !== 'authorization';
89
+ }));
90
+ return WebSocketTransport._connect(progress, result.redirect.headers.location, newHeaders, {
91
+ follow: true,
92
+ hadRedirects: true
93
+ }, debugLogHeader);
94
+ }
95
+ success = true;
96
+ return transport;
97
+ }
98
+ constructor(progress, url, logUrl, headers, followRedirects, debugLogHeader) {
99
+ var _progress$timeUntilDe;
100
+ this._ws = void 0;
101
+ this._progress = void 0;
102
+ this._logUrl = void 0;
103
+ this.onmessage = void 0;
104
+ this.onclose = void 0;
105
+ this.wsEndpoint = void 0;
106
+ this.headers = [];
107
+ this.wsEndpoint = url;
108
+ this._logUrl = logUrl;
109
+ this._ws = new _utilsBundle.ws(url, [], {
110
+ maxPayload: 256 * 1024 * 1024,
111
+ // 256Mb,
112
+ // Prevent internal http client error when passing negative timeout.
113
+ handshakeTimeout: Math.max((_progress$timeUntilDe = progress === null || progress === void 0 ? void 0 : progress.timeUntilDeadline()) !== null && _progress$timeUntilDe !== void 0 ? _progress$timeUntilDe : 30_000, 1),
114
+ headers,
115
+ followRedirects,
116
+ agent: /^(https|wss):\/\//.test(url) ? _happyEyeballs.httpsHappyEyeballsAgent : _happyEyeballs.httpHappyEyeballsAgent,
117
+ perMessageDeflate
118
+ });
119
+ this._ws.on('upgrade', response => {
120
+ for (let i = 0; i < response.rawHeaders.length; i += 2) {
121
+ this.headers.push({
122
+ name: response.rawHeaders[i],
123
+ value: response.rawHeaders[i + 1]
124
+ });
125
+ if (debugLogHeader && response.rawHeaders[i] === debugLogHeader) progress === null || progress === void 0 || progress.log(response.rawHeaders[i + 1]);
126
+ }
127
+ });
128
+ this._progress = progress;
129
+ // The 'ws' module in node sometimes sends us multiple messages in a single task.
130
+ // In Web, all IO callbacks (e.g. WebSocket callbacks)
131
+ // are dispatched into separate tasks, so there's no need
132
+ // to do anything extra.
133
+ const messageWrap = (0, _utils.makeWaitForNextTask)();
134
+ this._ws.addEventListener('message', event => {
135
+ messageWrap(() => {
136
+ const eventData = event.data;
137
+ let parsedJson;
138
+ try {
139
+ parsedJson = JSON.parse(eventData);
140
+ } catch (e) {
141
+ var _this$_progress;
142
+ (_this$_progress = this._progress) === null || _this$_progress === void 0 || _this$_progress.log(`<closing ws> Closing websocket due to malformed JSON. eventData=${eventData} e=${e === null || e === void 0 ? void 0 : e.message}`);
143
+ this._ws.close();
144
+ return;
145
+ }
146
+ try {
147
+ if (this.onmessage) this.onmessage.call(null, parsedJson);
148
+ } catch (e) {
149
+ var _this$_progress2;
150
+ (_this$_progress2 = this._progress) === null || _this$_progress2 === void 0 || _this$_progress2.log(`<closing ws> Closing websocket due to failed onmessage callback. eventData=${eventData} e=${e === null || e === void 0 ? void 0 : e.message}`);
151
+ this._ws.close();
152
+ }
153
+ });
154
+ });
155
+ this._ws.addEventListener('close', event => {
156
+ var _this$_progress3;
157
+ (_this$_progress3 = this._progress) === null || _this$_progress3 === void 0 || _this$_progress3.log(`<ws disconnected> ${logUrl} code=${event.code} reason=${event.reason}`);
158
+ if (this.onclose) this.onclose.call(null, event.reason);
159
+ });
160
+ // Prevent Error: read ECONNRESET.
161
+ this._ws.addEventListener('error', error => {
162
+ var _this$_progress4;
163
+ return (_this$_progress4 = this._progress) === null || _this$_progress4 === void 0 ? void 0 : _this$_progress4.log(`<ws error> ${logUrl} ${error.type} ${error.message}`);
164
+ });
165
+ }
166
+ send(message) {
167
+ this._ws.send(JSON.stringify(message));
168
+ }
169
+ close() {
170
+ var _this$_progress5;
171
+ (_this$_progress5 = this._progress) === null || _this$_progress5 === void 0 || _this$_progress5.log(`<ws disconnecting> ${this._logUrl}`);
172
+ this._ws.close();
173
+ }
174
+ async closeAndWait() {
175
+ if (this._ws.readyState === _utilsBundle.ws.CLOSED) return;
176
+ const promise = new Promise(f => this._ws.once('close', f));
177
+ this.close();
178
+ await promise; // Make sure to await the actual disconnect.
179
+ }
180
+ }
181
+ exports.WebSocketTransport = WebSocketTransport;
182
+ function stripQueryParams(url) {
183
+ try {
184
+ const u = new URL(url);
185
+ u.search = '';
186
+ u.hash = '';
187
+ return u.toString();
188
+ } catch {
189
+ return url;
190
+ }
191
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.kLifecycleEvents = void 0;
7
+ /**
8
+ * Copyright 2018 Google Inc. All rights reserved.
9
+ * Modifications copyright (c) Microsoft Corporation.
10
+ *
11
+ * Licensed under the Apache License, Version 2.0 (the "License");
12
+ * you may not use this file except in compliance with the License.
13
+ * You may obtain a copy of the License at
14
+ *
15
+ * http://www.apache.org/licenses/LICENSE-2.0
16
+ *
17
+ * Unless required by applicable law or agreed to in writing, software
18
+ * distributed under the License is distributed on an "AS IS" BASIS,
19
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
+ * See the License for the specific language governing permissions and
21
+ * limitations under the License.
22
+ */
23
+
24
+ const kLifecycleEvents = exports.kLifecycleEvents = new Set(['load', 'domcontentloaded', 'networkidle', 'commit']);