@checkly/playwright-core 1.48.22 → 1.51.11-beta.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.
- package/ThirdPartyNotices.txt +60 -48
- package/bin/reinstall_chrome_beta_linux.sh +10 -8
- package/bin/reinstall_chrome_stable_linux.sh +10 -8
- package/bin/reinstall_msedge_beta_linux.sh +17 -9
- package/bin/reinstall_msedge_dev_linux.sh +17 -9
- package/bin/reinstall_msedge_stable_linux.sh +17 -9
- package/browsers.json +33 -12
- package/index.js +0 -1
- package/lib/androidServerImpl.js +5 -5
- package/lib/browserServerImpl.js +18 -9
- package/lib/checkly/secretsFilter.js +1 -1
- package/lib/cli/driver.js +6 -6
- package/lib/cli/program.js +38 -43
- package/lib/cli/programWithTestStub.js +2 -1
- package/lib/client/android.js +37 -58
- package/lib/client/artifact.js +4 -7
- package/lib/client/browser.js +10 -15
- package/lib/client/browserContext.js +69 -62
- package/lib/client/browserType.js +30 -64
- package/lib/client/channelOwner.js +53 -68
- package/lib/client/clientHelper.js +4 -6
- package/lib/client/clientInstrumentation.js +2 -0
- package/lib/client/clientStackTrace.js +65 -0
- package/lib/client/connection.js +48 -41
- package/lib/client/consoleMessage.js +4 -7
- package/lib/client/electron.js +10 -10
- package/lib/client/elementHandle.js +32 -33
- package/lib/client/errors.js +2 -2
- package/lib/client/eventEmitter.js +5 -8
- package/lib/client/fetch.js +61 -62
- package/lib/client/fileUtils.js +31 -0
- package/lib/client/frame.js +22 -23
- package/lib/client/harRouter.js +7 -9
- package/lib/client/jsHandle.js +3 -4
- package/lib/client/localUtils.js +24 -0
- package/lib/client/locator.js +27 -13
- package/lib/client/network.js +44 -37
- package/lib/client/page.js +50 -41
- package/lib/client/platform.js +71 -0
- package/lib/client/playwright.js +21 -1
- package/lib/client/selectors.js +8 -2
- package/lib/client/stream.js +2 -21
- package/lib/client/timeoutSettings.js +65 -0
- package/lib/client/tracing.js +29 -7
- package/lib/client/video.js +2 -2
- package/lib/client/waiter.js +19 -16
- package/lib/client/webSocket.js +106 -0
- package/lib/client/worker.js +4 -4
- package/lib/client/writableStream.js +2 -21
- package/lib/generated/consoleApiSource.js +1 -1
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/pollingRecorderSource.js +1 -1
- package/lib/generated/recorderSource.js +7 -0
- package/lib/generated/webSocketMockSource.js +1 -1
- package/lib/inProcessFactory.js +8 -3
- package/lib/outofprocess.js +12 -8
- package/lib/protocol/debug.js +1 -1
- package/lib/protocol/validator.js +77 -11
- package/lib/protocol/validatorPrimitives.js +1 -2
- package/lib/remote/playwrightConnection.js +21 -12
- package/lib/remote/playwrightServer.js +22 -8
- package/lib/server/android/android.js +17 -14
- package/lib/server/android/backendAdb.js +14 -14
- package/lib/server/artifact.js +3 -3
- package/lib/server/bidi/bidiBrowser.js +11 -8
- package/lib/server/bidi/bidiChromium.js +5 -4
- package/lib/server/bidi/bidiConnection.js +1 -3
- package/lib/server/bidi/bidiExecutionContext.js +71 -25
- package/lib/server/bidi/bidiFirefox.js +4 -3
- package/lib/server/bidi/bidiInput.js +11 -12
- package/lib/server/bidi/bidiNetworkManager.js +11 -12
- package/lib/server/bidi/bidiOverCdp.js +2 -2
- package/lib/server/bidi/bidiPage.js +39 -66
- package/lib/server/bidi/third_party/bidiKeyboard.js +9 -7
- package/lib/server/bidi/third_party/firefoxPrefs.js +19 -3
- package/lib/server/browser.js +2 -2
- package/lib/server/browserContext.js +60 -55
- package/lib/server/browserType.js +22 -18
- package/lib/server/callLog.js +79 -0
- package/lib/server/chromium/chromium.js +20 -16
- package/lib/server/chromium/chromiumSwitches.js +32 -9
- package/lib/server/chromium/crBrowser.js +25 -24
- package/lib/server/chromium/crConnection.js +2 -2
- package/lib/server/chromium/crCoverage.js +1 -1
- package/lib/server/chromium/crDevTools.js +1 -1
- package/lib/server/chromium/crDragDrop.js +1 -1
- package/lib/server/chromium/crExecutionContext.js +26 -35
- package/lib/server/chromium/crInput.js +17 -6
- package/lib/server/chromium/crNetworkManager.js +3 -3
- package/lib/server/chromium/crPage.js +43 -55
- package/lib/server/chromium/crPdf.js +1 -1
- package/lib/server/chromium/crProtocolHelper.js +3 -3
- package/lib/server/chromium/crServiceWorker.js +2 -2
- package/lib/server/chromium/videoRecorder.js +2 -2
- package/lib/server/clock.js +1 -1
- package/lib/server/codegen/csharp.js +21 -16
- package/lib/server/codegen/java.js +17 -9
- package/lib/server/codegen/javascript.js +37 -7
- package/lib/server/codegen/jsonl.js +1 -1
- package/lib/server/codegen/languages.js +2 -2
- package/lib/server/codegen/python.js +14 -17
- package/lib/server/debugController.js +23 -45
- package/lib/server/debugger.js +1 -1
- package/lib/server/deviceDescriptors.js +1 -1
- package/lib/server/deviceDescriptorsSource.json +131 -131
- package/lib/server/dispatchers/androidDispatcher.js +14 -3
- package/lib/server/dispatchers/artifactDispatcher.js +3 -3
- package/lib/server/dispatchers/browserContextDispatcher.js +21 -32
- package/lib/server/dispatchers/browserTypeDispatcher.js +1 -1
- package/lib/server/dispatchers/cdpSessionDispatcher.js +1 -1
- package/lib/server/dispatchers/debugControllerDispatcher.js +5 -3
- package/lib/server/dispatchers/dispatcher.js +27 -25
- package/lib/server/dispatchers/electronDispatcher.js +3 -3
- package/lib/server/dispatchers/elementHandlerDispatcher.js +7 -2
- package/lib/server/dispatchers/frameDispatcher.js +9 -3
- package/lib/server/dispatchers/jsonPipeDispatcher.js +2 -2
- package/lib/server/dispatchers/localUtilsDispatcher.js +25 -291
- package/lib/server/dispatchers/networkDispatchers.js +3 -3
- package/lib/server/dispatchers/pageDispatcher.js +10 -8
- package/lib/server/dispatchers/playwrightDispatcher.js +5 -5
- package/lib/server/dispatchers/streamDispatcher.js +4 -3
- package/lib/server/dispatchers/tracingDispatcher.js +10 -0
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +18 -18
- package/lib/server/dispatchers/writableStreamDispatcher.js +5 -6
- package/lib/server/dom.js +102 -48
- package/lib/server/download.js +1 -1
- package/lib/server/electron/electron.js +17 -16
- package/lib/server/errors.js +1 -1
- package/lib/server/fetch.js +49 -33
- package/lib/server/fileUploadUtils.js +7 -4
- package/lib/server/firefox/ffBrowser.js +17 -9
- package/lib/server/firefox/ffConnection.js +1 -1
- package/lib/server/firefox/ffExecutionContext.js +25 -29
- package/lib/server/firefox/ffInput.js +15 -4
- package/lib/server/firefox/ffNetworkManager.js +3 -3
- package/lib/server/firefox/ffPage.js +29 -50
- package/lib/server/firefox/firefox.js +7 -9
- package/lib/server/frameSelectors.js +1 -1
- package/lib/server/frames.js +65 -55
- package/lib/server/har/harRecorder.js +4 -4
- package/lib/server/har/harTracer.js +8 -9
- package/lib/server/harBackend.js +157 -0
- package/lib/server/helper.js +2 -2
- package/lib/server/index.js +1 -14
- package/lib/server/input.js +3 -4
- package/lib/server/instrumentation.js +2 -2
- package/lib/server/isomorphic/utilityScriptSerializers.js +3 -0
- package/lib/server/javascript.js +26 -33
- package/lib/server/launchApp.js +7 -7
- package/lib/server/localUtils.js +203 -0
- package/lib/server/network.js +5 -5
- package/lib/server/page.js +76 -37
- package/lib/server/pipeTransport.js +1 -1
- package/lib/server/playwright.js +5 -5
- package/lib/server/progress.js +1 -4
- package/lib/server/protocolError.js +1 -1
- package/lib/server/recorder/chat.js +177 -0
- package/lib/server/recorder/codeGenerator.js +154 -0
- package/lib/server/recorder/contextRecorder.js +9 -18
- package/lib/server/recorder/csharp.js +311 -0
- package/lib/server/recorder/java.js +249 -0
- package/lib/server/recorder/javascript.js +230 -0
- package/lib/server/recorder/jsonl.js +48 -0
- package/lib/server/recorder/language.js +45 -0
- package/lib/server/recorder/python.js +276 -0
- package/lib/server/recorder/recorderActions.js +6 -0
- package/lib/server/recorder/recorderApp.js +25 -28
- package/lib/server/recorder/recorderCollection.js +9 -21
- package/lib/server/recorder/recorderInTraceViewer.js +1 -1
- package/lib/server/recorder/recorderRunner.js +7 -3
- package/lib/server/recorder/recorderUtils.js +5 -28
- package/lib/server/recorder/throttledFile.js +3 -4
- package/lib/server/recorder/utils.js +46 -0
- package/lib/server/recorder.js +83 -43
- package/lib/server/registry/browserFetcher.js +10 -8
- package/lib/server/registry/dependencies.js +20 -20
- package/lib/server/registry/index.js +215 -61
- package/lib/server/registry/nativeDeps.js +10 -4
- package/lib/server/registry/oopDownloadBrowserMain.js +3 -3
- package/lib/server/screenshotter.js +1 -1
- package/lib/server/selectors.js +3 -3
- package/lib/server/socksClientCertificatesInterceptor.js +8 -8
- package/lib/server/socksInterceptor.js +8 -5
- package/lib/server/storageScript.js +160 -0
- package/lib/server/timeoutSettings.js +74 -0
- package/lib/server/trace/recorder/snapshotter.js +10 -20
- package/lib/server/trace/recorder/snapshotterInjected.js +26 -1
- package/lib/server/trace/recorder/tracing.js +108 -45
- package/lib/server/trace/test/inMemorySnapshotter.js +6 -6
- package/lib/server/trace/viewer/traceViewer.js +21 -7
- package/lib/server/transport.js +3 -2
- package/lib/server/utils/ascii.js +31 -0
- package/lib/server/utils/comparators.js +159 -0
- package/lib/server/utils/crypto.js +171 -0
- package/lib/server/utils/debug.js +38 -0
- package/lib/server/utils/debugLogger.js +93 -0
- package/lib/server/utils/env.js +53 -0
- package/lib/server/utils/eventsHelper.js +38 -0
- package/lib/server/utils/expectUtils.js +33 -0
- package/lib/server/utils/fileUtils.js +204 -0
- package/lib/server/utils/happyEyeballs.js +207 -0
- package/lib/server/utils/hostPlatform.js +145 -0
- package/lib/server/utils/httpServer.js +233 -0
- package/lib/server/utils/image_tools/colorUtils.js +98 -0
- package/lib/server/utils/image_tools/compare.js +108 -0
- package/lib/server/utils/image_tools/imageChannel.js +70 -0
- package/lib/server/utils/image_tools/stats.js +102 -0
- package/lib/server/utils/linuxUtils.js +58 -0
- package/lib/server/utils/network.js +160 -0
- package/lib/server/utils/nodePlatform.js +140 -0
- package/lib/server/utils/pipeTransport.js +82 -0
- package/lib/server/utils/processLauncher.js +248 -0
- package/lib/server/utils/profiler.js +52 -0
- package/lib/server/utils/socksProxy.js +570 -0
- package/lib/server/utils/spawnAsync.js +45 -0
- package/lib/server/utils/task.js +58 -0
- package/lib/server/utils/userAgent.js +91 -0
- package/lib/server/utils/wsServer.js +128 -0
- package/lib/server/utils/zipFile.js +75 -0
- package/lib/server/utils/zones.js +54 -0
- package/lib/server/webkit/webkit.js +4 -4
- package/lib/server/webkit/wkBrowser.js +10 -10
- package/lib/server/webkit/wkConnection.js +1 -1
- package/lib/server/webkit/wkExecutionContext.js +26 -30
- package/lib/server/webkit/wkInput.js +17 -7
- package/lib/server/webkit/wkInterceptableRequest.js +2 -2
- package/lib/server/webkit/wkPage.js +80 -66
- package/lib/server/webkit/wkProvisionalPage.js +1 -1
- package/lib/server/webkit/wkWorkers.js +2 -2
- package/lib/utils/fileUtils.js +1 -1
- package/lib/utils/glob.js +84 -0
- package/lib/utils/isomorphic/ariaSnapshot.js +392 -0
- package/lib/utils/isomorphic/assert.js +25 -0
- package/lib/utils/isomorphic/colors.js +65 -0
- package/lib/utils/isomorphic/cssParser.js +5 -5
- package/lib/utils/isomorphic/headers.js +52 -0
- package/lib/utils/isomorphic/locatorGenerators.js +38 -8
- package/lib/utils/isomorphic/locatorParser.js +19 -13
- package/lib/utils/isomorphic/manualPromise.js +107 -0
- package/lib/utils/isomorphic/mimeType.js +11 -3
- package/lib/utils/isomorphic/multimap.js +73 -0
- package/lib/utils/isomorphic/rtti.js +41 -0
- package/lib/utils/isomorphic/semaphore.js +51 -0
- package/lib/utils/isomorphic/stackTrace.js +169 -0
- package/lib/utils/isomorphic/stringUtils.js +31 -1
- package/lib/utils/isomorphic/time.js +25 -0
- package/lib/utils/isomorphic/timeoutRunner.js +66 -0
- package/lib/utils/isomorphic/traceUtils.js +23 -0
- package/lib/utils/isomorphic/types.js +5 -0
- package/lib/utils/isomorphic/urlMatch.js +7 -5
- package/lib/utils/mimeType.js +30 -0
- package/lib/utils/stackTrace.js +1 -1
- package/lib/utils.js +447 -0
- package/lib/utilsBundle.js +4 -29
- package/lib/utilsBundleImpl/index.js +188 -33
- package/lib/vite/htmlReport/index.html +20 -17
- package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +24 -0
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +184 -0
- package/lib/vite/recorder/assets/{index-BW-aOBcL.css → index-eHBmevrY.css} +1 -1
- package/lib/vite/recorder/index.html +2 -2
- package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +24 -0
- package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +1 -0
- package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +235 -0
- package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +25 -0
- package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
- package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +1 -0
- package/lib/vite/traceViewer/{embedded.BkvOrz5Z.js → embedded.DpNPH6mk.js} +2 -2
- package/lib/vite/traceViewer/embedded.html +6 -6
- package/lib/vite/traceViewer/index.CuE3SYGw.js +2 -0
- package/lib/vite/traceViewer/index.html +27 -9
- package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +1 -0
- package/lib/vite/traceViewer/{recorder.DNMfnSiu.js → recorder.BD-uZJs7.js} +2 -2
- package/lib/vite/traceViewer/recorder.html +4 -4
- package/lib/vite/traceViewer/sw.bundle.js +7888 -3
- package/lib/vite/traceViewer/{uiMode.CAYqod-m.css → uiMode.BatfzHMG.css} +1 -1
- package/lib/vite/traceViewer/uiMode.DHrNgddz.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +8 -7
- package/lib/vite/traceViewer/workbench.B9vIAzH9.css +1 -0
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +7 -7
- package/types/protocol.d.ts +820 -153
- package/types/types.d.ts +285 -82
- package/bin/PrintDeps.exe +0 -0
- package/bin/README.md +0 -2
- package/lib/vite/recorder/assets/codeMirrorModule-d0KhC1qL.js +0 -24
- package/lib/vite/recorder/assets/index-Bxxcmxlu.js +0 -42
- package/lib/vite/traceViewer/assets/codeMirrorModule-pBPtArIT.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-tzBrK1V4.js +0 -24
- package/lib/vite/traceViewer/assets/inspectorTab-BuJ3wAX_.js +0 -64
- package/lib/vite/traceViewer/assets/inspectorTab-Soeeuvzv.js +0 -64
- package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
- package/lib/vite/traceViewer/assets/workbench-DdmJ9AJV.js +0 -9
- package/lib/vite/traceViewer/assets/workbench-lypYlf00.js +0 -9
- package/lib/vite/traceViewer/embedded.DInvAijy.js +0 -2
- package/lib/vite/traceViewer/index.Dha3cgqs.js +0 -2
- package/lib/vite/traceViewer/index._Iolt-uE.js +0 -2
- package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +0 -1
- package/lib/vite/traceViewer/recorder.DTSaNaly.js +0 -2
- package/lib/vite/traceViewer/uiMode.BM7yhjzl.js +0 -5
- package/lib/vite/traceViewer/uiMode.Cr1tvTWS.js +0 -5
- package/lib/vite/traceViewer/workbench.DlsCx8k5.css +0 -1
- /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{embedded.w7WN2u1R.css → embedded.mLhjB5IF.css} +0 -0
- /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
- /package/lib/vite/traceViewer/{recorder.B_SY1GJM.css → recorder.tn0RQdqM.css} +0 -0
- /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
|
@@ -4,24 +4,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.LocalUtilsDispatcher = void 0;
|
|
7
|
-
exports.urlToWSEndpoint = urlToWSEndpoint;
|
|
8
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
9
|
-
var _path = _interopRequireDefault(require("path"));
|
|
10
|
-
var _os = _interopRequireDefault(require("os"));
|
|
11
|
-
var _manualPromise = require("../../utils/manualPromise");
|
|
12
|
-
var _utils = require("../../utils");
|
|
13
7
|
var _dispatcher = require("./dispatcher");
|
|
14
|
-
var _zipBundle = require("../../zipBundle");
|
|
15
|
-
var _zipFile = require("../../utils/zipFile");
|
|
16
|
-
var _jsonPipeDispatcher = require("../dispatchers/jsonPipeDispatcher");
|
|
17
|
-
var _transport = require("../transport");
|
|
18
|
-
var _socksInterceptor = require("../socksInterceptor");
|
|
19
|
-
var _userAgent = require("../../utils/userAgent");
|
|
20
|
-
var _progress = require("../progress");
|
|
21
|
-
var _network = require("../../utils/network");
|
|
22
8
|
var _instrumentation = require("../../server/instrumentation");
|
|
9
|
+
var localUtils = _interopRequireWildcard(require("../localUtils"));
|
|
10
|
+
var _userAgent = require("../utils/userAgent");
|
|
23
11
|
var _deviceDescriptors = require("../deviceDescriptors");
|
|
24
|
-
|
|
12
|
+
var _jsonPipeDispatcher = require("../dispatchers/jsonPipeDispatcher");
|
|
13
|
+
var _progress = require("../progress");
|
|
14
|
+
var _socksInterceptor = require("../socksInterceptor");
|
|
15
|
+
var _transport = require("../transport");
|
|
16
|
+
var _network = require("../utils/network");
|
|
17
|
+
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); }
|
|
18
|
+
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; }
|
|
25
19
|
/**
|
|
26
20
|
* Copyright (c) Microsoft Corporation.
|
|
27
21
|
*
|
|
@@ -40,12 +34,12 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
40
34
|
|
|
41
35
|
class LocalUtilsDispatcher extends _dispatcher.Dispatcher {
|
|
42
36
|
constructor(scope, playwright) {
|
|
43
|
-
const
|
|
37
|
+
const _localUtils = new _instrumentation.SdkObject(playwright, 'localUtils', 'localUtils');
|
|
44
38
|
const deviceDescriptors = Object.entries(_deviceDescriptors.deviceDescriptors).map(([name, descriptor]) => ({
|
|
45
39
|
name,
|
|
46
40
|
descriptor
|
|
47
41
|
}));
|
|
48
|
-
super(scope,
|
|
42
|
+
super(scope, _localUtils, 'LocalUtils', {
|
|
49
43
|
deviceDescriptors
|
|
50
44
|
});
|
|
51
45
|
this._type_LocalUtils = void 0;
|
|
@@ -54,131 +48,28 @@ class LocalUtilsDispatcher extends _dispatcher.Dispatcher {
|
|
|
54
48
|
this._type_LocalUtils = true;
|
|
55
49
|
}
|
|
56
50
|
async zip(params) {
|
|
57
|
-
|
|
58
|
-
const zipFile = new _zipBundle.yazl.ZipFile();
|
|
59
|
-
zipFile.on('error', error => promise.reject(error));
|
|
60
|
-
const addFile = (file, name) => {
|
|
61
|
-
try {
|
|
62
|
-
if (_fs.default.statSync(file).isFile()) zipFile.addFile(file, name);
|
|
63
|
-
} catch (e) {}
|
|
64
|
-
};
|
|
65
|
-
for (const entry of params.entries) addFile(entry.value, entry.name);
|
|
66
|
-
|
|
67
|
-
// Add stacks and the sources.
|
|
68
|
-
const stackSession = params.stacksId ? this._stackSessions.get(params.stacksId) : undefined;
|
|
69
|
-
if (stackSession !== null && stackSession !== void 0 && stackSession.callStacks.length) {
|
|
70
|
-
await stackSession.writer;
|
|
71
|
-
if (process.env.PW_LIVE_TRACE_STACKS) {
|
|
72
|
-
zipFile.addFile(stackSession.file, 'trace.stacks');
|
|
73
|
-
} else {
|
|
74
|
-
const buffer = Buffer.from(JSON.stringify((0, _utils.serializeClientSideCallMetadata)(stackSession.callStacks)));
|
|
75
|
-
zipFile.addBuffer(buffer, 'trace.stacks');
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Collect sources from stacks.
|
|
80
|
-
if (params.includeSources) {
|
|
81
|
-
const sourceFiles = new Set();
|
|
82
|
-
for (const {
|
|
83
|
-
stack
|
|
84
|
-
} of (stackSession === null || stackSession === void 0 ? void 0 : stackSession.callStacks) || []) {
|
|
85
|
-
if (!stack) continue;
|
|
86
|
-
for (const {
|
|
87
|
-
file
|
|
88
|
-
} of stack) sourceFiles.add(file);
|
|
89
|
-
}
|
|
90
|
-
for (const sourceFile of sourceFiles) addFile(sourceFile, 'resources/src@' + (0, _utils.calculateSha1)(sourceFile) + '.txt');
|
|
91
|
-
}
|
|
92
|
-
if (params.mode === 'write') {
|
|
93
|
-
// New file, just compress the entries.
|
|
94
|
-
await _fs.default.promises.mkdir(_path.default.dirname(params.zipFile), {
|
|
95
|
-
recursive: true
|
|
96
|
-
});
|
|
97
|
-
zipFile.end(undefined, () => {
|
|
98
|
-
zipFile.outputStream.pipe(_fs.default.createWriteStream(params.zipFile)).on('close', () => promise.resolve()).on('error', error => promise.reject(error));
|
|
99
|
-
});
|
|
100
|
-
await promise;
|
|
101
|
-
await this._deleteStackSession(params.stacksId);
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// File already exists. Repack and add new entries.
|
|
106
|
-
const tempFile = params.zipFile + '.tmp';
|
|
107
|
-
await _fs.default.promises.rename(params.zipFile, tempFile);
|
|
108
|
-
_zipBundle.yauzl.open(tempFile, (err, inZipFile) => {
|
|
109
|
-
if (err) {
|
|
110
|
-
promise.reject(err);
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
(0, _utils.assert)(inZipFile);
|
|
114
|
-
let pendingEntries = inZipFile.entryCount;
|
|
115
|
-
inZipFile.on('entry', entry => {
|
|
116
|
-
inZipFile.openReadStream(entry, (err, readStream) => {
|
|
117
|
-
if (err) {
|
|
118
|
-
promise.reject(err);
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
zipFile.addReadStream(readStream, entry.fileName);
|
|
122
|
-
if (--pendingEntries === 0) {
|
|
123
|
-
zipFile.end(undefined, () => {
|
|
124
|
-
zipFile.outputStream.pipe(_fs.default.createWriteStream(params.zipFile)).on('close', () => {
|
|
125
|
-
_fs.default.promises.unlink(tempFile).then(() => {
|
|
126
|
-
promise.resolve();
|
|
127
|
-
}).catch(error => promise.reject(error));
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
await promise;
|
|
135
|
-
await this._deleteStackSession(params.stacksId);
|
|
51
|
+
return await localUtils.zip(this._stackSessions, params);
|
|
136
52
|
}
|
|
137
53
|
async harOpen(params, metadata) {
|
|
138
|
-
|
|
139
|
-
if (params.file.endsWith('.zip')) {
|
|
140
|
-
const zipFile = new _zipFile.ZipFile(params.file);
|
|
141
|
-
const entryNames = await zipFile.entries();
|
|
142
|
-
const harEntryName = entryNames.find(e => e.endsWith('.har'));
|
|
143
|
-
if (!harEntryName) return {
|
|
144
|
-
error: 'Specified archive does not have a .har file'
|
|
145
|
-
};
|
|
146
|
-
const har = await zipFile.read(harEntryName);
|
|
147
|
-
const harFile = JSON.parse(har.toString());
|
|
148
|
-
harBackend = new HarBackend(harFile, null, zipFile);
|
|
149
|
-
} else {
|
|
150
|
-
const harFile = JSON.parse(await _fs.default.promises.readFile(params.file, 'utf-8'));
|
|
151
|
-
harBackend = new HarBackend(harFile, _path.default.dirname(params.file), null);
|
|
152
|
-
}
|
|
153
|
-
this._harBackends.set(harBackend.id, harBackend);
|
|
154
|
-
return {
|
|
155
|
-
harId: harBackend.id
|
|
156
|
-
};
|
|
54
|
+
return await localUtils.harOpen(this._harBackends, params);
|
|
157
55
|
}
|
|
158
56
|
async harLookup(params, metadata) {
|
|
159
|
-
|
|
160
|
-
if (!harBackend) return {
|
|
161
|
-
action: 'error',
|
|
162
|
-
message: `Internal error: har was not opened`
|
|
163
|
-
};
|
|
164
|
-
return await harBackend.lookup(params.url, params.method, params.headers, params.postData, params.isNavigationRequest);
|
|
57
|
+
return await localUtils.harLookup(this._harBackends, params);
|
|
165
58
|
}
|
|
166
59
|
async harClose(params, metadata) {
|
|
167
|
-
|
|
168
|
-
if (harBackend) {
|
|
169
|
-
this._harBackends.delete(harBackend.id);
|
|
170
|
-
harBackend.dispose();
|
|
171
|
-
}
|
|
60
|
+
return await localUtils.harClose(this._harBackends, params);
|
|
172
61
|
}
|
|
173
62
|
async harUnzip(params, metadata) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
63
|
+
return await localUtils.harUnzip(params);
|
|
64
|
+
}
|
|
65
|
+
async tracingStarted(params, metadata) {
|
|
66
|
+
return await localUtils.tracingStarted(this._stackSessions, params);
|
|
67
|
+
}
|
|
68
|
+
async traceDiscarded(params, metadata) {
|
|
69
|
+
return await localUtils.traceDiscarded(this._stackSessions, params);
|
|
70
|
+
}
|
|
71
|
+
async addStackToTracingNoReply(params, metadata) {
|
|
72
|
+
return await localUtils.addStackToTracingNoReply(this._stackSessions, params);
|
|
182
73
|
}
|
|
183
74
|
async connect(params, metadata) {
|
|
184
75
|
const controller = new _progress.ProgressController(metadata, this._object);
|
|
@@ -219,165 +110,8 @@ class LocalUtilsDispatcher extends _dispatcher.Dispatcher {
|
|
|
219
110
|
};
|
|
220
111
|
}, params.timeout || 0);
|
|
221
112
|
}
|
|
222
|
-
async tracingStarted(params, metadata) {
|
|
223
|
-
let tmpDir = undefined;
|
|
224
|
-
if (!params.tracesDir) tmpDir = await _fs.default.promises.mkdtemp(_path.default.join(_os.default.tmpdir(), 'playwright-tracing-'));
|
|
225
|
-
const traceStacksFile = _path.default.join(params.tracesDir || tmpDir, params.traceName + '.stacks');
|
|
226
|
-
this._stackSessions.set(traceStacksFile, {
|
|
227
|
-
callStacks: [],
|
|
228
|
-
file: traceStacksFile,
|
|
229
|
-
writer: Promise.resolve(),
|
|
230
|
-
tmpDir
|
|
231
|
-
});
|
|
232
|
-
return {
|
|
233
|
-
stacksId: traceStacksFile
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
async traceDiscarded(params, metadata) {
|
|
237
|
-
await this._deleteStackSession(params.stacksId);
|
|
238
|
-
}
|
|
239
|
-
async addStackToTracingNoReply(params, metadata) {
|
|
240
|
-
for (const session of this._stackSessions.values()) {
|
|
241
|
-
session.callStacks.push(params.callData);
|
|
242
|
-
if (process.env.PW_LIVE_TRACE_STACKS) {
|
|
243
|
-
session.writer = session.writer.then(() => {
|
|
244
|
-
const buffer = Buffer.from(JSON.stringify((0, _utils.serializeClientSideCallMetadata)(session.callStacks)));
|
|
245
|
-
return _fs.default.promises.writeFile(session.file, buffer);
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
async _deleteStackSession(stacksId) {
|
|
251
|
-
const session = stacksId ? this._stackSessions.get(stacksId) : undefined;
|
|
252
|
-
if (!session) return;
|
|
253
|
-
await session.writer;
|
|
254
|
-
if (session.tmpDir) await (0, _utils.removeFolders)([session.tmpDir]);
|
|
255
|
-
this._stackSessions.delete(stacksId);
|
|
256
|
-
}
|
|
257
113
|
}
|
|
258
114
|
exports.LocalUtilsDispatcher = LocalUtilsDispatcher;
|
|
259
|
-
const redirectStatus = [301, 302, 303, 307, 308];
|
|
260
|
-
class HarBackend {
|
|
261
|
-
constructor(harFile, baseDir, zipFile) {
|
|
262
|
-
this.id = (0, _utils.createGuid)();
|
|
263
|
-
this._harFile = void 0;
|
|
264
|
-
this._zipFile = void 0;
|
|
265
|
-
this._baseDir = void 0;
|
|
266
|
-
this._harFile = harFile;
|
|
267
|
-
this._baseDir = baseDir;
|
|
268
|
-
this._zipFile = zipFile;
|
|
269
|
-
}
|
|
270
|
-
async lookup(url, method, headers, postData, isNavigationRequest) {
|
|
271
|
-
let entry;
|
|
272
|
-
try {
|
|
273
|
-
entry = await this._harFindResponse(url, method, headers, postData);
|
|
274
|
-
} catch (e) {
|
|
275
|
-
return {
|
|
276
|
-
action: 'error',
|
|
277
|
-
message: 'HAR error: ' + e.message
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
if (!entry) return {
|
|
281
|
-
action: 'noentry'
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
// If navigation is being redirected, restart it with the final url to ensure the document's url changes.
|
|
285
|
-
if (entry.request.url !== url && isNavigationRequest) return {
|
|
286
|
-
action: 'redirect',
|
|
287
|
-
redirectURL: entry.request.url
|
|
288
|
-
};
|
|
289
|
-
const response = entry.response;
|
|
290
|
-
try {
|
|
291
|
-
const buffer = await this._loadContent(response.content);
|
|
292
|
-
return {
|
|
293
|
-
action: 'fulfill',
|
|
294
|
-
status: response.status,
|
|
295
|
-
headers: response.headers,
|
|
296
|
-
body: buffer
|
|
297
|
-
};
|
|
298
|
-
} catch (e) {
|
|
299
|
-
return {
|
|
300
|
-
action: 'error',
|
|
301
|
-
message: e.message
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
async _loadContent(content) {
|
|
306
|
-
const file = content._file;
|
|
307
|
-
let buffer;
|
|
308
|
-
if (file) {
|
|
309
|
-
if (this._zipFile) buffer = await this._zipFile.read(file);else buffer = await _fs.default.promises.readFile(_path.default.resolve(this._baseDir, file));
|
|
310
|
-
} else {
|
|
311
|
-
buffer = Buffer.from(content.text || '', content.encoding === 'base64' ? 'base64' : 'utf-8');
|
|
312
|
-
}
|
|
313
|
-
return buffer;
|
|
314
|
-
}
|
|
315
|
-
async _harFindResponse(url, method, headers, postData) {
|
|
316
|
-
const harLog = this._harFile.log;
|
|
317
|
-
const visited = new Set();
|
|
318
|
-
while (true) {
|
|
319
|
-
const entries = [];
|
|
320
|
-
for (const candidate of harLog.entries) {
|
|
321
|
-
if (candidate.request.url !== url || candidate.request.method !== method) continue;
|
|
322
|
-
if (method === 'POST' && postData && candidate.request.postData) {
|
|
323
|
-
const buffer = await this._loadContent(candidate.request.postData);
|
|
324
|
-
if (!buffer.equals(postData)) {
|
|
325
|
-
const boundary = multipartBoundary(headers);
|
|
326
|
-
if (!boundary) continue;
|
|
327
|
-
const candidataBoundary = multipartBoundary(candidate.request.headers);
|
|
328
|
-
if (!candidataBoundary) continue;
|
|
329
|
-
// Try to match multipart/form-data ignroing boundary as it changes between requests.
|
|
330
|
-
if (postData.toString().replaceAll(boundary, '') !== buffer.toString().replaceAll(candidataBoundary, '')) continue;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
entries.push(candidate);
|
|
334
|
-
}
|
|
335
|
-
if (!entries.length) return;
|
|
336
|
-
let entry = entries[0];
|
|
337
|
-
|
|
338
|
-
// Disambiguate using headers - then one with most matching headers wins.
|
|
339
|
-
if (entries.length > 1) {
|
|
340
|
-
const list = [];
|
|
341
|
-
for (const candidate of entries) {
|
|
342
|
-
const matchingHeaders = countMatchingHeaders(candidate.request.headers, headers);
|
|
343
|
-
list.push({
|
|
344
|
-
candidate,
|
|
345
|
-
matchingHeaders
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
|
-
list.sort((a, b) => b.matchingHeaders - a.matchingHeaders);
|
|
349
|
-
entry = list[0].candidate;
|
|
350
|
-
}
|
|
351
|
-
if (visited.has(entry)) throw new Error(`Found redirect cycle for ${url}`);
|
|
352
|
-
visited.add(entry);
|
|
353
|
-
|
|
354
|
-
// Follow redirects.
|
|
355
|
-
const locationHeader = entry.response.headers.find(h => h.name.toLowerCase() === 'location');
|
|
356
|
-
if (redirectStatus.includes(entry.response.status) && locationHeader) {
|
|
357
|
-
const locationURL = new URL(locationHeader.value, url);
|
|
358
|
-
url = locationURL.toString();
|
|
359
|
-
if ((entry.response.status === 301 || entry.response.status === 302) && method === 'POST' || entry.response.status === 303 && !['GET', 'HEAD'].includes(method)) {
|
|
360
|
-
// HTTP-redirect fetch step 13 (https://fetch.spec.whatwg.org/#http-redirect-fetch)
|
|
361
|
-
method = 'GET';
|
|
362
|
-
}
|
|
363
|
-
continue;
|
|
364
|
-
}
|
|
365
|
-
return entry;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
dispose() {
|
|
369
|
-
var _this$_zipFile;
|
|
370
|
-
(_this$_zipFile = this._zipFile) === null || _this$_zipFile === void 0 || _this$_zipFile.close();
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
function countMatchingHeaders(harHeaders, headers) {
|
|
374
|
-
const set = new Set(headers.map(h => h.name.toLowerCase() + ':' + h.value));
|
|
375
|
-
let matches = 0;
|
|
376
|
-
for (const h of harHeaders) {
|
|
377
|
-
if (set.has(h.name.toLowerCase() + ':' + h.value)) ++matches;
|
|
378
|
-
}
|
|
379
|
-
return matches;
|
|
380
|
-
}
|
|
381
115
|
async function urlToWSEndpoint(progress, endpointURL) {
|
|
382
116
|
var _progress$timeUntilDe;
|
|
383
117
|
if (endpointURL.startsWith('ws')) return endpointURL;
|
|
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.WebSocketDispatcher = exports.RouteDispatcher = exports.ResponseDispatcher = exports.RequestDispatcher = exports.APIRequestContextDispatcher = void 0;
|
|
7
7
|
var _network = require("../network");
|
|
8
8
|
var _dispatcher = require("./dispatcher");
|
|
9
|
-
var _tracingDispatcher = require("./tracingDispatcher");
|
|
10
9
|
var _frameDispatcher = require("./frameDispatcher");
|
|
11
10
|
var _pageDispatcher = require("./pageDispatcher");
|
|
11
|
+
var _tracingDispatcher = require("./tracingDispatcher");
|
|
12
12
|
/**
|
|
13
13
|
* Copyright (c) Microsoft Corporation.
|
|
14
14
|
*
|
|
@@ -183,8 +183,8 @@ class APIRequestContextDispatcher extends _dispatcher.Dispatcher {
|
|
|
183
183
|
this._type_APIRequestContext = true;
|
|
184
184
|
this.adopt(tracing);
|
|
185
185
|
}
|
|
186
|
-
async storageState() {
|
|
187
|
-
return this._object.storageState();
|
|
186
|
+
async storageState(params) {
|
|
187
|
+
return this._object.storageState(params.indexedDB);
|
|
188
188
|
}
|
|
189
189
|
async dispose(params, metadata) {
|
|
190
190
|
metadata.potentiallyClosesScope = true;
|
|
@@ -7,13 +7,14 @@ exports.WorkerDispatcher = exports.PageDispatcher = exports.BindingCallDispatche
|
|
|
7
7
|
var _page = require("../page");
|
|
8
8
|
var _dispatcher = require("./dispatcher");
|
|
9
9
|
var _errors = require("../errors");
|
|
10
|
+
var _artifactDispatcher = require("./artifactDispatcher");
|
|
11
|
+
var _elementHandlerDispatcher = require("./elementHandlerDispatcher");
|
|
10
12
|
var _frameDispatcher = require("./frameDispatcher");
|
|
11
|
-
var _networkDispatchers = require("./networkDispatchers");
|
|
12
13
|
var _jsHandleDispatcher = require("./jsHandleDispatcher");
|
|
13
|
-
var
|
|
14
|
-
var _artifactDispatcher = require("./artifactDispatcher");
|
|
15
|
-
var _utils = require("../../utils");
|
|
14
|
+
var _networkDispatchers = require("./networkDispatchers");
|
|
16
15
|
var _webSocketRouteDispatcher = require("./webSocketRouteDispatcher");
|
|
16
|
+
var _crypto = require("../utils/crypto");
|
|
17
|
+
var _urlMatch = require("../../utils/isomorphic/urlMatch");
|
|
17
18
|
/**
|
|
18
19
|
* Copyright (c) Microsoft Corporation.
|
|
19
20
|
*
|
|
@@ -155,7 +156,8 @@ class PageDispatcher extends _dispatcher.Dispatcher {
|
|
|
155
156
|
media: params.media,
|
|
156
157
|
colorScheme: params.colorScheme,
|
|
157
158
|
reducedMotion: params.reducedMotion,
|
|
158
|
-
forcedColors: params.forcedColors
|
|
159
|
+
forcedColors: params.forcedColors,
|
|
160
|
+
contrast: params.contrast
|
|
159
161
|
});
|
|
160
162
|
}
|
|
161
163
|
async setViewportSize(params, metadata) {
|
|
@@ -171,7 +173,7 @@ class PageDispatcher extends _dispatcher.Dispatcher {
|
|
|
171
173
|
}
|
|
172
174
|
const urlMatchers = params.patterns.map(pattern => pattern.regexSource ? new RegExp(pattern.regexSource, pattern.regexFlags) : pattern.glob);
|
|
173
175
|
await this._page.setClientRequestInterceptor((route, request) => {
|
|
174
|
-
const matchesSome = urlMatchers.some(urlMatch => (0,
|
|
176
|
+
const matchesSome = urlMatchers.some(urlMatch => (0, _urlMatch.urlMatches)(this._page._browserContext._options.baseURL, request.url(), urlMatch));
|
|
175
177
|
if (!matchesSome) return false;
|
|
176
178
|
this._dispatchEvent('route', {
|
|
177
179
|
route: _networkDispatchers.RouteDispatcher.from(_networkDispatchers.RequestDispatcher.from(this.parentScope(), request), route)
|
|
@@ -181,7 +183,7 @@ class PageDispatcher extends _dispatcher.Dispatcher {
|
|
|
181
183
|
}
|
|
182
184
|
async setWebSocketInterceptionPatterns(params, metadata) {
|
|
183
185
|
this._webSocketInterceptionPatterns = params.patterns;
|
|
184
|
-
if (params.patterns.length) await _webSocketRouteDispatcher.WebSocketRouteDispatcher.installIfNeeded(this.
|
|
186
|
+
if (params.patterns.length) await _webSocketRouteDispatcher.WebSocketRouteDispatcher.installIfNeeded(this._page);
|
|
185
187
|
}
|
|
186
188
|
async expectScreenshot(params, metadata) {
|
|
187
189
|
const mask = (params.mask || []).map(({
|
|
@@ -336,7 +338,7 @@ exports.WorkerDispatcher = WorkerDispatcher;
|
|
|
336
338
|
class BindingCallDispatcher extends _dispatcher.Dispatcher {
|
|
337
339
|
constructor(scope, name, needsHandle, source, args) {
|
|
338
340
|
super(scope, {
|
|
339
|
-
guid: 'bindingCall@' + (0,
|
|
341
|
+
guid: 'bindingCall@' + (0, _crypto.createGuid)()
|
|
340
342
|
}, 'BindingCall', {
|
|
341
343
|
frame: _frameDispatcher.FrameDispatcher.from(scope.parentScope(), source.frame),
|
|
342
344
|
name,
|
|
@@ -4,18 +4,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.PlaywrightDispatcher = void 0;
|
|
7
|
+
var _socksProxy = require("../utils/socksProxy");
|
|
7
8
|
var _fetch = require("../fetch");
|
|
8
|
-
var _socksProxy = require("../../common/socksProxy");
|
|
9
9
|
var _androidDispatcher = require("./androidDispatcher");
|
|
10
|
+
var _browserDispatcher = require("./browserDispatcher");
|
|
10
11
|
var _browserTypeDispatcher = require("./browserTypeDispatcher");
|
|
11
12
|
var _dispatcher = require("./dispatcher");
|
|
12
13
|
var _electronDispatcher = require("./electronDispatcher");
|
|
13
14
|
var _localUtilsDispatcher = require("./localUtilsDispatcher");
|
|
14
15
|
var _networkDispatchers = require("./networkDispatchers");
|
|
15
16
|
var _selectorsDispatcher = require("./selectorsDispatcher");
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var _eventsHelper = require("../../utils/eventsHelper");
|
|
17
|
+
var _crypto = require("../utils/crypto");
|
|
18
|
+
var _eventsHelper = require("../utils/eventsHelper");
|
|
19
19
|
/**
|
|
20
20
|
* Copyright (c) Microsoft Corporation.
|
|
21
21
|
*
|
|
@@ -72,7 +72,7 @@ exports.PlaywrightDispatcher = PlaywrightDispatcher;
|
|
|
72
72
|
class SocksSupportDispatcher extends _dispatcher.Dispatcher {
|
|
73
73
|
constructor(scope, socksProxy) {
|
|
74
74
|
super(scope, {
|
|
75
|
-
guid: 'socksSupport@' + (0,
|
|
75
|
+
guid: 'socksSupport@' + (0, _crypto.createGuid)()
|
|
76
76
|
}, 'SocksSupport', {});
|
|
77
77
|
this._type_SocksSupport = void 0;
|
|
78
78
|
this._socksProxy = void 0;
|
|
@@ -5,7 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.StreamDispatcher = void 0;
|
|
7
7
|
var _dispatcher = require("./dispatcher");
|
|
8
|
-
var
|
|
8
|
+
var _manualPromise = require("../../utils/isomorphic/manualPromise");
|
|
9
|
+
var _crypto = require("../utils/crypto");
|
|
9
10
|
/**
|
|
10
11
|
* Copyright (c) Microsoft Corporation.
|
|
11
12
|
*
|
|
@@ -25,7 +26,7 @@ var _utils = require("../../utils");
|
|
|
25
26
|
class StreamDispatcher extends _dispatcher.Dispatcher {
|
|
26
27
|
constructor(scope, stream) {
|
|
27
28
|
super(scope, {
|
|
28
|
-
guid: 'stream@' + (0,
|
|
29
|
+
guid: 'stream@' + (0, _crypto.createGuid)(),
|
|
29
30
|
stream
|
|
30
31
|
}, 'Stream', {});
|
|
31
32
|
// In Node v12.9.0+ we can use readableEnded.
|
|
@@ -40,7 +41,7 @@ class StreamDispatcher extends _dispatcher.Dispatcher {
|
|
|
40
41
|
binary: Buffer.from('')
|
|
41
42
|
};
|
|
42
43
|
if (!stream.readableLength) {
|
|
43
|
-
const readyPromise = new
|
|
44
|
+
const readyPromise = new _manualPromise.ManualPromise();
|
|
44
45
|
const done = () => readyPromise.resolve();
|
|
45
46
|
stream.on('readable', done);
|
|
46
47
|
stream.on('end', done);
|
|
@@ -37,6 +37,16 @@ class TracingDispatcher extends _dispatcher.Dispatcher {
|
|
|
37
37
|
async tracingStartChunk(params) {
|
|
38
38
|
return await this._object.startChunk(params);
|
|
39
39
|
}
|
|
40
|
+
async tracingGroup(params, metadata) {
|
|
41
|
+
const {
|
|
42
|
+
name,
|
|
43
|
+
location
|
|
44
|
+
} = params;
|
|
45
|
+
await this._object.group(name, location, metadata);
|
|
46
|
+
}
|
|
47
|
+
async tracingGroupEnd(params) {
|
|
48
|
+
await this._object.groupEnd();
|
|
49
|
+
}
|
|
40
50
|
async tracingStopChunk(params) {
|
|
41
51
|
const {
|
|
42
52
|
artifact,
|
|
@@ -6,11 +6,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.WebSocketRouteDispatcher = void 0;
|
|
7
7
|
var _page = require("../page");
|
|
8
8
|
var _dispatcher = require("./dispatcher");
|
|
9
|
-
var _utils = require("../../utils");
|
|
10
9
|
var _pageDispatcher = require("./pageDispatcher");
|
|
11
10
|
var webSocketMockSource = _interopRequireWildcard(require("../../generated/webSocketMockSource"));
|
|
12
|
-
var
|
|
13
|
-
var
|
|
11
|
+
var _crypto = require("../utils/crypto");
|
|
12
|
+
var _urlMatch = require("../../utils/isomorphic/urlMatch");
|
|
13
|
+
var _eventsHelper = require("../utils/eventsHelper");
|
|
14
|
+
var _WebSocketRouteDispatcher;
|
|
14
15
|
/**
|
|
15
16
|
* Copyright (c) Microsoft Corporation.
|
|
16
17
|
*
|
|
@@ -27,13 +28,11 @@ var _class;
|
|
|
27
28
|
* limitations under the License.
|
|
28
29
|
*/
|
|
29
30
|
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); }
|
|
30
|
-
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 &&
|
|
31
|
-
const kBindingInstalledSymbol = Symbol('webSocketRouteBindingInstalled');
|
|
32
|
-
const kInitScriptInstalledSymbol = Symbol('webSocketRouteInitScriptInstalled');
|
|
31
|
+
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; }
|
|
33
32
|
class WebSocketRouteDispatcher extends _dispatcher.Dispatcher {
|
|
34
33
|
constructor(scope, id, url, frame) {
|
|
35
34
|
super(scope, {
|
|
36
|
-
guid: 'webSocketRoute@' + (0,
|
|
35
|
+
guid: 'webSocketRoute@' + (0, _crypto.createGuid)()
|
|
37
36
|
}, 'WebSocketRoute', {
|
|
38
37
|
url
|
|
39
38
|
});
|
|
@@ -55,15 +54,16 @@ class WebSocketRouteDispatcher extends _dispatcher.Dispatcher {
|
|
|
55
54
|
webSocketRoute: this
|
|
56
55
|
});
|
|
57
56
|
}
|
|
58
|
-
static async installIfNeeded(
|
|
57
|
+
static async installIfNeeded(target) {
|
|
58
|
+
const kBindingName = '__pwWebSocketBinding';
|
|
59
59
|
const context = target instanceof _page.Page ? target.context() : target;
|
|
60
|
-
if (!context
|
|
61
|
-
context
|
|
62
|
-
await context.exposeBinding('__pwWebSocketBinding', false, (source, payload) => {
|
|
60
|
+
if (!context.hasBinding(kBindingName)) {
|
|
61
|
+
await context.exposeBinding(kBindingName, false, (source, payload) => {
|
|
63
62
|
if (payload.type === 'onCreate') {
|
|
64
|
-
const
|
|
63
|
+
const contextDispatcher = (0, _dispatcher.existingDispatcher)(context);
|
|
64
|
+
const pageDispatcher = contextDispatcher ? _pageDispatcher.PageDispatcher.fromNullable(contextDispatcher, source.page) : undefined;
|
|
65
65
|
let scope;
|
|
66
|
-
if (pageDispatcher && matchesPattern(pageDispatcher, context._options.baseURL, payload.url)) scope = pageDispatcher;else if (matchesPattern(contextDispatcher, context._options.baseURL, payload.url)) scope = contextDispatcher;
|
|
66
|
+
if (pageDispatcher && matchesPattern(pageDispatcher, context._options.baseURL, payload.url)) scope = pageDispatcher;else if (contextDispatcher && matchesPattern(contextDispatcher, context._options.baseURL, payload.url)) scope = contextDispatcher;
|
|
67
67
|
if (scope) {
|
|
68
68
|
new WebSocketRouteDispatcher(scope, payload.id, payload.url, source.frame);
|
|
69
69
|
} else {
|
|
@@ -96,15 +96,15 @@ class WebSocketRouteDispatcher extends _dispatcher.Dispatcher {
|
|
|
96
96
|
});
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
const kInitScriptName = 'webSocketMockSource';
|
|
100
|
+
if (!target.initScripts.find(s => s.name === kInitScriptName)) {
|
|
101
101
|
await target.addInitScript(`
|
|
102
102
|
(() => {
|
|
103
103
|
const module = {};
|
|
104
104
|
${webSocketMockSource.source}
|
|
105
105
|
(module.exports.inject())(globalThis);
|
|
106
106
|
})();
|
|
107
|
-
|
|
107
|
+
`, kInitScriptName);
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
async connect(params) {
|
|
@@ -178,12 +178,12 @@ class WebSocketRouteDispatcher extends _dispatcher.Dispatcher {
|
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
exports.WebSocketRouteDispatcher = WebSocketRouteDispatcher;
|
|
181
|
-
|
|
181
|
+
_WebSocketRouteDispatcher = WebSocketRouteDispatcher;
|
|
182
182
|
WebSocketRouteDispatcher._idToDispatcher = new Map();
|
|
183
183
|
function matchesPattern(dispatcher, baseURL, url) {
|
|
184
184
|
for (const pattern of dispatcher._webSocketInterceptionPatterns || []) {
|
|
185
185
|
const urlMatch = pattern.regexSource ? new RegExp(pattern.regexSource, pattern.regexFlags) : pattern.glob;
|
|
186
|
-
if ((0,
|
|
186
|
+
if ((0, _urlMatch.urlMatches)(baseURL, url, urlMatch)) return true;
|
|
187
187
|
}
|
|
188
188
|
return false;
|
|
189
189
|
}
|
|
@@ -4,11 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.WritableStreamDispatcher = void 0;
|
|
7
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
7
8
|
var _dispatcher = require("./dispatcher");
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
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); }
|
|
11
|
-
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 && Object.prototype.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; }
|
|
9
|
+
var _crypto = require("../utils/crypto");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
11
|
/**
|
|
13
12
|
* Copyright (c) Microsoft Corporation.
|
|
14
13
|
*
|
|
@@ -28,7 +27,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
28
27
|
class WritableStreamDispatcher extends _dispatcher.Dispatcher {
|
|
29
28
|
constructor(scope, streamOrDirectory, lastModifiedMs) {
|
|
30
29
|
super(scope, {
|
|
31
|
-
guid: 'writableStream@' + (0,
|
|
30
|
+
guid: 'writableStream@' + (0, _crypto.createGuid)(),
|
|
32
31
|
streamOrDirectory
|
|
33
32
|
}, 'WritableStream', {});
|
|
34
33
|
this._type_WritableStream = true;
|
|
@@ -48,7 +47,7 @@ class WritableStreamDispatcher extends _dispatcher.Dispatcher {
|
|
|
48
47
|
if (typeof this._object.streamOrDirectory === 'string') throw new Error('Cannot close a directory');
|
|
49
48
|
const stream = this._object.streamOrDirectory;
|
|
50
49
|
await new Promise(fulfill => stream.end(fulfill));
|
|
51
|
-
if (this._lastModifiedMs) await
|
|
50
|
+
if (this._lastModifiedMs) await _fs.default.promises.utimes(this.path(), new Date(this._lastModifiedMs), new Date(this._lastModifiedMs));
|
|
52
51
|
}
|
|
53
52
|
path() {
|
|
54
53
|
if (typeof this._object.streamOrDirectory === 'string') return this._object.streamOrDirectory;
|