@checkly/playwright-core 1.48.22 → 1.51.11-beta.1
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 +3 -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
|
@@ -8,18 +8,22 @@ exports.shouldCaptureSnapshot = shouldCaptureSnapshot;
|
|
|
8
8
|
var _fs = _interopRequireDefault(require("fs"));
|
|
9
9
|
var _os = _interopRequireDefault(require("os"));
|
|
10
10
|
var _path = _interopRequireDefault(require("path"));
|
|
11
|
+
var _snapshotter = require("./snapshotter");
|
|
11
12
|
var _debug = require("../../../protocol/debug");
|
|
12
|
-
var
|
|
13
|
+
var _assert = require("../../../utils/isomorphic/assert");
|
|
14
|
+
var _time = require("../../../utils/isomorphic/time");
|
|
15
|
+
var _eventsHelper = require("../../utils/eventsHelper");
|
|
16
|
+
var _crypto = require("../../utils/crypto");
|
|
13
17
|
var _artifact = require("../../artifact");
|
|
14
18
|
var _browserContext = require("../../browserContext");
|
|
15
|
-
var _instrumentation = require("../../instrumentation");
|
|
16
|
-
var _page = require("../../page");
|
|
17
|
-
var _harTracer = require("../../har/harTracer");
|
|
18
|
-
var _snapshotter = require("./snapshotter");
|
|
19
19
|
var _dispatcher = require("../../dispatchers/dispatcher");
|
|
20
20
|
var _errors = require("../../errors");
|
|
21
|
+
var _fileUtils = require("../../utils/fileUtils");
|
|
22
|
+
var _harTracer = require("../../har/harTracer");
|
|
23
|
+
var _instrumentation = require("../../instrumentation");
|
|
24
|
+
var _page = require("../../page");
|
|
21
25
|
var _secretsFilter = require("../../../checkly/secretsFilter");
|
|
22
|
-
function _interopRequireDefault(
|
|
26
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
27
|
/**
|
|
24
28
|
* Copyright (c) Microsoft Corporation.
|
|
25
29
|
*
|
|
@@ -45,7 +49,7 @@ const kScreencastOptions = {
|
|
|
45
49
|
class Tracing extends _instrumentation.SdkObject {
|
|
46
50
|
constructor(context, tracesDir) {
|
|
47
51
|
super(context, 'tracing');
|
|
48
|
-
this._fs = new
|
|
52
|
+
this._fs = new _fileUtils.SerializedFS();
|
|
49
53
|
this._snapshotter = void 0;
|
|
50
54
|
this._harTracer = void 0;
|
|
51
55
|
this._screencastListeners = [];
|
|
@@ -80,11 +84,12 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
80
84
|
wallTime: 0,
|
|
81
85
|
monotonicTime: 0,
|
|
82
86
|
sdkLanguage: context.attribution.playwright.options.sdkLanguage,
|
|
83
|
-
testIdAttributeName
|
|
87
|
+
testIdAttributeName,
|
|
88
|
+
contextId: context.guid
|
|
84
89
|
};
|
|
85
90
|
if (context instanceof _browserContext.BrowserContext) {
|
|
86
91
|
this._snapshotter = new _snapshotter.Snapshotter(context, this);
|
|
87
|
-
(0,
|
|
92
|
+
(0, _assert.assert)(tracesDir, 'tracesDir must be specified for BrowserContext');
|
|
88
93
|
this._contextCreatedEvent.browserName = context._browser.options.name;
|
|
89
94
|
this._contextCreatedEvent.channel = context._browser.options.channel;
|
|
90
95
|
this._contextCreatedEvent.options = context._options;
|
|
@@ -108,7 +113,7 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
108
113
|
|
|
109
114
|
// TODO: passing the same name for two contexts makes them write into a single file
|
|
110
115
|
// and conflict.
|
|
111
|
-
const traceName = options.name || (0,
|
|
116
|
+
const traceName = options.name || (0, _crypto.createGuid)();
|
|
112
117
|
const tracesDir = this._createTracesDirIfNeeded();
|
|
113
118
|
|
|
114
119
|
// Init the state synchronously.
|
|
@@ -123,7 +128,8 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
123
128
|
traceSha1s: new Set(),
|
|
124
129
|
networkSha1s: new Set(),
|
|
125
130
|
recording: false,
|
|
126
|
-
callIds: new Set()
|
|
131
|
+
callIds: new Set(),
|
|
132
|
+
groupStack: []
|
|
127
133
|
};
|
|
128
134
|
this._fs.mkdir(this._state.resourcesDir);
|
|
129
135
|
this._fs.writeFile(this._state.networkFile, '');
|
|
@@ -141,30 +147,82 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
141
147
|
if (this._isStopping) throw new Error('Cannot start a trace chunk while stopping');
|
|
142
148
|
this._state.recording = true;
|
|
143
149
|
this._state.callIds.clear();
|
|
144
|
-
|
|
150
|
+
|
|
151
|
+
// - Browser context network trace is shared across chunks as it contains resources
|
|
152
|
+
// used to serve page snapshots, so make a copy with the new name.
|
|
153
|
+
// - APIRequestContext network traces are chunk-specific, always start from scratch.
|
|
154
|
+
const preserveNetworkResources = this._context instanceof _browserContext.BrowserContext;
|
|
155
|
+
if (options.name && options.name !== this._state.traceName) this._changeTraceName(this._state, options.name, preserveNetworkResources);else this._allocateNewTraceFile(this._state);
|
|
156
|
+
if (!preserveNetworkResources) this._fs.writeFile(this._state.networkFile, '');
|
|
145
157
|
this._fs.mkdir(_path.default.dirname(this._state.traceFile));
|
|
146
158
|
const event = {
|
|
147
159
|
...this._contextCreatedEvent,
|
|
148
160
|
title: options.title,
|
|
149
161
|
wallTime: Date.now(),
|
|
150
|
-
monotonicTime: (0,
|
|
162
|
+
monotonicTime: (0, _time.monotonicTime)()
|
|
151
163
|
};
|
|
152
164
|
this._appendTraceEvent(event);
|
|
153
165
|
this._context.instrumentation.addListener(this, this._context);
|
|
154
|
-
this._eventListeners.push(
|
|
166
|
+
this._eventListeners.push(_eventsHelper.eventsHelper.addEventListener(this._context, _browserContext.BrowserContext.Events.Console, this._onConsoleMessage.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._context, _browserContext.BrowserContext.Events.PageError, this._onPageError.bind(this)));
|
|
155
167
|
if (this._state.options.screenshots) this._startScreencast();
|
|
156
168
|
if (this._state.options.snapshots) await ((_this$_snapshotter2 = this._snapshotter) === null || _this$_snapshotter2 === void 0 ? void 0 : _this$_snapshotter2.start());
|
|
157
169
|
return {
|
|
158
170
|
traceName: this._state.traceName
|
|
159
171
|
};
|
|
160
172
|
}
|
|
173
|
+
_currentGroupId() {
|
|
174
|
+
var _this$_state;
|
|
175
|
+
return (_this$_state = this._state) !== null && _this$_state !== void 0 && _this$_state.groupStack.length ? this._state.groupStack[this._state.groupStack.length - 1] : undefined;
|
|
176
|
+
}
|
|
177
|
+
async group(name, location, metadata) {
|
|
178
|
+
var _ref;
|
|
179
|
+
if (!this._state) return;
|
|
180
|
+
const stackFrames = [];
|
|
181
|
+
const {
|
|
182
|
+
file,
|
|
183
|
+
line,
|
|
184
|
+
column
|
|
185
|
+
} = (_ref = location !== null && location !== void 0 ? location : metadata.location) !== null && _ref !== void 0 ? _ref : {};
|
|
186
|
+
if (file) {
|
|
187
|
+
stackFrames.push({
|
|
188
|
+
file,
|
|
189
|
+
line: line !== null && line !== void 0 ? line : 0,
|
|
190
|
+
column: column !== null && column !== void 0 ? column : 0
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
const event = {
|
|
194
|
+
type: 'before',
|
|
195
|
+
callId: metadata.id,
|
|
196
|
+
startTime: metadata.startTime,
|
|
197
|
+
apiName: name,
|
|
198
|
+
class: 'Tracing',
|
|
199
|
+
method: 'tracingGroup',
|
|
200
|
+
params: {},
|
|
201
|
+
stepId: metadata.stepId,
|
|
202
|
+
stack: stackFrames
|
|
203
|
+
};
|
|
204
|
+
if (this._currentGroupId()) event.parentId = this._currentGroupId();
|
|
205
|
+
this._state.groupStack.push(event.callId);
|
|
206
|
+
this._appendTraceEvent(event);
|
|
207
|
+
}
|
|
208
|
+
groupEnd() {
|
|
209
|
+
if (!this._state) return;
|
|
210
|
+
const callId = this._state.groupStack.pop();
|
|
211
|
+
if (!callId) return;
|
|
212
|
+
const event = {
|
|
213
|
+
type: 'after',
|
|
214
|
+
callId,
|
|
215
|
+
endTime: (0, _time.monotonicTime)()
|
|
216
|
+
};
|
|
217
|
+
this._appendTraceEvent(event);
|
|
218
|
+
}
|
|
161
219
|
_startScreencast() {
|
|
162
220
|
if (!(this._context instanceof _browserContext.BrowserContext)) return;
|
|
163
221
|
for (const page of this._context.pages()) this._startScreencastInPage(page);
|
|
164
|
-
this._screencastListeners.push(
|
|
222
|
+
this._screencastListeners.push(_eventsHelper.eventsHelper.addEventListener(this._context, _browserContext.BrowserContext.Events.Page, this._startScreencastInPage.bind(this)));
|
|
165
223
|
}
|
|
166
224
|
_stopScreencast() {
|
|
167
|
-
|
|
225
|
+
_eventsHelper.eventsHelper.removeEventListeners(this._screencastListeners);
|
|
168
226
|
if (!(this._context instanceof _browserContext.BrowserContext)) return;
|
|
169
227
|
for (const page of this._context.pages()) page.setScreencastOptions(null);
|
|
170
228
|
}
|
|
@@ -173,27 +231,26 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
173
231
|
state.chunkOrdinal++;
|
|
174
232
|
state.traceFile = _path.default.join(state.tracesDir, `${state.traceName}${suffix}.trace`);
|
|
175
233
|
}
|
|
176
|
-
_changeTraceName(state, name) {
|
|
234
|
+
_changeTraceName(state, name, preserveNetworkResources) {
|
|
177
235
|
state.traceName = name;
|
|
178
236
|
state.chunkOrdinal = 0; // Reset ordinal for the new name.
|
|
179
237
|
this._allocateNewTraceFile(state);
|
|
180
|
-
|
|
181
|
-
// Network file survives across chunks, so make a copy with the new name.
|
|
182
238
|
const newNetworkFile = _path.default.join(state.tracesDir, name + '.network');
|
|
183
|
-
this._fs.copyFile(state.networkFile, newNetworkFile);
|
|
239
|
+
if (preserveNetworkResources) this._fs.copyFile(state.networkFile, newNetworkFile);
|
|
184
240
|
state.networkFile = newNetworkFile;
|
|
185
241
|
}
|
|
186
242
|
async stop() {
|
|
187
243
|
if (!this._state) return;
|
|
188
244
|
if (this._isStopping) throw new Error(`Tracing is already stopping`);
|
|
189
245
|
if (this._state.recording) throw new Error(`Must stop trace file before stopping tracing`);
|
|
246
|
+
this._closeAllGroups();
|
|
190
247
|
this._harTracer.stop();
|
|
191
248
|
this.flushHarEntries();
|
|
192
249
|
await this._fs.syncAndGetError();
|
|
193
250
|
this._state = undefined;
|
|
194
251
|
}
|
|
195
252
|
async deleteTmpTracesDir() {
|
|
196
|
-
if (this._tracesTmpDir) await (0,
|
|
253
|
+
if (this._tracesTmpDir) await (0, _fileUtils.removeFolders)([this._tracesTmpDir]);
|
|
197
254
|
}
|
|
198
255
|
_createTracesDirIfNeeded() {
|
|
199
256
|
if (this._precreatedTracesDir) return this._precreatedTracesDir;
|
|
@@ -209,6 +266,9 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
209
266
|
this.abort();
|
|
210
267
|
await this._fs.syncAndGetError();
|
|
211
268
|
}
|
|
269
|
+
_closeAllGroups() {
|
|
270
|
+
while (this._currentGroupId()) this.groupEnd();
|
|
271
|
+
}
|
|
212
272
|
async stopChunk(params) {
|
|
213
273
|
var _this$_snapshotter4;
|
|
214
274
|
if (this._isStopping) throw new Error(`Tracing is already stopping`);
|
|
@@ -218,8 +278,9 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
218
278
|
if (params.mode !== 'discard') throw new Error(`Must start tracing before stopping`);
|
|
219
279
|
return {};
|
|
220
280
|
}
|
|
281
|
+
this._closeAllGroups();
|
|
221
282
|
this._context.instrumentation.removeListener(this);
|
|
222
|
-
|
|
283
|
+
_eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
|
|
223
284
|
if (this._state.options.screenshots) this._stopScreencast();
|
|
224
285
|
if (this._state.options.snapshots) await ((_this$_snapshotter4 = this._snapshotter) === null || _this$_snapshotter4 === void 0 ? void 0 : _this$_snapshotter4.stop());
|
|
225
286
|
this.flushHarEntries();
|
|
@@ -278,34 +339,34 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
278
339
|
artifact
|
|
279
340
|
};
|
|
280
341
|
}
|
|
281
|
-
async _captureSnapshot(snapshotName, sdkObject, metadata
|
|
342
|
+
async _captureSnapshot(snapshotName, sdkObject, metadata) {
|
|
282
343
|
if (!this._snapshotter) return;
|
|
283
344
|
if (!sdkObject.attribution.page) return;
|
|
284
345
|
if (!this._snapshotter.started()) return;
|
|
285
346
|
if (!shouldCaptureSnapshot(metadata)) return;
|
|
286
|
-
await this._snapshotter.captureSnapshot(sdkObject.attribution.page, metadata.id, snapshotName
|
|
347
|
+
await this._snapshotter.captureSnapshot(sdkObject.attribution.page, metadata.id, snapshotName).catch(() => {});
|
|
287
348
|
}
|
|
288
349
|
onBeforeCall(sdkObject, metadata) {
|
|
289
|
-
var _sdkObject$attributio, _this$
|
|
350
|
+
var _sdkObject$attributio, _this$_state2;
|
|
290
351
|
// IMPORTANT: no awaits before this._appendTraceEvent in this method.
|
|
291
|
-
const event = createBeforeActionTraceEvent(metadata);
|
|
352
|
+
const event = createBeforeActionTraceEvent(metadata, this._currentGroupId());
|
|
292
353
|
if (!event) return Promise.resolve();
|
|
293
354
|
(_sdkObject$attributio = sdkObject.attribution.page) === null || _sdkObject$attributio === void 0 || _sdkObject$attributio.temporarilyDisableTracingScreencastThrottling();
|
|
294
355
|
event.beforeSnapshot = `before@${metadata.id}`;
|
|
295
|
-
(_this$
|
|
356
|
+
(_this$_state2 = this._state) === null || _this$_state2 === void 0 || _this$_state2.callIds.add(metadata.id);
|
|
296
357
|
this._appendTraceEvent(event);
|
|
297
358
|
return this._captureSnapshot(event.beforeSnapshot, sdkObject, metadata);
|
|
298
359
|
}
|
|
299
|
-
onBeforeInputAction(sdkObject, metadata
|
|
300
|
-
var _this$
|
|
301
|
-
if (!((_this$
|
|
360
|
+
onBeforeInputAction(sdkObject, metadata) {
|
|
361
|
+
var _this$_state3, _sdkObject$attributio2;
|
|
362
|
+
if (!((_this$_state3 = this._state) !== null && _this$_state3 !== void 0 && _this$_state3.callIds.has(metadata.id))) return Promise.resolve();
|
|
302
363
|
// IMPORTANT: no awaits before this._appendTraceEvent in this method.
|
|
303
364
|
const event = createInputActionTraceEvent(metadata);
|
|
304
365
|
if (!event) return Promise.resolve();
|
|
305
366
|
(_sdkObject$attributio2 = sdkObject.attribution.page) === null || _sdkObject$attributio2 === void 0 || _sdkObject$attributio2.temporarilyDisableTracingScreencastThrottling();
|
|
306
367
|
event.inputSnapshot = `input@${metadata.id}`;
|
|
307
368
|
this._appendTraceEvent(event);
|
|
308
|
-
return this._captureSnapshot(event.inputSnapshot, sdkObject, metadata
|
|
369
|
+
return this._captureSnapshot(event.inputSnapshot, sdkObject, metadata);
|
|
309
370
|
}
|
|
310
371
|
onCallLog(sdkObject, metadata, logName, message) {
|
|
311
372
|
if (metadata.isServerSide || metadata.internal) return;
|
|
@@ -314,9 +375,9 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
314
375
|
if (event) this._appendTraceEvent(event);
|
|
315
376
|
}
|
|
316
377
|
async onAfterCall(sdkObject, metadata) {
|
|
317
|
-
var _this$
|
|
318
|
-
if (!((_this$
|
|
319
|
-
(_this$
|
|
378
|
+
var _this$_state4, _this$_state5, _sdkObject$attributio3;
|
|
379
|
+
if (!((_this$_state4 = this._state) !== null && _this$_state4 !== void 0 && _this$_state4.callIds.has(metadata.id))) return;
|
|
380
|
+
(_this$_state5 = this._state) === null || _this$_state5 === void 0 || _this$_state5.callIds.delete(metadata.id);
|
|
320
381
|
const event = createAfterActionTraceEvent(metadata);
|
|
321
382
|
if (!event) return;
|
|
322
383
|
(_sdkObject$attributio3 = sdkObject.attribution.page) === null || _sdkObject$attributio3 === void 0 || _sdkObject$attributio3.temporarilyDisableTracingScreencastThrottling();
|
|
@@ -372,7 +433,7 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
372
433
|
value: a.rawValue()
|
|
373
434
|
})),
|
|
374
435
|
location: message.location(),
|
|
375
|
-
time: (0,
|
|
436
|
+
time: (0, _time.monotonicTime)(),
|
|
376
437
|
pageId: (_message$page = message.page()) === null || _message$page === void 0 ? void 0 : _message$page.guid
|
|
377
438
|
};
|
|
378
439
|
this._appendTraceEvent(event);
|
|
@@ -380,7 +441,7 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
380
441
|
onDialog(dialog) {
|
|
381
442
|
const event = {
|
|
382
443
|
type: 'event',
|
|
383
|
-
time: (0,
|
|
444
|
+
time: (0, _time.monotonicTime)(),
|
|
384
445
|
class: 'BrowserContext',
|
|
385
446
|
method: 'dialog',
|
|
386
447
|
params: {
|
|
@@ -395,7 +456,7 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
395
456
|
onDownload(page, download) {
|
|
396
457
|
const event = {
|
|
397
458
|
type: 'event',
|
|
398
|
-
time: (0,
|
|
459
|
+
time: (0, _time.monotonicTime)(),
|
|
399
460
|
class: 'BrowserContext',
|
|
400
461
|
method: 'download',
|
|
401
462
|
params: {
|
|
@@ -410,7 +471,7 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
410
471
|
var _page$opener;
|
|
411
472
|
const event = {
|
|
412
473
|
type: 'event',
|
|
413
|
-
time: (0,
|
|
474
|
+
time: (0, _time.monotonicTime)(),
|
|
414
475
|
class: 'BrowserContext',
|
|
415
476
|
method: 'page',
|
|
416
477
|
params: {
|
|
@@ -423,7 +484,7 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
423
484
|
onPageClose(page) {
|
|
424
485
|
const event = {
|
|
425
486
|
type: 'event',
|
|
426
|
-
time: (0,
|
|
487
|
+
time: (0, _time.monotonicTime)(),
|
|
427
488
|
class: 'BrowserContext',
|
|
428
489
|
method: 'pageClosed',
|
|
429
490
|
params: {
|
|
@@ -435,7 +496,7 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
435
496
|
_onPageError(error, page) {
|
|
436
497
|
const event = {
|
|
437
498
|
type: 'event',
|
|
438
|
-
time: (0,
|
|
499
|
+
time: (0, _time.monotonicTime)(),
|
|
439
500
|
class: 'BrowserContext',
|
|
440
501
|
method: 'pageError',
|
|
441
502
|
params: {
|
|
@@ -448,7 +509,7 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
448
509
|
_startScreencastInPage(page) {
|
|
449
510
|
page.setScreencastOptions(kScreencastOptions);
|
|
450
511
|
const prefix = page.guid;
|
|
451
|
-
this._screencastListeners.push(
|
|
512
|
+
this._screencastListeners.push(_eventsHelper.eventsHelper.addEventListener(page, _page.Page.Events.ScreencastFrame, params => {
|
|
452
513
|
const suffix = params.timestamp || Date.now();
|
|
453
514
|
const sha1 = `${prefix}-${suffix}.jpeg`;
|
|
454
515
|
const event = {
|
|
@@ -457,7 +518,7 @@ class Tracing extends _instrumentation.SdkObject {
|
|
|
457
518
|
sha1,
|
|
458
519
|
width: params.width,
|
|
459
520
|
height: params.height,
|
|
460
|
-
timestamp: (0,
|
|
521
|
+
timestamp: (0, _time.monotonicTime)(),
|
|
461
522
|
frameSwapWallTime: params.frameSwapWallTime
|
|
462
523
|
};
|
|
463
524
|
// Make sure to write the screencast frame before adding a reference to it.
|
|
@@ -511,9 +572,9 @@ function visitTraceEvent(object, sha1s, secretsFilter) {
|
|
|
511
572
|
function shouldCaptureSnapshot(metadata) {
|
|
512
573
|
return _debug.commandsWithTracingSnapshots.has(metadata.type + '.' + metadata.method);
|
|
513
574
|
}
|
|
514
|
-
function createBeforeActionTraceEvent(metadata) {
|
|
575
|
+
function createBeforeActionTraceEvent(metadata, parentId) {
|
|
515
576
|
if (metadata.internal || metadata.method.startsWith('tracing')) return null;
|
|
516
|
-
|
|
577
|
+
const event = {
|
|
517
578
|
type: 'before',
|
|
518
579
|
callId: metadata.id,
|
|
519
580
|
startTime: metadata.startTime,
|
|
@@ -524,6 +585,8 @@ function createBeforeActionTraceEvent(metadata) {
|
|
|
524
585
|
stepId: metadata.stepId,
|
|
525
586
|
pageId: metadata.pageId
|
|
526
587
|
};
|
|
588
|
+
if (parentId) event.parentId = parentId;
|
|
589
|
+
return event;
|
|
527
590
|
}
|
|
528
591
|
function createInputActionTraceEvent(metadata) {
|
|
529
592
|
if (metadata.internal || metadata.method.startsWith('tracing')) return null;
|
|
@@ -538,7 +601,7 @@ function createActionLogTraceEvent(metadata, message) {
|
|
|
538
601
|
return {
|
|
539
602
|
type: 'log',
|
|
540
603
|
callId: metadata.id,
|
|
541
|
-
time: (0,
|
|
604
|
+
time: (0, _time.monotonicTime)(),
|
|
542
605
|
message
|
|
543
606
|
};
|
|
544
607
|
}
|
|
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.InMemorySnapshotter = void 0;
|
|
7
7
|
var _snapshotStorage = require("../../../../../trace-viewer/src/sw/snapshotStorage");
|
|
8
|
-
var _snapshotter = require("../recorder/snapshotter");
|
|
9
|
-
var _harTracer = require("../../har/harTracer");
|
|
10
8
|
var _utils = require("../../../utils");
|
|
9
|
+
var _harTracer = require("../../har/harTracer");
|
|
10
|
+
var _snapshotter = require("../recorder/snapshotter");
|
|
11
11
|
/**
|
|
12
12
|
* Copyright (c) Microsoft Corporation.
|
|
13
13
|
*
|
|
@@ -60,16 +60,16 @@ class InMemorySnapshotter {
|
|
|
60
60
|
await this._harTracer.flush();
|
|
61
61
|
this._harTracer.stop();
|
|
62
62
|
}
|
|
63
|
-
async captureSnapshot(page, callId, snapshotName
|
|
63
|
+
async captureSnapshot(page, callId, snapshotName) {
|
|
64
64
|
if (this._snapshotReadyPromises.has(snapshotName)) throw new Error('Duplicate snapshot name: ' + snapshotName);
|
|
65
|
-
this._snapshotter.captureSnapshot(page, callId, snapshotName
|
|
65
|
+
this._snapshotter.captureSnapshot(page, callId, snapshotName).catch(() => {});
|
|
66
66
|
const promise = new _utils.ManualPromise();
|
|
67
67
|
this._snapshotReadyPromises.set(snapshotName, promise);
|
|
68
68
|
return promise;
|
|
69
69
|
}
|
|
70
70
|
onEntryStarted(entry) {}
|
|
71
71
|
onEntryFinished(entry) {
|
|
72
|
-
this._storage.addResource(entry);
|
|
72
|
+
this._storage.addResource('', entry);
|
|
73
73
|
}
|
|
74
74
|
onContentBlob(sha1, buffer) {
|
|
75
75
|
this._blobs.set(sha1, buffer);
|
|
@@ -80,7 +80,7 @@ class InMemorySnapshotter {
|
|
|
80
80
|
onFrameSnapshot(snapshot) {
|
|
81
81
|
var _this$_snapshotReadyP;
|
|
82
82
|
++this._snapshotCount;
|
|
83
|
-
const renderer = this._storage.addFrameSnapshot(snapshot);
|
|
83
|
+
const renderer = this._storage.addFrameSnapshot('', snapshot, []);
|
|
84
84
|
(_this$_snapshotReadyP = this._snapshotReadyPromises.get(snapshot.snapshotName || '')) === null || _this$_snapshotReadyP === void 0 || _this$_snapshotReadyP.resolve(renderer);
|
|
85
85
|
}
|
|
86
86
|
async resourceContentForTest(sha1) {
|
|
@@ -9,16 +9,16 @@ exports.openTraceViewerApp = openTraceViewerApp;
|
|
|
9
9
|
exports.runTraceInBrowser = runTraceInBrowser;
|
|
10
10
|
exports.runTraceViewerApp = runTraceViewerApp;
|
|
11
11
|
exports.startTraceViewerServer = startTraceViewerServer;
|
|
12
|
-
var _path = _interopRequireDefault(require("path"));
|
|
13
12
|
var _fs = _interopRequireDefault(require("fs"));
|
|
14
|
-
var
|
|
13
|
+
var _path = _interopRequireDefault(require("path"));
|
|
15
14
|
var _utils = require("../../../utils");
|
|
16
|
-
var
|
|
15
|
+
var _httpServer = require("../../utils/httpServer");
|
|
16
|
+
var _utilsBundle = require("../../../utilsBundle");
|
|
17
17
|
var _instrumentation = require("../../instrumentation");
|
|
18
|
+
var _launchApp = require("../../launchApp");
|
|
18
19
|
var _playwright = require("../../playwright");
|
|
19
20
|
var _progress = require("../../progress");
|
|
20
|
-
|
|
21
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
22
22
|
/**
|
|
23
23
|
* Copyright (c) Microsoft Corporation.
|
|
24
24
|
*
|
|
@@ -48,6 +48,10 @@ async function startTraceViewerServer(options) {
|
|
|
48
48
|
server.routePrefix('/trace', (request, response) => {
|
|
49
49
|
const url = new URL('http://localhost' + request.url);
|
|
50
50
|
const relativePath = url.pathname.slice('/trace'.length);
|
|
51
|
+
if (process.env.PW_HMR) {
|
|
52
|
+
// When running in Vite HMR mode, port is hardcoded in build.js
|
|
53
|
+
response.appendHeader('Access-Control-Allow-Origin', 'http://localhost:44223');
|
|
54
|
+
}
|
|
51
55
|
if (relativePath.endsWith('/stall.js')) return true;
|
|
52
56
|
if (relativePath.startsWith('/file')) {
|
|
53
57
|
try {
|
|
@@ -94,10 +98,19 @@ async function installRootRedirect(server, traceUrls, options) {
|
|
|
94
98
|
if (options.grepInvert) params.append('grepInvert', options.grepInvert);
|
|
95
99
|
for (const project of options.project || []) params.append('project', project);
|
|
96
100
|
for (const reporter of options.reporter || []) params.append('reporter', reporter);
|
|
97
|
-
|
|
101
|
+
let baseUrl = '.';
|
|
102
|
+
if (process.env.PW_HMR) {
|
|
103
|
+
baseUrl = 'http://localhost:44223'; // port is hardcoded in build.js
|
|
104
|
+
params.set('server', server.urlPrefix('precise'));
|
|
105
|
+
}
|
|
106
|
+
const urlPath = `${baseUrl}/trace/${options.webApp || 'index.html'}?${params.toString()}`;
|
|
98
107
|
server.routePath('/', (_, response) => {
|
|
99
108
|
response.statusCode = 302;
|
|
100
109
|
response.setHeader('Location', urlPath);
|
|
110
|
+
if (process.env.EXPERIMENTAL_OPENAI_API_KEY) response.appendHeader('Set-Cookie', `openai_api_key=${process.env.EXPERIMENTAL_OPENAI_API_KEY}`);
|
|
111
|
+
if (process.env.OPENAI_BASE_URL) response.appendHeader('Set-Cookie', `openai_base_url=${process.env.OPENAI_BASE_URL}`);
|
|
112
|
+
if (process.env.EXPERIMENTAL_ANTHROPIC_API_KEY) response.appendHeader('Set-Cookie', `anthropic_api_key=${process.env.EXPERIMENTAL_ANTHROPIC_API_KEY}`);
|
|
113
|
+
if (process.env.ANTHROPIC_BASE_URL) response.appendHeader('Set-Cookie', `anthropic_base_url=${process.env.ANTHROPIC_BASE_URL}`);
|
|
101
114
|
response.end();
|
|
102
115
|
return true;
|
|
103
116
|
});
|
|
@@ -135,7 +148,8 @@ async function openTraceViewerApp(url, browserName, options) {
|
|
|
135
148
|
persistentContextOptions: {
|
|
136
149
|
...(options === null || options === void 0 ? void 0 : options.persistentContextOptions),
|
|
137
150
|
useWebSocket: (0, _utils.isUnderTest)(),
|
|
138
|
-
headless: !!(options !== null && options !== void 0 && options.headless)
|
|
151
|
+
headless: !!(options !== null && options !== void 0 && options.headless),
|
|
152
|
+
colorScheme: (0, _utils.isUnderTest)() ? 'light' : undefined
|
|
139
153
|
}
|
|
140
154
|
});
|
|
141
155
|
const controller = new _progress.ProgressController((0, _instrumentation.serverSideCallMetadata)(), context._browser);
|
package/lib/server/transport.js
CHANGED
|
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.perMessageDeflate = exports.WebSocketTransport = void 0;
|
|
7
|
-
var _utilsBundle = require("../utilsBundle");
|
|
8
7
|
var _utils = require("../utils");
|
|
9
|
-
var _happyEyeballs = require("
|
|
8
|
+
var _happyEyeballs = require("./utils/happyEyeballs");
|
|
9
|
+
var _utilsBundle = require("../utilsBundle");
|
|
10
10
|
/**
|
|
11
11
|
* Copyright 2018 Google Inc. All rights reserved.
|
|
12
12
|
* Modifications copyright (c) Microsoft Corporation.
|
|
@@ -25,6 +25,7 @@ var _happyEyeballs = require("../utils/happy-eyeballs");
|
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
27
|
const perMessageDeflate = exports.perMessageDeflate = {
|
|
28
|
+
clientNoContextTakeover: true,
|
|
28
29
|
zlibDeflateOptions: {
|
|
29
30
|
level: 3
|
|
30
31
|
},
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.jsonStringifyForceASCII = jsonStringifyForceASCII;
|
|
7
|
+
exports.wrapInASCIIBox = wrapInASCIIBox;
|
|
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 wrapInASCIIBox(text, padding = 0) {
|
|
25
|
+
const lines = text.split('\n');
|
|
26
|
+
const maxLength = Math.max(...lines.map(line => line.length));
|
|
27
|
+
return ['╔' + '═'.repeat(maxLength + padding * 2) + '╗', ...lines.map(line => '║' + ' '.repeat(padding) + line + ' '.repeat(maxLength - line.length + padding) + '║'), '╚' + '═'.repeat(maxLength + padding * 2) + '╝'].join('\n');
|
|
28
|
+
}
|
|
29
|
+
function jsonStringifyForceASCII(object) {
|
|
30
|
+
return JSON.stringify(object).replace(/[\u007f-\uffff]/g, c => '\\u' + ('0000' + c.charCodeAt(0).toString(16)).slice(-4));
|
|
31
|
+
}
|