@checkly/playwright-core 1.48.22 → 1.51.11-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ThirdPartyNotices.txt +60 -48
- package/bin/reinstall_chrome_beta_linux.sh +10 -8
- package/bin/reinstall_chrome_stable_linux.sh +10 -8
- package/bin/reinstall_msedge_beta_linux.sh +17 -9
- package/bin/reinstall_msedge_dev_linux.sh +17 -9
- package/bin/reinstall_msedge_stable_linux.sh +17 -9
- package/browsers.json +33 -12
- package/index.js +0 -1
- package/lib/androidServerImpl.js +5 -5
- package/lib/browserServerImpl.js +18 -9
- package/lib/checkly/secretsFilter.js +1 -1
- package/lib/cli/driver.js +6 -6
- package/lib/cli/program.js +38 -43
- package/lib/cli/programWithTestStub.js +2 -1
- package/lib/client/android.js +37 -58
- package/lib/client/artifact.js +4 -7
- package/lib/client/browser.js +10 -15
- package/lib/client/browserContext.js +69 -62
- package/lib/client/browserType.js +30 -64
- package/lib/client/channelOwner.js +53 -68
- package/lib/client/clientHelper.js +4 -6
- package/lib/client/clientInstrumentation.js +2 -0
- package/lib/client/clientStackTrace.js +65 -0
- package/lib/client/connection.js +48 -41
- package/lib/client/consoleMessage.js +4 -7
- package/lib/client/electron.js +10 -10
- package/lib/client/elementHandle.js +32 -33
- package/lib/client/errors.js +2 -2
- package/lib/client/eventEmitter.js +5 -8
- package/lib/client/fetch.js +61 -62
- package/lib/client/fileUtils.js +31 -0
- package/lib/client/frame.js +22 -23
- package/lib/client/harRouter.js +7 -9
- package/lib/client/jsHandle.js +3 -4
- package/lib/client/localUtils.js +24 -0
- package/lib/client/locator.js +27 -13
- package/lib/client/network.js +44 -37
- package/lib/client/page.js +50 -41
- package/lib/client/platform.js +71 -0
- package/lib/client/playwright.js +21 -1
- package/lib/client/selectors.js +8 -2
- package/lib/client/stream.js +2 -21
- package/lib/client/timeoutSettings.js +65 -0
- package/lib/client/tracing.js +29 -7
- package/lib/client/video.js +2 -2
- package/lib/client/waiter.js +19 -16
- package/lib/client/webSocket.js +106 -0
- package/lib/client/worker.js +4 -4
- package/lib/client/writableStream.js +2 -21
- package/lib/generated/consoleApiSource.js +1 -1
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/pollingRecorderSource.js +1 -1
- package/lib/generated/recorderSource.js +7 -0
- package/lib/generated/webSocketMockSource.js +1 -1
- package/lib/inProcessFactory.js +8 -3
- package/lib/outofprocess.js +12 -8
- package/lib/protocol/debug.js +1 -1
- package/lib/protocol/validator.js +77 -11
- package/lib/protocol/validatorPrimitives.js +1 -2
- package/lib/remote/playwrightConnection.js +21 -12
- package/lib/remote/playwrightServer.js +22 -8
- package/lib/server/android/android.js +17 -14
- package/lib/server/android/backendAdb.js +14 -14
- package/lib/server/artifact.js +3 -3
- package/lib/server/bidi/bidiBrowser.js +11 -8
- package/lib/server/bidi/bidiChromium.js +5 -4
- package/lib/server/bidi/bidiConnection.js +1 -3
- package/lib/server/bidi/bidiExecutionContext.js +71 -25
- package/lib/server/bidi/bidiFirefox.js +4 -3
- package/lib/server/bidi/bidiInput.js +11 -12
- package/lib/server/bidi/bidiNetworkManager.js +11 -12
- package/lib/server/bidi/bidiOverCdp.js +2 -2
- package/lib/server/bidi/bidiPage.js +39 -66
- package/lib/server/bidi/third_party/bidiKeyboard.js +9 -7
- package/lib/server/bidi/third_party/firefoxPrefs.js +19 -3
- package/lib/server/browser.js +2 -2
- package/lib/server/browserContext.js +60 -55
- package/lib/server/browserType.js +22 -18
- package/lib/server/callLog.js +79 -0
- package/lib/server/chromium/chromium.js +20 -16
- package/lib/server/chromium/chromiumSwitches.js +32 -9
- package/lib/server/chromium/crBrowser.js +25 -24
- package/lib/server/chromium/crConnection.js +2 -2
- package/lib/server/chromium/crCoverage.js +1 -1
- package/lib/server/chromium/crDevTools.js +1 -1
- package/lib/server/chromium/crDragDrop.js +1 -1
- package/lib/server/chromium/crExecutionContext.js +26 -35
- package/lib/server/chromium/crInput.js +17 -6
- package/lib/server/chromium/crNetworkManager.js +3 -3
- package/lib/server/chromium/crPage.js +43 -55
- package/lib/server/chromium/crPdf.js +1 -1
- package/lib/server/chromium/crProtocolHelper.js +3 -3
- package/lib/server/chromium/crServiceWorker.js +2 -2
- package/lib/server/chromium/videoRecorder.js +2 -2
- package/lib/server/clock.js +1 -1
- package/lib/server/codegen/csharp.js +21 -16
- package/lib/server/codegen/java.js +17 -9
- package/lib/server/codegen/javascript.js +37 -7
- package/lib/server/codegen/jsonl.js +1 -1
- package/lib/server/codegen/languages.js +2 -2
- package/lib/server/codegen/python.js +14 -17
- package/lib/server/debugController.js +23 -45
- package/lib/server/debugger.js +1 -1
- package/lib/server/deviceDescriptors.js +1 -1
- package/lib/server/deviceDescriptorsSource.json +131 -131
- package/lib/server/dispatchers/androidDispatcher.js +14 -3
- package/lib/server/dispatchers/artifactDispatcher.js +3 -3
- package/lib/server/dispatchers/browserContextDispatcher.js +21 -32
- package/lib/server/dispatchers/browserTypeDispatcher.js +1 -1
- package/lib/server/dispatchers/cdpSessionDispatcher.js +1 -1
- package/lib/server/dispatchers/debugControllerDispatcher.js +5 -3
- package/lib/server/dispatchers/dispatcher.js +27 -25
- package/lib/server/dispatchers/electronDispatcher.js +3 -3
- package/lib/server/dispatchers/elementHandlerDispatcher.js +7 -2
- package/lib/server/dispatchers/frameDispatcher.js +9 -3
- package/lib/server/dispatchers/jsonPipeDispatcher.js +2 -2
- package/lib/server/dispatchers/localUtilsDispatcher.js +25 -291
- package/lib/server/dispatchers/networkDispatchers.js +3 -3
- package/lib/server/dispatchers/pageDispatcher.js +10 -8
- package/lib/server/dispatchers/playwrightDispatcher.js +5 -5
- package/lib/server/dispatchers/streamDispatcher.js +4 -3
- package/lib/server/dispatchers/tracingDispatcher.js +10 -0
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +18 -18
- package/lib/server/dispatchers/writableStreamDispatcher.js +5 -6
- package/lib/server/dom.js +102 -48
- package/lib/server/download.js +1 -1
- package/lib/server/electron/electron.js +17 -16
- package/lib/server/errors.js +1 -1
- package/lib/server/fetch.js +49 -33
- package/lib/server/fileUploadUtils.js +7 -4
- package/lib/server/firefox/ffBrowser.js +17 -9
- package/lib/server/firefox/ffConnection.js +1 -1
- package/lib/server/firefox/ffExecutionContext.js +25 -29
- package/lib/server/firefox/ffInput.js +15 -4
- package/lib/server/firefox/ffNetworkManager.js +3 -3
- package/lib/server/firefox/ffPage.js +29 -50
- package/lib/server/firefox/firefox.js +7 -9
- package/lib/server/frameSelectors.js +1 -1
- package/lib/server/frames.js +65 -55
- package/lib/server/har/harRecorder.js +4 -4
- package/lib/server/har/harTracer.js +8 -9
- package/lib/server/harBackend.js +157 -0
- package/lib/server/helper.js +2 -2
- package/lib/server/index.js +1 -14
- package/lib/server/input.js +3 -4
- package/lib/server/instrumentation.js +2 -2
- package/lib/server/isomorphic/utilityScriptSerializers.js +3 -0
- package/lib/server/javascript.js +26 -33
- package/lib/server/launchApp.js +7 -7
- package/lib/server/localUtils.js +203 -0
- package/lib/server/network.js +5 -5
- package/lib/server/page.js +76 -37
- package/lib/server/pipeTransport.js +1 -1
- package/lib/server/playwright.js +5 -5
- package/lib/server/progress.js +1 -4
- package/lib/server/protocolError.js +1 -1
- package/lib/server/recorder/chat.js +177 -0
- package/lib/server/recorder/codeGenerator.js +154 -0
- package/lib/server/recorder/contextRecorder.js +9 -18
- package/lib/server/recorder/csharp.js +311 -0
- package/lib/server/recorder/java.js +249 -0
- package/lib/server/recorder/javascript.js +230 -0
- package/lib/server/recorder/jsonl.js +48 -0
- package/lib/server/recorder/language.js +45 -0
- package/lib/server/recorder/python.js +276 -0
- package/lib/server/recorder/recorderActions.js +6 -0
- package/lib/server/recorder/recorderApp.js +25 -28
- package/lib/server/recorder/recorderCollection.js +9 -21
- package/lib/server/recorder/recorderInTraceViewer.js +1 -1
- package/lib/server/recorder/recorderRunner.js +7 -3
- package/lib/server/recorder/recorderUtils.js +5 -28
- package/lib/server/recorder/throttledFile.js +3 -4
- package/lib/server/recorder/utils.js +46 -0
- package/lib/server/recorder.js +83 -43
- package/lib/server/registry/browserFetcher.js +10 -8
- package/lib/server/registry/dependencies.js +20 -20
- package/lib/server/registry/index.js +215 -61
- package/lib/server/registry/nativeDeps.js +10 -4
- package/lib/server/registry/oopDownloadBrowserMain.js +3 -3
- package/lib/server/screenshotter.js +1 -1
- package/lib/server/selectors.js +3 -3
- package/lib/server/socksClientCertificatesInterceptor.js +8 -8
- package/lib/server/socksInterceptor.js +8 -5
- package/lib/server/storageScript.js +160 -0
- package/lib/server/timeoutSettings.js +74 -0
- package/lib/server/trace/recorder/snapshotter.js +10 -20
- package/lib/server/trace/recorder/snapshotterInjected.js +26 -1
- package/lib/server/trace/recorder/tracing.js +108 -45
- package/lib/server/trace/test/inMemorySnapshotter.js +6 -6
- package/lib/server/trace/viewer/traceViewer.js +21 -7
- package/lib/server/transport.js +3 -2
- package/lib/server/utils/ascii.js +31 -0
- package/lib/server/utils/comparators.js +159 -0
- package/lib/server/utils/crypto.js +171 -0
- package/lib/server/utils/debug.js +38 -0
- package/lib/server/utils/debugLogger.js +93 -0
- package/lib/server/utils/env.js +53 -0
- package/lib/server/utils/eventsHelper.js +38 -0
- package/lib/server/utils/expectUtils.js +33 -0
- package/lib/server/utils/fileUtils.js +204 -0
- package/lib/server/utils/happyEyeballs.js +207 -0
- package/lib/server/utils/hostPlatform.js +145 -0
- package/lib/server/utils/httpServer.js +233 -0
- package/lib/server/utils/image_tools/colorUtils.js +98 -0
- package/lib/server/utils/image_tools/compare.js +108 -0
- package/lib/server/utils/image_tools/imageChannel.js +70 -0
- package/lib/server/utils/image_tools/stats.js +102 -0
- package/lib/server/utils/linuxUtils.js +58 -0
- package/lib/server/utils/network.js +160 -0
- package/lib/server/utils/nodePlatform.js +140 -0
- package/lib/server/utils/pipeTransport.js +82 -0
- package/lib/server/utils/processLauncher.js +248 -0
- package/lib/server/utils/profiler.js +52 -0
- package/lib/server/utils/socksProxy.js +570 -0
- package/lib/server/utils/spawnAsync.js +45 -0
- package/lib/server/utils/task.js +58 -0
- package/lib/server/utils/userAgent.js +91 -0
- package/lib/server/utils/wsServer.js +128 -0
- package/lib/server/utils/zipFile.js +75 -0
- package/lib/server/utils/zones.js +54 -0
- package/lib/server/webkit/webkit.js +4 -4
- package/lib/server/webkit/wkBrowser.js +10 -10
- package/lib/server/webkit/wkConnection.js +1 -1
- package/lib/server/webkit/wkExecutionContext.js +26 -30
- package/lib/server/webkit/wkInput.js +17 -7
- package/lib/server/webkit/wkInterceptableRequest.js +2 -2
- package/lib/server/webkit/wkPage.js +80 -66
- package/lib/server/webkit/wkProvisionalPage.js +1 -1
- package/lib/server/webkit/wkWorkers.js +2 -2
- package/lib/utils/fileUtils.js +1 -1
- package/lib/utils/glob.js +84 -0
- package/lib/utils/isomorphic/ariaSnapshot.js +392 -0
- package/lib/utils/isomorphic/assert.js +25 -0
- package/lib/utils/isomorphic/colors.js +65 -0
- package/lib/utils/isomorphic/cssParser.js +5 -5
- package/lib/utils/isomorphic/headers.js +52 -0
- package/lib/utils/isomorphic/locatorGenerators.js +38 -8
- package/lib/utils/isomorphic/locatorParser.js +19 -13
- package/lib/utils/isomorphic/manualPromise.js +107 -0
- package/lib/utils/isomorphic/mimeType.js +11 -3
- package/lib/utils/isomorphic/multimap.js +73 -0
- package/lib/utils/isomorphic/rtti.js +41 -0
- package/lib/utils/isomorphic/semaphore.js +51 -0
- package/lib/utils/isomorphic/stackTrace.js +169 -0
- package/lib/utils/isomorphic/stringUtils.js +31 -1
- package/lib/utils/isomorphic/time.js +25 -0
- package/lib/utils/isomorphic/timeoutRunner.js +66 -0
- package/lib/utils/isomorphic/traceUtils.js +23 -0
- package/lib/utils/isomorphic/types.js +5 -0
- package/lib/utils/isomorphic/urlMatch.js +7 -5
- package/lib/utils/mimeType.js +30 -0
- package/lib/utils/stackTrace.js +1 -1
- package/lib/utils.js +447 -0
- package/lib/utilsBundle.js +4 -29
- package/lib/utilsBundleImpl/index.js +188 -33
- package/lib/vite/htmlReport/index.html +20 -17
- package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +24 -0
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +184 -0
- package/lib/vite/recorder/assets/{index-BW-aOBcL.css → index-eHBmevrY.css} +1 -1
- package/lib/vite/recorder/index.html +2 -2
- package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +24 -0
- package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +1 -0
- package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +235 -0
- package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +25 -0
- package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
- package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +1 -0
- package/lib/vite/traceViewer/{embedded.BkvOrz5Z.js → embedded.DpNPH6mk.js} +2 -2
- package/lib/vite/traceViewer/embedded.html +6 -6
- package/lib/vite/traceViewer/index.CuE3SYGw.js +2 -0
- package/lib/vite/traceViewer/index.html +27 -9
- package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +1 -0
- package/lib/vite/traceViewer/{recorder.DNMfnSiu.js → recorder.BD-uZJs7.js} +2 -2
- package/lib/vite/traceViewer/recorder.html +4 -4
- package/lib/vite/traceViewer/sw.bundle.js +7888 -3
- package/lib/vite/traceViewer/{uiMode.CAYqod-m.css → uiMode.BatfzHMG.css} +1 -1
- package/lib/vite/traceViewer/uiMode.DHrNgddz.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +8 -7
- package/lib/vite/traceViewer/workbench.B9vIAzH9.css +1 -0
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +7 -7
- package/types/protocol.d.ts +820 -153
- package/types/types.d.ts +285 -82
- package/bin/PrintDeps.exe +0 -0
- package/bin/README.md +0 -2
- package/lib/vite/recorder/assets/codeMirrorModule-d0KhC1qL.js +0 -24
- package/lib/vite/recorder/assets/index-Bxxcmxlu.js +0 -42
- package/lib/vite/traceViewer/assets/codeMirrorModule-pBPtArIT.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-tzBrK1V4.js +0 -24
- package/lib/vite/traceViewer/assets/inspectorTab-BuJ3wAX_.js +0 -64
- package/lib/vite/traceViewer/assets/inspectorTab-Soeeuvzv.js +0 -64
- package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
- package/lib/vite/traceViewer/assets/workbench-DdmJ9AJV.js +0 -9
- package/lib/vite/traceViewer/assets/workbench-lypYlf00.js +0 -9
- package/lib/vite/traceViewer/embedded.DInvAijy.js +0 -2
- package/lib/vite/traceViewer/index.Dha3cgqs.js +0 -2
- package/lib/vite/traceViewer/index._Iolt-uE.js +0 -2
- package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +0 -1
- package/lib/vite/traceViewer/recorder.DTSaNaly.js +0 -2
- package/lib/vite/traceViewer/uiMode.BM7yhjzl.js +0 -5
- package/lib/vite/traceViewer/uiMode.Cr1tvTWS.js +0 -5
- package/lib/vite/traceViewer/workbench.DlsCx8k5.css +0 -1
- /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{embedded.w7WN2u1R.css → embedded.mLhjB5IF.css} +0 -0
- /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
- /package/lib/vite/traceViewer/{recorder.B_SY1GJM.css → recorder.tn0RQdqM.css} +0 -0
- /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Chat = void 0;
|
|
7
|
+
exports.asString = asString;
|
|
8
|
+
var _transport = require("../transport");
|
|
9
|
+
/**
|
|
10
|
+
* Copyright (c) Microsoft Corporation.
|
|
11
|
+
*
|
|
12
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
* you may not use this file except in compliance with the License.
|
|
14
|
+
* You may obtain a copy of the License at
|
|
15
|
+
*
|
|
16
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
*
|
|
18
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
* See the License for the specific language governing permissions and
|
|
22
|
+
* limitations under the License.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
class Chat {
|
|
26
|
+
constructor(wsEndpoint) {
|
|
27
|
+
this._history = [];
|
|
28
|
+
this._connectionPromise = void 0;
|
|
29
|
+
this._chatSinks = new Map();
|
|
30
|
+
this._wsEndpoint = void 0;
|
|
31
|
+
this._wsEndpoint = wsEndpoint;
|
|
32
|
+
}
|
|
33
|
+
clearHistory() {
|
|
34
|
+
this._history = [];
|
|
35
|
+
}
|
|
36
|
+
async post(prompt) {
|
|
37
|
+
await this._append('user', prompt);
|
|
38
|
+
let text = await asString(await this._post());
|
|
39
|
+
if (text.startsWith('```json') && text.endsWith('```')) text = text.substring('```json'.length, text.length - '```'.length);
|
|
40
|
+
for (let i = 0; i < 3; ++i) {
|
|
41
|
+
try {
|
|
42
|
+
return JSON.parse(text);
|
|
43
|
+
} catch (e) {
|
|
44
|
+
await this._append('user', String(e));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
throw new Error('Failed to parse response: ' + text);
|
|
48
|
+
}
|
|
49
|
+
async _append(user, content) {
|
|
50
|
+
this._history.push({
|
|
51
|
+
user,
|
|
52
|
+
content
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async _connection() {
|
|
56
|
+
if (!this._connectionPromise) {
|
|
57
|
+
this._connectionPromise = _transport.WebSocketTransport.connect(undefined, this._wsEndpoint).then(transport => {
|
|
58
|
+
return new Connection(transport, (method, params) => this._dispatchEvent(method, params), () => {});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return this._connectionPromise;
|
|
62
|
+
}
|
|
63
|
+
_dispatchEvent(method, params) {
|
|
64
|
+
if (method === 'chatChunk') {
|
|
65
|
+
const {
|
|
66
|
+
chatId,
|
|
67
|
+
chunk
|
|
68
|
+
} = params;
|
|
69
|
+
const chunkSink = this._chatSinks.get(chatId);
|
|
70
|
+
chunkSink(chunk);
|
|
71
|
+
if (!chunk) this._chatSinks.delete(chatId);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async _post() {
|
|
75
|
+
const connection = await this._connection();
|
|
76
|
+
const result = await connection.send('chat', {
|
|
77
|
+
history: this._history
|
|
78
|
+
});
|
|
79
|
+
const {
|
|
80
|
+
chatId
|
|
81
|
+
} = result;
|
|
82
|
+
const {
|
|
83
|
+
iterable,
|
|
84
|
+
addChunk
|
|
85
|
+
} = iterablePump();
|
|
86
|
+
this._chatSinks.set(chatId, addChunk);
|
|
87
|
+
return iterable;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.Chat = Chat;
|
|
91
|
+
async function asString(stream) {
|
|
92
|
+
let result = '';
|
|
93
|
+
for await (const chunk of stream) result += chunk;
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
function iterablePump() {
|
|
97
|
+
let controller;
|
|
98
|
+
const stream = new ReadableStream({
|
|
99
|
+
start: c => controller = c
|
|
100
|
+
});
|
|
101
|
+
const iterable = async function* () {
|
|
102
|
+
const reader = stream.getReader();
|
|
103
|
+
while (true) {
|
|
104
|
+
const {
|
|
105
|
+
done,
|
|
106
|
+
value
|
|
107
|
+
} = await reader.read();
|
|
108
|
+
if (done) break;
|
|
109
|
+
yield value;
|
|
110
|
+
}
|
|
111
|
+
}();
|
|
112
|
+
return {
|
|
113
|
+
iterable,
|
|
114
|
+
addChunk: chunk => {
|
|
115
|
+
if (chunk) controller.enqueue(chunk);else controller.close();
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
class Connection {
|
|
120
|
+
constructor(transport, onEvent, onClose) {
|
|
121
|
+
this._transport = void 0;
|
|
122
|
+
this._lastId = 0;
|
|
123
|
+
this._closed = false;
|
|
124
|
+
this._pending = new Map();
|
|
125
|
+
this._onEvent = void 0;
|
|
126
|
+
this._onClose = void 0;
|
|
127
|
+
this._transport = transport;
|
|
128
|
+
this._onEvent = onEvent;
|
|
129
|
+
this._onClose = onClose;
|
|
130
|
+
this._transport.onmessage = this._dispatchMessage.bind(this);
|
|
131
|
+
this._transport.onclose = this._close.bind(this);
|
|
132
|
+
}
|
|
133
|
+
send(method, params) {
|
|
134
|
+
const id = this._lastId++;
|
|
135
|
+
const message = {
|
|
136
|
+
id,
|
|
137
|
+
method,
|
|
138
|
+
params
|
|
139
|
+
};
|
|
140
|
+
this._transport.send(message);
|
|
141
|
+
return new Promise((resolve, reject) => {
|
|
142
|
+
this._pending.set(id, {
|
|
143
|
+
resolve,
|
|
144
|
+
reject
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
_dispatchMessage(message) {
|
|
149
|
+
if (message.id === undefined) {
|
|
150
|
+
this._onEvent(message.method, message.params);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const callback = this._pending.get(message.id);
|
|
154
|
+
this._pending.delete(message.id);
|
|
155
|
+
if (!callback) return;
|
|
156
|
+
if (message.error) {
|
|
157
|
+
callback.reject(new Error(message.error.message));
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
callback.resolve(message.result);
|
|
161
|
+
}
|
|
162
|
+
_close() {
|
|
163
|
+
this._closed = true;
|
|
164
|
+
this._transport.onmessage = undefined;
|
|
165
|
+
this._transport.onclose = undefined;
|
|
166
|
+
for (const {
|
|
167
|
+
reject
|
|
168
|
+
} of this._pending.values()) reject(new Error('Connection closed'));
|
|
169
|
+
this._onClose();
|
|
170
|
+
}
|
|
171
|
+
isClosed() {
|
|
172
|
+
return this._closed;
|
|
173
|
+
}
|
|
174
|
+
close() {
|
|
175
|
+
if (!this._closed) this._transport.close();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CodeGenerator = void 0;
|
|
7
|
+
var _events = require("events");
|
|
8
|
+
/**
|
|
9
|
+
* Copyright (c) Microsoft Corporation.
|
|
10
|
+
*
|
|
11
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
12
|
+
* you may not use this file except in compliance with the License.
|
|
13
|
+
* You may obtain a copy of the License at
|
|
14
|
+
*
|
|
15
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
+
*
|
|
17
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
18
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
+
* See the License for the specific language governing permissions and
|
|
21
|
+
* limitations under the License.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
class CodeGenerator extends _events.EventEmitter {
|
|
25
|
+
constructor(browserName, enabled, launchOptions, contextOptions, deviceName, saveStorage) {
|
|
26
|
+
super();
|
|
27
|
+
|
|
28
|
+
// Make a copy of options to modify them later.
|
|
29
|
+
this._currentAction = null;
|
|
30
|
+
this._lastAction = null;
|
|
31
|
+
this._actions = [];
|
|
32
|
+
this._enabled = void 0;
|
|
33
|
+
this._options = void 0;
|
|
34
|
+
launchOptions = {
|
|
35
|
+
headless: false,
|
|
36
|
+
...launchOptions
|
|
37
|
+
};
|
|
38
|
+
contextOptions = {
|
|
39
|
+
...contextOptions
|
|
40
|
+
};
|
|
41
|
+
this._enabled = enabled;
|
|
42
|
+
this._options = {
|
|
43
|
+
browserName,
|
|
44
|
+
launchOptions,
|
|
45
|
+
contextOptions,
|
|
46
|
+
deviceName,
|
|
47
|
+
saveStorage
|
|
48
|
+
};
|
|
49
|
+
this.restart();
|
|
50
|
+
}
|
|
51
|
+
restart() {
|
|
52
|
+
this._currentAction = null;
|
|
53
|
+
this._lastAction = null;
|
|
54
|
+
this._actions = [];
|
|
55
|
+
this.emit('change');
|
|
56
|
+
}
|
|
57
|
+
setEnabled(enabled) {
|
|
58
|
+
this._enabled = enabled;
|
|
59
|
+
}
|
|
60
|
+
addAction(action) {
|
|
61
|
+
if (!this._enabled) return;
|
|
62
|
+
this.willPerformAction(action);
|
|
63
|
+
this.didPerformAction(action);
|
|
64
|
+
}
|
|
65
|
+
willPerformAction(action) {
|
|
66
|
+
if (!this._enabled) return;
|
|
67
|
+
this._currentAction = action;
|
|
68
|
+
}
|
|
69
|
+
performedActionFailed(action) {
|
|
70
|
+
if (!this._enabled) return;
|
|
71
|
+
if (this._currentAction === action) this._currentAction = null;
|
|
72
|
+
}
|
|
73
|
+
didPerformAction(actionInContext) {
|
|
74
|
+
if (!this._enabled) return;
|
|
75
|
+
const action = actionInContext.action;
|
|
76
|
+
let eraseLastAction = false;
|
|
77
|
+
if (this._lastAction && this._lastAction.frame.pageAlias === actionInContext.frame.pageAlias) {
|
|
78
|
+
const lastAction = this._lastAction.action;
|
|
79
|
+
// We augment last action based on the type.
|
|
80
|
+
if (this._lastAction && action.name === 'fill' && lastAction.name === 'fill') {
|
|
81
|
+
if (action.selector === lastAction.selector) eraseLastAction = true;
|
|
82
|
+
}
|
|
83
|
+
if (lastAction && action.name === 'click' && lastAction.name === 'click') {
|
|
84
|
+
if (action.selector === lastAction.selector && action.clickCount > lastAction.clickCount) eraseLastAction = true;
|
|
85
|
+
}
|
|
86
|
+
if (lastAction && action.name === 'navigate' && lastAction.name === 'navigate') {
|
|
87
|
+
if (action.url === lastAction.url) {
|
|
88
|
+
// Already at a target URL.
|
|
89
|
+
this._currentAction = null;
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Check and uncheck erase click.
|
|
94
|
+
if (lastAction && (action.name === 'check' || action.name === 'uncheck') && lastAction.name === 'click') {
|
|
95
|
+
if (action.selector === lastAction.selector) eraseLastAction = true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
this._lastAction = actionInContext;
|
|
99
|
+
this._currentAction = null;
|
|
100
|
+
if (eraseLastAction) this._actions.pop();
|
|
101
|
+
this._actions.push(actionInContext);
|
|
102
|
+
this.emit('change');
|
|
103
|
+
}
|
|
104
|
+
commitLastAction() {
|
|
105
|
+
if (!this._enabled) return;
|
|
106
|
+
const action = this._lastAction;
|
|
107
|
+
if (action) action.committed = true;
|
|
108
|
+
}
|
|
109
|
+
signal(pageAlias, frame, signal) {
|
|
110
|
+
if (!this._enabled) return;
|
|
111
|
+
|
|
112
|
+
// Signal either arrives while action is being performed or shortly after.
|
|
113
|
+
if (this._currentAction) {
|
|
114
|
+
this._currentAction.action.signals.push(signal);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (this._lastAction && !this._lastAction.committed) {
|
|
118
|
+
const signals = this._lastAction.action.signals;
|
|
119
|
+
if (signal.name === 'navigation' && signals.length && signals[signals.length - 1].name === 'download') return;
|
|
120
|
+
if (signal.name === 'download' && signals.length && signals[signals.length - 1].name === 'navigation') signals.length = signals.length - 1;
|
|
121
|
+
this._lastAction.action.signals.push(signal);
|
|
122
|
+
this.emit('change');
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (signal.name === 'navigation' && frame._page.mainFrame() === frame) {
|
|
126
|
+
this.addAction({
|
|
127
|
+
frame: {
|
|
128
|
+
pageAlias,
|
|
129
|
+
isMainFrame: true
|
|
130
|
+
},
|
|
131
|
+
committed: true,
|
|
132
|
+
action: {
|
|
133
|
+
name: 'navigate',
|
|
134
|
+
url: frame.url(),
|
|
135
|
+
signals: []
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
generateStructure(languageGenerator) {
|
|
141
|
+
const header = languageGenerator.generateHeader(this._options);
|
|
142
|
+
const footer = languageGenerator.generateFooter(this._options.saveStorage);
|
|
143
|
+
const actions = this._actions.map(a => languageGenerator.generateAction(a)).filter(Boolean);
|
|
144
|
+
const text = [header, ...actions, footer].join('\n');
|
|
145
|
+
return {
|
|
146
|
+
header,
|
|
147
|
+
footer,
|
|
148
|
+
actions,
|
|
149
|
+
text
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
exports.CodeGenerator = CodeGenerator;
|
|
154
|
+
//# sourceMappingURL=codeGenerator.js.map
|
|
@@ -6,18 +6,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.ContextRecorder = void 0;
|
|
7
7
|
exports.generateFrameSelector = generateFrameSelector;
|
|
8
8
|
var _events = require("events");
|
|
9
|
+
var _recorderCollection = require("./recorderCollection");
|
|
9
10
|
var recorderSource = _interopRequireWildcard(require("../../generated/pollingRecorderSource"));
|
|
10
11
|
var _utils = require("../../utils");
|
|
11
|
-
var _timeoutRunner = require("../../utils/timeoutRunner");
|
|
12
|
+
var _timeoutRunner = require("../../utils/isomorphic/timeoutRunner");
|
|
12
13
|
var _browserContext = require("../browserContext");
|
|
13
14
|
var _languages = require("../codegen/languages");
|
|
14
15
|
var _frames = require("../frames");
|
|
15
16
|
var _page = require("../page");
|
|
16
17
|
var _throttledFile = require("./throttledFile");
|
|
17
|
-
var _recorderCollection = require("./recorderCollection");
|
|
18
18
|
var _language = require("../codegen/language");
|
|
19
19
|
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); }
|
|
20
|
-
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 &&
|
|
20
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
21
21
|
/**
|
|
22
22
|
* Copyright (c) Microsoft Corporation.
|
|
23
23
|
*
|
|
@@ -35,7 +35,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
35
35
|
*/
|
|
36
36
|
|
|
37
37
|
class ContextRecorder extends _events.EventEmitter {
|
|
38
|
-
constructor(
|
|
38
|
+
constructor(context, params, delegate) {
|
|
39
39
|
super();
|
|
40
40
|
this._collection = void 0;
|
|
41
41
|
this._pageAliases = new Map();
|
|
@@ -49,8 +49,6 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
49
49
|
this._throttledOutputFile = null;
|
|
50
50
|
this._orderedLanguages = [];
|
|
51
51
|
this._listeners = [];
|
|
52
|
-
this._codegenMode = void 0;
|
|
53
|
-
this._codegenMode = codegenMode;
|
|
54
52
|
this._context = context;
|
|
55
53
|
this._params = params;
|
|
56
54
|
this._delegate = delegate;
|
|
@@ -112,7 +110,7 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
112
110
|
var _this$_throttledOutpu3;
|
|
113
111
|
(_this$_throttledOutpu3 = this._throttledOutputFile) === null || _this$_throttledOutpu3 === void 0 || _this$_throttledOutpu3.flush();
|
|
114
112
|
}));
|
|
115
|
-
this.setEnabled(
|
|
113
|
+
this.setEnabled(params.mode === 'recording');
|
|
116
114
|
}
|
|
117
115
|
setOutput(codegenId, outputFile) {
|
|
118
116
|
var _this$_collection;
|
|
@@ -145,14 +143,6 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
145
143
|
}
|
|
146
144
|
setEnabled(enabled) {
|
|
147
145
|
this._collection.setEnabled(enabled);
|
|
148
|
-
if (this._codegenMode === 'trace-events') {
|
|
149
|
-
if (enabled) this._context.tracing.startChunk({
|
|
150
|
-
name: 'trace',
|
|
151
|
-
title: 'trace'
|
|
152
|
-
}).catch(() => {});else this._context.tracing.stopChunk({
|
|
153
|
-
mode: 'discard'
|
|
154
|
-
}).catch(() => {});
|
|
155
|
-
}
|
|
156
146
|
}
|
|
157
147
|
dispose() {
|
|
158
148
|
_utils.eventsHelper.removeEventListeners(this._listeners);
|
|
@@ -198,6 +188,9 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
198
188
|
for (const page of this._context.pages()) this._onFrameNavigated(page.mainFrame(), page);
|
|
199
189
|
}
|
|
200
190
|
}
|
|
191
|
+
runTask(task) {
|
|
192
|
+
// TODO: implement
|
|
193
|
+
}
|
|
201
194
|
_describeMainFrame(page) {
|
|
202
195
|
return {
|
|
203
196
|
pageAlias: this._pageAliases.get(page),
|
|
@@ -289,9 +282,7 @@ async function generateFrameSelectorInParent(parent, frame) {
|
|
|
289
282
|
return injected.generateSelectorSimple(element);
|
|
290
283
|
}, frameElement);
|
|
291
284
|
return selector;
|
|
292
|
-
} catch (e) {
|
|
293
|
-
return e.toString();
|
|
294
|
-
}
|
|
285
|
+
} catch (e) {}
|
|
295
286
|
}, (0, _utils.monotonicTime)() + 2000);
|
|
296
287
|
if (!result.timedOut && result.result) return result.result;
|
|
297
288
|
if (frame.name()) return `iframe[name=${(0, _utils.quoteCSSAttributeValue)(frame.name())}]`;
|