@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
|
@@ -6,10 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.ChannelOwner = void 0;
|
|
7
7
|
var _eventEmitter = require("./eventEmitter");
|
|
8
8
|
var _validator = require("../protocol/validator");
|
|
9
|
-
var
|
|
10
|
-
var _stackTrace = require("../utils/stackTrace");
|
|
11
|
-
var _utils = require("../utils");
|
|
12
|
-
var _zones = require("../utils/zones");
|
|
9
|
+
var _clientStackTrace = require("./clientStackTrace");
|
|
10
|
+
var _stackTrace = require("../utils/isomorphic/stackTrace");
|
|
13
11
|
/**
|
|
14
12
|
* Copyright (c) Microsoft Corporation.
|
|
15
13
|
*
|
|
@@ -28,7 +26,8 @@ var _zones = require("../utils/zones");
|
|
|
28
26
|
|
|
29
27
|
class ChannelOwner extends _eventEmitter.EventEmitter {
|
|
30
28
|
constructor(parent, type, guid, initializer) {
|
|
31
|
-
|
|
29
|
+
const connection = parent instanceof ChannelOwner ? parent._connection : parent;
|
|
30
|
+
super(connection._platform);
|
|
32
31
|
this._connection = void 0;
|
|
33
32
|
this._parent = void 0;
|
|
34
33
|
this._objects = new Map();
|
|
@@ -42,7 +41,7 @@ class ChannelOwner extends _eventEmitter.EventEmitter {
|
|
|
42
41
|
this._isInternalType = false;
|
|
43
42
|
this._wasCollected = false;
|
|
44
43
|
this.setMaxListeners(0);
|
|
45
|
-
this._connection =
|
|
44
|
+
this._connection = connection;
|
|
46
45
|
this._type = type;
|
|
47
46
|
this._guid = guid;
|
|
48
47
|
this._parent = parent instanceof ChannelOwner ? parent : undefined;
|
|
@@ -52,7 +51,7 @@ class ChannelOwner extends _eventEmitter.EventEmitter {
|
|
|
52
51
|
this._parent._objects.set(guid, this);
|
|
53
52
|
this._logger = this._parent._logger;
|
|
54
53
|
}
|
|
55
|
-
this._channel = this._createChannel(new _eventEmitter.EventEmitter());
|
|
54
|
+
this._channel = this._createChannel(new _eventEmitter.EventEmitter(connection._platform));
|
|
56
55
|
this._initializer = initializer;
|
|
57
56
|
}
|
|
58
57
|
markAsInternalType() {
|
|
@@ -118,6 +117,13 @@ class ChannelOwner extends _eventEmitter.EventEmitter {
|
|
|
118
117
|
objects: Array.from(this._objects.values()).map(o => o._debugScopeState())
|
|
119
118
|
};
|
|
120
119
|
}
|
|
120
|
+
_validatorToWireContext() {
|
|
121
|
+
return {
|
|
122
|
+
tChannelImpl: tChannelImplToWire,
|
|
123
|
+
binary: this._connection.rawBuffers() ? 'buffer' : 'toBase64',
|
|
124
|
+
isUnderTest: () => this._platform.isUnderTest()
|
|
125
|
+
};
|
|
126
|
+
}
|
|
121
127
|
_createChannel(base) {
|
|
122
128
|
const channel = new Proxy(base, {
|
|
123
129
|
get: (obj, prop) => {
|
|
@@ -126,30 +132,18 @@ class ChannelOwner extends _eventEmitter.EventEmitter {
|
|
|
126
132
|
if (validator) {
|
|
127
133
|
return async params => {
|
|
128
134
|
return await this._wrapApiCall(async apiZone => {
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
apiName
|
|
137
|
-
csi: undefined,
|
|
138
|
-
callCookie: undefined,
|
|
139
|
-
frames: [],
|
|
140
|
-
stepId: undefined
|
|
141
|
-
} : apiZone;
|
|
142
|
-
apiZone.reported = true;
|
|
143
|
-
let currentStepId = stepId;
|
|
144
|
-
if (csi && apiName) {
|
|
145
|
-
const out = {};
|
|
146
|
-
csi.onApiCallBegin(apiName, params, frames, callCookie, out);
|
|
147
|
-
currentStepId = out.stepId;
|
|
135
|
+
const validatedParams = validator(params, '', this._validatorToWireContext());
|
|
136
|
+
if (!apiZone.isInternal && !apiZone.reported) {
|
|
137
|
+
// Reporting/tracing/logging this api call for the first time.
|
|
138
|
+
apiZone.params = params;
|
|
139
|
+
apiZone.reported = true;
|
|
140
|
+
this._instrumentation.onApiCallBegin(apiZone);
|
|
141
|
+
logApiCall(this._platform, this._logger, `=> ${apiZone.apiName} started`);
|
|
142
|
+
return await this._connection.sendMessageToServer(this, prop, validatedParams, apiZone.apiName, apiZone.frames, apiZone.stepId);
|
|
148
143
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}), apiName, frames, currentStepId);
|
|
144
|
+
// Since this api call is either internal, or has already been reported/traced once,
|
|
145
|
+
// passing undefined apiName will avoid an extra unneeded tracing entry.
|
|
146
|
+
return await this._connection.sendMessageToServer(this, prop, validatedParams, undefined, [], undefined);
|
|
153
147
|
});
|
|
154
148
|
};
|
|
155
149
|
}
|
|
@@ -160,47 +154,39 @@ class ChannelOwner extends _eventEmitter.EventEmitter {
|
|
|
160
154
|
channel._object = this;
|
|
161
155
|
return channel;
|
|
162
156
|
}
|
|
163
|
-
async _wrapApiCall(func, isInternal
|
|
157
|
+
async _wrapApiCall(func, isInternal) {
|
|
164
158
|
const logger = this._logger;
|
|
165
|
-
const
|
|
166
|
-
if (
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
// If we are coming from the expectZone, there is no need to generate a new
|
|
179
|
-
// step for the API call, since it will be generated by the expect itself.
|
|
180
|
-
const csi = isInternal || expectZone ? undefined : this._instrumentation;
|
|
181
|
-
const callCookie = {};
|
|
159
|
+
const existingApiZone = this._platform.zones.current().data();
|
|
160
|
+
if (existingApiZone) return await func(existingApiZone);
|
|
161
|
+
if (isInternal === undefined) isInternal = this._isInternalType;
|
|
162
|
+
const stackTrace = (0, _clientStackTrace.captureLibraryStackTrace)(this._platform);
|
|
163
|
+
const apiZone = {
|
|
164
|
+
apiName: stackTrace.apiName,
|
|
165
|
+
frames: stackTrace.frames,
|
|
166
|
+
isInternal,
|
|
167
|
+
reported: false,
|
|
168
|
+
userData: undefined,
|
|
169
|
+
stepId: undefined
|
|
170
|
+
};
|
|
182
171
|
try {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
apiName
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
callCookie,
|
|
191
|
-
stepId
|
|
192
|
-
};
|
|
193
|
-
const result = await _zones.zones.run('apiZone', apiZone, async () => await func(apiZone));
|
|
194
|
-
csi === null || csi === void 0 || csi.onApiCallEnd(callCookie, null, result);
|
|
195
|
-
logApiCall(logger, `<= ${apiName} succeeded`, isInternal);
|
|
172
|
+
const result = await this._platform.zones.current().push(apiZone).run(async () => await func(apiZone));
|
|
173
|
+
if (!isInternal) {
|
|
174
|
+
logApiCall(this._platform, logger, `<= ${apiZone.apiName} succeeded`);
|
|
175
|
+
// @ts-ignore
|
|
176
|
+
// patch:checkly[2025-04]
|
|
177
|
+
this._instrumentation.onApiCallEnd(apiZone, result);
|
|
178
|
+
}
|
|
196
179
|
return result;
|
|
197
180
|
} catch (e) {
|
|
198
|
-
const innerError = (
|
|
199
|
-
if (apiName && !apiName.includes('<anonymous>')) e.message = apiName + ': ' + e.message;
|
|
181
|
+
const innerError = (this._platform.showInternalStackFrames() || this._platform.isUnderTest()) && e.stack ? '\n<inner error>\n' + e.stack : '';
|
|
182
|
+
if (apiZone.apiName && !apiZone.apiName.includes('<anonymous>')) e.message = apiZone.apiName + ': ' + e.message;
|
|
200
183
|
const stackFrames = '\n' + (0, _stackTrace.stringifyStackFrames)(stackTrace.frames).join('\n') + innerError;
|
|
201
184
|
if (stackFrames.trim()) e.stack = e.message + stackFrames;else e.stack = '';
|
|
202
|
-
|
|
203
|
-
|
|
185
|
+
if (!isInternal) {
|
|
186
|
+
apiZone.error = e;
|
|
187
|
+
logApiCall(this._platform, logger, `<= ${apiZone.apiName} failed`);
|
|
188
|
+
this._instrumentation.onApiCallEnd(apiZone);
|
|
189
|
+
}
|
|
204
190
|
throw e;
|
|
205
191
|
}
|
|
206
192
|
}
|
|
@@ -220,12 +206,11 @@ class ChannelOwner extends _eventEmitter.EventEmitter {
|
|
|
220
206
|
}
|
|
221
207
|
}
|
|
222
208
|
exports.ChannelOwner = ChannelOwner;
|
|
223
|
-
function logApiCall(logger, message
|
|
224
|
-
if (isNested) return;
|
|
209
|
+
function logApiCall(platform, logger, message) {
|
|
225
210
|
if (logger && logger.isEnabled('api', 'info')) logger.log('api', 'info', message, [], {
|
|
226
211
|
color: 'cyan'
|
|
227
212
|
});
|
|
228
|
-
|
|
213
|
+
platform.log('api', message);
|
|
229
214
|
}
|
|
230
215
|
function tChannelImplToWire(names, arg, path, context) {
|
|
231
216
|
if (arg._object instanceof ChannelOwner && (names === '*' || names.includes(arg._object._type))) return {
|
|
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.addSourceUrlToScript = addSourceUrlToScript;
|
|
7
7
|
exports.envObjectToArray = envObjectToArray;
|
|
8
8
|
exports.evaluationScript = evaluationScript;
|
|
9
|
-
var
|
|
10
|
-
var _utils = require("../utils");
|
|
11
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
var _rtti = require("../utils/isomorphic/rtti");
|
|
12
10
|
/**
|
|
13
11
|
* Copyright 2017 Google Inc. All rights reserved.
|
|
14
12
|
* Modifications copyright (c) Microsoft Corporation.
|
|
@@ -36,17 +34,17 @@ function envObjectToArray(env) {
|
|
|
36
34
|
}
|
|
37
35
|
return result;
|
|
38
36
|
}
|
|
39
|
-
async function evaluationScript(fun, arg, addSourceUrl = true) {
|
|
37
|
+
async function evaluationScript(platform, fun, arg, addSourceUrl = true) {
|
|
40
38
|
if (typeof fun === 'function') {
|
|
41
39
|
const source = fun.toString();
|
|
42
40
|
const argString = Object.is(arg, undefined) ? 'undefined' : JSON.stringify(arg);
|
|
43
41
|
return `(${source})(${argString})`;
|
|
44
42
|
}
|
|
45
43
|
if (arg !== undefined) throw new Error('Cannot evaluate a string with arguments');
|
|
46
|
-
if ((0,
|
|
44
|
+
if ((0, _rtti.isString)(fun)) return fun;
|
|
47
45
|
if (fun.content !== undefined) return fun.content;
|
|
48
46
|
if (fun.path !== undefined) {
|
|
49
|
-
let source = await
|
|
47
|
+
let source = await platform.fs().promises.readFile(fun.path, 'utf8');
|
|
50
48
|
if (addSourceUrl) source = addSourceUrlToScript(source, fun.path);
|
|
51
49
|
return source;
|
|
52
50
|
}
|
|
@@ -20,6 +20,8 @@ exports.createInstrumentation = createInstrumentation;
|
|
|
20
20
|
* limitations under the License.
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
|
+
// Instrumentation can mutate the data, for example change apiName or stepId.
|
|
24
|
+
|
|
23
25
|
function createInstrumentation() {
|
|
24
26
|
const listeners = [];
|
|
25
27
|
return new Proxy({}, {
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.captureLibraryStackTrace = captureLibraryStackTrace;
|
|
7
|
+
var _stackTrace = require("../utils/isomorphic/stackTrace");
|
|
8
|
+
/**
|
|
9
|
+
* 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
|
+
function captureLibraryStackTrace(platform) {
|
|
25
|
+
const stack = (0, _stackTrace.captureRawStack)();
|
|
26
|
+
let parsedFrames = stack.map(line => {
|
|
27
|
+
const frame = (0, _stackTrace.parseStackFrame)(line, platform.pathSeparator, platform.showInternalStackFrames());
|
|
28
|
+
if (!frame || !frame.file) return null;
|
|
29
|
+
const isPlaywrightLibrary = !!platform.coreDir && frame.file.startsWith(platform.coreDir);
|
|
30
|
+
const parsed = {
|
|
31
|
+
frame,
|
|
32
|
+
frameText: line,
|
|
33
|
+
isPlaywrightLibrary
|
|
34
|
+
};
|
|
35
|
+
return parsed;
|
|
36
|
+
}).filter(Boolean);
|
|
37
|
+
let apiName = '';
|
|
38
|
+
|
|
39
|
+
// Deepest transition between non-client code calling into client
|
|
40
|
+
// code is the api entry.
|
|
41
|
+
for (let i = 0; i < parsedFrames.length - 1; i++) {
|
|
42
|
+
const parsedFrame = parsedFrames[i];
|
|
43
|
+
if (parsedFrame.isPlaywrightLibrary && !parsedFrames[i + 1].isPlaywrightLibrary) {
|
|
44
|
+
apiName = apiName || normalizeAPIName(parsedFrame.frame.function);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function normalizeAPIName(name) {
|
|
49
|
+
if (!name) return '';
|
|
50
|
+
const match = name.match(/(API|JS|CDP|[A-Z])(.*)/);
|
|
51
|
+
if (!match) return name;
|
|
52
|
+
return match[1].toLowerCase() + match[2];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// This is for the inspector so that it did not include the test runner stack frames.
|
|
56
|
+
const filterPrefixes = platform.boxedStackPrefixes();
|
|
57
|
+
parsedFrames = parsedFrames.filter(f => {
|
|
58
|
+
if (filterPrefixes.some(prefix => f.frame.file.startsWith(prefix))) return false;
|
|
59
|
+
return true;
|
|
60
|
+
});
|
|
61
|
+
return {
|
|
62
|
+
frames: parsedFrames.map(p => p.frame),
|
|
63
|
+
apiName
|
|
64
|
+
};
|
|
65
|
+
}
|
package/lib/client/connection.js
CHANGED
|
@@ -4,35 +4,34 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Connection = void 0;
|
|
7
|
+
var _eventEmitter = require("./eventEmitter");
|
|
8
|
+
var _android = require("./android");
|
|
9
|
+
var _artifact = require("./artifact");
|
|
7
10
|
var _browser = require("./browser");
|
|
8
11
|
var _browserContext = require("./browserContext");
|
|
9
12
|
var _browserType = require("./browserType");
|
|
13
|
+
var _cdpSession = require("./cdpSession");
|
|
10
14
|
var _channelOwner = require("./channelOwner");
|
|
15
|
+
var _clientInstrumentation = require("./clientInstrumentation");
|
|
16
|
+
var _dialog = require("./dialog");
|
|
17
|
+
var _electron = require("./electron");
|
|
11
18
|
var _elementHandle = require("./elementHandle");
|
|
19
|
+
var _errors = require("./errors");
|
|
20
|
+
var _fetch = require("./fetch");
|
|
12
21
|
var _frame = require("./frame");
|
|
13
22
|
var _jsHandle = require("./jsHandle");
|
|
23
|
+
var _jsonPipe = require("./jsonPipe");
|
|
24
|
+
var _localUtils = require("./localUtils");
|
|
14
25
|
var _network = require("./network");
|
|
15
26
|
var _page = require("./page");
|
|
16
|
-
var _worker = require("./worker");
|
|
17
|
-
var _dialog = require("./dialog");
|
|
18
|
-
var _errors = require("./errors");
|
|
19
|
-
var _cdpSession = require("./cdpSession");
|
|
20
27
|
var _playwright = require("./playwright");
|
|
21
|
-
var _electron = require("./electron");
|
|
22
|
-
var _stream = require("./stream");
|
|
23
|
-
var _writableStream = require("./writableStream");
|
|
24
|
-
var _debugLogger = require("../utils/debugLogger");
|
|
25
28
|
var _selectors = require("./selectors");
|
|
26
|
-
var
|
|
27
|
-
var _artifact = require("./artifact");
|
|
28
|
-
var _events = require("events");
|
|
29
|
-
var _jsonPipe = require("./jsonPipe");
|
|
30
|
-
var _fetch = require("./fetch");
|
|
31
|
-
var _localUtils = require("./localUtils");
|
|
29
|
+
var _stream = require("./stream");
|
|
32
30
|
var _tracing = require("./tracing");
|
|
31
|
+
var _worker = require("./worker");
|
|
32
|
+
var _writableStream = require("./writableStream");
|
|
33
33
|
var _validator = require("../protocol/validator");
|
|
34
|
-
var
|
|
35
|
-
var _utils = require("../utils");
|
|
34
|
+
var _stackTrace = require("../utils/isomorphic/stackTrace");
|
|
36
35
|
/**
|
|
37
36
|
* Copyright (c) Microsoft Corporation.
|
|
38
37
|
*
|
|
@@ -60,9 +59,9 @@ class Root extends _channelOwner.ChannelOwner {
|
|
|
60
59
|
}
|
|
61
60
|
}
|
|
62
61
|
class DummyChannelOwner extends _channelOwner.ChannelOwner {}
|
|
63
|
-
class Connection extends
|
|
64
|
-
constructor(localUtils, instrumentation) {
|
|
65
|
-
super();
|
|
62
|
+
class Connection extends _eventEmitter.EventEmitter {
|
|
63
|
+
constructor(platform, localUtils, instrumentation, headers = []) {
|
|
64
|
+
super(platform);
|
|
66
65
|
this._objects = new Map();
|
|
67
66
|
this.onmessage = message => {};
|
|
68
67
|
this._lastId = 0;
|
|
@@ -76,9 +75,12 @@ class Connection extends _events.EventEmitter {
|
|
|
76
75
|
this.toImpl = void 0;
|
|
77
76
|
this._tracingCount = 0;
|
|
78
77
|
this._instrumentation = void 0;
|
|
79
|
-
|
|
80
|
-
this.
|
|
78
|
+
// Used from @playwright/test fixtures -> TODO remove?
|
|
79
|
+
this.headers = void 0;
|
|
81
80
|
this._instrumentation = instrumentation || (0, _clientInstrumentation.createInstrumentation)();
|
|
81
|
+
this._localUtils = localUtils;
|
|
82
|
+
this._rootObject = new Root(this);
|
|
83
|
+
this.headers = headers;
|
|
82
84
|
}
|
|
83
85
|
markAsRemote() {
|
|
84
86
|
this._isRemote = true;
|
|
@@ -117,9 +119,9 @@ class Connection extends _events.EventEmitter {
|
|
|
117
119
|
method,
|
|
118
120
|
params
|
|
119
121
|
};
|
|
120
|
-
if (
|
|
122
|
+
if (this._platform.isLogEnabled('channel')) {
|
|
121
123
|
// Do not include metadata in debug logs to avoid noise.
|
|
122
|
-
|
|
124
|
+
this._platform.log('channel', 'SEND> ' + JSON.stringify(message));
|
|
123
125
|
}
|
|
124
126
|
const location = frames[0] ? {
|
|
125
127
|
file: frames[0].file,
|
|
@@ -132,7 +134,7 @@ class Connection extends _events.EventEmitter {
|
|
|
132
134
|
internal: !apiName,
|
|
133
135
|
stepId
|
|
134
136
|
};
|
|
135
|
-
if (this._tracingCount && frames && type !== 'LocalUtils') (_this$_localUtils = this._localUtils) === null || _this$_localUtils === void 0 || _this$_localUtils.
|
|
137
|
+
if (this._tracingCount && frames && type !== 'LocalUtils') (_this$_localUtils = this._localUtils) === null || _this$_localUtils === void 0 || _this$_localUtils.addStackToTracingNoReply({
|
|
136
138
|
callData: {
|
|
137
139
|
stack: frames,
|
|
138
140
|
id
|
|
@@ -140,7 +142,7 @@ class Connection extends _events.EventEmitter {
|
|
|
140
142
|
}).catch(() => {});
|
|
141
143
|
// We need to exit zones before calling into the server, otherwise
|
|
142
144
|
// when we receive events from the server, we would be in an API zone.
|
|
143
|
-
|
|
145
|
+
this._platform.zones.empty.run(() => this.onmessage({
|
|
144
146
|
...message,
|
|
145
147
|
metadata
|
|
146
148
|
}));
|
|
@@ -152,6 +154,13 @@ class Connection extends _events.EventEmitter {
|
|
|
152
154
|
method
|
|
153
155
|
}));
|
|
154
156
|
}
|
|
157
|
+
_validatorFromWireContext() {
|
|
158
|
+
return {
|
|
159
|
+
tChannelImpl: this._tChannelImplFromWire.bind(this),
|
|
160
|
+
binary: this._rawBuffers ? 'buffer' : 'fromBase64',
|
|
161
|
+
isUnderTest: () => this._platform.isUnderTest()
|
|
162
|
+
};
|
|
163
|
+
}
|
|
155
164
|
dispatch(message) {
|
|
156
165
|
if (this._closedError) return;
|
|
157
166
|
const {
|
|
@@ -164,24 +173,21 @@ class Connection extends _events.EventEmitter {
|
|
|
164
173
|
log
|
|
165
174
|
} = message;
|
|
166
175
|
if (id) {
|
|
167
|
-
if (
|
|
176
|
+
if (this._platform.isLogEnabled('channel')) this._platform.log('channel', '<RECV ' + JSON.stringify(message));
|
|
168
177
|
const callback = this._callbacks.get(id);
|
|
169
178
|
if (!callback) throw new Error(`Cannot find command to respond: ${id}`);
|
|
170
179
|
this._callbacks.delete(id);
|
|
171
180
|
if (error && !result) {
|
|
172
181
|
const parsedError = (0, _errors.parseError)(error);
|
|
173
|
-
(0,
|
|
182
|
+
(0, _stackTrace.rewriteErrorMessage)(parsedError, parsedError.message + formatCallLog(this._platform, log));
|
|
174
183
|
callback.reject(parsedError);
|
|
175
184
|
} else {
|
|
176
185
|
const validator = (0, _validator.findValidator)(callback.type, callback.method, 'Result');
|
|
177
|
-
callback.resolve(validator(result, '',
|
|
178
|
-
tChannelImpl: this._tChannelImplFromWire.bind(this),
|
|
179
|
-
binary: this._rawBuffers ? 'buffer' : 'fromBase64'
|
|
180
|
-
}));
|
|
186
|
+
callback.resolve(validator(result, '', this._validatorFromWireContext()));
|
|
181
187
|
}
|
|
182
188
|
return;
|
|
183
189
|
}
|
|
184
|
-
if (
|
|
190
|
+
if (this._platform.isLogEnabled('channel')) this._platform.log('channel', '<EVENT ' + JSON.stringify(message));
|
|
185
191
|
if (method === '__create__') {
|
|
186
192
|
this._createRemoteObject(guid, params.type, params.guid, params.initializer);
|
|
187
193
|
return;
|
|
@@ -199,10 +205,7 @@ class Connection extends _events.EventEmitter {
|
|
|
199
205
|
return;
|
|
200
206
|
}
|
|
201
207
|
const validator = (0, _validator.findValidator)(object._type, method, 'Event');
|
|
202
|
-
object._channel.emit(method, validator(params, '',
|
|
203
|
-
tChannelImpl: this._tChannelImplFromWire.bind(this),
|
|
204
|
-
binary: this._rawBuffers ? 'buffer' : 'fromBase64'
|
|
205
|
-
}));
|
|
208
|
+
object._channel.emit(method, validator(params, '', this._validatorFromWireContext()));
|
|
206
209
|
}
|
|
207
210
|
close(cause) {
|
|
208
211
|
if (this._closedError) return;
|
|
@@ -225,10 +228,7 @@ class Connection extends _events.EventEmitter {
|
|
|
225
228
|
if (!parent) throw new Error(`Cannot find parent object ${parentGuid} to create ${guid}`);
|
|
226
229
|
let result;
|
|
227
230
|
const validator = (0, _validator.findValidator)(type, '', 'Initializer');
|
|
228
|
-
initializer = validator(initializer, '',
|
|
229
|
-
tChannelImpl: this._tChannelImplFromWire.bind(this),
|
|
230
|
-
binary: this._rawBuffers ? 'buffer' : 'fromBase64'
|
|
231
|
-
});
|
|
231
|
+
initializer = validator(initializer, '', this._validatorFromWireContext());
|
|
232
232
|
switch (type) {
|
|
233
233
|
case 'Android':
|
|
234
234
|
result = new _android.Android(parent, type, guid, initializer);
|
|
@@ -330,4 +330,11 @@ class Connection extends _events.EventEmitter {
|
|
|
330
330
|
return result;
|
|
331
331
|
}
|
|
332
332
|
}
|
|
333
|
-
exports.Connection = Connection;
|
|
333
|
+
exports.Connection = Connection;
|
|
334
|
+
function formatCallLog(platform, log) {
|
|
335
|
+
if (!log || !log.some(l => !!l)) return '';
|
|
336
|
+
return `
|
|
337
|
+
Call log:
|
|
338
|
+
${platform.colors.dim(log.join('\n'))}
|
|
339
|
+
`;
|
|
340
|
+
}
|
|
@@ -4,10 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.ConsoleMessage = void 0;
|
|
7
|
-
var util = _interopRequireWildcard(require("util"));
|
|
8
7
|
var _jsHandle = require("./jsHandle");
|
|
9
8
|
var _page = require("./page");
|
|
10
|
-
let _util$inspect$custom;
|
|
11
9
|
/**
|
|
12
10
|
* Copyright (c) Microsoft Corporation.
|
|
13
11
|
*
|
|
@@ -23,15 +21,14 @@ let _util$inspect$custom;
|
|
|
23
21
|
* See the License for the specific language governing permissions and
|
|
24
22
|
* limitations under the License.
|
|
25
23
|
*/
|
|
26
|
-
|
|
27
|
-
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; }
|
|
28
|
-
_util$inspect$custom = util.inspect.custom;
|
|
24
|
+
|
|
29
25
|
class ConsoleMessage {
|
|
30
|
-
constructor(event) {
|
|
26
|
+
constructor(platform, event) {
|
|
31
27
|
this._page = void 0;
|
|
32
28
|
this._event = void 0;
|
|
33
29
|
this._page = 'page' in event && event.page ? _page.Page.from(event.page) : null;
|
|
34
30
|
this._event = event;
|
|
31
|
+
if (platform.inspectCustom) this[platform.inspectCustom] = () => this._inspect();
|
|
35
32
|
}
|
|
36
33
|
page() {
|
|
37
34
|
return this._page;
|
|
@@ -48,7 +45,7 @@ class ConsoleMessage {
|
|
|
48
45
|
location() {
|
|
49
46
|
return this._event.location;
|
|
50
47
|
}
|
|
51
|
-
|
|
48
|
+
_inspect() {
|
|
52
49
|
return this.text();
|
|
53
50
|
}
|
|
54
51
|
}
|
package/lib/client/electron.js
CHANGED
|
@@ -4,16 +4,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.ElectronApplication = exports.Electron = void 0;
|
|
7
|
-
var _timeoutSettings = require("../common/timeoutSettings");
|
|
8
7
|
var _browserContext = require("./browserContext");
|
|
9
8
|
var _channelOwner = require("./channelOwner");
|
|
10
9
|
var _clientHelper = require("./clientHelper");
|
|
10
|
+
var _consoleMessage = require("./consoleMessage");
|
|
11
|
+
var _errors = require("./errors");
|
|
11
12
|
var _events = require("./events");
|
|
12
13
|
var _jsHandle = require("./jsHandle");
|
|
13
|
-
var _consoleMessage = require("./consoleMessage");
|
|
14
14
|
var _waiter = require("./waiter");
|
|
15
|
-
var
|
|
16
|
-
let _Symbol$asyncDispose;
|
|
15
|
+
var _timeoutSettings = require("./timeoutSettings");
|
|
17
16
|
/**
|
|
18
17
|
* Copyright (c) Microsoft Corporation.
|
|
19
18
|
*
|
|
@@ -29,6 +28,7 @@ let _Symbol$asyncDispose;
|
|
|
29
28
|
* See the License for the specific language governing permissions and
|
|
30
29
|
* limitations under the License.
|
|
31
30
|
*/
|
|
31
|
+
|
|
32
32
|
class Electron extends _channelOwner.ChannelOwner {
|
|
33
33
|
static from(electron) {
|
|
34
34
|
return electron._object;
|
|
@@ -38,8 +38,8 @@ class Electron extends _channelOwner.ChannelOwner {
|
|
|
38
38
|
}
|
|
39
39
|
async launch(options = {}) {
|
|
40
40
|
const params = {
|
|
41
|
-
...(await (0, _browserContext.prepareBrowserContextParams)(options)),
|
|
42
|
-
env: (0, _clientHelper.envObjectToArray)(options.env ? options.env :
|
|
41
|
+
...(await (0, _browserContext.prepareBrowserContextParams)(this._platform, options)),
|
|
42
|
+
env: (0, _clientHelper.envObjectToArray)(options.env ? options.env : this._platform.env),
|
|
43
43
|
tracesDir: options.tracesDir
|
|
44
44
|
};
|
|
45
45
|
const app = ElectronApplication.from((await this._channel.launch(params)).electronApplication);
|
|
@@ -48,7 +48,6 @@ class Electron extends _channelOwner.ChannelOwner {
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
exports.Electron = Electron;
|
|
51
|
-
_Symbol$asyncDispose = Symbol.asyncDispose;
|
|
52
51
|
class ElectronApplication extends _channelOwner.ChannelOwner {
|
|
53
52
|
static from(electronApplication) {
|
|
54
53
|
return electronApplication._object;
|
|
@@ -57,14 +56,15 @@ class ElectronApplication extends _channelOwner.ChannelOwner {
|
|
|
57
56
|
super(parent, type, guid, initializer);
|
|
58
57
|
this._context = void 0;
|
|
59
58
|
this._windows = new Set();
|
|
60
|
-
this._timeoutSettings =
|
|
59
|
+
this._timeoutSettings = void 0;
|
|
60
|
+
this._timeoutSettings = new _timeoutSettings.TimeoutSettings(this._platform);
|
|
61
61
|
this._context = _browserContext.BrowserContext.from(initializer.context);
|
|
62
62
|
for (const page of this._context._pages) this._onPage(page);
|
|
63
63
|
this._context.on(_events.Events.BrowserContext.Page, page => this._onPage(page));
|
|
64
64
|
this._channel.on('close', () => {
|
|
65
65
|
this.emit(_events.Events.ElectronApplication.Close);
|
|
66
66
|
});
|
|
67
|
-
this._channel.on('console', event => this.emit(_events.Events.ElectronApplication.Console, new _consoleMessage.ConsoleMessage(event)));
|
|
67
|
+
this._channel.on('console', event => this.emit(_events.Events.ElectronApplication.Console, new _consoleMessage.ConsoleMessage(this._platform, event)));
|
|
68
68
|
this._setEventToSubscriptionMapping(new Map([[_events.Events.ElectronApplication.Console, 'console']]));
|
|
69
69
|
}
|
|
70
70
|
process() {
|
|
@@ -86,7 +86,7 @@ class ElectronApplication extends _channelOwner.ChannelOwner {
|
|
|
86
86
|
context() {
|
|
87
87
|
return this._context;
|
|
88
88
|
}
|
|
89
|
-
async [
|
|
89
|
+
async [Symbol.asyncDispose]() {
|
|
90
90
|
await this.close();
|
|
91
91
|
}
|
|
92
92
|
async close() {
|