@checkly/playwright-core 1.51.17-beta.2 → 1.54.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ThirdPartyNotices.txt +65 -123
- package/browsers.json +16 -14
- package/index.js +1 -1
- package/lib/androidServerImpl.js +47 -50
- package/lib/browserServerImpl.js +89 -69
- package/lib/checkly/escapeRegExp.js +23 -27
- package/lib/checkly/fetch.js +64 -46
- package/lib/checkly/secretsFilter.js +49 -35
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +400 -359
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +151 -242
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +96 -71
- package/lib/client/browserContext.js +314 -345
- package/lib/client/browserType.js +103 -127
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +89 -112
- package/lib/client/clientHelper.js +48 -39
- package/lib/client/clientInstrumentation.js +40 -37
- package/lib/client/clientStackTrace.js +41 -37
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +188 -214
- package/lib/client/consoleMessage.js +31 -28
- package/lib/client/coverage.js +25 -22
- package/lib/client/dialog.js +30 -31
- package/lib/client/download.js +25 -25
- package/lib/client/electron.js +80 -77
- package/lib/client/elementHandle.js +120 -159
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +124 -121
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +166 -190
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +207 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +42 -69
- package/lib/client/jsHandle.js +54 -69
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -29
- package/lib/client/locator.js +145 -237
- package/lib/client/network.js +282 -307
- package/lib/client/page.js +269 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -76
- package/lib/client/selectors.js +45 -63
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +55 -41
- package/lib/client/tracing.js +49 -96
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +69 -88
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +43 -56
- package/lib/client/worker.js +48 -56
- package/lib/client/writableStream.js +27 -23
- package/lib/generated/bindingsControllerSource.js +28 -0
- package/lib/generated/clockSource.js +26 -6
- package/lib/generated/consoleApiSource.js +26 -6
- package/lib/generated/injectedScriptSource.js +26 -6
- package/lib/generated/pollingRecorderSource.js +26 -6
- package/lib/generated/storageScriptSource.js +28 -0
- package/lib/generated/utilityScriptSource.js +26 -6
- package/lib/generated/webSocketMockSource.js +333 -5
- package/lib/inProcessFactory.js +51 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +51 -46
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2807 -2739
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +88 -242
- package/lib/remote/playwrightServer.js +305 -92
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +251 -241
- package/lib/server/android/backendAdb.js +87 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +297 -158
- package/lib/server/bidi/bidiChromium.js +119 -89
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +129 -113
- package/lib/server/bidi/bidiFirefox.js +86 -76
- package/lib/server/bidi/bidiInput.js +106 -117
- package/lib/server/bidi/bidiNetworkManager.js +142 -159
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +260 -260
- package/lib/server/bidi/bidiPdf.js +52 -86
- package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
- package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
- package/lib/server/bidi/third_party/bidiProtocol.js +22 -137
- package/lib/server/bidi/third_party/bidiProtocolCore.js +152 -0
- package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
- package/lib/server/browser.js +93 -95
- package/lib/server/browserContext.js +419 -429
- package/lib/server/browserType.js +186 -216
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +235 -203
- package/lib/server/chromium/chromiumSwitches.js +100 -67
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +310 -292
- package/lib/server/chromium/crConnection.js +95 -121
- package/lib/server/chromium/crCoverage.js +121 -131
- package/lib/server/chromium/crDevTools.js +60 -51
- package/lib/server/chromium/crDragDrop.js +68 -84
- package/lib/server/chromium/crExecutionContext.js +89 -83
- package/lib/server/chromium/crInput.js +118 -113
- package/lib/server/chromium/crNetworkManager.js +274 -375
- package/lib/server/chromium/crPage.js +536 -593
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +84 -73
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +66 -99
- package/lib/server/clock.js +107 -83
- package/lib/server/codegen/csharp.js +192 -162
- package/lib/server/codegen/java.js +156 -129
- package/lib/server/codegen/javascript.js +163 -148
- package/lib/server/codegen/jsonl.js +32 -28
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +141 -126
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +108 -86
- package/lib/server/debugController.js +147 -151
- package/lib/server/debugger.js +86 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +238 -128
- package/lib/server/dialog.js +84 -39
- package/lib/server/dispatchers/androidDispatcher.js +257 -148
- package/lib/server/dispatchers/artifactDispatcher.js +79 -79
- package/lib/server/dispatchers/browserContextDispatcher.js +289 -259
- package/lib/server/dispatchers/browserDispatcher.js +96 -148
- package/lib/server/dispatchers/browserTypeDispatcher.js +50 -41
- package/lib/server/dispatchers/cdpSessionDispatcher.js +35 -39
- package/lib/server/dispatchers/debugControllerDispatcher.js +65 -83
- package/lib/server/dispatchers/dialogDispatcher.js +34 -31
- package/lib/server/dispatchers/dispatcher.js +208 -248
- package/lib/server/dispatchers/electronDispatcher.js +66 -70
- package/lib/server/dispatchers/elementHandlerDispatcher.js +164 -216
- package/lib/server/dispatchers/frameDispatcher.js +211 -272
- package/lib/server/dispatchers/jsHandleDispatcher.js +63 -75
- package/lib/server/dispatchers/jsonPipeDispatcher.js +37 -38
- package/lib/server/dispatchers/localUtilsDispatcher.js +121 -119
- package/lib/server/dispatchers/networkDispatchers.js +117 -128
- package/lib/server/dispatchers/pageDispatcher.js +256 -248
- package/lib/server/dispatchers/playwrightDispatcher.js +92 -87
- package/lib/server/dispatchers/streamDispatcher.js +52 -48
- package/lib/server/dispatchers/tracingDispatcher.js +47 -52
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +126 -150
- package/lib/server/dispatchers/writableStreamDispatcher.js +65 -43
- package/lib/server/dom.js +485 -582
- package/lib/server/download.js +47 -37
- package/lib/server/electron/electron.js +216 -243
- package/lib/server/electron/loader.js +9 -37
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +317 -360
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +66 -60
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +268 -305
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +92 -73
- package/lib/server/firefox/ffInput.js +82 -84
- package/lib/server/firefox/ffNetworkManager.js +137 -114
- package/lib/server/firefox/ffPage.js +261 -293
- package/lib/server/firefox/firefox.js +80 -72
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +98 -114
- package/lib/server/frames.js +845 -1055
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +290 -223
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +55 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +151 -189
- package/lib/server/instrumentation.js +57 -44
- package/lib/server/javascript.js +133 -134
- package/lib/server/launchApp.js +113 -75
- package/lib/server/localUtils.js +150 -142
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +299 -303
- package/lib/server/page.js +513 -544
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +58 -67
- package/lib/server/progress.js +137 -68
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +70 -86
- package/lib/server/recorder/recorderApp.js +341 -176
- package/lib/server/recorder/recorderInTraceViewer.js +65 -94
- package/lib/server/recorder/recorderRunner.js +93 -116
- package/lib/server/recorder/recorderSignalProcessor.js +83 -0
- package/lib/server/recorder/recorderUtils.js +104 -47
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +395 -275
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +930 -803
- package/lib/server/registry/nativeDeps.js +1073 -464
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +160 -191
- package/lib/server/selectors.js +90 -51
- package/lib/server/socksClientCertificatesInterceptor.js +171 -186
- package/lib/server/socksInterceptor.js +62 -70
- package/lib/server/trace/recorder/snapshotter.js +76 -102
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +354 -362
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +160 -147
- package/lib/server/transport.js +119 -134
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +39 -26
- package/lib/server/utils/comparators.js +105 -103
- package/lib/server/utils/crypto.js +157 -112
- package/lib/server/utils/debug.js +36 -32
- package/lib/server/utils/debugLogger.js +77 -48
- package/lib/server/utils/env.js +52 -37
- package/lib/server/utils/eventsHelper.js +29 -28
- package/lib/server/utils/expectUtils.js +31 -26
- package/lib/server/utils/fileUtils.js +123 -136
- package/lib/server/utils/happyEyeballs.js +141 -126
- package/lib/server/utils/hostPlatform.js +84 -120
- package/lib/server/utils/httpServer.js +106 -121
- package/lib/server/utils/image_tools/colorUtils.js +42 -51
- package/lib/server/utils/image_tools/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +38 -30
- package/lib/server/utils/image_tools/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +50 -37
- package/lib/server/utils/network.js +152 -96
- package/lib/server/utils/nodePlatform.js +87 -79
- package/lib/server/utils/pipeTransport.js +44 -42
- package/lib/server/utils/processLauncher.js +111 -121
- package/lib/server/utils/profiler.js +52 -39
- package/lib/server/utils/socksProxy.js +280 -339
- package/lib/server/utils/spawnAsync.js +37 -41
- package/lib/server/utils/task.js +31 -38
- package/lib/server/utils/userAgent.js +73 -66
- package/lib/server/utils/wsServer.js +68 -75
- package/lib/server/utils/zipFile.js +36 -37
- package/lib/server/utils/zones.js +37 -34
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +77 -61
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +193 -184
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +85 -70
- package/lib/server/webkit/wkInput.js +97 -95
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +568 -667
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +79 -79
- package/lib/utils/expectUtils.js +31 -26
- package/lib/utils/isomorphic/ariaSnapshot.js +149 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +120 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +358 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +46 -39
- package/lib/utils/isomorphic/mimeType.js +447 -25
- package/lib/utils/isomorphic/multimap.js +34 -27
- package/lib/utils/isomorphic/protocolFormatter.js +68 -0
- package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
- package/lib/utils/isomorphic/recorderUtils.js +140 -181
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +182 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +98 -112
- package/lib/utils/isomorphic/time.js +46 -22
- package/lib/utils/isomorphic/timeoutRunner.js +53 -53
- package/lib/utils/isomorphic/traceUtils.js +37 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +113 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
- package/lib/utils.js +101 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/utilsBundleImpl/index.js +160 -150
- package/lib/zipBundle.js +32 -23
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +1 -1
- package/types/protocol.d.ts +1267 -1057
- package/types/types.d.ts +131 -29
- package/lib/common/socksProxy.js +0 -569
- package/lib/common/timeoutSettings.js +0 -73
- package/lib/common/types.js +0 -5
- package/lib/image_tools/colorUtils.js +0 -98
- package/lib/image_tools/compare.js +0 -108
- package/lib/image_tools/imageChannel.js +0 -70
- package/lib/image_tools/stats.js +0 -102
- package/lib/protocol/debug.js +0 -27
- package/lib/protocol/transport.js +0 -82
- package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/server/recorder/contextRecorder.js +0 -290
- package/lib/server/recorder/recorderCollection.js +0 -104
- package/lib/server/recorder/recorderFrontend.js +0 -5
- package/lib/server/storageScript.js +0 -160
- package/lib/server/timeoutSettings.js +0 -74
- package/lib/third_party/diff_match_patch.js +0 -2222
- package/lib/utils/ascii.js +0 -31
- package/lib/utils/comparators.js +0 -171
- package/lib/utils/crypto.js +0 -174
- package/lib/utils/debug.js +0 -46
- package/lib/utils/debugLogger.js +0 -91
- package/lib/utils/env.js +0 -49
- package/lib/utils/eventsHelper.js +0 -38
- package/lib/utils/fileUtils.js +0 -205
- package/lib/utils/happy-eyeballs.js +0 -210
- package/lib/utils/headers.js +0 -52
- package/lib/utils/hostPlatform.js +0 -133
- package/lib/utils/httpServer.js +0 -237
- package/lib/utils/index.js +0 -368
- package/lib/utils/linuxUtils.js +0 -78
- package/lib/utils/manualPromise.js +0 -109
- package/lib/utils/multimap.js +0 -75
- package/lib/utils/network.js +0 -160
- package/lib/utils/processLauncher.js +0 -248
- package/lib/utils/profiler.js +0 -53
- package/lib/utils/rtti.js +0 -44
- package/lib/utils/semaphore.js +0 -51
- package/lib/utils/spawnAsync.js +0 -45
- package/lib/utils/stackTrace.js +0 -121
- package/lib/utils/task.js +0 -58
- package/lib/utils/time.js +0 -37
- package/lib/utils/timeoutRunner.js +0 -66
- package/lib/utils/traceUtils.js +0 -44
- package/lib/utils/userAgent.js +0 -105
- package/lib/utils/wsServer.js +0 -127
- package/lib/utils/zipFile.js +0 -75
- package/lib/utils/zones.js +0 -62
- package/lib/vite/htmlReport/index.html +0 -69
- package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +0 -24
- package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +0 -1
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
- package/lib/vite/recorder/assets/index-eHBmevrY.css +0 -1
- package/lib/vite/recorder/index.html +0 -29
- package/lib/vite/recorder/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +0 -24
- package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +0 -1
- package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +0 -235
- package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +0 -25
- package/lib/vite/traceViewer/assets/xtermModule-BoAIEibi.js +0 -9
- package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +0 -1
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +0 -1
- package/lib/vite/traceViewer/embedded.DpNPH6mk.js +0 -2
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/embedded.mLhjB5IF.css +0 -1
- package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
- package/lib/vite/traceViewer/index.CuE3SYGw.js +0 -2
- package/lib/vite/traceViewer/index.html +0 -47
- package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +0 -1
- package/lib/vite/traceViewer/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/recorder.BD-uZJs7.js +0 -2
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/recorder.tn0RQdqM.css +0 -0
- package/lib/vite/traceViewer/snapshot.html +0 -21
- package/lib/vite/traceViewer/sw.bundle.js +0 -3
- package/lib/vite/traceViewer/uiMode.BatfzHMG.css +0 -1
- package/lib/vite/traceViewer/uiMode.DHrNgddz.js +0 -5
- package/lib/vite/traceViewer/uiMode.html +0 -21
- package/lib/vite/traceViewer/workbench.B9vIAzH9.css +0 -1
- package/lib/vite/traceViewer/xtermModule.Beg8tuEN.css +0 -32
|
@@ -1,155 +1,139 @@
|
|
|
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 fileUtils_exports = {};
|
|
30
|
+
__export(fileUtils_exports, {
|
|
31
|
+
SerializedFS: () => SerializedFS,
|
|
32
|
+
canAccessFile: () => canAccessFile,
|
|
33
|
+
copyFileAndMakeWritable: () => copyFileAndMakeWritable,
|
|
34
|
+
existsAsync: () => existsAsync,
|
|
35
|
+
mkdirIfNeeded: () => mkdirIfNeeded,
|
|
36
|
+
removeFolders: () => removeFolders,
|
|
37
|
+
sanitizeForFilePath: () => sanitizeForFilePath,
|
|
38
|
+
toPosixPath: () => toPosixPath
|
|
5
39
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
exports.sanitizeForFilePath = sanitizeForFilePath;
|
|
13
|
-
exports.toPosixPath = toPosixPath;
|
|
14
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
15
|
-
var _path = _interopRequireDefault(require("path"));
|
|
16
|
-
var _manualPromise = require("../../utils/isomorphic/manualPromise");
|
|
17
|
-
var _zipBundle = require("../../zipBundle");
|
|
18
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
|
-
/**
|
|
20
|
-
* Copyright (c) Microsoft Corporation.
|
|
21
|
-
*
|
|
22
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
23
|
-
* you may not use this file except in compliance with the License.
|
|
24
|
-
* You may obtain a copy of the License at
|
|
25
|
-
*
|
|
26
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
27
|
-
*
|
|
28
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
29
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
30
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
31
|
-
* See the License for the specific language governing permissions and
|
|
32
|
-
* limitations under the License.
|
|
33
|
-
*/
|
|
34
|
-
|
|
35
|
-
const existsAsync = path => new Promise(resolve => _fs.default.stat(path, err => resolve(!err)));
|
|
36
|
-
exports.existsAsync = existsAsync;
|
|
40
|
+
module.exports = __toCommonJS(fileUtils_exports);
|
|
41
|
+
var import_fs = __toESM(require("fs"));
|
|
42
|
+
var import_path = __toESM(require("path"));
|
|
43
|
+
var import_manualPromise = require("../../utils/isomorphic/manualPromise");
|
|
44
|
+
var import_zipBundle = require("../../zipBundle");
|
|
45
|
+
const existsAsync = (path2) => new Promise((resolve) => import_fs.default.stat(path2, (err) => resolve(!err)));
|
|
37
46
|
async function mkdirIfNeeded(filePath) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
recursive: true
|
|
41
|
-
}).catch(() => {});
|
|
47
|
+
await import_fs.default.promises.mkdir(import_path.default.dirname(filePath), { recursive: true }).catch(() => {
|
|
48
|
+
});
|
|
42
49
|
}
|
|
43
50
|
async function removeFolders(dirs) {
|
|
44
|
-
return await Promise.all(dirs.map(
|
|
45
|
-
recursive: true,
|
|
46
|
-
|
|
47
|
-
maxRetries: 10
|
|
48
|
-
}).catch(e => e)));
|
|
51
|
+
return await Promise.all(dirs.map(
|
|
52
|
+
(dir) => import_fs.default.promises.rm(dir, { recursive: true, force: true, maxRetries: 10 }).catch((e) => e)
|
|
53
|
+
));
|
|
49
54
|
}
|
|
50
55
|
function canAccessFile(file) {
|
|
51
|
-
if (!file)
|
|
56
|
+
if (!file)
|
|
57
|
+
return false;
|
|
52
58
|
try {
|
|
53
|
-
|
|
59
|
+
import_fs.default.accessSync(file);
|
|
54
60
|
return true;
|
|
55
61
|
} catch (e) {
|
|
56
62
|
return false;
|
|
57
63
|
}
|
|
58
64
|
}
|
|
59
65
|
async function copyFileAndMakeWritable(from, to) {
|
|
60
|
-
await
|
|
61
|
-
await
|
|
66
|
+
await import_fs.default.promises.copyFile(from, to);
|
|
67
|
+
await import_fs.default.promises.chmod(to, 436);
|
|
62
68
|
}
|
|
63
69
|
function sanitizeForFilePath(s) {
|
|
64
|
-
return s.replace(/[\x00-\x2C\x2E-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+/g,
|
|
70
|
+
return s.replace(/[\x00-\x2C\x2E-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+/g, "-");
|
|
65
71
|
}
|
|
66
72
|
function toPosixPath(aPath) {
|
|
67
|
-
return aPath.split(
|
|
73
|
+
return aPath.split(import_path.default.sep).join(import_path.default.posix.sep);
|
|
68
74
|
}
|
|
69
75
|
class SerializedFS {
|
|
70
76
|
constructor() {
|
|
71
|
-
this._buffers = new Map();
|
|
72
|
-
// Should never be accessed from within appendOperation.
|
|
73
|
-
this._error = void 0;
|
|
77
|
+
this._buffers = /* @__PURE__ */ new Map();
|
|
74
78
|
this._operations = [];
|
|
75
|
-
this._operationsDone =
|
|
76
|
-
this._operationsDone
|
|
77
|
-
this._operationsDone.resolve(); // No operations scheduled yet.
|
|
79
|
+
this._operationsDone = new import_manualPromise.ManualPromise();
|
|
80
|
+
this._operationsDone.resolve();
|
|
78
81
|
}
|
|
79
82
|
mkdir(dir) {
|
|
80
|
-
this._appendOperation({
|
|
81
|
-
op: 'mkdir',
|
|
82
|
-
dir
|
|
83
|
-
});
|
|
83
|
+
this._appendOperation({ op: "mkdir", dir });
|
|
84
84
|
}
|
|
85
85
|
writeFile(file, content, skipIfExists) {
|
|
86
|
-
this._buffers.delete(file);
|
|
87
|
-
this._appendOperation({
|
|
88
|
-
op: 'writeFile',
|
|
89
|
-
file,
|
|
90
|
-
content,
|
|
91
|
-
skipIfExists
|
|
92
|
-
});
|
|
86
|
+
this._buffers.delete(file);
|
|
87
|
+
this._appendOperation({ op: "writeFile", file, content, skipIfExists });
|
|
93
88
|
}
|
|
94
89
|
appendFile(file, text, flush) {
|
|
95
|
-
if (!this._buffers.has(file))
|
|
90
|
+
if (!this._buffers.has(file))
|
|
91
|
+
this._buffers.set(file, []);
|
|
96
92
|
this._buffers.get(file).push(text);
|
|
97
|
-
if (flush)
|
|
93
|
+
if (flush)
|
|
94
|
+
this._flushFile(file);
|
|
98
95
|
}
|
|
99
96
|
_flushFile(file) {
|
|
100
97
|
const buffer = this._buffers.get(file);
|
|
101
|
-
if (buffer ===
|
|
102
|
-
|
|
98
|
+
if (buffer === void 0)
|
|
99
|
+
return;
|
|
100
|
+
const content = buffer.join("");
|
|
103
101
|
this._buffers.delete(file);
|
|
104
|
-
this._appendOperation({
|
|
105
|
-
op: 'appendFile',
|
|
106
|
-
file,
|
|
107
|
-
content
|
|
108
|
-
});
|
|
102
|
+
this._appendOperation({ op: "appendFile", file, content });
|
|
109
103
|
}
|
|
110
104
|
copyFile(from, to) {
|
|
111
105
|
this._flushFile(from);
|
|
112
|
-
this._buffers.delete(to);
|
|
113
|
-
this._appendOperation({
|
|
114
|
-
op: 'copyFile',
|
|
115
|
-
from,
|
|
116
|
-
to
|
|
117
|
-
});
|
|
106
|
+
this._buffers.delete(to);
|
|
107
|
+
this._appendOperation({ op: "copyFile", from, to });
|
|
118
108
|
}
|
|
119
109
|
async syncAndGetError() {
|
|
120
|
-
for (const file of this._buffers.keys())
|
|
110
|
+
for (const file of this._buffers.keys())
|
|
111
|
+
this._flushFile(file);
|
|
121
112
|
await this._operationsDone;
|
|
122
113
|
return this._error;
|
|
123
114
|
}
|
|
124
115
|
zip(entries, zipFileName) {
|
|
125
|
-
for (const file of this._buffers.keys())
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
// so that files do not change during the export.
|
|
129
|
-
this._appendOperation({
|
|
130
|
-
op: 'zip',
|
|
131
|
-
entries,
|
|
132
|
-
zipFileName
|
|
133
|
-
});
|
|
116
|
+
for (const file of this._buffers.keys())
|
|
117
|
+
this._flushFile(file);
|
|
118
|
+
this._appendOperation({ op: "zip", entries, zipFileName });
|
|
134
119
|
}
|
|
135
|
-
|
|
136
120
|
// This method serializes all writes to the trace.
|
|
137
121
|
_appendOperation(op) {
|
|
138
122
|
const last = this._operations[this._operations.length - 1];
|
|
139
|
-
if (
|
|
140
|
-
// Merge pending appendFile operations for performance.
|
|
123
|
+
if (last?.op === "appendFile" && op.op === "appendFile" && last.file === op.file) {
|
|
141
124
|
last.content += op.content;
|
|
142
125
|
return;
|
|
143
126
|
}
|
|
144
127
|
this._operations.push(op);
|
|
145
|
-
if (this._operationsDone.isDone())
|
|
128
|
+
if (this._operationsDone.isDone())
|
|
129
|
+
this._performOperations();
|
|
146
130
|
}
|
|
147
131
|
async _performOperations() {
|
|
148
|
-
this._operationsDone = new
|
|
132
|
+
this._operationsDone = new import_manualPromise.ManualPromise();
|
|
149
133
|
while (this._operations.length) {
|
|
150
134
|
const op = this._operations.shift();
|
|
151
|
-
|
|
152
|
-
|
|
135
|
+
if (this._error)
|
|
136
|
+
continue;
|
|
153
137
|
try {
|
|
154
138
|
await this._performOperation(op);
|
|
155
139
|
} catch (e) {
|
|
@@ -160,45 +144,48 @@ class SerializedFS {
|
|
|
160
144
|
}
|
|
161
145
|
async _performOperation(op) {
|
|
162
146
|
switch (op.op) {
|
|
163
|
-
case
|
|
164
|
-
{
|
|
165
|
-
|
|
166
|
-
|
|
147
|
+
case "mkdir": {
|
|
148
|
+
await import_fs.default.promises.mkdir(op.dir, { recursive: true });
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
case "writeFile": {
|
|
152
|
+
if (op.skipIfExists)
|
|
153
|
+
await import_fs.default.promises.writeFile(op.file, op.content, { flag: "wx" }).catch(() => {
|
|
167
154
|
});
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
case
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
{
|
|
192
|
-
const zipFile = new _zipBundle.yazl.ZipFile();
|
|
193
|
-
const result = new _manualPromise.ManualPromise();
|
|
194
|
-
zipFile.on('error', error => result.reject(error));
|
|
195
|
-
for (const entry of op.entries) zipFile.addFile(entry.value, entry.name);
|
|
196
|
-
zipFile.end();
|
|
197
|
-
zipFile.outputStream.pipe(_fs.default.createWriteStream(op.zipFileName)).on('close', () => result.resolve()).on('error', error => result.reject(error));
|
|
198
|
-
await result;
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
155
|
+
else
|
|
156
|
+
await import_fs.default.promises.writeFile(op.file, op.content);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
case "copyFile": {
|
|
160
|
+
await import_fs.default.promises.copyFile(op.from, op.to);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
case "appendFile": {
|
|
164
|
+
await import_fs.default.promises.appendFile(op.file, op.content);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
case "zip": {
|
|
168
|
+
const zipFile = new import_zipBundle.yazl.ZipFile();
|
|
169
|
+
const result = new import_manualPromise.ManualPromise();
|
|
170
|
+
zipFile.on("error", (error) => result.reject(error));
|
|
171
|
+
for (const entry of op.entries)
|
|
172
|
+
zipFile.addFile(entry.value, entry.name);
|
|
173
|
+
zipFile.end();
|
|
174
|
+
zipFile.outputStream.pipe(import_fs.default.createWriteStream(op.zipFileName)).on("close", () => result.resolve()).on("error", (error) => result.reject(error));
|
|
175
|
+
await result;
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
201
178
|
}
|
|
202
179
|
}
|
|
203
180
|
}
|
|
204
|
-
|
|
181
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
182
|
+
0 && (module.exports = {
|
|
183
|
+
SerializedFS,
|
|
184
|
+
canAccessFile,
|
|
185
|
+
copyFileAndMakeWritable,
|
|
186
|
+
existsAsync,
|
|
187
|
+
mkdirIfNeeded,
|
|
188
|
+
removeFolders,
|
|
189
|
+
sanitizeForFilePath,
|
|
190
|
+
toPosixPath
|
|
191
|
+
});
|
|
@@ -1,42 +1,50 @@
|
|
|
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 happyEyeballs_exports = {};
|
|
30
|
+
__export(happyEyeballs_exports, {
|
|
31
|
+
createConnectionAsync: () => createConnectionAsync,
|
|
32
|
+
createSocket: () => createSocket,
|
|
33
|
+
createTLSSocket: () => createTLSSocket,
|
|
34
|
+
httpHappyEyeballsAgent: () => httpHappyEyeballsAgent,
|
|
35
|
+
httpHappyEyeballsTimings: () => httpHappyEyeballsTimings,
|
|
36
|
+
httpsHappyEyeballsAgent: () => httpsHappyEyeballsAgent,
|
|
37
|
+
timingForSocket: () => timingForSocket
|
|
5
38
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var _tls = _interopRequireDefault(require("tls"));
|
|
16
|
-
var _assert = require("../../utils/isomorphic/assert");
|
|
17
|
-
var _manualPromise = require("../../utils/isomorphic/manualPromise");
|
|
18
|
-
var _time = require("../../utils/isomorphic/time");
|
|
19
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
|
-
/**
|
|
21
|
-
* Copyright (c) Microsoft Corporation.
|
|
22
|
-
*
|
|
23
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
24
|
-
* you may not use this file except in compliance with the License.
|
|
25
|
-
* You may obtain a copy of the License at
|
|
26
|
-
*
|
|
27
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
28
|
-
*
|
|
29
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
30
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
31
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
32
|
-
* See the License for the specific language governing permissions and
|
|
33
|
-
* limitations under the License.
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
// Implementation(partial) of Happy Eyeballs 2 algorithm described in
|
|
37
|
-
// https://www.rfc-editor.org/rfc/rfc8305
|
|
38
|
-
|
|
39
|
-
// Same as in Chromium (https://source.chromium.org/chromium/chromium/src/+/5666ff4f5077a7e2f72902f3a95f5d553ea0d88d:net/socket/transport_connect_job.cc;l=102)
|
|
39
|
+
module.exports = __toCommonJS(happyEyeballs_exports);
|
|
40
|
+
var import_dns = __toESM(require("dns"));
|
|
41
|
+
var import_http = __toESM(require("http"));
|
|
42
|
+
var import_https = __toESM(require("https"));
|
|
43
|
+
var import_net = __toESM(require("net"));
|
|
44
|
+
var import_tls = __toESM(require("tls"));
|
|
45
|
+
var import_assert = require("../../utils/isomorphic/assert");
|
|
46
|
+
var import_manualPromise = require("../../utils/isomorphic/manualPromise");
|
|
47
|
+
var import_time = require("../../utils/isomorphic/time");
|
|
40
48
|
const connectionAttemptDelayMs = 300;
|
|
41
49
|
const checklyTimings = {
|
|
42
50
|
values: {
|
|
@@ -47,68 +55,74 @@ const checklyTimings = {
|
|
|
47
55
|
},
|
|
48
56
|
agent: false
|
|
49
57
|
};
|
|
50
|
-
const kDNSLookupAt = Symbol(
|
|
51
|
-
const kTCPConnectionAt = Symbol(
|
|
52
|
-
class HttpHappyEyeballsAgent extends
|
|
58
|
+
const kDNSLookupAt = Symbol("kDNSLookupAt");
|
|
59
|
+
const kTCPConnectionAt = Symbol("kTCPConnectionAt");
|
|
60
|
+
class HttpHappyEyeballsAgent extends import_http.default.Agent {
|
|
53
61
|
createConnection(options, oncreate) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
createConnectionAsync(
|
|
62
|
+
if (import_net.default.isIP(clientRequestArgsToHostName(options)))
|
|
63
|
+
return import_net.default.createConnection(options);
|
|
64
|
+
createConnectionAsync(
|
|
65
|
+
options,
|
|
66
|
+
oncreate,
|
|
67
|
+
/* useTLS */
|
|
68
|
+
false
|
|
69
|
+
).catch((err) => oncreate?.(err));
|
|
57
70
|
}
|
|
58
71
|
}
|
|
59
|
-
class HttpsHappyEyeballsAgent extends
|
|
72
|
+
class HttpsHappyEyeballsAgent extends import_https.default.Agent {
|
|
60
73
|
createConnection(options, oncreate) {
|
|
61
74
|
checklyTimings.values.startTimeNow = performance.now();
|
|
62
75
|
checklyTimings.agent = true;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
createConnectionAsync(
|
|
76
|
+
if (import_net.default.isIP(clientRequestArgsToHostName(options)))
|
|
77
|
+
return import_tls.default.connect(options);
|
|
78
|
+
createConnectionAsync(
|
|
79
|
+
options,
|
|
80
|
+
oncreate,
|
|
81
|
+
/* useTLS */
|
|
82
|
+
true
|
|
83
|
+
).catch((err) => oncreate?.(err));
|
|
66
84
|
}
|
|
67
85
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
keepAlive: true
|
|
72
|
-
});
|
|
73
|
-
const httpHappyEyeballsAgent = exports.httpHappyEyeballsAgent = new HttpHappyEyeballsAgent({
|
|
74
|
-
keepAlive: true
|
|
75
|
-
});
|
|
76
|
-
const httpHappyEyeballsTimings = exports.httpHappyEyeballsTimings = checklyTimings;
|
|
86
|
+
const httpsHappyEyeballsAgent = new HttpsHappyEyeballsAgent({ keepAlive: true });
|
|
87
|
+
const httpHappyEyeballsAgent = new HttpHappyEyeballsAgent({ keepAlive: true });
|
|
88
|
+
const httpHappyEyeballsTimings = checklyTimings;
|
|
77
89
|
async function createSocket(host, port) {
|
|
78
90
|
return new Promise((resolve, reject) => {
|
|
79
|
-
if (
|
|
80
|
-
const socket =
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
});
|
|
84
|
-
socket.on('connect', () => resolve(socket));
|
|
85
|
-
socket.on('error', error => reject(error));
|
|
91
|
+
if (import_net.default.isIP(host)) {
|
|
92
|
+
const socket = import_net.default.createConnection({ host, port });
|
|
93
|
+
socket.on("connect", () => resolve(socket));
|
|
94
|
+
socket.on("error", (error) => reject(error));
|
|
86
95
|
} else {
|
|
87
|
-
createConnectionAsync(
|
|
88
|
-
host,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
96
|
+
createConnectionAsync(
|
|
97
|
+
{ host, port },
|
|
98
|
+
(err, socket) => {
|
|
99
|
+
if (err)
|
|
100
|
+
reject(err);
|
|
101
|
+
if (socket)
|
|
102
|
+
resolve(socket);
|
|
103
|
+
},
|
|
104
|
+
/* useTLS */
|
|
105
|
+
false
|
|
106
|
+
).catch((err) => reject(err));
|
|
94
107
|
}
|
|
95
108
|
});
|
|
96
109
|
}
|
|
97
110
|
async function createTLSSocket(options) {
|
|
98
111
|
return new Promise((resolve, reject) => {
|
|
99
|
-
(0,
|
|
100
|
-
if (
|
|
101
|
-
const socket =
|
|
102
|
-
socket.on(
|
|
103
|
-
socket.on(
|
|
112
|
+
(0, import_assert.assert)(options.host, "host is required");
|
|
113
|
+
if (import_net.default.isIP(options.host)) {
|
|
114
|
+
const socket = import_tls.default.connect(options);
|
|
115
|
+
socket.on("secureConnect", () => resolve(socket));
|
|
116
|
+
socket.on("error", (error) => reject(error));
|
|
104
117
|
} else {
|
|
105
118
|
createConnectionAsync(options, (err, socket) => {
|
|
106
|
-
if (err)
|
|
119
|
+
if (err)
|
|
120
|
+
reject(err);
|
|
107
121
|
if (socket) {
|
|
108
|
-
socket.on(
|
|
109
|
-
socket.on(
|
|
122
|
+
socket.on("secureConnect", () => resolve(socket));
|
|
123
|
+
socket.on("error", (error) => reject(error));
|
|
110
124
|
}
|
|
111
|
-
}, true).catch(err => reject(err));
|
|
125
|
+
}, true).catch((err) => reject(err));
|
|
112
126
|
}
|
|
113
127
|
});
|
|
114
128
|
}
|
|
@@ -116,94 +130,95 @@ async function createConnectionAsync(options, oncreate, useTLS) {
|
|
|
116
130
|
const lookup = options.__testHookLookup || lookupAddresses;
|
|
117
131
|
const hostname = clientRequestArgsToHostName(options);
|
|
118
132
|
const addresses = await lookup(hostname);
|
|
119
|
-
const dnsLookupAt = (0,
|
|
120
|
-
const sockets = new Set();
|
|
133
|
+
const dnsLookupAt = (0, import_time.monotonicTime)();
|
|
134
|
+
const sockets = /* @__PURE__ */ new Set();
|
|
121
135
|
let firstError;
|
|
122
136
|
let errorCount = 0;
|
|
123
137
|
const handleError = (socket, err) => {
|
|
124
|
-
if (!sockets.delete(socket))
|
|
138
|
+
if (!sockets.delete(socket))
|
|
139
|
+
return;
|
|
125
140
|
++errorCount;
|
|
126
|
-
firstError
|
|
127
|
-
if (errorCount === addresses.length)
|
|
141
|
+
firstError ??= err;
|
|
142
|
+
if (errorCount === addresses.length)
|
|
143
|
+
oncreate?.(firstError);
|
|
128
144
|
};
|
|
129
|
-
const connected = new
|
|
130
|
-
for (const {
|
|
131
|
-
|
|
132
|
-
} of addresses) {
|
|
133
|
-
const socket = useTLS ? _tls.default.connect({
|
|
145
|
+
const connected = new import_manualPromise.ManualPromise();
|
|
146
|
+
for (const { address } of addresses) {
|
|
147
|
+
const socket = useTLS ? import_tls.default.connect({
|
|
134
148
|
...options,
|
|
135
149
|
port: options.port,
|
|
136
150
|
host: address,
|
|
137
151
|
servername: hostname
|
|
138
|
-
}) :
|
|
152
|
+
}) : import_net.default.createConnection({
|
|
139
153
|
...options,
|
|
140
154
|
port: options.port,
|
|
141
155
|
host: address
|
|
142
156
|
});
|
|
143
|
-
|
|
144
|
-
// Socket created
|
|
145
157
|
checklyTimings.values.socket = performance.now() - checklyTimings.values.startTimeNow;
|
|
146
158
|
socket[kDNSLookupAt] = dnsLookupAt;
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
// None of these events are fired after socket.destroy() is called.
|
|
150
|
-
socket.on('connect', () => {
|
|
151
|
-
socket[kTCPConnectionAt] = (0, _time.monotonicTime)();
|
|
159
|
+
socket.on("connect", () => {
|
|
160
|
+
socket[kTCPConnectionAt] = (0, import_time.monotonicTime)();
|
|
152
161
|
checklyTimings.values.connect = performance.now() - checklyTimings.values.startTimeNow;
|
|
153
162
|
connected.resolve();
|
|
154
|
-
oncreate
|
|
155
|
-
// TODO: Cache the result?
|
|
156
|
-
// Close other outstanding sockets.
|
|
163
|
+
oncreate?.(null, socket);
|
|
157
164
|
sockets.delete(socket);
|
|
158
|
-
for (const s of sockets)
|
|
165
|
+
for (const s of sockets)
|
|
166
|
+
s.destroy();
|
|
159
167
|
sockets.clear();
|
|
160
168
|
});
|
|
161
|
-
socket.on(
|
|
162
|
-
// Timeout is not an error, so we have to manually close the socket.
|
|
169
|
+
socket.on("timeout", () => {
|
|
163
170
|
socket.destroy();
|
|
164
|
-
handleError(socket, new Error(
|
|
171
|
+
handleError(socket, new Error("Connection timeout"));
|
|
165
172
|
});
|
|
166
|
-
socket.on(
|
|
173
|
+
socket.on("error", (e) => handleError(socket, e));
|
|
167
174
|
sockets.add(socket);
|
|
168
|
-
await Promise.race([
|
|
169
|
-
|
|
175
|
+
await Promise.race([
|
|
176
|
+
connected,
|
|
177
|
+
new Promise((f) => setTimeout(f, connectionAttemptDelayMs))
|
|
178
|
+
]);
|
|
179
|
+
if (connected.isDone())
|
|
180
|
+
break;
|
|
170
181
|
}
|
|
171
182
|
}
|
|
172
183
|
async function lookupAddresses(hostname) {
|
|
173
|
-
const addresses = await
|
|
174
|
-
all: true,
|
|
175
|
-
family: 0,
|
|
176
|
-
verbatim: true
|
|
177
|
-
});
|
|
184
|
+
const addresses = await import_dns.default.promises.lookup(hostname, { all: true, family: 0, verbatim: true });
|
|
178
185
|
checklyTimings.values.lookup = performance.now() - checklyTimings.values.startTimeNow;
|
|
179
|
-
let firstFamily = addresses.filter(({
|
|
180
|
-
|
|
181
|
-
}) => family === 6);
|
|
182
|
-
let secondFamily = addresses.filter(({
|
|
183
|
-
family
|
|
184
|
-
}) => family === 4);
|
|
185
|
-
// Make sure first address in the list is the same as in the original order.
|
|
186
|
+
let firstFamily = addresses.filter(({ family }) => family === 6);
|
|
187
|
+
let secondFamily = addresses.filter(({ family }) => family === 4);
|
|
186
188
|
if (firstFamily.length && firstFamily[0] !== addresses[0]) {
|
|
187
189
|
const tmp = firstFamily;
|
|
188
190
|
firstFamily = secondFamily;
|
|
189
191
|
secondFamily = tmp;
|
|
190
192
|
}
|
|
191
193
|
const result = [];
|
|
192
|
-
// Alternate ipv6 and ipv4 addresses.
|
|
193
194
|
for (let i = 0; i < Math.max(firstFamily.length, secondFamily.length); i++) {
|
|
194
|
-
if (firstFamily[i])
|
|
195
|
-
|
|
195
|
+
if (firstFamily[i])
|
|
196
|
+
result.push(firstFamily[i]);
|
|
197
|
+
if (secondFamily[i])
|
|
198
|
+
result.push(secondFamily[i]);
|
|
196
199
|
}
|
|
197
200
|
return result;
|
|
198
201
|
}
|
|
199
202
|
function clientRequestArgsToHostName(options) {
|
|
200
|
-
if (options.hostname)
|
|
201
|
-
|
|
202
|
-
|
|
203
|
+
if (options.hostname)
|
|
204
|
+
return options.hostname;
|
|
205
|
+
if (options.host)
|
|
206
|
+
return options.host;
|
|
207
|
+
throw new Error("Either options.hostname or options.host must be provided");
|
|
203
208
|
}
|
|
204
209
|
function timingForSocket(socket) {
|
|
205
210
|
return {
|
|
206
211
|
dnsLookupAt: socket[kDNSLookupAt],
|
|
207
212
|
tcpConnectionAt: socket[kTCPConnectionAt]
|
|
208
213
|
};
|
|
209
|
-
}
|
|
214
|
+
}
|
|
215
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
216
|
+
0 && (module.exports = {
|
|
217
|
+
createConnectionAsync,
|
|
218
|
+
createSocket,
|
|
219
|
+
createTLSSocket,
|
|
220
|
+
httpHappyEyeballsAgent,
|
|
221
|
+
httpHappyEyeballsTimings,
|
|
222
|
+
httpsHappyEyeballsAgent,
|
|
223
|
+
timingForSocket
|
|
224
|
+
});
|