@checkly/playwright-core 1.51.17-beta.1 → 1.54.2-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ThirdPartyNotices.txt +65 -123
- package/browsers.json +16 -14
- package/index.js +1 -1
- package/lib/androidServerImpl.js +47 -50
- package/lib/browserServerImpl.js +89 -69
- package/lib/checkly/escapeRegExp.js +23 -27
- package/lib/checkly/fetch.js +64 -46
- package/lib/checkly/secretsFilter.js +49 -36
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +400 -359
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +151 -242
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +96 -71
- package/lib/client/browserContext.js +314 -345
- package/lib/client/browserType.js +103 -127
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +90 -113
- package/lib/client/clientHelper.js +48 -39
- package/lib/client/clientInstrumentation.js +40 -37
- package/lib/client/clientStackTrace.js +41 -37
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +188 -214
- package/lib/client/consoleMessage.js +31 -28
- package/lib/client/coverage.js +25 -22
- package/lib/client/dialog.js +30 -31
- package/lib/client/download.js +25 -25
- package/lib/client/electron.js +80 -77
- package/lib/client/elementHandle.js +120 -159
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +124 -121
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +166 -190
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +207 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +42 -69
- package/lib/client/jsHandle.js +54 -69
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -29
- package/lib/client/locator.js +145 -237
- package/lib/client/network.js +282 -307
- package/lib/client/page.js +269 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -76
- package/lib/client/selectors.js +45 -63
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +55 -41
- package/lib/client/tracing.js +49 -96
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +69 -88
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +43 -56
- package/lib/client/worker.js +48 -56
- package/lib/client/writableStream.js +27 -23
- package/lib/generated/bindingsControllerSource.js +28 -0
- package/lib/generated/clockSource.js +26 -6
- package/lib/generated/consoleApiSource.js +26 -6
- package/lib/generated/injectedScriptSource.js +26 -6
- package/lib/generated/pollingRecorderSource.js +26 -6
- package/lib/generated/storageScriptSource.js +28 -0
- package/lib/generated/utilityScriptSource.js +26 -6
- package/lib/generated/webSocketMockSource.js +333 -5
- package/lib/inProcessFactory.js +51 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +51 -46
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2807 -2739
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +88 -242
- package/lib/remote/playwrightServer.js +305 -92
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +251 -241
- package/lib/server/android/backendAdb.js +87 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +297 -158
- package/lib/server/bidi/bidiChromium.js +119 -89
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +129 -113
- package/lib/server/bidi/bidiFirefox.js +86 -76
- package/lib/server/bidi/bidiInput.js +106 -117
- package/lib/server/bidi/bidiNetworkManager.js +142 -159
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +260 -260
- package/lib/server/bidi/bidiPdf.js +52 -86
- package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
- package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
- package/lib/server/bidi/third_party/bidiProtocol.js +22 -137
- package/lib/server/bidi/third_party/bidiProtocolCore.js +152 -0
- package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
- package/lib/server/browser.js +93 -95
- package/lib/server/browserContext.js +419 -429
- package/lib/server/browserType.js +186 -216
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +235 -203
- package/lib/server/chromium/chromiumSwitches.js +100 -67
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +310 -292
- package/lib/server/chromium/crConnection.js +95 -121
- package/lib/server/chromium/crCoverage.js +121 -131
- package/lib/server/chromium/crDevTools.js +60 -51
- package/lib/server/chromium/crDragDrop.js +68 -84
- package/lib/server/chromium/crExecutionContext.js +89 -83
- package/lib/server/chromium/crInput.js +118 -113
- package/lib/server/chromium/crNetworkManager.js +274 -375
- package/lib/server/chromium/crPage.js +536 -593
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +84 -73
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +66 -99
- package/lib/server/clock.js +107 -83
- package/lib/server/codegen/csharp.js +192 -162
- package/lib/server/codegen/java.js +156 -129
- package/lib/server/codegen/javascript.js +163 -148
- package/lib/server/codegen/jsonl.js +32 -28
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +141 -126
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +108 -86
- package/lib/server/debugController.js +147 -151
- package/lib/server/debugger.js +86 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +238 -128
- package/lib/server/dialog.js +84 -39
- package/lib/server/dispatchers/androidDispatcher.js +257 -148
- package/lib/server/dispatchers/artifactDispatcher.js +79 -79
- package/lib/server/dispatchers/browserContextDispatcher.js +289 -259
- package/lib/server/dispatchers/browserDispatcher.js +96 -148
- package/lib/server/dispatchers/browserTypeDispatcher.js +50 -41
- package/lib/server/dispatchers/cdpSessionDispatcher.js +35 -39
- package/lib/server/dispatchers/debugControllerDispatcher.js +65 -83
- package/lib/server/dispatchers/dialogDispatcher.js +34 -31
- package/lib/server/dispatchers/dispatcher.js +208 -248
- package/lib/server/dispatchers/electronDispatcher.js +66 -70
- package/lib/server/dispatchers/elementHandlerDispatcher.js +164 -216
- package/lib/server/dispatchers/frameDispatcher.js +211 -272
- package/lib/server/dispatchers/jsHandleDispatcher.js +63 -75
- package/lib/server/dispatchers/jsonPipeDispatcher.js +37 -38
- package/lib/server/dispatchers/localUtilsDispatcher.js +121 -119
- package/lib/server/dispatchers/networkDispatchers.js +117 -128
- package/lib/server/dispatchers/pageDispatcher.js +256 -248
- package/lib/server/dispatchers/playwrightDispatcher.js +92 -87
- package/lib/server/dispatchers/streamDispatcher.js +52 -48
- package/lib/server/dispatchers/tracingDispatcher.js +47 -52
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +126 -150
- package/lib/server/dispatchers/writableStreamDispatcher.js +65 -43
- package/lib/server/dom.js +485 -582
- package/lib/server/download.js +47 -37
- package/lib/server/electron/electron.js +216 -243
- package/lib/server/electron/loader.js +9 -37
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +317 -360
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +66 -60
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +268 -305
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +92 -73
- package/lib/server/firefox/ffInput.js +82 -84
- package/lib/server/firefox/ffNetworkManager.js +137 -114
- package/lib/server/firefox/ffPage.js +261 -293
- package/lib/server/firefox/firefox.js +80 -72
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +98 -114
- package/lib/server/frames.js +845 -1055
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +290 -223
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +55 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +151 -189
- package/lib/server/instrumentation.js +57 -44
- package/lib/server/javascript.js +133 -134
- package/lib/server/launchApp.js +113 -75
- package/lib/server/localUtils.js +150 -142
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +299 -303
- package/lib/server/page.js +513 -544
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +58 -67
- package/lib/server/progress.js +137 -68
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +70 -86
- package/lib/server/recorder/recorderApp.js +341 -176
- package/lib/server/recorder/recorderInTraceViewer.js +65 -94
- package/lib/server/recorder/recorderRunner.js +93 -116
- package/lib/server/recorder/recorderSignalProcessor.js +83 -0
- package/lib/server/recorder/recorderUtils.js +104 -47
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +395 -275
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +930 -803
- package/lib/server/registry/nativeDeps.js +1073 -464
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +160 -191
- package/lib/server/selectors.js +90 -51
- package/lib/server/socksClientCertificatesInterceptor.js +171 -186
- package/lib/server/socksInterceptor.js +62 -70
- package/lib/server/trace/recorder/snapshotter.js +76 -102
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +354 -362
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +160 -147
- package/lib/server/transport.js +119 -134
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +39 -26
- package/lib/server/utils/comparators.js +105 -103
- package/lib/server/utils/crypto.js +157 -112
- package/lib/server/utils/debug.js +36 -32
- package/lib/server/utils/debugLogger.js +77 -48
- package/lib/server/utils/env.js +52 -37
- package/lib/server/utils/eventsHelper.js +29 -28
- package/lib/server/utils/expectUtils.js +31 -26
- package/lib/server/utils/fileUtils.js +123 -136
- package/lib/server/utils/happyEyeballs.js +141 -126
- package/lib/server/utils/hostPlatform.js +84 -120
- package/lib/server/utils/httpServer.js +106 -121
- package/lib/server/utils/image_tools/colorUtils.js +42 -51
- package/lib/server/utils/image_tools/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +38 -30
- package/lib/server/utils/image_tools/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +50 -37
- package/lib/server/utils/network.js +152 -96
- package/lib/server/utils/nodePlatform.js +87 -79
- package/lib/server/utils/pipeTransport.js +44 -42
- package/lib/server/utils/processLauncher.js +111 -121
- package/lib/server/utils/profiler.js +52 -39
- package/lib/server/utils/socksProxy.js +280 -339
- package/lib/server/utils/spawnAsync.js +37 -41
- package/lib/server/utils/task.js +31 -38
- package/lib/server/utils/userAgent.js +73 -66
- package/lib/server/utils/wsServer.js +68 -75
- package/lib/server/utils/zipFile.js +36 -37
- package/lib/server/utils/zones.js +37 -34
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +77 -61
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +193 -184
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +85 -70
- package/lib/server/webkit/wkInput.js +97 -95
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +568 -667
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +79 -79
- package/lib/utils/expectUtils.js +31 -26
- package/lib/utils/isomorphic/ariaSnapshot.js +149 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +120 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +358 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +46 -39
- package/lib/utils/isomorphic/mimeType.js +447 -25
- package/lib/utils/isomorphic/multimap.js +34 -27
- package/lib/utils/isomorphic/protocolFormatter.js +68 -0
- package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
- package/lib/utils/isomorphic/recorderUtils.js +140 -181
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +182 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +98 -112
- package/lib/utils/isomorphic/time.js +46 -22
- package/lib/utils/isomorphic/timeoutRunner.js +53 -53
- package/lib/utils/isomorphic/traceUtils.js +37 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +113 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
- package/lib/utils.js +101 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/utilsBundleImpl/index.js +160 -150
- package/lib/zipBundle.js +32 -23
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +1 -1
- package/types/protocol.d.ts +1267 -1057
- package/types/types.d.ts +131 -29
- package/lib/common/socksProxy.js +0 -569
- package/lib/common/timeoutSettings.js +0 -73
- package/lib/common/types.js +0 -5
- package/lib/image_tools/colorUtils.js +0 -98
- package/lib/image_tools/compare.js +0 -108
- package/lib/image_tools/imageChannel.js +0 -70
- package/lib/image_tools/stats.js +0 -102
- package/lib/protocol/debug.js +0 -27
- package/lib/protocol/transport.js +0 -82
- package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/server/recorder/contextRecorder.js +0 -290
- package/lib/server/recorder/recorderCollection.js +0 -104
- package/lib/server/recorder/recorderFrontend.js +0 -5
- package/lib/server/storageScript.js +0 -160
- package/lib/server/timeoutSettings.js +0 -74
- package/lib/third_party/diff_match_patch.js +0 -2222
- package/lib/utils/ascii.js +0 -31
- package/lib/utils/comparators.js +0 -171
- package/lib/utils/crypto.js +0 -174
- package/lib/utils/debug.js +0 -46
- package/lib/utils/debugLogger.js +0 -91
- package/lib/utils/env.js +0 -49
- package/lib/utils/eventsHelper.js +0 -38
- package/lib/utils/fileUtils.js +0 -205
- package/lib/utils/happy-eyeballs.js +0 -210
- package/lib/utils/headers.js +0 -52
- package/lib/utils/hostPlatform.js +0 -133
- package/lib/utils/httpServer.js +0 -237
- package/lib/utils/index.js +0 -368
- package/lib/utils/linuxUtils.js +0 -78
- package/lib/utils/manualPromise.js +0 -109
- package/lib/utils/multimap.js +0 -75
- package/lib/utils/network.js +0 -160
- package/lib/utils/processLauncher.js +0 -248
- package/lib/utils/profiler.js +0 -53
- package/lib/utils/rtti.js +0 -44
- package/lib/utils/semaphore.js +0 -51
- package/lib/utils/spawnAsync.js +0 -45
- package/lib/utils/stackTrace.js +0 -121
- package/lib/utils/task.js +0 -58
- package/lib/utils/time.js +0 -37
- package/lib/utils/timeoutRunner.js +0 -66
- package/lib/utils/traceUtils.js +0 -44
- package/lib/utils/userAgent.js +0 -105
- package/lib/utils/wsServer.js +0 -127
- package/lib/utils/zipFile.js +0 -75
- package/lib/utils/zones.js +0 -62
- package/lib/vite/htmlReport/index.html +0 -69
- package/lib/vite/recorder/assets/codeMirrorModule-DrMbgOIo.js +0 -16684
- package/lib/vite/recorder/assets/codeMirrorModule-DuST8d_k.css +0 -344
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-5NM3V7eb.css +0 -2524
- package/lib/vite/recorder/assets/index-CT-scFHn.js +0 -16848
- package/lib/vite/recorder/index.html +0 -29
- package/lib/vite/recorder/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/assets/codeMirrorModule-CB-2okZ8.js +0 -16684
- package/lib/vite/traceViewer/assets/defaultSettingsView-CBiB4avC.js +0 -217
- package/lib/vite/traceViewer/assets/inspectorTab-CwgfffWb.js +0 -25143
- package/lib/vite/traceViewer/assets/workbench-CWZselvp.js +0 -2470
- package/lib/vite/traceViewer/assets/xtermModule-Es_gt_u7.js +0 -5994
- package/lib/vite/traceViewer/codeMirrorModule.DuST8d_k.css +0 -344
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/defaultSettingsView.Dp3b_92q.css +0 -41
- package/lib/vite/traceViewer/embedded.BeldSa2G.css +0 -68
- package/lib/vite/traceViewer/embedded.gzudoghF.js +0 -106
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/index.DilotR1h.js +0 -314
- package/lib/vite/traceViewer/index.QewjJ85u.css +0 -131
- package/lib/vite/traceViewer/index.html +0 -47
- package/lib/vite/traceViewer/inspectorTab.DnGm18kV.css +0 -3178
- package/lib/vite/traceViewer/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/recorder.DLgqV9db.css +0 -15
- package/lib/vite/traceViewer/recorder.DVrkq3Um.js +0 -551
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/snapshot.html +0 -21
- package/lib/vite/traceViewer/sw.bundle.js +0 -3
- package/lib/vite/traceViewer/uiMode.C9_OcpPU.js +0 -1756
- package/lib/vite/traceViewer/uiMode.c5ORgcrX.css +0 -1424
- package/lib/vite/traceViewer/uiMode.html +0 -21
- package/lib/vite/traceViewer/workbench.xUZSA8PY.css +0 -787
- package/lib/vite/traceViewer/xtermModule.EsaqrrTX.css +0 -209
|
@@ -1,111 +1,94 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var crConnection_exports = {};
|
|
20
|
+
__export(crConnection_exports, {
|
|
21
|
+
CDPSession: () => CDPSession,
|
|
22
|
+
CRConnection: () => CRConnection,
|
|
23
|
+
CRSession: () => CRSession,
|
|
24
|
+
ConnectionEvents: () => ConnectionEvents,
|
|
25
|
+
kBrowserCloseMessageId: () => kBrowserCloseMessageId
|
|
5
26
|
});
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* Modifications copyright (c) Microsoft Corporation.
|
|
15
|
-
*
|
|
16
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
17
|
-
* you may not use this file except in compliance with the License.
|
|
18
|
-
* You may obtain a copy of the License at
|
|
19
|
-
*
|
|
20
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
21
|
-
*
|
|
22
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
23
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
24
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
25
|
-
* See the License for the specific language governing permissions and
|
|
26
|
-
* limitations under the License.
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
const ConnectionEvents = exports.ConnectionEvents = {
|
|
30
|
-
Disconnected: Symbol('ConnectionEvents.Disconnected')
|
|
27
|
+
module.exports = __toCommonJS(crConnection_exports);
|
|
28
|
+
var import_utils = require("../../utils");
|
|
29
|
+
var import_debugLogger = require("../utils/debugLogger");
|
|
30
|
+
var import_helper = require("../helper");
|
|
31
|
+
var import_protocolError = require("../protocolError");
|
|
32
|
+
var import_instrumentation = require("../instrumentation");
|
|
33
|
+
const ConnectionEvents = {
|
|
34
|
+
Disconnected: Symbol("ConnectionEvents.Disconnected")
|
|
31
35
|
};
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class CRConnection extends _events.EventEmitter {
|
|
37
|
-
constructor(transport, protocolLogger, browserLogsCollector) {
|
|
38
|
-
super();
|
|
36
|
+
const kBrowserCloseMessageId = -9999;
|
|
37
|
+
class CRConnection extends import_instrumentation.SdkObject {
|
|
38
|
+
constructor(parent, transport, protocolLogger, browserLogsCollector) {
|
|
39
|
+
super(parent, "cr-connection");
|
|
39
40
|
this._lastId = 0;
|
|
40
|
-
this.
|
|
41
|
-
this._sessions = new Map();
|
|
42
|
-
this._protocolLogger = void 0;
|
|
43
|
-
this._browserLogsCollector = void 0;
|
|
44
|
-
this._browserDisconnectedLogs = void 0;
|
|
45
|
-
this.rootSession = void 0;
|
|
41
|
+
this._sessions = /* @__PURE__ */ new Map();
|
|
46
42
|
this._closed = false;
|
|
47
43
|
this.setMaxListeners(0);
|
|
48
44
|
this._transport = transport;
|
|
49
45
|
this._protocolLogger = protocolLogger;
|
|
50
46
|
this._browserLogsCollector = browserLogsCollector;
|
|
51
|
-
this.rootSession = new CRSession(this, null,
|
|
52
|
-
this._sessions.set(
|
|
47
|
+
this.rootSession = new CRSession(this, null, "");
|
|
48
|
+
this._sessions.set("", this.rootSession);
|
|
53
49
|
this._transport.onmessage = this._onMessage.bind(this);
|
|
54
|
-
// onclose should be set last, since it can be immediately called.
|
|
55
50
|
this._transport.onclose = this._onClose.bind(this);
|
|
56
51
|
}
|
|
57
52
|
_rawSend(sessionId, method, params) {
|
|
58
53
|
const id = ++this._lastId;
|
|
59
|
-
const message = {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
};
|
|
64
|
-
if (sessionId) message.sessionId = sessionId;
|
|
65
|
-
this._protocolLogger('send', message);
|
|
54
|
+
const message = { id, method, params };
|
|
55
|
+
if (sessionId)
|
|
56
|
+
message.sessionId = sessionId;
|
|
57
|
+
this._protocolLogger("send", message);
|
|
66
58
|
this._transport.send(message);
|
|
67
59
|
return id;
|
|
68
60
|
}
|
|
69
61
|
async _onMessage(message) {
|
|
70
|
-
this._protocolLogger(
|
|
71
|
-
if (message.id === kBrowserCloseMessageId)
|
|
72
|
-
|
|
73
|
-
|
|
62
|
+
this._protocolLogger("receive", message);
|
|
63
|
+
if (message.id === kBrowserCloseMessageId)
|
|
64
|
+
return;
|
|
65
|
+
const session = this._sessions.get(message.sessionId || "");
|
|
66
|
+
if (session)
|
|
67
|
+
session._onMessage(message);
|
|
74
68
|
}
|
|
75
69
|
_onClose(reason) {
|
|
76
70
|
this._closed = true;
|
|
77
|
-
this._transport.onmessage =
|
|
78
|
-
this._transport.onclose =
|
|
79
|
-
this._browserDisconnectedLogs =
|
|
71
|
+
this._transport.onmessage = void 0;
|
|
72
|
+
this._transport.onclose = void 0;
|
|
73
|
+
this._browserDisconnectedLogs = import_helper.helper.formatBrowserLogs(this._browserLogsCollector.recentLogs(), reason);
|
|
80
74
|
this.rootSession.dispose();
|
|
81
75
|
Promise.resolve().then(() => this.emit(ConnectionEvents.Disconnected));
|
|
82
76
|
}
|
|
83
77
|
close() {
|
|
84
|
-
if (!this._closed)
|
|
78
|
+
if (!this._closed)
|
|
79
|
+
this._transport.close();
|
|
85
80
|
}
|
|
86
81
|
async createBrowserSession() {
|
|
87
|
-
const {
|
|
88
|
-
sessionId
|
|
89
|
-
} = await this.rootSession.send('Target.attachToBrowserTarget');
|
|
82
|
+
const { sessionId } = await this.rootSession.send("Target.attachToBrowserTarget");
|
|
90
83
|
return new CDPSession(this.rootSession, sessionId);
|
|
91
84
|
}
|
|
92
85
|
}
|
|
93
|
-
|
|
94
|
-
class CRSession extends _events.EventEmitter {
|
|
86
|
+
class CRSession extends import_instrumentation.SdkObject {
|
|
95
87
|
constructor(connection, parentSession, sessionId, eventListener) {
|
|
96
|
-
super();
|
|
97
|
-
this.
|
|
98
|
-
this._eventListener = void 0;
|
|
99
|
-
this._callbacks = new Map();
|
|
100
|
-
this._sessionId = void 0;
|
|
101
|
-
this._parentSession = void 0;
|
|
88
|
+
super(connection, "cr-session");
|
|
89
|
+
this._callbacks = /* @__PURE__ */ new Map();
|
|
102
90
|
this._crashed = false;
|
|
103
91
|
this._closed = false;
|
|
104
|
-
this.on = void 0;
|
|
105
|
-
this.addListener = void 0;
|
|
106
|
-
this.off = void 0;
|
|
107
|
-
this.removeListener = void 0;
|
|
108
|
-
this.once = void 0;
|
|
109
92
|
this.setMaxListeners(0);
|
|
110
93
|
this._connection = connection;
|
|
111
94
|
this._parentSession = parentSession;
|
|
@@ -126,21 +109,17 @@ class CRSession extends _events.EventEmitter {
|
|
|
126
109
|
return session;
|
|
127
110
|
}
|
|
128
111
|
async send(method, params) {
|
|
129
|
-
if (this._crashed || this._closed || this._connection._closed || this._connection._browserDisconnectedLogs)
|
|
112
|
+
if (this._crashed || this._closed || this._connection._closed || this._connection._browserDisconnectedLogs)
|
|
113
|
+
throw new import_protocolError.ProtocolError(this._crashed ? "crashed" : "closed", void 0, this._connection._browserDisconnectedLogs);
|
|
130
114
|
const id = this._connection._rawSend(this._sessionId, method, params);
|
|
131
115
|
return new Promise((resolve, reject) => {
|
|
132
|
-
this._callbacks.set(id, {
|
|
133
|
-
resolve,
|
|
134
|
-
reject,
|
|
135
|
-
error: new _protocolError.ProtocolError('error', method)
|
|
136
|
-
});
|
|
116
|
+
this._callbacks.set(id, { resolve, reject, error: new import_protocolError.ProtocolError("error", method) });
|
|
137
117
|
});
|
|
138
118
|
}
|
|
139
119
|
_sendMayFail(method, params) {
|
|
140
|
-
return this.send(method, params).catch(error =>
|
|
120
|
+
return this.send(method, params).catch((error) => import_debugLogger.debugLogger.log("error", error));
|
|
141
121
|
}
|
|
142
122
|
_onMessage(object) {
|
|
143
|
-
var _object$error;
|
|
144
123
|
if (object.id && this._callbacks.has(object.id)) {
|
|
145
124
|
const callback = this._callbacks.get(object.id);
|
|
146
125
|
this._callbacks.delete(object.id);
|
|
@@ -150,26 +129,23 @@ class CRSession extends _events.EventEmitter {
|
|
|
150
129
|
} else {
|
|
151
130
|
callback.resolve(object.result);
|
|
152
131
|
}
|
|
153
|
-
} else if (object.id &&
|
|
154
|
-
// Message to a closed session, just ignore it.
|
|
132
|
+
} else if (object.id && object.error?.code === -32001) {
|
|
155
133
|
} else {
|
|
156
|
-
|
|
157
|
-
(0, _utils.assert)(!object.id, (object === null || object === void 0 || (_object$error2 = object.error) === null || _object$error2 === void 0 ? void 0 : _object$error2.message) || undefined);
|
|
134
|
+
(0, import_utils.assert)(!object.id, object?.error?.message || void 0);
|
|
158
135
|
Promise.resolve().then(() => {
|
|
159
|
-
if (this._eventListener)
|
|
136
|
+
if (this._eventListener)
|
|
137
|
+
this._eventListener(object.method, object.params);
|
|
160
138
|
this.emit(object.method, object.params);
|
|
161
139
|
});
|
|
162
140
|
}
|
|
163
141
|
}
|
|
164
142
|
async detach() {
|
|
165
|
-
if (this._closed)
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
await this._sendMayFail(
|
|
170
|
-
await this._parentSession.send(
|
|
171
|
-
sessionId: this._sessionId
|
|
172
|
-
});
|
|
143
|
+
if (this._closed)
|
|
144
|
+
throw new Error(`Session already detached. Most likely the page has been closed.`);
|
|
145
|
+
if (!this._parentSession)
|
|
146
|
+
throw new Error("Root session cannot be closed");
|
|
147
|
+
await this._sendMayFail("Runtime.runIfWaitingForDebugger");
|
|
148
|
+
await this._parentSession.send("Target.detachFromTarget", { sessionId: this._sessionId });
|
|
173
149
|
this.dispose();
|
|
174
150
|
}
|
|
175
151
|
dispose() {
|
|
@@ -177,29 +153,29 @@ class CRSession extends _events.EventEmitter {
|
|
|
177
153
|
this._connection._sessions.delete(this._sessionId);
|
|
178
154
|
for (const callback of this._callbacks.values()) {
|
|
179
155
|
callback.error.setMessage(`Internal server error, session closed.`);
|
|
180
|
-
callback.error.type = this._crashed ?
|
|
156
|
+
callback.error.type = this._crashed ? "crashed" : "closed";
|
|
181
157
|
callback.error.logs = this._connection._browserDisconnectedLogs;
|
|
182
158
|
callback.reject(callback.error);
|
|
183
159
|
}
|
|
184
160
|
this._callbacks.clear();
|
|
185
161
|
}
|
|
186
162
|
}
|
|
187
|
-
|
|
188
|
-
class CDPSession extends _events.EventEmitter {
|
|
163
|
+
class CDPSession extends import_instrumentation.SdkObject {
|
|
189
164
|
constructor(parentSession, sessionId) {
|
|
190
|
-
super();
|
|
191
|
-
this.guid = void 0;
|
|
192
|
-
this._session = void 0;
|
|
165
|
+
super(parentSession, "cdp-session");
|
|
193
166
|
this._listeners = [];
|
|
194
|
-
this.
|
|
195
|
-
this.
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}));
|
|
199
|
-
this._listeners = [_utils.eventsHelper.addEventListener(parentSession, 'Target.detachedFromTarget', event => {
|
|
200
|
-
if (event.sessionId === sessionId) this._onClose();
|
|
167
|
+
this._session = parentSession.createChildSession(sessionId, (method, params) => this.emit(CDPSession.Events.Event, { method, params }));
|
|
168
|
+
this._listeners = [import_utils.eventsHelper.addEventListener(parentSession, "Target.detachedFromTarget", (event) => {
|
|
169
|
+
if (event.sessionId === sessionId)
|
|
170
|
+
this._onClose();
|
|
201
171
|
})];
|
|
202
172
|
}
|
|
173
|
+
static {
|
|
174
|
+
this.Events = {
|
|
175
|
+
Event: "event",
|
|
176
|
+
Closed: "close"
|
|
177
|
+
};
|
|
178
|
+
}
|
|
203
179
|
async send(method, params) {
|
|
204
180
|
return await this._session.send(method, params);
|
|
205
181
|
}
|
|
@@ -207,22 +183,20 @@ class CDPSession extends _events.EventEmitter {
|
|
|
207
183
|
return await this._session.detach();
|
|
208
184
|
}
|
|
209
185
|
async attachToTarget(targetId) {
|
|
210
|
-
const {
|
|
211
|
-
sessionId
|
|
212
|
-
} = await this.send('Target.attachToTarget', {
|
|
213
|
-
targetId,
|
|
214
|
-
flatten: true
|
|
215
|
-
});
|
|
186
|
+
const { sessionId } = await this.send("Target.attachToTarget", { targetId, flatten: true });
|
|
216
187
|
return new CDPSession(this._session, sessionId);
|
|
217
188
|
}
|
|
218
189
|
_onClose() {
|
|
219
|
-
|
|
190
|
+
import_utils.eventsHelper.removeEventListeners(this._listeners);
|
|
220
191
|
this._session.dispose();
|
|
221
192
|
this.emit(CDPSession.Events.Closed);
|
|
222
193
|
}
|
|
223
194
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
195
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
196
|
+
0 && (module.exports = {
|
|
197
|
+
CDPSession,
|
|
198
|
+
CRConnection,
|
|
199
|
+
CRSession,
|
|
200
|
+
ConnectionEvents,
|
|
201
|
+
kBrowserCloseMessageId
|
|
202
|
+
});
|
|
@@ -1,67 +1,60 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var crCoverage_exports = {};
|
|
20
|
+
__export(crCoverage_exports, {
|
|
21
|
+
CRCoverage: () => CRCoverage
|
|
5
22
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
/**
|
|
10
|
-
* Copyright 2017 Google Inc. All rights reserved.
|
|
11
|
-
* Modifications copyright (c) Microsoft Corporation.
|
|
12
|
-
*
|
|
13
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
14
|
-
* you may not use this file except in compliance with the License.
|
|
15
|
-
* You may obtain a copy of the License at
|
|
16
|
-
*
|
|
17
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
-
*
|
|
19
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
20
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
21
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
22
|
-
* See the License for the specific language governing permissions and
|
|
23
|
-
* limitations under the License.
|
|
24
|
-
*/
|
|
25
|
-
|
|
23
|
+
module.exports = __toCommonJS(crCoverage_exports);
|
|
24
|
+
var import_utils = require("../../utils");
|
|
25
|
+
var import_eventsHelper = require("../utils/eventsHelper");
|
|
26
26
|
class CRCoverage {
|
|
27
27
|
constructor(client) {
|
|
28
|
-
this._jsCoverage = void 0;
|
|
29
|
-
this._cssCoverage = void 0;
|
|
30
28
|
this._jsCoverage = new JSCoverage(client);
|
|
31
29
|
this._cssCoverage = new CSSCoverage(client);
|
|
32
30
|
}
|
|
33
|
-
async startJSCoverage(options) {
|
|
34
|
-
|
|
31
|
+
async startJSCoverage(progress, options) {
|
|
32
|
+
progress.cleanupWhenAborted(() => this._jsCoverage.stop());
|
|
33
|
+
await progress.race(this._jsCoverage.start(options));
|
|
35
34
|
}
|
|
36
35
|
async stopJSCoverage() {
|
|
37
36
|
return await this._jsCoverage.stop();
|
|
38
37
|
}
|
|
39
|
-
async startCSSCoverage(options) {
|
|
40
|
-
|
|
38
|
+
async startCSSCoverage(progress, options) {
|
|
39
|
+
progress.cleanupWhenAborted(() => this._cssCoverage.stop());
|
|
40
|
+
await progress.race(this._cssCoverage.start(options));
|
|
41
41
|
}
|
|
42
42
|
async stopCSSCoverage() {
|
|
43
43
|
return await this._cssCoverage.stop();
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
exports.CRCoverage = CRCoverage;
|
|
47
46
|
class JSCoverage {
|
|
48
47
|
constructor(client) {
|
|
49
|
-
this._client = void 0;
|
|
50
|
-
this._enabled = void 0;
|
|
51
|
-
this._scriptIds = void 0;
|
|
52
|
-
this._scriptSources = void 0;
|
|
53
|
-
this._eventListeners = void 0;
|
|
54
|
-
this._resetOnNavigation = void 0;
|
|
55
48
|
this._reportAnonymousScripts = false;
|
|
56
49
|
this._client = client;
|
|
57
50
|
this._enabled = false;
|
|
58
|
-
this._scriptIds = new Set();
|
|
59
|
-
this._scriptSources = new Map();
|
|
51
|
+
this._scriptIds = /* @__PURE__ */ new Set();
|
|
52
|
+
this._scriptSources = /* @__PURE__ */ new Map();
|
|
60
53
|
this._eventListeners = [];
|
|
61
54
|
this._resetOnNavigation = false;
|
|
62
55
|
}
|
|
63
56
|
async start(options) {
|
|
64
|
-
(0,
|
|
57
|
+
(0, import_utils.assert)(!this._enabled, "JSCoverage is already enabled");
|
|
65
58
|
const {
|
|
66
59
|
resetOnNavigation = true,
|
|
67
60
|
reportAnonymousScripts = false
|
|
@@ -71,106 +64,114 @@ class JSCoverage {
|
|
|
71
64
|
this._enabled = true;
|
|
72
65
|
this._scriptIds.clear();
|
|
73
66
|
this._scriptSources.clear();
|
|
74
|
-
this._eventListeners = [
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
67
|
+
this._eventListeners = [
|
|
68
|
+
import_eventsHelper.eventsHelper.addEventListener(this._client, "Debugger.scriptParsed", this._onScriptParsed.bind(this)),
|
|
69
|
+
import_eventsHelper.eventsHelper.addEventListener(this._client, "Runtime.executionContextsCleared", this._onExecutionContextsCleared.bind(this)),
|
|
70
|
+
import_eventsHelper.eventsHelper.addEventListener(this._client, "Debugger.paused", this._onDebuggerPaused.bind(this))
|
|
71
|
+
];
|
|
72
|
+
await Promise.all([
|
|
73
|
+
this._client.send("Profiler.enable"),
|
|
74
|
+
this._client.send("Profiler.startPreciseCoverage", { callCount: true, detailed: true }),
|
|
75
|
+
this._client.send("Debugger.enable"),
|
|
76
|
+
this._client.send("Debugger.setSkipAllPauses", { skip: true })
|
|
77
|
+
]);
|
|
81
78
|
}
|
|
82
79
|
_onDebuggerPaused() {
|
|
83
|
-
this._client.send(
|
|
80
|
+
this._client.send("Debugger.resume");
|
|
84
81
|
}
|
|
85
82
|
_onExecutionContextsCleared() {
|
|
86
|
-
if (!this._resetOnNavigation)
|
|
83
|
+
if (!this._resetOnNavigation)
|
|
84
|
+
return;
|
|
87
85
|
this._scriptIds.clear();
|
|
88
86
|
this._scriptSources.clear();
|
|
89
87
|
}
|
|
90
88
|
async _onScriptParsed(event) {
|
|
91
89
|
this._scriptIds.add(event.scriptId);
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
scriptId
|
|
97
|
-
});
|
|
98
|
-
if (response) this._scriptSources.set(event.scriptId, response.scriptSource);
|
|
90
|
+
if (!event.url && !this._reportAnonymousScripts)
|
|
91
|
+
return;
|
|
92
|
+
const response = await this._client._sendMayFail("Debugger.getScriptSource", { scriptId: event.scriptId });
|
|
93
|
+
if (response)
|
|
94
|
+
this._scriptSources.set(event.scriptId, response.scriptSource);
|
|
99
95
|
}
|
|
100
96
|
async stop() {
|
|
101
|
-
|
|
97
|
+
if (!this._enabled)
|
|
98
|
+
return { entries: [] };
|
|
99
|
+
const [profileResponse] = await Promise.all([
|
|
100
|
+
this._client.send("Profiler.takePreciseCoverage"),
|
|
101
|
+
this._client.send("Profiler.stopPreciseCoverage"),
|
|
102
|
+
this._client.send("Profiler.disable"),
|
|
103
|
+
this._client.send("Debugger.disable")
|
|
104
|
+
]);
|
|
105
|
+
import_eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
|
|
102
106
|
this._enabled = false;
|
|
103
|
-
const
|
|
104
|
-
_eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
|
|
105
|
-
const coverage = {
|
|
106
|
-
entries: []
|
|
107
|
-
};
|
|
107
|
+
const coverage = { entries: [] };
|
|
108
108
|
for (const entry of profileResponse.result) {
|
|
109
|
-
if (!this._scriptIds.has(entry.scriptId))
|
|
110
|
-
|
|
109
|
+
if (!this._scriptIds.has(entry.scriptId))
|
|
110
|
+
continue;
|
|
111
|
+
if (!entry.url && !this._reportAnonymousScripts)
|
|
112
|
+
continue;
|
|
111
113
|
const source = this._scriptSources.get(entry.scriptId);
|
|
112
|
-
if (source)
|
|
113
|
-
...entry,
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
if (source)
|
|
115
|
+
coverage.entries.push({ ...entry, source });
|
|
116
|
+
else
|
|
117
|
+
coverage.entries.push(entry);
|
|
116
118
|
}
|
|
117
119
|
return coverage;
|
|
118
120
|
}
|
|
119
121
|
}
|
|
120
122
|
class CSSCoverage {
|
|
121
123
|
constructor(client) {
|
|
122
|
-
this._client = void 0;
|
|
123
|
-
this._enabled = void 0;
|
|
124
|
-
this._stylesheetURLs = void 0;
|
|
125
|
-
this._stylesheetSources = void 0;
|
|
126
|
-
this._eventListeners = void 0;
|
|
127
|
-
this._resetOnNavigation = void 0;
|
|
128
124
|
this._client = client;
|
|
129
125
|
this._enabled = false;
|
|
130
|
-
this._stylesheetURLs = new Map();
|
|
131
|
-
this._stylesheetSources = new Map();
|
|
126
|
+
this._stylesheetURLs = /* @__PURE__ */ new Map();
|
|
127
|
+
this._stylesheetSources = /* @__PURE__ */ new Map();
|
|
132
128
|
this._eventListeners = [];
|
|
133
129
|
this._resetOnNavigation = false;
|
|
134
130
|
}
|
|
135
131
|
async start(options) {
|
|
136
|
-
(0,
|
|
137
|
-
const {
|
|
138
|
-
resetOnNavigation = true
|
|
139
|
-
} = options;
|
|
132
|
+
(0, import_utils.assert)(!this._enabled, "CSSCoverage is already enabled");
|
|
133
|
+
const { resetOnNavigation = true } = options;
|
|
140
134
|
this._resetOnNavigation = resetOnNavigation;
|
|
141
135
|
this._enabled = true;
|
|
142
136
|
this._stylesheetURLs.clear();
|
|
143
137
|
this._stylesheetSources.clear();
|
|
144
|
-
this._eventListeners = [
|
|
145
|
-
|
|
138
|
+
this._eventListeners = [
|
|
139
|
+
import_eventsHelper.eventsHelper.addEventListener(this._client, "CSS.styleSheetAdded", this._onStyleSheet.bind(this)),
|
|
140
|
+
import_eventsHelper.eventsHelper.addEventListener(this._client, "Runtime.executionContextsCleared", this._onExecutionContextsCleared.bind(this))
|
|
141
|
+
];
|
|
142
|
+
await Promise.all([
|
|
143
|
+
this._client.send("DOM.enable"),
|
|
144
|
+
this._client.send("CSS.enable"),
|
|
145
|
+
this._client.send("CSS.startRuleUsageTracking")
|
|
146
|
+
]);
|
|
146
147
|
}
|
|
147
148
|
_onExecutionContextsCleared() {
|
|
148
|
-
if (!this._resetOnNavigation)
|
|
149
|
+
if (!this._resetOnNavigation)
|
|
150
|
+
return;
|
|
149
151
|
this._stylesheetURLs.clear();
|
|
150
152
|
this._stylesheetSources.clear();
|
|
151
153
|
}
|
|
152
154
|
async _onStyleSheet(event) {
|
|
153
155
|
const header = event.header;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
const response = await this._client._sendMayFail('CSS.getStyleSheetText', {
|
|
158
|
-
styleSheetId: header.styleSheetId
|
|
159
|
-
});
|
|
156
|
+
if (!header.sourceURL)
|
|
157
|
+
return;
|
|
158
|
+
const response = await this._client._sendMayFail("CSS.getStyleSheetText", { styleSheetId: header.styleSheetId });
|
|
160
159
|
if (response) {
|
|
161
160
|
this._stylesheetURLs.set(header.styleSheetId, header.sourceURL);
|
|
162
161
|
this._stylesheetSources.set(header.styleSheetId, response.text);
|
|
163
162
|
}
|
|
164
163
|
}
|
|
165
164
|
async stop() {
|
|
166
|
-
|
|
165
|
+
if (!this._enabled)
|
|
166
|
+
return { entries: [] };
|
|
167
|
+
const ruleTrackingResponse = await this._client.send("CSS.stopRuleUsageTracking");
|
|
168
|
+
await Promise.all([
|
|
169
|
+
this._client.send("CSS.disable"),
|
|
170
|
+
this._client.send("DOM.disable")
|
|
171
|
+
]);
|
|
172
|
+
import_eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
|
|
167
173
|
this._enabled = false;
|
|
168
|
-
const
|
|
169
|
-
await Promise.all([this._client.send('CSS.disable'), this._client.send('DOM.disable')]);
|
|
170
|
-
_eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
|
|
171
|
-
|
|
172
|
-
// aggregate by styleSheetId
|
|
173
|
-
const styleSheetIdToCoverage = new Map();
|
|
174
|
+
const styleSheetIdToCoverage = /* @__PURE__ */ new Map();
|
|
174
175
|
for (const entry of ruleTrackingResponse.ruleUsage) {
|
|
175
176
|
let ranges = styleSheetIdToCoverage.get(entry.styleSheetId);
|
|
176
177
|
if (!ranges) {
|
|
@@ -183,18 +184,12 @@ class CSSCoverage {
|
|
|
183
184
|
count: entry.used ? 1 : 0
|
|
184
185
|
});
|
|
185
186
|
}
|
|
186
|
-
const coverage = {
|
|
187
|
-
entries: []
|
|
188
|
-
};
|
|
187
|
+
const coverage = { entries: [] };
|
|
189
188
|
for (const styleSheetId of this._stylesheetURLs.keys()) {
|
|
190
189
|
const url = this._stylesheetURLs.get(styleSheetId);
|
|
191
190
|
const text = this._stylesheetSources.get(styleSheetId);
|
|
192
191
|
const ranges = convertToDisjointRanges(styleSheetIdToCoverage.get(styleSheetId) || []);
|
|
193
|
-
coverage.entries.push({
|
|
194
|
-
url,
|
|
195
|
-
ranges,
|
|
196
|
-
text
|
|
197
|
-
});
|
|
192
|
+
coverage.entries.push({ url, ranges, text });
|
|
198
193
|
}
|
|
199
194
|
return coverage;
|
|
200
195
|
}
|
|
@@ -202,45 +197,40 @@ class CSSCoverage {
|
|
|
202
197
|
function convertToDisjointRanges(nestedRanges) {
|
|
203
198
|
const points = [];
|
|
204
199
|
for (const range of nestedRanges) {
|
|
205
|
-
points.push({
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
range
|
|
209
|
-
});
|
|
210
|
-
points.push({
|
|
211
|
-
offset: range.endOffset,
|
|
212
|
-
type: 1,
|
|
213
|
-
range
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
// Sort points to form a valid parenthesis sequence.
|
|
200
|
+
points.push({ offset: range.startOffset, type: 0, range });
|
|
201
|
+
points.push({ offset: range.endOffset, type: 1, range });
|
|
202
|
+
}
|
|
217
203
|
points.sort((a, b) => {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
204
|
+
if (a.offset !== b.offset)
|
|
205
|
+
return a.offset - b.offset;
|
|
206
|
+
if (a.type !== b.type)
|
|
207
|
+
return b.type - a.type;
|
|
222
208
|
const aLength = a.range.endOffset - a.range.startOffset;
|
|
223
209
|
const bLength = b.range.endOffset - b.range.startOffset;
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
// For two "end" points, the one with shorter range goes first.
|
|
210
|
+
if (a.type === 0)
|
|
211
|
+
return bLength - aLength;
|
|
227
212
|
return aLength - bLength;
|
|
228
213
|
});
|
|
229
214
|
const hitCountStack = [];
|
|
230
215
|
const results = [];
|
|
231
216
|
let lastOffset = 0;
|
|
232
|
-
// Run scanning line to intersect all ranges.
|
|
233
217
|
for (const point of points) {
|
|
234
218
|
if (hitCountStack.length && lastOffset < point.offset && hitCountStack[hitCountStack.length - 1] > 0) {
|
|
235
219
|
const lastResult = results.length ? results[results.length - 1] : null;
|
|
236
|
-
if (lastResult && lastResult.end === lastOffset)
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
220
|
+
if (lastResult && lastResult.end === lastOffset)
|
|
221
|
+
lastResult.end = point.offset;
|
|
222
|
+
else
|
|
223
|
+
results.push({ start: lastOffset, end: point.offset });
|
|
240
224
|
}
|
|
241
225
|
lastOffset = point.offset;
|
|
242
|
-
if (point.type === 0)
|
|
226
|
+
if (point.type === 0)
|
|
227
|
+
hitCountStack.push(point.range.count);
|
|
228
|
+
else
|
|
229
|
+
hitCountStack.pop();
|
|
243
230
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
231
|
+
return results.filter((range) => range.end - range.start > 1);
|
|
232
|
+
}
|
|
233
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
234
|
+
0 && (module.exports = {
|
|
235
|
+
CRCoverage
|
|
236
|
+
});
|