rebrowser-playwright-core 1.49.0 → 1.52.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 +381 -55
- package/bin/reinstall_msedge_beta_linux.sh +6 -0
- package/bin/reinstall_msedge_dev_linux.sh +6 -0
- package/bin/reinstall_msedge_stable_linux.sh +6 -0
- package/browsers.json +28 -13
- package/index.js +0 -1
- package/lib/androidServerImpl.js +42 -48
- package/lib/browserServerImpl.js +60 -64
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +314 -354
- package/lib/cli/programWithTestStub.js +51 -44
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +146 -254
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -39
- package/lib/client/browser.js +59 -68
- package/lib/client/browserContext.js +302 -322
- package/lib/client/browserType.js +95 -143
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +109 -139
- package/lib/client/clientHelper.js +49 -42
- package/lib/client/clientInstrumentation.js +40 -35
- package/lib/client/clientStackTrace.js +69 -0
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +203 -218
- package/lib/client/consoleMessage.js +33 -33
- 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 +74 -76
- package/lib/client/elementHandle.js +126 -163
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +127 -127
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +154 -178
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +34 -0
- package/lib/client/frame.js +189 -307
- package/lib/client/harRouter.js +44 -56
- package/lib/client/input.js +40 -69
- package/lib/client/jsHandle.js +55 -71
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +53 -28
- package/lib/client/locator.js +144 -230
- package/lib/client/network.js +285 -301
- package/lib/client/page.js +273 -312
- package/lib/client/platform.js +74 -0
- package/lib/client/playwright.js +62 -57
- package/lib/client/selectors.js +51 -43
- package/lib/client/stream.js +30 -45
- package/lib/client/timeoutSettings.js +75 -0
- package/lib/client/tracing.js +49 -82
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +71 -91
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +111 -0
- package/lib/client/worker.js +48 -56
- package/lib/client/writableStream.js +28 -43
- package/lib/generated/clockSource.js +26 -5
- package/lib/generated/consoleApiSource.js +26 -5
- package/lib/generated/injectedScriptSource.js +26 -5
- package/lib/generated/pollingRecorderSource.js +26 -5
- package/lib/generated/utilityScriptSource.js +26 -5
- package/lib/generated/webSocketMockSource.js +375 -4
- package/lib/inProcessFactory.js +53 -48
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +53 -42
- package/lib/protocol/debug.js +209 -25
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2712 -2667
- package/lib/protocol/validatorPrimitives.js +115 -75
- package/lib/remote/playwrightConnection.js +144 -152
- package/lib/remote/playwrightServer.js +106 -77
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +216 -206
- package/lib/server/android/backendAdb.js +89 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +227 -158
- package/lib/server/bidi/bidiChromium.js +106 -78
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +161 -97
- package/lib/server/bidi/bidiFirefox.js +76 -68
- package/lib/server/bidi/bidiInput.js +90 -102
- package/lib/server/bidi/bidiNetworkManager.js +141 -159
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +262 -261
- 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 +241 -223
- package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +149 -111
- package/lib/server/browser.js +76 -84
- package/lib/server/browserContext.js +343 -360
- package/lib/server/browserType.js +169 -181
- package/lib/server/callLog.js +82 -0
- package/lib/server/chromium/chromium.js +212 -190
- package/lib/server/chromium/chromiumSwitches.js +99 -44
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +262 -280
- package/lib/server/chromium/crConnection.js +121 -178
- package/lib/server/chromium/crCoverage.js +113 -127
- package/lib/server/chromium/crDevTools.js +64 -55
- package/lib/server/chromium/crDragDrop.js +62 -79
- package/lib/server/chromium/crExecutionContext.js +100 -91
- package/lib/server/chromium/crInput.js +101 -88
- package/lib/server/chromium/crNetworkManager.js +269 -370
- package/lib/server/chromium/crPage.js +509 -595
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +85 -69
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +65 -99
- package/lib/server/clock.js +58 -46
- package/lib/server/codegen/csharp.js +191 -156
- package/lib/server/codegen/java.js +163 -125
- package/lib/server/codegen/javascript.js +166 -143
- package/lib/server/codegen/jsonl.js +33 -29
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +141 -125
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +105 -86
- package/lib/server/debugController.js +102 -154
- package/lib/server/debugger.js +82 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +131 -131
- package/lib/server/dialog.js +36 -35
- package/lib/server/dispatchers/androidDispatcher.js +196 -107
- package/lib/server/dispatchers/artifactDispatcher.js +62 -62
- package/lib/server/dispatchers/browserContextDispatcher.js +177 -217
- package/lib/server/dispatchers/browserDispatcher.js +78 -97
- package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
- package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
- package/lib/server/dispatchers/debugControllerDispatcher.js +48 -64
- package/lib/server/dispatchers/dialogDispatcher.js +30 -27
- package/lib/server/dispatchers/dispatcher.js +180 -229
- package/lib/server/dispatchers/electronDispatcher.js +54 -57
- package/lib/server/dispatchers/elementHandlerDispatcher.js +79 -116
- package/lib/server/dispatchers/frameDispatcher.js +93 -162
- package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
- package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
- package/lib/server/dispatchers/localUtilsDispatcher.js +107 -365
- package/lib/server/dispatchers/networkDispatchers.js +92 -109
- package/lib/server/dispatchers/pageDispatcher.js +130 -169
- package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
- package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
- package/lib/server/dispatchers/streamDispatcher.js +42 -44
- package/lib/server/dispatchers/tracingDispatcher.js +36 -41
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +100 -135
- package/lib/server/dispatchers/writableStreamDispatcher.js +54 -39
- package/lib/server/dom.js +424 -443
- package/lib/server/download.js +45 -35
- package/lib/server/electron/electron.js +156 -175
- package/lib/server/electron/loader.js +8 -36
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +302 -331
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +66 -57
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +218 -274
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +103 -77
- package/lib/server/firefox/ffInput.js +72 -63
- package/lib/server/firefox/ffNetworkManager.js +131 -110
- package/lib/server/firefox/ffPage.js +244 -302
- package/lib/server/firefox/firefox.js +76 -69
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +77 -111
- package/lib/server/frames.js +719 -855
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +288 -224
- package/lib/server/harBackend.js +157 -0
- package/lib/server/helper.js +56 -59
- package/lib/server/index.js +59 -106
- package/lib/server/input.js +136 -166
- package/lib/server/instrumentation.js +49 -44
- package/lib/server/javascript.js +157 -151
- package/lib/server/launchApp.js +92 -73
- package/lib/server/localUtils.js +211 -0
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +263 -297
- package/lib/server/page.js +353 -432
- package/lib/server/pageBinding.js +88 -0
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +60 -67
- package/lib/server/progress.js +56 -51
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +161 -0
- package/lib/server/recorder/contextRecorder.js +135 -148
- package/lib/server/recorder/recorderApp.js +129 -132
- package/lib/server/recorder/recorderCollection.js +57 -57
- package/lib/server/recorder/recorderFrontend.js +15 -4
- package/lib/server/recorder/recorderRunner.js +80 -100
- package/lib/server/recorder/recorderUtils.js +59 -72
- package/lib/server/recorder/throttledFile.js +42 -31
- package/lib/server/recorder.js +186 -190
- package/lib/server/registry/browserFetcher.js +107 -100
- package/lib/server/registry/dependencies.js +247 -198
- package/lib/server/registry/index.js +928 -709
- package/lib/server/registry/nativeDeps.js +1073 -461
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +166 -182
- package/lib/server/selectors.js +85 -46
- package/lib/server/socksClientCertificatesInterceptor.js +166 -185
- package/lib/server/socksInterceptor.js +62 -67
- package/lib/server/storageScript.js +154 -0
- package/lib/server/timeoutSettings.js +89 -0
- package/lib/server/trace/recorder/snapshotter.js +70 -88
- package/lib/server/trace/recorder/snapshotterInjected.js +246 -218
- package/lib/server/trace/recorder/tracing.js +324 -327
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +172 -137
- package/lib/server/transport.js +125 -133
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +44 -0
- package/lib/server/utils/comparators.js +161 -0
- package/lib/server/utils/crypto.js +216 -0
- package/lib/server/utils/debug.js +47 -0
- package/lib/server/utils/debugLogger.js +114 -0
- package/lib/server/utils/env.js +68 -0
- package/lib/server/utils/eventsHelper.js +39 -0
- package/lib/server/utils/expectUtils.js +38 -0
- package/lib/server/utils/fileUtils.js +191 -0
- package/lib/server/utils/happyEyeballs.js +207 -0
- package/lib/server/utils/hostPlatform.js +109 -0
- package/lib/server/utils/httpServer.js +218 -0
- package/lib/server/utils/image_tools/colorUtils.js +89 -0
- package/lib/{image_tools → server/utils/image_tools}/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +78 -0
- package/lib/{image_tools → server/utils/image_tools}/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +71 -0
- package/lib/server/utils/network.js +217 -0
- package/lib/server/utils/nodePlatform.js +148 -0
- package/lib/server/utils/pipeTransport.js +84 -0
- package/lib/server/utils/processLauncher.js +238 -0
- package/lib/server/utils/profiler.js +65 -0
- package/lib/server/utils/socksProxy.js +511 -0
- package/lib/server/utils/spawnAsync.js +41 -0
- package/lib/server/utils/task.js +51 -0
- package/lib/server/utils/userAgent.js +98 -0
- package/lib/server/utils/wsServer.js +132 -0
- package/lib/server/utils/zipFile.js +74 -0
- package/lib/server/utils/zones.js +57 -0
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +76 -63
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +163 -180
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +96 -73
- package/lib/server/webkit/wkInput.js +87 -75
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +536 -645
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +77 -77
- package/lib/utils/isomorphic/ariaSnapshot.js +245 -128
- package/lib/utils/isomorphic/assert.js +31 -0
- package/lib/utils/isomorphic/builtins.js +90 -0
- package/lib/utils/isomorphic/colors.js +72 -0
- package/lib/utils/isomorphic/cssParser.js +123 -127
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +53 -0
- package/lib/utils/isomorphic/locatorGenerators.js +344 -349
- package/lib/utils/isomorphic/locatorParser.js +103 -106
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +115 -0
- package/lib/utils/isomorphic/mimeType.js +453 -22
- package/lib/utils/isomorphic/multimap.js +81 -0
- package/lib/utils/isomorphic/rtti.js +43 -0
- package/lib/utils/isomorphic/selectorParser.js +183 -193
- package/lib/utils/isomorphic/semaphore.js +54 -0
- package/lib/utils/isomorphic/stackTrace.js +158 -0
- package/lib/utils/isomorphic/stringUtils.js +113 -106
- package/lib/utils/isomorphic/time.js +44 -0
- package/lib/utils/isomorphic/timeoutRunner.js +67 -0
- package/lib/utils/isomorphic/traceUtils.js +52 -32
- package/lib/utils/isomorphic/types.js +16 -0
- package/lib/utils/isomorphic/urlMatch.js +114 -71
- package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
- package/lib/utils.js +101 -0
- package/lib/utilsBundle.js +101 -76
- package/lib/utilsBundleImpl/index.js +114 -116
- package/lib/vite/htmlReport/index.html +26 -20
- package/lib/vite/recorder/assets/codeMirrorModule-DVQi6prl.js +24 -0
- package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
- package/lib/vite/recorder/assets/{index-iA1aAGZg.css → index-eHBmevrY.css} +1 -1
- package/lib/vite/recorder/index.html +2 -2
- package/lib/vite/traceViewer/assets/codeMirrorModule-DwAiTpyC.js +24 -0
- package/lib/vite/traceViewer/assets/defaultSettingsView-DkkRvn5X.js +265 -0
- package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
- package/lib/vite/traceViewer/defaultSettingsView.QdHITyLI.css +1 -0
- package/lib/vite/traceViewer/index.DvtSwn6E.js +2 -0
- package/lib/vite/traceViewer/index.html +4 -7
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/{uiMode.voC1ZiOQ.css → uiMode.BatfzHMG.css} +1 -1
- package/lib/vite/traceViewer/uiMode.Sdytl9wc.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +4 -7
- package/lib/zipBundle.js +32 -23
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +7 -7
- package/types/protocol.d.ts +819 -127
- package/types/types.d.ts +196 -75
- package/bin/PrintDeps.exe +0 -0
- package/bin/README.md +0 -2
- 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/imageChannel.js +0 -70
- package/lib/protocol/transport.js +0 -82
- package/lib/server/ariaSnapshot.js +0 -33
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -226
- package/lib/server/recorder/recorderInTraceViewer.js +0 -144
- package/lib/utils/ascii.js +0 -31
- package/lib/utils/comparators.js +0 -153
- package/lib/utils/crypto.js +0 -171
- 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/expectUtils.js +0 -33
- package/lib/utils/fileUtils.js +0 -205
- package/lib/utils/happy-eyeballs.js +0 -194
- package/lib/utils/headers.js +0 -52
- package/lib/utils/hostPlatform.js +0 -139
- package/lib/utils/httpServer.js +0 -237
- package/lib/utils/index.js +0 -368
- package/lib/utils/isomorphic/recorderUtils.js +0 -227
- 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/sequence.js +0 -64
- package/lib/utils/spawnAsync.js +0 -45
- package/lib/utils/stackTrace.js +0 -134
- 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 -71
- package/lib/vite/recorder/assets/codeMirrorModule-AFvV6hAs.js +0 -24
- package/lib/vite/recorder/assets/index-_cTWgVuJ.js +0 -184
- package/lib/vite/traceViewer/assets/codeMirrorModule-KatbITLF.js +0 -24
- package/lib/vite/traceViewer/assets/inspectorTab-DdpLd2bb.js +0 -68
- package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
- package/lib/vite/traceViewer/assets/workbench-CdYbzWFD.js +0 -9
- package/lib/vite/traceViewer/embedded.6m3UZh7r.js +0 -2
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/embedded.w7WN2u1R.css +0 -1
- package/lib/vite/traceViewer/index.WUV-8boJ.js +0 -2
- package/lib/vite/traceViewer/inspectorTab.DEOUW62d.css +0 -1
- package/lib/vite/traceViewer/recorder.B_SY1GJM.css +0 -0
- package/lib/vite/traceViewer/recorder.OT2tVHgn.js +0 -2
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/uiMode.BZBTyvGn.js +0 -5
- package/lib/vite/traceViewer/workbench.C-zR9ysA.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/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
- /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
package/lib/server/clock.js
CHANGED
|
@@ -1,31 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty
|
|
4
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var clock_exports = {};
|
|
30
|
+
__export(clock_exports, {
|
|
31
|
+
Clock: () => Clock
|
|
5
32
|
});
|
|
6
|
-
exports
|
|
7
|
-
var clockSource =
|
|
8
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
9
|
-
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; }
|
|
10
|
-
/**
|
|
11
|
-
* 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
|
-
|
|
33
|
+
module.exports = __toCommonJS(clock_exports);
|
|
34
|
+
var clockSource = __toESM(require("../generated/clockSource"));
|
|
26
35
|
class Clock {
|
|
27
36
|
constructor(browserContext) {
|
|
28
|
-
this._browserContext = void 0;
|
|
29
37
|
this._scriptInstalled = false;
|
|
30
38
|
this._browserContext = browserContext;
|
|
31
39
|
}
|
|
@@ -40,7 +48,7 @@ class Clock {
|
|
|
40
48
|
}
|
|
41
49
|
async install(time) {
|
|
42
50
|
await this._installIfNeeded();
|
|
43
|
-
const timeMillis = time !==
|
|
51
|
+
const timeMillis = time !== void 0 ? parseTime(time) : Date.now();
|
|
44
52
|
await this._browserContext.addInitScript(`globalThis.__pwClock.controller.log('install', ${Date.now()}, ${timeMillis})`);
|
|
45
53
|
await this._evaluateInFrames(`globalThis.__pwClock.controller.install(${timeMillis})`);
|
|
46
54
|
}
|
|
@@ -74,7 +82,8 @@ class Clock {
|
|
|
74
82
|
await this._evaluateInFrames(`globalThis.__pwClock.controller.runFor(${ticksMillis})`);
|
|
75
83
|
}
|
|
76
84
|
async _installIfNeeded() {
|
|
77
|
-
if (this._scriptInstalled)
|
|
85
|
+
if (this._scriptInstalled)
|
|
86
|
+
return;
|
|
78
87
|
this._scriptInstalled = true;
|
|
79
88
|
const script = `(() => {
|
|
80
89
|
const module = {};
|
|
@@ -85,41 +94,44 @@ class Clock {
|
|
|
85
94
|
await this._evaluateInFrames(script);
|
|
86
95
|
}
|
|
87
96
|
async _evaluateInFrames(script) {
|
|
88
|
-
await this._browserContext.safeNonStallingEvaluateInAllFrames(script,
|
|
89
|
-
throwOnJSErrors: true
|
|
90
|
-
});
|
|
97
|
+
await this._browserContext.safeNonStallingEvaluateInAllFrames(script, "main", { throwOnJSErrors: true });
|
|
91
98
|
}
|
|
92
99
|
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Parse strings like '01:10:00' (meaning 1 hour, 10 minutes, 0 seconds) into
|
|
96
|
-
* number of milliseconds. This is used to support human-readable strings passed
|
|
97
|
-
* to clock.tick()
|
|
98
|
-
*/
|
|
99
|
-
exports.Clock = Clock;
|
|
100
100
|
function parseTicks(value) {
|
|
101
|
-
if (typeof value ===
|
|
102
|
-
|
|
101
|
+
if (typeof value === "number")
|
|
102
|
+
return value;
|
|
103
|
+
if (!value)
|
|
104
|
+
return 0;
|
|
103
105
|
const str = value;
|
|
104
|
-
const strings = str.split(
|
|
106
|
+
const strings = str.split(":");
|
|
105
107
|
const l = strings.length;
|
|
106
108
|
let i = l;
|
|
107
109
|
let ms = 0;
|
|
108
110
|
let parsed;
|
|
109
111
|
if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) {
|
|
110
|
-
throw new Error(
|
|
112
|
+
throw new Error(
|
|
113
|
+
`Clock only understands numbers, 'mm:ss' and 'hh:mm:ss'`
|
|
114
|
+
);
|
|
111
115
|
}
|
|
112
116
|
while (i--) {
|
|
113
117
|
parsed = parseInt(strings[i], 10);
|
|
114
|
-
if (parsed >= 60)
|
|
118
|
+
if (parsed >= 60)
|
|
119
|
+
throw new Error(`Invalid time ${str}`);
|
|
115
120
|
ms += parsed * Math.pow(60, l - i - 1);
|
|
116
121
|
}
|
|
117
|
-
return ms *
|
|
122
|
+
return ms * 1e3;
|
|
118
123
|
}
|
|
119
124
|
function parseTime(epoch) {
|
|
120
|
-
if (!epoch)
|
|
121
|
-
|
|
125
|
+
if (!epoch)
|
|
126
|
+
return 0;
|
|
127
|
+
if (typeof epoch === "number")
|
|
128
|
+
return epoch;
|
|
122
129
|
const parsed = new Date(epoch);
|
|
123
|
-
if (!isFinite(parsed.getTime()))
|
|
130
|
+
if (!isFinite(parsed.getTime()))
|
|
131
|
+
throw new Error(`Invalid date: ${epoch}`);
|
|
124
132
|
return parsed.getTime();
|
|
125
|
-
}
|
|
133
|
+
}
|
|
134
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
135
|
+
0 && (module.exports = {
|
|
136
|
+
Clock
|
|
137
|
+
});
|
|
@@ -1,44 +1,42 @@
|
|
|
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 csharp_exports = {};
|
|
20
|
+
__export(csharp_exports, {
|
|
21
|
+
CSharpLanguageGenerator: () => CSharpLanguageGenerator
|
|
5
22
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
/**
|
|
11
|
-
* 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(csharp_exports);
|
|
24
|
+
var import_language = require("./language");
|
|
25
|
+
var import_utils = require("../../utils");
|
|
26
|
+
var import_deviceDescriptors = require("../deviceDescriptors");
|
|
26
27
|
class CSharpLanguageGenerator {
|
|
27
28
|
constructor(mode) {
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
if (mode ===
|
|
34
|
-
this.name =
|
|
35
|
-
this.id =
|
|
36
|
-
} else if (mode ===
|
|
37
|
-
this.name =
|
|
38
|
-
this.id =
|
|
39
|
-
} else if (mode === 'nunit') {
|
|
40
|
-
this.name = 'NUnit';
|
|
41
|
-
this.id = 'csharp-nunit';
|
|
29
|
+
this.groupName = ".NET C#";
|
|
30
|
+
this.highlighter = "csharp";
|
|
31
|
+
if (mode === "library") {
|
|
32
|
+
this.name = "Library";
|
|
33
|
+
this.id = "csharp";
|
|
34
|
+
} else if (mode === "mstest") {
|
|
35
|
+
this.name = "MSTest";
|
|
36
|
+
this.id = "csharp-mstest";
|
|
37
|
+
} else if (mode === "nunit") {
|
|
38
|
+
this.name = "NUnit";
|
|
39
|
+
this.id = "csharp-nunit";
|
|
42
40
|
} else {
|
|
43
41
|
throw new Error(`Unknown C# language mode: ${mode}`);
|
|
44
42
|
}
|
|
@@ -46,23 +44,27 @@ class CSharpLanguageGenerator {
|
|
|
46
44
|
}
|
|
47
45
|
generateAction(actionInContext) {
|
|
48
46
|
const action = this._generateActionInner(actionInContext);
|
|
49
|
-
if (action)
|
|
50
|
-
|
|
47
|
+
if (action)
|
|
48
|
+
return action;
|
|
49
|
+
return "";
|
|
51
50
|
}
|
|
52
51
|
_generateActionInner(actionInContext) {
|
|
53
52
|
const action = actionInContext.action;
|
|
54
|
-
if (this._mode !==
|
|
53
|
+
if (this._mode !== "library" && (action.name === "openPage" || action.name === "closePage"))
|
|
54
|
+
return "";
|
|
55
55
|
let pageAlias = actionInContext.frame.pageAlias;
|
|
56
|
-
if (this._mode !==
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
if (this._mode !== "library")
|
|
57
|
+
pageAlias = pageAlias.replace("page", "Page");
|
|
58
|
+
const formatter = new CSharpFormatter(this._mode === "library" ? 0 : 8);
|
|
59
|
+
if (action.name === "openPage") {
|
|
59
60
|
formatter.add(`var ${pageAlias} = await context.NewPageAsync();`);
|
|
60
|
-
if (action.url && action.url !==
|
|
61
|
+
if (action.url && action.url !== "about:blank" && action.url !== "chrome://newtab/")
|
|
62
|
+
formatter.add(`await ${pageAlias}.GotoAsync(${quote(action.url)});`);
|
|
61
63
|
return formatter.format();
|
|
62
64
|
}
|
|
63
|
-
const locators = actionInContext.frame.framePath.map(selector => `.${this._asLocator(selector)}.ContentFrame`);
|
|
64
|
-
const subject = `${pageAlias}${locators.join(
|
|
65
|
-
const signals = (0,
|
|
65
|
+
const locators = actionInContext.frame.framePath.map((selector) => `.${this._asLocator(selector)}.ContentFrame`);
|
|
66
|
+
const subject = `${pageAlias}${locators.join("")}`;
|
|
67
|
+
const signals = (0, import_language.toSignalMap)(action);
|
|
66
68
|
if (signals.dialog) {
|
|
67
69
|
formatter.add(` void ${pageAlias}_Dialog${signals.dialog.dialogAlias}_EventHandler(object sender, IDialog dialog)
|
|
68
70
|
{
|
|
@@ -75,70 +77,73 @@ class CSharpLanguageGenerator {
|
|
|
75
77
|
const lines = [];
|
|
76
78
|
lines.push(this._generateActionCall(subject, actionInContext));
|
|
77
79
|
if (signals.download) {
|
|
78
|
-
lines.unshift(`var download${signals.download.downloadAlias} = await ${pageAlias}.RunAndWaitForDownloadAsync(async ()
|
|
80
|
+
lines.unshift(`var download${signals.download.downloadAlias} = await ${pageAlias}.RunAndWaitForDownloadAsync(async () =>
|
|
81
|
+
{`);
|
|
79
82
|
lines.push(`});`);
|
|
80
83
|
}
|
|
81
84
|
if (signals.popup) {
|
|
82
|
-
lines.unshift(`var ${signals.popup.popupAlias} = await ${pageAlias}.RunAndWaitForPopupAsync(async ()
|
|
85
|
+
lines.unshift(`var ${signals.popup.popupAlias} = await ${pageAlias}.RunAndWaitForPopupAsync(async () =>
|
|
86
|
+
{`);
|
|
83
87
|
lines.push(`});`);
|
|
84
88
|
}
|
|
85
|
-
for (const line of lines)
|
|
89
|
+
for (const line of lines)
|
|
90
|
+
formatter.add(line);
|
|
86
91
|
return formatter.format();
|
|
87
92
|
}
|
|
88
93
|
_generateActionCall(subject, actionInContext) {
|
|
89
94
|
const action = actionInContext.action;
|
|
90
95
|
switch (action.name) {
|
|
91
|
-
case
|
|
92
|
-
throw Error(
|
|
93
|
-
case
|
|
96
|
+
case "openPage":
|
|
97
|
+
throw Error("Not reached");
|
|
98
|
+
case "closePage":
|
|
94
99
|
return `await ${subject}.CloseAsync();`;
|
|
95
|
-
case
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
|
|
100
|
+
case "click": {
|
|
101
|
+
let method = "Click";
|
|
102
|
+
if (action.clickCount === 2)
|
|
103
|
+
method = "DblClick";
|
|
104
|
+
const options = (0, import_language.toClickOptionsForSourceCode)(action);
|
|
105
|
+
if (!Object.entries(options).length)
|
|
106
|
+
return `await ${subject}.${this._asLocator(action.selector)}.${method}Async();`;
|
|
107
|
+
const optionsString = formatObject(options, " ", "Locator" + method + "Options");
|
|
108
|
+
return `await ${subject}.${this._asLocator(action.selector)}.${method}Async(${optionsString});`;
|
|
109
|
+
}
|
|
110
|
+
case "check":
|
|
105
111
|
return `await ${subject}.${this._asLocator(action.selector)}.CheckAsync();`;
|
|
106
|
-
case
|
|
112
|
+
case "uncheck":
|
|
107
113
|
return `await ${subject}.${this._asLocator(action.selector)}.UncheckAsync();`;
|
|
108
|
-
case
|
|
114
|
+
case "fill":
|
|
109
115
|
return `await ${subject}.${this._asLocator(action.selector)}.FillAsync(${quote(action.text)});`;
|
|
110
|
-
case
|
|
116
|
+
case "setInputFiles":
|
|
111
117
|
return `await ${subject}.${this._asLocator(action.selector)}.SetInputFilesAsync(${formatObject(action.files)});`;
|
|
112
|
-
case
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
case 'navigate':
|
|
118
|
+
case "press": {
|
|
119
|
+
const modifiers = (0, import_language.toKeyboardModifiers)(action.modifiers);
|
|
120
|
+
const shortcut = [...modifiers, action.key].join("+");
|
|
121
|
+
return `await ${subject}.${this._asLocator(action.selector)}.PressAsync(${quote(shortcut)});`;
|
|
122
|
+
}
|
|
123
|
+
case "navigate":
|
|
119
124
|
return `await ${subject}.GotoAsync(${quote(action.url)});`;
|
|
120
|
-
case
|
|
125
|
+
case "select":
|
|
121
126
|
return `await ${subject}.${this._asLocator(action.selector)}.SelectOptionAsync(${formatObject(action.options)});`;
|
|
122
|
-
case
|
|
123
|
-
return `await Expect(${subject}.${this._asLocator(action.selector)}).${action.substring ?
|
|
124
|
-
case
|
|
125
|
-
return `await Expect(${subject}.${this._asLocator(action.selector)})${action.checked ?
|
|
126
|
-
case
|
|
127
|
+
case "assertText":
|
|
128
|
+
return `await Expect(${subject}.${this._asLocator(action.selector)}).${action.substring ? "ToContainTextAsync" : "ToHaveTextAsync"}(${quote(action.text)});`;
|
|
129
|
+
case "assertChecked":
|
|
130
|
+
return `await Expect(${subject}.${this._asLocator(action.selector)})${action.checked ? "" : ".Not"}.ToBeCheckedAsync();`;
|
|
131
|
+
case "assertVisible":
|
|
127
132
|
return `await Expect(${subject}.${this._asLocator(action.selector)}).ToBeVisibleAsync();`;
|
|
128
|
-
case
|
|
129
|
-
{
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
case 'assertSnapshot':
|
|
133
|
+
case "assertValue": {
|
|
134
|
+
const assertion = action.value ? `ToHaveValueAsync(${quote(action.value)})` : `ToBeEmptyAsync()`;
|
|
135
|
+
return `await Expect(${subject}.${this._asLocator(action.selector)}).${assertion};`;
|
|
136
|
+
}
|
|
137
|
+
case "assertSnapshot":
|
|
134
138
|
return `await Expect(${subject}.${this._asLocator(action.selector)}).ToMatchAriaSnapshotAsync(${quote(action.snapshot)});`;
|
|
135
139
|
}
|
|
136
140
|
}
|
|
137
141
|
_asLocator(selector) {
|
|
138
|
-
return (0,
|
|
142
|
+
return (0, import_utils.asLocator)("csharp", selector);
|
|
139
143
|
}
|
|
140
144
|
generateHeader(options) {
|
|
141
|
-
if (this._mode ===
|
|
145
|
+
if (this._mode === "library")
|
|
146
|
+
return this.generateStandaloneHeader(options);
|
|
142
147
|
return this.generateTestRunnerHeader(options);
|
|
143
148
|
}
|
|
144
149
|
generateStandaloneHeader(options) {
|
|
@@ -149,20 +154,23 @@ class CSharpLanguageGenerator {
|
|
|
149
154
|
using System.Threading.Tasks;
|
|
150
155
|
|
|
151
156
|
using var playwright = await Playwright.CreateAsync();
|
|
152
|
-
await using var browser = await playwright.${toPascal(options.browserName)}.LaunchAsync(${formatObject(options.launchOptions,
|
|
157
|
+
await using var browser = await playwright.${toPascal(options.browserName)}.LaunchAsync(${formatObject(options.launchOptions, " ", "BrowserTypeLaunchOptions")});
|
|
153
158
|
var context = await browser.NewContextAsync(${formatContextOptions(options.contextOptions, options.deviceName)});`);
|
|
154
|
-
if (options.contextOptions.recordHar)
|
|
159
|
+
if (options.contextOptions.recordHar) {
|
|
160
|
+
const url = options.contextOptions.recordHar.urlFilter;
|
|
161
|
+
formatter.add(` await context.RouteFromHARAsync(${quote(options.contextOptions.recordHar.path)}${url ? `, ${formatObject({ url }, " ", "BrowserContextRouteFromHAROptions")}` : ""});`);
|
|
162
|
+
}
|
|
155
163
|
formatter.newLine();
|
|
156
164
|
return formatter.format();
|
|
157
165
|
}
|
|
158
166
|
generateTestRunnerHeader(options) {
|
|
159
167
|
const formatter = new CSharpFormatter(0);
|
|
160
168
|
formatter.add(`
|
|
161
|
-
using Microsoft.Playwright.${this._mode ===
|
|
169
|
+
using Microsoft.Playwright.${this._mode === "nunit" ? "NUnit" : "MSTest"};
|
|
162
170
|
using Microsoft.Playwright;
|
|
163
171
|
|
|
164
|
-
${this._mode ===
|
|
165
|
-
[TestFixture]` :
|
|
172
|
+
${this._mode === "nunit" ? `[Parallelizable(ParallelScope.Self)]
|
|
173
|
+
[TestFixture]` : "[TestClass]"}
|
|
166
174
|
public class Tests : PageTest
|
|
167
175
|
{`);
|
|
168
176
|
const formattedContextOptions = formatContextOptions(options.contextOptions, options.deviceName);
|
|
@@ -173,68 +181,90 @@ class CSharpLanguageGenerator {
|
|
|
173
181
|
}`);
|
|
174
182
|
formatter.newLine();
|
|
175
183
|
}
|
|
176
|
-
formatter.add(` [${this._mode ===
|
|
184
|
+
formatter.add(` [${this._mode === "nunit" ? "Test" : "TestMethod"}]
|
|
177
185
|
public async Task MyTest()
|
|
178
186
|
{`);
|
|
179
|
-
if (options.contextOptions.recordHar)
|
|
187
|
+
if (options.contextOptions.recordHar) {
|
|
188
|
+
const url = options.contextOptions.recordHar.urlFilter;
|
|
189
|
+
formatter.add(` await Context.RouteFromHARAsync(${quote(options.contextOptions.recordHar.path)}${url ? `, ${formatObject({ url }, " ", "BrowserContextRouteFromHAROptions")}` : ""});`);
|
|
190
|
+
}
|
|
180
191
|
return formatter.format();
|
|
181
192
|
}
|
|
182
193
|
generateFooter(saveStorage) {
|
|
183
|
-
const offset = this._mode ===
|
|
184
|
-
let storageStateLine = saveStorage ?
|
|
185
|
-
|
|
194
|
+
const offset = this._mode === "library" ? "" : " ";
|
|
195
|
+
let storageStateLine = saveStorage ? `
|
|
196
|
+
${offset}await context.StorageStateAsync(new BrowserContextStorageStateOptions
|
|
197
|
+
${offset}{
|
|
198
|
+
${offset} Path = ${quote(saveStorage)}
|
|
199
|
+
${offset}});
|
|
200
|
+
` : "";
|
|
201
|
+
if (this._mode !== "library")
|
|
202
|
+
storageStateLine += ` }
|
|
203
|
+
}
|
|
204
|
+
`;
|
|
186
205
|
return storageStateLine;
|
|
187
206
|
}
|
|
188
207
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
208
|
+
function formatObject(value, indent = " ", name = "") {
|
|
209
|
+
if (typeof value === "string") {
|
|
210
|
+
if (["permissions", "colorScheme", "modifiers", "button", "recordHarContent", "recordHarMode", "serviceWorkers"].includes(name))
|
|
211
|
+
return `${getClassName(name)}.${toPascal(value)}`;
|
|
193
212
|
return quote(value);
|
|
194
213
|
}
|
|
195
|
-
if (Array.isArray(value))
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
214
|
+
if (Array.isArray(value))
|
|
215
|
+
return `new[] { ${value.map((o) => formatObject(o, indent, name)).join(", ")} }`;
|
|
216
|
+
if (typeof value === "object") {
|
|
217
|
+
const keys = Object.keys(value).filter((key) => value[key] !== void 0).sort();
|
|
218
|
+
if (!keys.length)
|
|
219
|
+
return name ? `new ${getClassName(name)}` : "";
|
|
199
220
|
const tokens = [];
|
|
200
221
|
for (const key of keys) {
|
|
201
222
|
const property = getPropertyName(key);
|
|
202
223
|
tokens.push(`${property} = ${formatObject(value[key], indent, key)},`);
|
|
203
224
|
}
|
|
204
|
-
if (name)
|
|
205
|
-
|
|
225
|
+
if (name)
|
|
226
|
+
return `new ${getClassName(name)}
|
|
227
|
+
{
|
|
228
|
+
${indent}${tokens.join(`
|
|
229
|
+
${indent}`)}
|
|
230
|
+
${indent}}`;
|
|
231
|
+
return `{
|
|
232
|
+
${indent}${tokens.join(`
|
|
233
|
+
${indent}`)}
|
|
234
|
+
${indent}}`;
|
|
206
235
|
}
|
|
207
|
-
if (name ===
|
|
236
|
+
if (name === "latitude" || name === "longitude")
|
|
237
|
+
return String(value) + "m";
|
|
208
238
|
return String(value);
|
|
209
239
|
}
|
|
210
240
|
function getClassName(value) {
|
|
211
241
|
switch (value) {
|
|
212
|
-
case
|
|
213
|
-
return
|
|
214
|
-
case
|
|
215
|
-
return
|
|
216
|
-
case
|
|
217
|
-
return
|
|
218
|
-
case
|
|
219
|
-
return
|
|
220
|
-
case
|
|
221
|
-
return
|
|
222
|
-
case
|
|
223
|
-
return
|
|
224
|
-
case
|
|
225
|
-
return
|
|
226
|
-
case
|
|
227
|
-
return
|
|
242
|
+
case "viewport":
|
|
243
|
+
return "ViewportSize";
|
|
244
|
+
case "proxy":
|
|
245
|
+
return "ProxySettings";
|
|
246
|
+
case "permissions":
|
|
247
|
+
return "ContextPermission";
|
|
248
|
+
case "modifiers":
|
|
249
|
+
return "KeyboardModifier";
|
|
250
|
+
case "button":
|
|
251
|
+
return "MouseButton";
|
|
252
|
+
case "recordHarMode":
|
|
253
|
+
return "HarMode";
|
|
254
|
+
case "recordHarContent":
|
|
255
|
+
return "HarContentPolicy";
|
|
256
|
+
case "serviceWorkers":
|
|
257
|
+
return "ServiceWorkerPolicy";
|
|
228
258
|
default:
|
|
229
259
|
return toPascal(value);
|
|
230
260
|
}
|
|
231
261
|
}
|
|
232
262
|
function getPropertyName(key) {
|
|
233
263
|
switch (key) {
|
|
234
|
-
case
|
|
235
|
-
return
|
|
236
|
-
case
|
|
237
|
-
return
|
|
264
|
+
case "storageState":
|
|
265
|
+
return "StorageStatePath";
|
|
266
|
+
case "viewport":
|
|
267
|
+
return "ViewportSize";
|
|
238
268
|
default:
|
|
239
269
|
return toPascal(key);
|
|
240
270
|
}
|
|
@@ -243,52 +273,57 @@ function toPascal(value) {
|
|
|
243
273
|
return value[0].toUpperCase() + value.slice(1);
|
|
244
274
|
}
|
|
245
275
|
function formatContextOptions(contextOptions, deviceName) {
|
|
246
|
-
let options = {
|
|
247
|
-
...contextOptions
|
|
248
|
-
};
|
|
249
|
-
// recordHAR is replaced with routeFromHAR in the generated code.
|
|
276
|
+
let options = { ...contextOptions };
|
|
250
277
|
delete options.recordHar;
|
|
251
|
-
const device = deviceName &&
|
|
278
|
+
const device = deviceName && import_deviceDescriptors.deviceDescriptors[deviceName];
|
|
252
279
|
if (!device) {
|
|
253
|
-
if (!Object.entries(options).length)
|
|
254
|
-
|
|
280
|
+
if (!Object.entries(options).length)
|
|
281
|
+
return "";
|
|
282
|
+
return formatObject(options, " ", "BrowserNewContextOptions");
|
|
255
283
|
}
|
|
256
|
-
options = (0,
|
|
257
|
-
if (!Object.entries(options).length)
|
|
258
|
-
|
|
284
|
+
options = (0, import_language.sanitizeDeviceOptions)(device, options);
|
|
285
|
+
if (!Object.entries(options).length)
|
|
286
|
+
return `playwright.Devices[${quote(deviceName)}]`;
|
|
287
|
+
return formatObject(options, " ", `BrowserNewContextOptions(playwright.Devices[${quote(deviceName)}])`);
|
|
259
288
|
}
|
|
260
289
|
class CSharpFormatter {
|
|
261
290
|
constructor(offset = 0) {
|
|
262
|
-
this._baseIndent = void 0;
|
|
263
|
-
this._baseOffset = void 0;
|
|
264
291
|
this._lines = [];
|
|
265
|
-
this._baseIndent =
|
|
266
|
-
this._baseOffset =
|
|
292
|
+
this._baseIndent = " ".repeat(4);
|
|
293
|
+
this._baseOffset = " ".repeat(offset);
|
|
267
294
|
}
|
|
268
295
|
prepend(text) {
|
|
269
|
-
this._lines = text.trim().split(
|
|
296
|
+
this._lines = text.trim().split("\n").map((line) => line.trim()).concat(this._lines);
|
|
270
297
|
}
|
|
271
298
|
add(text) {
|
|
272
|
-
this._lines.push(...text.trim().split(
|
|
299
|
+
this._lines.push(...text.trim().split("\n").map((line) => line.trim()));
|
|
273
300
|
}
|
|
274
301
|
newLine() {
|
|
275
|
-
this._lines.push(
|
|
302
|
+
this._lines.push("");
|
|
276
303
|
}
|
|
277
304
|
format() {
|
|
278
|
-
let spaces =
|
|
279
|
-
let previousLine =
|
|
280
|
-
return this._lines.map(line => {
|
|
281
|
-
if (line ===
|
|
282
|
-
|
|
283
|
-
|
|
305
|
+
let spaces = "";
|
|
306
|
+
let previousLine = "";
|
|
307
|
+
return this._lines.map((line) => {
|
|
308
|
+
if (line === "")
|
|
309
|
+
return line;
|
|
310
|
+
if (line.startsWith("}") || line.startsWith("]") || line.includes("});") || line === ");")
|
|
311
|
+
spaces = spaces.substring(this._baseIndent.length);
|
|
312
|
+
const extraSpaces = /^(for|while|if).*\(.*\)$/.test(previousLine) ? this._baseIndent : "";
|
|
284
313
|
previousLine = line;
|
|
285
314
|
line = spaces + extraSpaces + line;
|
|
286
|
-
if (line.endsWith(
|
|
287
|
-
|
|
315
|
+
if (line.endsWith("{") || line.endsWith("[") || line.endsWith("("))
|
|
316
|
+
spaces += this._baseIndent;
|
|
317
|
+
if (line.endsWith("));"))
|
|
318
|
+
spaces = spaces.substring(this._baseIndent.length);
|
|
288
319
|
return this._baseOffset + line;
|
|
289
|
-
}).join(
|
|
320
|
+
}).join("\n");
|
|
290
321
|
}
|
|
291
322
|
}
|
|
292
323
|
function quote(text) {
|
|
293
|
-
return (0,
|
|
294
|
-
}
|
|
324
|
+
return (0, import_utils.escapeWithQuotes)(text, '"');
|
|
325
|
+
}
|
|
326
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
327
|
+
0 && (module.exports = {
|
|
328
|
+
CSharpLanguageGenerator
|
|
329
|
+
});
|