@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
|
@@ -9,15 +9,11 @@ exports.convertSelectOptionValues = convertSelectOptionValues;
|
|
|
9
9
|
exports.determineScreenshotType = determineScreenshotType;
|
|
10
10
|
var _frame = require("./frame");
|
|
11
11
|
var _jsHandle = require("./jsHandle");
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var _utils = require("../utils");
|
|
16
|
-
var _fileUtils = require("../utils/fileUtils");
|
|
12
|
+
var _assert = require("../utils/isomorphic/assert");
|
|
13
|
+
var _fileUtils = require("./fileUtils");
|
|
14
|
+
var _rtti = require("../utils/isomorphic/rtti");
|
|
17
15
|
var _writableStream = require("./writableStream");
|
|
18
|
-
var
|
|
19
|
-
var _util = require("util");
|
|
20
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
+
var _mimeType = require("../utils/isomorphic/mimeType");
|
|
21
17
|
/**
|
|
22
18
|
* Copyright (c) Microsoft Corporation.
|
|
23
19
|
*
|
|
@@ -34,7 +30,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
34
30
|
* limitations under the License.
|
|
35
31
|
*/
|
|
36
32
|
|
|
37
|
-
const pipelineAsync = (0, _util.promisify)(_stream.pipeline);
|
|
38
33
|
class ElementHandle extends _jsHandle.JSHandle {
|
|
39
34
|
static from(handle) {
|
|
40
35
|
return handle._object;
|
|
@@ -56,6 +51,10 @@ class ElementHandle extends _jsHandle.JSHandle {
|
|
|
56
51
|
async contentFrame() {
|
|
57
52
|
return _frame.Frame.fromNullable((await this._elementChannel.contentFrame()).frame);
|
|
58
53
|
}
|
|
54
|
+
async _generateLocatorString() {
|
|
55
|
+
const value = (await this._elementChannel.generateLocatorString()).value;
|
|
56
|
+
return value === undefined ? null : value;
|
|
57
|
+
}
|
|
59
58
|
async getAttribute(name) {
|
|
60
59
|
const value = (await this._elementChannel.getAttribute({
|
|
61
60
|
name
|
|
@@ -133,7 +132,7 @@ class ElementHandle extends _jsHandle.JSHandle {
|
|
|
133
132
|
async setInputFiles(files, options = {}) {
|
|
134
133
|
const frame = await this.ownerFrame();
|
|
135
134
|
if (!frame) throw new Error('Cannot set input files to detached element');
|
|
136
|
-
const converted = await convertInputFiles(files, frame.page().context());
|
|
135
|
+
const converted = await convertInputFiles(this._platform, files, frame.page().context());
|
|
137
136
|
await this._elementChannel.setInputFiles({
|
|
138
137
|
...converted,
|
|
139
138
|
...options
|
|
@@ -168,21 +167,22 @@ class ElementHandle extends _jsHandle.JSHandle {
|
|
|
168
167
|
return value === undefined ? null : value;
|
|
169
168
|
}
|
|
170
169
|
async screenshot(options = {}) {
|
|
170
|
+
const mask = options.mask;
|
|
171
171
|
const copy = {
|
|
172
172
|
...options,
|
|
173
173
|
mask: undefined
|
|
174
174
|
};
|
|
175
175
|
if (!copy.type) copy.type = determineScreenshotType(options);
|
|
176
|
-
if (
|
|
177
|
-
copy.mask =
|
|
176
|
+
if (mask) {
|
|
177
|
+
copy.mask = mask.map(locator => ({
|
|
178
178
|
frame: locator._frame._channel,
|
|
179
179
|
selector: locator._selector
|
|
180
180
|
}));
|
|
181
181
|
}
|
|
182
182
|
const result = await this._elementChannel.screenshot(copy);
|
|
183
183
|
if (options.path) {
|
|
184
|
-
await (0, _fileUtils.mkdirIfNeeded)(options.path);
|
|
185
|
-
await
|
|
184
|
+
await (0, _fileUtils.mkdirIfNeeded)(this._platform, options.path);
|
|
185
|
+
await this._platform.fs().promises.writeFile(options.path, result.binary);
|
|
186
186
|
}
|
|
187
187
|
return result.binary;
|
|
188
188
|
}
|
|
@@ -234,11 +234,11 @@ function convertSelectOptionValues(values) {
|
|
|
234
234
|
if (values === null) return {};
|
|
235
235
|
if (!Array.isArray(values)) values = [values];
|
|
236
236
|
if (!values.length) return {};
|
|
237
|
-
for (let i = 0; i < values.length; i++) (0,
|
|
237
|
+
for (let i = 0; i < values.length; i++) (0, _assert.assert)(values[i] !== null, `options[${i}]: expected object, got null`);
|
|
238
238
|
if (values[0] instanceof ElementHandle) return {
|
|
239
239
|
elements: values.map(v => v._elementChannel)
|
|
240
240
|
};
|
|
241
|
-
if ((0,
|
|
241
|
+
if ((0, _rtti.isString)(values[0])) return {
|
|
242
242
|
options: values.map(valueOrLabel => ({
|
|
243
243
|
valueOrLabel
|
|
244
244
|
}))
|
|
@@ -250,50 +250,49 @@ function convertSelectOptionValues(values) {
|
|
|
250
250
|
function filePayloadExceedsSizeLimit(payloads) {
|
|
251
251
|
return payloads.reduce((size, item) => size + (item.buffer ? item.buffer.byteLength : 0), 0) >= _fileUtils.fileUploadSizeLimit;
|
|
252
252
|
}
|
|
253
|
-
async function resolvePathsAndDirectoryForInputFiles(items) {
|
|
254
|
-
var
|
|
253
|
+
async function resolvePathsAndDirectoryForInputFiles(platform, items) {
|
|
254
|
+
var _localPaths;
|
|
255
255
|
let localPaths;
|
|
256
256
|
let localDirectory;
|
|
257
257
|
for (const item of items) {
|
|
258
|
-
const stat = await
|
|
258
|
+
const stat = await platform.fs().promises.stat(item);
|
|
259
259
|
if (stat.isDirectory()) {
|
|
260
260
|
if (localDirectory) throw new Error('Multiple directories are not supported');
|
|
261
|
-
localDirectory =
|
|
261
|
+
localDirectory = platform.path().resolve(item);
|
|
262
262
|
} else {
|
|
263
|
-
|
|
264
|
-
(
|
|
265
|
-
localPaths.push(_path.default.resolve(item));
|
|
263
|
+
localPaths !== null && localPaths !== void 0 ? localPaths : localPaths = [];
|
|
264
|
+
localPaths.push(platform.path().resolve(item));
|
|
266
265
|
}
|
|
267
266
|
}
|
|
268
|
-
if ((
|
|
267
|
+
if ((_localPaths = localPaths) !== null && _localPaths !== void 0 && _localPaths.length && localDirectory) throw new Error('File paths must be all files or a single directory');
|
|
269
268
|
return [localPaths, localDirectory];
|
|
270
269
|
}
|
|
271
|
-
async function convertInputFiles(files, context) {
|
|
270
|
+
async function convertInputFiles(platform, files, context) {
|
|
272
271
|
const items = Array.isArray(files) ? files.slice() : [files];
|
|
273
272
|
if (items.some(item => typeof item === 'string')) {
|
|
274
273
|
if (!items.every(item => typeof item === 'string')) throw new Error('File paths cannot be mixed with buffers');
|
|
275
|
-
const [localPaths, localDirectory] = await resolvePathsAndDirectoryForInputFiles(items);
|
|
274
|
+
const [localPaths, localDirectory] = await resolvePathsAndDirectoryForInputFiles(platform, items);
|
|
276
275
|
if (context._connection.isRemote()) {
|
|
277
|
-
const files = localDirectory ? (await
|
|
276
|
+
const files = localDirectory ? (await platform.fs().promises.readdir(localDirectory, {
|
|
278
277
|
withFileTypes: true,
|
|
279
278
|
recursive: true
|
|
280
|
-
})).filter(f => f.isFile()).map(f =>
|
|
279
|
+
})).filter(f => f.isFile()).map(f => platform.path().join(f.path, f.name)) : localPaths;
|
|
281
280
|
const {
|
|
282
281
|
writableStreams,
|
|
283
282
|
rootDir
|
|
284
283
|
} = await context._wrapApiCall(async () => context._channel.createTempFiles({
|
|
285
|
-
rootDirName: localDirectory ?
|
|
284
|
+
rootDirName: localDirectory ? platform.path().basename(localDirectory) : undefined,
|
|
286
285
|
items: await Promise.all(files.map(async file => {
|
|
287
|
-
const lastModifiedMs = (await
|
|
286
|
+
const lastModifiedMs = (await platform.fs().promises.stat(file)).mtimeMs;
|
|
288
287
|
return {
|
|
289
|
-
name: localDirectory ?
|
|
288
|
+
name: localDirectory ? platform.path().relative(localDirectory, file) : platform.path().basename(file),
|
|
290
289
|
lastModifiedMs
|
|
291
290
|
};
|
|
292
291
|
}))
|
|
293
292
|
}), true);
|
|
294
293
|
for (let i = 0; i < files.length; i++) {
|
|
295
294
|
const writable = _writableStream.WritableStream.from(writableStreams[i]);
|
|
296
|
-
await
|
|
295
|
+
await platform.streamFile(files[i], writable.stream());
|
|
297
296
|
}
|
|
298
297
|
return {
|
|
299
298
|
directoryStream: rootDir,
|
|
@@ -313,7 +312,7 @@ async function convertInputFiles(files, context) {
|
|
|
313
312
|
}
|
|
314
313
|
function determineScreenshotType(options) {
|
|
315
314
|
if (options.path) {
|
|
316
|
-
const mimeType =
|
|
315
|
+
const mimeType = (0, _mimeType.getMimeTypeForPath)(options.path);
|
|
317
316
|
if (mimeType === 'image/png') return 'png';else if (mimeType === 'image/jpeg') return 'jpeg';
|
|
318
317
|
throw new Error(`path: unsupported mime type "${mimeType}"`);
|
|
319
318
|
}
|
package/lib/client/errors.js
CHANGED
|
@@ -7,8 +7,8 @@ exports.TimeoutError = exports.TargetClosedError = void 0;
|
|
|
7
7
|
exports.isTargetClosedError = isTargetClosedError;
|
|
8
8
|
exports.parseError = parseError;
|
|
9
9
|
exports.serializeError = serializeError;
|
|
10
|
-
var _utils = require("../utils");
|
|
11
10
|
var _serializers = require("../protocol/serializers");
|
|
11
|
+
var _rtti = require("../utils/isomorphic/rtti");
|
|
12
12
|
/**
|
|
13
13
|
* Copyright (c) Microsoft Corporation.
|
|
14
14
|
*
|
|
@@ -42,7 +42,7 @@ function isTargetClosedError(error) {
|
|
|
42
42
|
return error instanceof TargetClosedError;
|
|
43
43
|
}
|
|
44
44
|
function serializeError(e) {
|
|
45
|
-
if ((0,
|
|
45
|
+
if ((0, _rtti.isError)(e)) return {
|
|
46
46
|
error: {
|
|
47
47
|
message: e.message,
|
|
48
48
|
stack: e.stack,
|
|
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.EventEmitter = void 0;
|
|
7
|
-
var _events = require("events");
|
|
8
|
-
var _utils = require("../utils");
|
|
9
7
|
/**
|
|
10
8
|
* Copyright Joyent, Inc. and other Node contributors.
|
|
11
9
|
* Modifications copyright (c) Microsoft Corporation.
|
|
@@ -31,12 +29,14 @@ var _utils = require("../utils");
|
|
|
31
29
|
*/
|
|
32
30
|
|
|
33
31
|
class EventEmitter {
|
|
34
|
-
constructor() {
|
|
32
|
+
constructor(platform) {
|
|
35
33
|
this._events = undefined;
|
|
36
34
|
this._eventsCount = 0;
|
|
37
35
|
this._maxListeners = undefined;
|
|
38
36
|
this._pendingHandlers = new Map();
|
|
39
37
|
this._rejectionHandler = void 0;
|
|
38
|
+
this._platform = void 0;
|
|
39
|
+
this._platform = platform;
|
|
40
40
|
if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {
|
|
41
41
|
this._events = Object.create(null);
|
|
42
42
|
this._eventsCount = 0;
|
|
@@ -51,7 +51,7 @@ class EventEmitter {
|
|
|
51
51
|
return this;
|
|
52
52
|
}
|
|
53
53
|
getMaxListeners() {
|
|
54
|
-
return this._maxListeners === undefined ?
|
|
54
|
+
return this._maxListeners === undefined ? this._platform.defaultMaxListeners() : this._maxListeners;
|
|
55
55
|
}
|
|
56
56
|
emit(type, ...args) {
|
|
57
57
|
const events = this._events;
|
|
@@ -130,7 +130,7 @@ class EventEmitter {
|
|
|
130
130
|
w.emitter = this;
|
|
131
131
|
w.type = type;
|
|
132
132
|
w.count = existing.length;
|
|
133
|
-
if (!
|
|
133
|
+
if (!this._platform.isUnderTest()) {
|
|
134
134
|
// eslint-disable-next-line no-console
|
|
135
135
|
console.warn(w);
|
|
136
136
|
}
|
|
@@ -191,14 +191,11 @@ class EventEmitter {
|
|
|
191
191
|
if (options.behavior === 'wait') {
|
|
192
192
|
const errors = [];
|
|
193
193
|
this._rejectionHandler = error => errors.push(error);
|
|
194
|
-
// eslint-disable-next-line internal-playwright/await-promise-in-class-returns
|
|
195
194
|
return this._waitFor(type).then(() => {
|
|
196
195
|
if (errors.length) throw errors[0];
|
|
197
196
|
});
|
|
198
197
|
}
|
|
199
198
|
if (options.behavior === 'ignoreErrors') this._rejectionHandler = () => {};
|
|
200
|
-
|
|
201
|
-
// eslint-disable-next-line internal-playwright/await-promise-in-class-returns
|
|
202
199
|
return Promise.resolve();
|
|
203
200
|
}
|
|
204
201
|
_removeAllListeners(type) {
|
package/lib/client/fetch.js
CHANGED
|
@@ -4,18 +4,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.APIResponse = exports.APIRequestContext = exports.APIRequest = void 0;
|
|
7
|
-
var
|
|
8
|
-
var _path = _interopRequireDefault(require("path"));
|
|
9
|
-
var util = _interopRequireWildcard(require("util"));
|
|
10
|
-
var _utils = require("../utils");
|
|
11
|
-
var _fileUtils = require("../utils/fileUtils");
|
|
7
|
+
var _browserContext = require("./browserContext");
|
|
12
8
|
var _channelOwner = require("./channelOwner");
|
|
9
|
+
var _errors = require("./errors");
|
|
13
10
|
var _network = require("./network");
|
|
14
11
|
var _tracing = require("./tracing");
|
|
15
|
-
var
|
|
16
|
-
var
|
|
12
|
+
var _assert = require("../utils/isomorphic/assert");
|
|
13
|
+
var _fileUtils = require("./fileUtils");
|
|
14
|
+
var _headers = require("../utils/isomorphic/headers");
|
|
15
|
+
var _rtti = require("../utils/isomorphic/rtti");
|
|
17
16
|
var _fetch = require("../checkly/fetch");
|
|
18
|
-
let _Symbol$asyncDispose, _Symbol$asyncDispose2, _util$inspect$custom;
|
|
19
17
|
/**
|
|
20
18
|
* Copyright (c) Microsoft Corporation.
|
|
21
19
|
*
|
|
@@ -31,42 +29,37 @@ let _Symbol$asyncDispose, _Symbol$asyncDispose2, _util$inspect$custom;
|
|
|
31
29
|
* See the License for the specific language governing permissions and
|
|
32
30
|
* limitations under the License.
|
|
33
31
|
*/
|
|
34
|
-
|
|
35
|
-
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; }
|
|
36
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
32
|
+
|
|
37
33
|
class APIRequest {
|
|
38
34
|
constructor(playwright) {
|
|
39
35
|
this._playwright = void 0;
|
|
40
36
|
this._contexts = new Set();
|
|
41
|
-
// Instrumentation.
|
|
42
|
-
this._defaultContextOptions = void 0;
|
|
43
37
|
this._playwright = playwright;
|
|
44
38
|
}
|
|
45
39
|
async newContext(options = {}) {
|
|
46
|
-
var _this$
|
|
40
|
+
var _this$_playwright$_de, _this$_playwright$_de2;
|
|
47
41
|
options = {
|
|
48
|
-
...this._defaultContextOptions,
|
|
42
|
+
...this._playwright._defaultContextOptions,
|
|
43
|
+
timeout: this._playwright._defaultContextTimeout,
|
|
49
44
|
...options
|
|
50
45
|
};
|
|
51
|
-
const storageState = typeof options.storageState === 'string' ? JSON.parse(await
|
|
52
|
-
// We do not expose tracesDir in the API, so do not allow options to accidentally override it.
|
|
53
|
-
const tracesDir = (_this$_defaultContext = this._defaultContextOptions) === null || _this$_defaultContext === void 0 ? void 0 : _this$_defaultContext.tracesDir;
|
|
46
|
+
const storageState = typeof options.storageState === 'string' ? JSON.parse(await this._playwright._platform.fs().promises.readFile(options.storageState, 'utf8')) : options.storageState;
|
|
54
47
|
const context = APIRequestContext.from((await this._playwright._channel.newRequest({
|
|
55
48
|
...options,
|
|
56
|
-
extraHTTPHeaders: options.extraHTTPHeaders ? (0,
|
|
49
|
+
extraHTTPHeaders: options.extraHTTPHeaders ? (0, _headers.headersObjectToArray)(options.extraHTTPHeaders) : undefined,
|
|
57
50
|
storageState,
|
|
58
|
-
tracesDir,
|
|
59
|
-
|
|
51
|
+
tracesDir: (_this$_playwright$_de = this._playwright._defaultLaunchOptions) === null || _this$_playwright$_de === void 0 ? void 0 : _this$_playwright$_de.tracesDir,
|
|
52
|
+
// We do not expose tracesDir in the API, so do not allow options to accidentally override it.
|
|
53
|
+
clientCertificates: await (0, _browserContext.toClientCertificatesProtocol)(this._playwright._platform, options.clientCertificates)
|
|
60
54
|
})).request);
|
|
61
55
|
this._contexts.add(context);
|
|
62
56
|
context._request = this;
|
|
63
|
-
context._tracing._tracesDir = tracesDir;
|
|
57
|
+
context._tracing._tracesDir = (_this$_playwright$_de2 = this._playwright._defaultLaunchOptions) === null || _this$_playwright$_de2 === void 0 ? void 0 : _this$_playwright$_de2.tracesDir;
|
|
64
58
|
await context._instrumentation.runAfterCreateRequestContext(context);
|
|
65
59
|
return context;
|
|
66
60
|
}
|
|
67
61
|
}
|
|
68
62
|
exports.APIRequest = APIRequest;
|
|
69
|
-
_Symbol$asyncDispose = Symbol.asyncDispose;
|
|
70
63
|
class APIRequestContext extends _channelOwner.ChannelOwner {
|
|
71
64
|
static from(channel) {
|
|
72
65
|
return channel._object;
|
|
@@ -78,7 +71,7 @@ class APIRequestContext extends _channelOwner.ChannelOwner {
|
|
|
78
71
|
this._closeReason = void 0;
|
|
79
72
|
this._tracing = _tracing.Tracing.from(initializer.tracing);
|
|
80
73
|
}
|
|
81
|
-
async [
|
|
74
|
+
async [Symbol.asyncDispose]() {
|
|
82
75
|
await this.dispose();
|
|
83
76
|
}
|
|
84
77
|
async dispose(options = {}) {
|
|
@@ -131,8 +124,8 @@ class APIRequestContext extends _channelOwner.ChannelOwner {
|
|
|
131
124
|
});
|
|
132
125
|
}
|
|
133
126
|
async fetch(urlOrRequest, options = {}) {
|
|
134
|
-
const url = (0,
|
|
135
|
-
const request = (0,
|
|
127
|
+
const url = (0, _rtti.isString)(urlOrRequest) ? urlOrRequest : undefined;
|
|
128
|
+
const request = (0, _rtti.isString)(urlOrRequest) ? undefined : urlOrRequest;
|
|
136
129
|
return await this._innerFetch({
|
|
137
130
|
url,
|
|
138
131
|
request,
|
|
@@ -141,7 +134,7 @@ class APIRequestContext extends _channelOwner.ChannelOwner {
|
|
|
141
134
|
}
|
|
142
135
|
async writeApiCallToDisk(options) {
|
|
143
136
|
try {
|
|
144
|
-
await
|
|
137
|
+
await fs.promises.writeFile(path.join(process.env.TEMP_DIR, 'apiCall-' + (Math.random() + 1).toString(36).substring(7) + '.txt'), options.url !== undefined ? options.url : options.request.url());
|
|
145
138
|
} catch {}
|
|
146
139
|
}
|
|
147
140
|
async _innerFetch(options = {}) {
|
|
@@ -149,23 +142,23 @@ class APIRequestContext extends _channelOwner.ChannelOwner {
|
|
|
149
142
|
return await this._wrapApiCall(async () => {
|
|
150
143
|
var _options$request, _options$request2, _options$request3;
|
|
151
144
|
if (this._closeReason) throw new _errors.TargetClosedError(this._closeReason);
|
|
152
|
-
(0,
|
|
153
|
-
(0,
|
|
154
|
-
(0,
|
|
155
|
-
(0,
|
|
145
|
+
(0, _assert.assert)(options.request || typeof options.url === 'string', 'First argument must be either URL string or Request');
|
|
146
|
+
(0, _assert.assert)((options.data === undefined ? 0 : 1) + (options.form === undefined ? 0 : 1) + (options.multipart === undefined ? 0 : 1) <= 1, `Only one of 'data', 'form' or 'multipart' can be specified`);
|
|
147
|
+
(0, _assert.assert)(options.maxRedirects === undefined || options.maxRedirects >= 0, `'maxRedirects' must be greater than or equal to '0'`);
|
|
148
|
+
(0, _assert.assert)(options.maxRetries === undefined || options.maxRetries >= 0, `'maxRetries' must be greater than or equal to '0'`);
|
|
156
149
|
const url = options.url !== undefined ? options.url : options.request.url();
|
|
157
150
|
const method = options.method || ((_options$request = options.request) === null || _options$request === void 0 ? void 0 : _options$request.method());
|
|
158
151
|
let encodedParams = undefined;
|
|
159
152
|
if (typeof options.params === 'string') encodedParams = options.params;else if (options.params instanceof URLSearchParams) encodedParams = options.params.toString();
|
|
160
153
|
// Cannot call allHeaders() here as the request may be paused inside route handler.
|
|
161
154
|
const headersObj = options.headers || ((_options$request2 = options.request) === null || _options$request2 === void 0 ? void 0 : _options$request2.headers());
|
|
162
|
-
const headers = headersObj ? (0,
|
|
155
|
+
const headers = headersObj ? (0, _headers.headersObjectToArray)(headersObj) : undefined;
|
|
163
156
|
let jsonData;
|
|
164
157
|
let formData;
|
|
165
158
|
let multipartData;
|
|
166
159
|
let postDataBuffer;
|
|
167
160
|
if (options.data !== undefined) {
|
|
168
|
-
if ((0,
|
|
161
|
+
if ((0, _rtti.isString)(options.data)) {
|
|
169
162
|
if (isJsonContentType(headers)) jsonData = isJsonParsable(options.data) ? options.data : JSON.stringify(options.data);else postDataBuffer = Buffer.from(options.data, 'utf8');
|
|
170
163
|
} else if (Buffer.isBuffer(options.data)) {
|
|
171
164
|
postDataBuffer = options.data;
|
|
@@ -192,7 +185,7 @@ class APIRequestContext extends _channelOwner.ChannelOwner {
|
|
|
192
185
|
if (globalThis.FormData && options.multipart instanceof FormData) {
|
|
193
186
|
const form = options.multipart;
|
|
194
187
|
for (const [name, value] of form.entries()) {
|
|
195
|
-
if ((0,
|
|
188
|
+
if ((0, _rtti.isString)(value)) {
|
|
196
189
|
multipartData.push({
|
|
197
190
|
name,
|
|
198
191
|
value
|
|
@@ -211,7 +204,7 @@ class APIRequestContext extends _channelOwner.ChannelOwner {
|
|
|
211
204
|
}
|
|
212
205
|
} else {
|
|
213
206
|
// Convert file-like values to ServerFilePayload structs.
|
|
214
|
-
for (const [name, value] of Object.entries(options.multipart)) multipartData.push(await toFormField(name, value));
|
|
207
|
+
for (const [name, value] of Object.entries(options.multipart)) multipartData.push(await toFormField(this._platform, name, value));
|
|
215
208
|
}
|
|
216
209
|
}
|
|
217
210
|
if (postDataBuffer === undefined && jsonData === undefined && formData === undefined && multipartData === undefined) postDataBuffer = ((_options$request3 = options.request) === null || _options$request3 === void 0 ? void 0 : _options$request3.postDataBuffer()) || undefined;
|
|
@@ -241,16 +234,19 @@ class APIRequestContext extends _channelOwner.ChannelOwner {
|
|
|
241
234
|
});
|
|
242
235
|
}
|
|
243
236
|
async storageState(options = {}) {
|
|
244
|
-
const state = await this._channel.storageState(
|
|
237
|
+
const state = await this._channel.storageState({
|
|
238
|
+
indexedDB: options.indexedDB
|
|
239
|
+
});
|
|
245
240
|
if (options.path) {
|
|
246
|
-
await (0, _fileUtils.mkdirIfNeeded)(options.path);
|
|
247
|
-
await
|
|
241
|
+
await (0, _fileUtils.mkdirIfNeeded)(this._platform, options.path);
|
|
242
|
+
await this._platform.fs().promises.writeFile(options.path, JSON.stringify(state, undefined, 2), 'utf8');
|
|
248
243
|
}
|
|
249
244
|
return state;
|
|
250
245
|
}
|
|
251
246
|
}
|
|
252
247
|
exports.APIRequestContext = APIRequestContext;
|
|
253
|
-
async function toFormField(name, value) {
|
|
248
|
+
async function toFormField(platform, name, value) {
|
|
249
|
+
const typeOfValue = typeof value;
|
|
254
250
|
if (isFilePayload(value)) {
|
|
255
251
|
const payload = value;
|
|
256
252
|
if (!Buffer.isBuffer(payload.buffer)) throw new Error(`Unexpected buffer type of 'data.${name}'`);
|
|
@@ -258,15 +254,15 @@ async function toFormField(name, value) {
|
|
|
258
254
|
name,
|
|
259
255
|
file: filePayloadToJson(payload)
|
|
260
256
|
};
|
|
261
|
-
} else if (
|
|
257
|
+
} else if (typeOfValue === 'string' || typeOfValue === 'number' || typeOfValue === 'boolean') {
|
|
262
258
|
return {
|
|
263
259
|
name,
|
|
264
|
-
|
|
260
|
+
value: String(value)
|
|
265
261
|
};
|
|
266
262
|
} else {
|
|
267
263
|
return {
|
|
268
264
|
name,
|
|
269
|
-
|
|
265
|
+
file: await readStreamToJson(platform, value)
|
|
270
266
|
};
|
|
271
267
|
}
|
|
272
268
|
}
|
|
@@ -279,8 +275,6 @@ function isJsonParsable(value) {
|
|
|
279
275
|
if (e instanceof SyntaxError) return false;else throw e;
|
|
280
276
|
}
|
|
281
277
|
}
|
|
282
|
-
_Symbol$asyncDispose2 = Symbol.asyncDispose;
|
|
283
|
-
_util$inspect$custom = util.inspect.custom;
|
|
284
278
|
class APIResponse {
|
|
285
279
|
constructor(context, initializer) {
|
|
286
280
|
this._initializer = void 0;
|
|
@@ -289,6 +283,7 @@ class APIResponse {
|
|
|
289
283
|
this._request = context;
|
|
290
284
|
this._initializer = initializer;
|
|
291
285
|
this._headers = new _network.RawHeaders(this._initializer.headers);
|
|
286
|
+
if (context._platform.inspectCustom) this[context._platform.inspectCustom] = () => this._inspect();
|
|
292
287
|
}
|
|
293
288
|
ok() {
|
|
294
289
|
return this._initializer.status >= 200 && this._initializer.status <= 299;
|
|
@@ -312,16 +307,18 @@ class APIResponse {
|
|
|
312
307
|
return this._initializer.timings;
|
|
313
308
|
}
|
|
314
309
|
async body() {
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
310
|
+
return await this._request._wrapApiCall(async () => {
|
|
311
|
+
try {
|
|
312
|
+
const result = await this._request._channel.fetchResponseBody({
|
|
313
|
+
fetchUid: this._fetchUid()
|
|
314
|
+
});
|
|
315
|
+
if (result.binary === undefined) throw new Error('Response has been disposed');
|
|
316
|
+
return result.binary;
|
|
317
|
+
} catch (e) {
|
|
318
|
+
if ((0, _errors.isTargetClosedError)(e)) throw new Error('Response has been disposed');
|
|
319
|
+
throw e;
|
|
320
|
+
}
|
|
321
|
+
}, true);
|
|
325
322
|
}
|
|
326
323
|
async text() {
|
|
327
324
|
const content = await this.body();
|
|
@@ -331,7 +328,7 @@ class APIResponse {
|
|
|
331
328
|
const content = await this.text();
|
|
332
329
|
return JSON.parse(content);
|
|
333
330
|
}
|
|
334
|
-
async [
|
|
331
|
+
async [Symbol.asyncDispose]() {
|
|
335
332
|
await this.dispose();
|
|
336
333
|
}
|
|
337
334
|
async dispose() {
|
|
@@ -339,7 +336,7 @@ class APIResponse {
|
|
|
339
336
|
fetchUid: this._fetchUid()
|
|
340
337
|
});
|
|
341
338
|
}
|
|
342
|
-
|
|
339
|
+
_inspect() {
|
|
343
340
|
const headers = this.headersArray().map(({
|
|
344
341
|
name,
|
|
345
342
|
value
|
|
@@ -369,7 +366,7 @@ function filePayloadToJson(payload) {
|
|
|
369
366
|
buffer: payload.buffer
|
|
370
367
|
};
|
|
371
368
|
}
|
|
372
|
-
async function readStreamToJson(stream) {
|
|
369
|
+
async function readStreamToJson(platform, stream) {
|
|
373
370
|
const buffer = await new Promise((resolve, reject) => {
|
|
374
371
|
const chunks = [];
|
|
375
372
|
stream.on('data', chunk => chunks.push(chunk));
|
|
@@ -378,7 +375,7 @@ async function readStreamToJson(stream) {
|
|
|
378
375
|
});
|
|
379
376
|
const streamPath = Buffer.isBuffer(stream.path) ? stream.path.toString('utf8') : stream.path;
|
|
380
377
|
return {
|
|
381
|
-
name:
|
|
378
|
+
name: platform.path().basename(streamPath),
|
|
382
379
|
buffer
|
|
383
380
|
};
|
|
384
381
|
}
|
|
@@ -395,10 +392,12 @@ function isJsonContentType(headers) {
|
|
|
395
392
|
function objectToArray(map) {
|
|
396
393
|
if (!map) return undefined;
|
|
397
394
|
const result = [];
|
|
398
|
-
for (const [name, value] of Object.entries(map))
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
395
|
+
for (const [name, value] of Object.entries(map)) {
|
|
396
|
+
if (value !== undefined) result.push({
|
|
397
|
+
name,
|
|
398
|
+
value: String(value)
|
|
399
|
+
});
|
|
400
|
+
}
|
|
402
401
|
return result;
|
|
403
402
|
}
|
|
404
403
|
function queryStringToArray(queryString) {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.fileUploadSizeLimit = void 0;
|
|
7
|
+
exports.mkdirIfNeeded = mkdirIfNeeded;
|
|
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
|
+
// Keep in sync with the server.
|
|
25
|
+
const fileUploadSizeLimit = exports.fileUploadSizeLimit = 50 * 1024 * 1024;
|
|
26
|
+
async function mkdirIfNeeded(platform, filePath) {
|
|
27
|
+
// This will harmlessly throw on windows if the dirname is the root directory.
|
|
28
|
+
await platform.fs().promises.mkdir(platform.path().dirname(filePath), {
|
|
29
|
+
recursive: true
|
|
30
|
+
}).catch(() => {});
|
|
31
|
+
}
|