patchright-core 1.51.2 → 1.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browsers.json +15 -13
- package/lib/androidServerImpl.js +42 -48
- package/lib/browserServerImpl.js +54 -67
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +312 -328
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +141 -228
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +57 -61
- package/lib/client/browserContext.js +297 -326
- package/lib/client/browserType.js +92 -106
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +82 -95
- package/lib/client/clientHelper.js +46 -38
- 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 +190 -212
- 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 +73 -75
- package/lib/client/elementHandle.js +111 -147
- 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 +135 -158
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +187 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +40 -69
- package/lib/client/jsHandle.js +54 -69
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -28
- package/lib/client/locator.js +161 -245
- package/lib/client/network.js +277 -295
- package/lib/client/page.js +270 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -66
- package/lib/client/selectors.js +48 -46
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +49 -39
- package/lib/client/tracing.js +48 -84
- 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 +61 -56
- package/lib/client/worker.js +48 -58
- package/lib/client/writableStream.js +27 -23
- package/lib/generated/clockSource.js +26 -5
- package/lib/generated/consoleApiSource.js +26 -5
- package/lib/generated/injectedScriptSource.js +26 -5
- package/lib/generated/pollingRecorderSource.js +26 -5
- package/lib/generated/utilityScriptSource.js +26 -5
- package/lib/generated/webSocketMockSource.js +375 -4
- package/lib/inProcessFactory.js +53 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +53 -46
- package/lib/protocol/debug.js +209 -25
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2714 -2714
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +140 -157
- package/lib/remote/playwrightServer.js +99 -84
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +216 -209
- package/lib/server/android/backendAdb.js +89 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +221 -155
- package/lib/server/bidi/bidiChromium.js +106 -79
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +128 -113
- package/lib/server/bidi/bidiFirefox.js +76 -69
- package/lib/server/bidi/bidiInput.js +86 -97
- package/lib/server/bidi/bidiNetworkManager.js +137 -154
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +247 -219
- 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 +144 -131
- 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 +76 -84
- package/lib/server/browserContext.js +321 -346
- package/lib/server/browserType.js +169 -182
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +212 -190
- package/lib/server/chromium/chromiumSwitches.js +86 -64
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +253 -273
- package/lib/server/chromium/crConnection.js +91 -116
- package/lib/server/chromium/crCoverage.js +113 -127
- package/lib/server/chromium/crDevTools.js +59 -51
- package/lib/server/chromium/crDragDrop.js +62 -79
- package/lib/server/chromium/crExecutionContext.js +88 -83
- package/lib/server/chromium/crInput.js +97 -95
- package/lib/server/chromium/crNetworkManager.js +288 -403
- package/lib/server/chromium/crPage.js +522 -608
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +82 -67
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +65 -99
- package/lib/server/clock.js +62 -50
- package/lib/server/codegen/csharp.js +185 -160
- package/lib/server/codegen/java.js +155 -128
- 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 +140 -125
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +105 -86
- package/lib/server/debugController.js +97 -124
- package/lib/server/debugger.js +82 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +50 -50
- package/lib/server/dialog.js +36 -35
- package/lib/server/dispatchers/androidDispatcher.js +196 -107
- package/lib/server/dispatchers/artifactDispatcher.js +62 -62
- package/lib/server/dispatchers/browserContextDispatcher.js +176 -205
- package/lib/server/dispatchers/browserDispatcher.js +78 -97
- package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
- package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
- package/lib/server/dispatchers/debugControllerDispatcher.js +48 -66
- package/lib/server/dispatchers/dialogDispatcher.js +30 -27
- package/lib/server/dispatchers/dispatcher.js +169 -220
- package/lib/server/dispatchers/electronDispatcher.js +54 -57
- package/lib/server/dispatchers/elementHandlerDispatcher.js +77 -119
- package/lib/server/dispatchers/frameDispatcher.js +99 -163
- package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
- package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
- package/lib/server/dispatchers/localUtilsDispatcher.js +95 -80
- package/lib/server/dispatchers/networkDispatchers.js +90 -107
- package/lib/server/dispatchers/pageDispatcher.js +128 -169
- package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
- package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
- package/lib/server/dispatchers/streamDispatcher.js +42 -45
- package/lib/server/dispatchers/tracingDispatcher.js +36 -41
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +96 -131
- package/lib/server/dispatchers/writableStreamDispatcher.js +54 -38
- package/lib/server/dom.js +413 -443
- package/lib/server/download.js +45 -35
- package/lib/server/electron/electron.js +156 -176
- package/lib/server/electron/loader.js +8 -36
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +289 -323
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +65 -59
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +213 -277
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +91 -73
- package/lib/server/firefox/ffInput.js +67 -69
- package/lib/server/firefox/ffNetworkManager.js +131 -110
- package/lib/server/firefox/ffPage.js +236 -273
- package/lib/server/firefox/firefox.js +76 -67
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +77 -111
- package/lib/server/frames.js +741 -891
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +287 -222
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +56 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +134 -163
- package/lib/server/instrumentation.js +49 -44
- package/lib/server/javascript.js +143 -134
- package/lib/server/launchApp.js +92 -73
- package/lib/server/localUtils.js +130 -122
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +262 -296
- package/lib/server/page.js +329 -426
- package/lib/server/pageBinding.js +88 -0
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +60 -67
- package/lib/server/progress.js +56 -51
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +70 -86
- package/lib/server/recorder/contextRecorder.js +134 -138
- package/lib/server/recorder/recorderApp.js +127 -136
- package/lib/server/recorder/recorderCollection.js +56 -44
- package/lib/server/recorder/recorderFrontend.js +15 -4
- package/lib/server/recorder/recorderRunner.js +79 -103
- package/lib/server/recorder/recorderUtils.js +56 -45
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +177 -186
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +904 -792
- package/lib/server/registry/nativeDeps.js +1073 -464
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +166 -182
- package/lib/server/selectors.js +85 -46
- package/lib/server/socksClientCertificatesInterceptor.js +166 -185
- package/lib/server/socksInterceptor.js +62 -70
- package/lib/server/storageScript.js +94 -100
- package/lib/server/timeoutSettings.js +58 -43
- package/lib/server/trace/recorder/snapshotter.js +70 -89
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +321 -333
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +168 -146
- package/lib/server/transport.js +124 -133
- 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 +37 -28
- package/lib/server/utils/debugLogger.js +69 -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 +138 -123
- 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 +143 -86
- 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 +73 -69
- 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 +76 -63
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +159 -176
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +84 -70
- package/lib/server/webkit/wkInput.js +82 -80
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +525 -619
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +77 -77
- package/lib/utils/isomorphic/ariaSnapshot.js +144 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/builtins.js +90 -0
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +121 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +340 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +47 -39
- package/lib/utils/isomorphic/mimeType.js +448 -25
- package/lib/utils/isomorphic/multimap.js +35 -27
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +183 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +113 -106
- package/lib/utils/isomorphic/time.js +41 -22
- package/lib/utils/isomorphic/timeoutRunner.js +55 -54
- package/lib/utils/isomorphic/traceUtils.js +38 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +112 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
- package/lib/utils.js +97 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/vite/htmlReport/index.html +21 -15
- package/lib/vite/recorder/assets/{codeMirrorModule-B9YMkrwa.js → codeMirrorModule-DVQi6prl.js} +1 -1
- package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
- package/lib/vite/recorder/index.html +1 -1
- package/lib/vite/traceViewer/assets/{codeMirrorModule-DpJ-EmBQ.js → codeMirrorModule-dvXVzLxY.js} +1 -1
- package/lib/vite/traceViewer/assets/defaultSettingsView-BjymbO6M.js +265 -0
- package/lib/vite/traceViewer/{defaultSettingsView.5fN5lw10.css → defaultSettingsView.QdHITyLI.css} +1 -1
- package/lib/vite/traceViewer/index.ChIUCJnj.js +2 -0
- package/lib/vite/traceViewer/index.html +3 -3
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/uiMode.html +3 -3
- package/lib/vite/traceViewer/uiMode.jUCiCtdp.js +5 -0
- package/lib/zipBundle.js +32 -23
- package/package.json +1 -1
- package/types/protocol.d.ts +436 -17
- package/types/types.d.ts +35 -16
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
- package/lib/vite/traceViewer/assets/defaultSettingsView-DTenqiGw.js +0 -259
- package/lib/vite/traceViewer/index.CUq7VgrV.js +0 -2
- package/lib/vite/traceViewer/uiMode.CHJSAD7F.js +0 -5
|
@@ -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,102 +1,115 @@
|
|
|
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
|
+
httpsHappyEyeballsAgent: () => httpsHappyEyeballsAgent,
|
|
36
|
+
timingForSocket: () => timingForSocket
|
|
5
37
|
});
|
|
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)
|
|
38
|
+
module.exports = __toCommonJS(happyEyeballs_exports);
|
|
39
|
+
var import_dns = __toESM(require("dns"));
|
|
40
|
+
var import_http = __toESM(require("http"));
|
|
41
|
+
var import_https = __toESM(require("https"));
|
|
42
|
+
var import_net = __toESM(require("net"));
|
|
43
|
+
var import_tls = __toESM(require("tls"));
|
|
44
|
+
var import_assert = require("../../utils/isomorphic/assert");
|
|
45
|
+
var import_manualPromise = require("../../utils/isomorphic/manualPromise");
|
|
46
|
+
var import_time = require("../../utils/isomorphic/time");
|
|
40
47
|
const connectionAttemptDelayMs = 300;
|
|
41
|
-
const kDNSLookupAt = Symbol(
|
|
42
|
-
const kTCPConnectionAt = Symbol(
|
|
43
|
-
class HttpHappyEyeballsAgent extends
|
|
48
|
+
const kDNSLookupAt = Symbol("kDNSLookupAt");
|
|
49
|
+
const kTCPConnectionAt = Symbol("kTCPConnectionAt");
|
|
50
|
+
class HttpHappyEyeballsAgent extends import_http.default.Agent {
|
|
44
51
|
createConnection(options, oncreate) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
createConnectionAsync(
|
|
52
|
+
if (import_net.default.isIP(clientRequestArgsToHostName(options)))
|
|
53
|
+
return import_net.default.createConnection(options);
|
|
54
|
+
createConnectionAsync(
|
|
55
|
+
options,
|
|
56
|
+
oncreate,
|
|
57
|
+
/* useTLS */
|
|
58
|
+
false
|
|
59
|
+
).catch((err) => oncreate?.(err));
|
|
48
60
|
}
|
|
49
61
|
}
|
|
50
|
-
class HttpsHappyEyeballsAgent extends
|
|
62
|
+
class HttpsHappyEyeballsAgent extends import_https.default.Agent {
|
|
51
63
|
createConnection(options, oncreate) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
createConnectionAsync(
|
|
64
|
+
if (import_net.default.isIP(clientRequestArgsToHostName(options)))
|
|
65
|
+
return import_tls.default.connect(options);
|
|
66
|
+
createConnectionAsync(
|
|
67
|
+
options,
|
|
68
|
+
oncreate,
|
|
69
|
+
/* useTLS */
|
|
70
|
+
true
|
|
71
|
+
).catch((err) => oncreate?.(err));
|
|
55
72
|
}
|
|
56
73
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const httpsHappyEyeballsAgent = exports.httpsHappyEyeballsAgent = new HttpsHappyEyeballsAgent({
|
|
60
|
-
keepAlive: true
|
|
61
|
-
});
|
|
62
|
-
const httpHappyEyeballsAgent = exports.httpHappyEyeballsAgent = new HttpHappyEyeballsAgent({
|
|
63
|
-
keepAlive: true
|
|
64
|
-
});
|
|
74
|
+
const httpsHappyEyeballsAgent = new HttpsHappyEyeballsAgent({ keepAlive: true });
|
|
75
|
+
const httpHappyEyeballsAgent = new HttpHappyEyeballsAgent({ keepAlive: true });
|
|
65
76
|
async function createSocket(host, port) {
|
|
66
77
|
return new Promise((resolve, reject) => {
|
|
67
|
-
if (
|
|
68
|
-
const socket =
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
});
|
|
72
|
-
socket.on('connect', () => resolve(socket));
|
|
73
|
-
socket.on('error', error => reject(error));
|
|
78
|
+
if (import_net.default.isIP(host)) {
|
|
79
|
+
const socket = import_net.default.createConnection({ host, port });
|
|
80
|
+
socket.on("connect", () => resolve(socket));
|
|
81
|
+
socket.on("error", (error) => reject(error));
|
|
74
82
|
} else {
|
|
75
|
-
createConnectionAsync(
|
|
76
|
-
host,
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
83
|
+
createConnectionAsync(
|
|
84
|
+
{ host, port },
|
|
85
|
+
(err, socket) => {
|
|
86
|
+
if (err)
|
|
87
|
+
reject(err);
|
|
88
|
+
if (socket)
|
|
89
|
+
resolve(socket);
|
|
90
|
+
},
|
|
91
|
+
/* useTLS */
|
|
92
|
+
false
|
|
93
|
+
).catch((err) => reject(err));
|
|
82
94
|
}
|
|
83
95
|
});
|
|
84
96
|
}
|
|
85
97
|
async function createTLSSocket(options) {
|
|
86
98
|
return new Promise((resolve, reject) => {
|
|
87
|
-
(0,
|
|
88
|
-
if (
|
|
89
|
-
const socket =
|
|
90
|
-
socket.on(
|
|
91
|
-
socket.on(
|
|
99
|
+
(0, import_assert.assert)(options.host, "host is required");
|
|
100
|
+
if (import_net.default.isIP(options.host)) {
|
|
101
|
+
const socket = import_tls.default.connect(options);
|
|
102
|
+
socket.on("secureConnect", () => resolve(socket));
|
|
103
|
+
socket.on("error", (error) => reject(error));
|
|
92
104
|
} else {
|
|
93
105
|
createConnectionAsync(options, (err, socket) => {
|
|
94
|
-
if (err)
|
|
106
|
+
if (err)
|
|
107
|
+
reject(err);
|
|
95
108
|
if (socket) {
|
|
96
|
-
socket.on(
|
|
97
|
-
socket.on(
|
|
109
|
+
socket.on("secureConnect", () => resolve(socket));
|
|
110
|
+
socket.on("error", (error) => reject(error));
|
|
98
111
|
}
|
|
99
|
-
}, true).catch(err => reject(err));
|
|
112
|
+
}, true).catch((err) => reject(err));
|
|
100
113
|
}
|
|
101
114
|
});
|
|
102
115
|
}
|
|
@@ -104,89 +117,91 @@ async function createConnectionAsync(options, oncreate, useTLS) {
|
|
|
104
117
|
const lookup = options.__testHookLookup || lookupAddresses;
|
|
105
118
|
const hostname = clientRequestArgsToHostName(options);
|
|
106
119
|
const addresses = await lookup(hostname);
|
|
107
|
-
const dnsLookupAt = (0,
|
|
108
|
-
const sockets = new Set();
|
|
120
|
+
const dnsLookupAt = (0, import_time.monotonicTime)();
|
|
121
|
+
const sockets = /* @__PURE__ */ new Set();
|
|
109
122
|
let firstError;
|
|
110
123
|
let errorCount = 0;
|
|
111
124
|
const handleError = (socket, err) => {
|
|
112
|
-
if (!sockets.delete(socket))
|
|
125
|
+
if (!sockets.delete(socket))
|
|
126
|
+
return;
|
|
113
127
|
++errorCount;
|
|
114
|
-
firstError
|
|
115
|
-
if (errorCount === addresses.length)
|
|
128
|
+
firstError ??= err;
|
|
129
|
+
if (errorCount === addresses.length)
|
|
130
|
+
oncreate?.(firstError);
|
|
116
131
|
};
|
|
117
|
-
const connected = new
|
|
118
|
-
for (const {
|
|
119
|
-
|
|
120
|
-
} of addresses) {
|
|
121
|
-
const socket = useTLS ? _tls.default.connect({
|
|
132
|
+
const connected = new import_manualPromise.ManualPromise();
|
|
133
|
+
for (const { address } of addresses) {
|
|
134
|
+
const socket = useTLS ? import_tls.default.connect({
|
|
122
135
|
...options,
|
|
123
136
|
port: options.port,
|
|
124
137
|
host: address,
|
|
125
138
|
servername: hostname
|
|
126
|
-
}) :
|
|
139
|
+
}) : import_net.default.createConnection({
|
|
127
140
|
...options,
|
|
128
141
|
port: options.port,
|
|
129
142
|
host: address
|
|
130
143
|
});
|
|
131
144
|
socket[kDNSLookupAt] = dnsLookupAt;
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
// None of these events are fired after socket.destroy() is called.
|
|
135
|
-
socket.on('connect', () => {
|
|
136
|
-
socket[kTCPConnectionAt] = (0, _time.monotonicTime)();
|
|
145
|
+
socket.on("connect", () => {
|
|
146
|
+
socket[kTCPConnectionAt] = (0, import_time.monotonicTime)();
|
|
137
147
|
connected.resolve();
|
|
138
|
-
oncreate
|
|
139
|
-
// TODO: Cache the result?
|
|
140
|
-
// Close other outstanding sockets.
|
|
148
|
+
oncreate?.(null, socket);
|
|
141
149
|
sockets.delete(socket);
|
|
142
|
-
for (const s of sockets)
|
|
150
|
+
for (const s of sockets)
|
|
151
|
+
s.destroy();
|
|
143
152
|
sockets.clear();
|
|
144
153
|
});
|
|
145
|
-
socket.on(
|
|
146
|
-
// Timeout is not an error, so we have to manually close the socket.
|
|
154
|
+
socket.on("timeout", () => {
|
|
147
155
|
socket.destroy();
|
|
148
|
-
handleError(socket, new Error(
|
|
156
|
+
handleError(socket, new Error("Connection timeout"));
|
|
149
157
|
});
|
|
150
|
-
socket.on(
|
|
158
|
+
socket.on("error", (e) => handleError(socket, e));
|
|
151
159
|
sockets.add(socket);
|
|
152
|
-
await Promise.race([
|
|
153
|
-
|
|
160
|
+
await Promise.race([
|
|
161
|
+
connected,
|
|
162
|
+
new Promise((f) => setTimeout(f, connectionAttemptDelayMs))
|
|
163
|
+
]);
|
|
164
|
+
if (connected.isDone())
|
|
165
|
+
break;
|
|
154
166
|
}
|
|
155
167
|
}
|
|
156
168
|
async function lookupAddresses(hostname) {
|
|
157
|
-
const addresses = await
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
verbatim: true
|
|
161
|
-
});
|
|
162
|
-
let firstFamily = addresses.filter(({
|
|
163
|
-
family
|
|
164
|
-
}) => family === 6);
|
|
165
|
-
let secondFamily = addresses.filter(({
|
|
166
|
-
family
|
|
167
|
-
}) => family === 4);
|
|
168
|
-
// Make sure first address in the list is the same as in the original order.
|
|
169
|
+
const addresses = await import_dns.default.promises.lookup(hostname, { all: true, family: 0, verbatim: true });
|
|
170
|
+
let firstFamily = addresses.filter(({ family }) => family === 6);
|
|
171
|
+
let secondFamily = addresses.filter(({ family }) => family === 4);
|
|
169
172
|
if (firstFamily.length && firstFamily[0] !== addresses[0]) {
|
|
170
173
|
const tmp = firstFamily;
|
|
171
174
|
firstFamily = secondFamily;
|
|
172
175
|
secondFamily = tmp;
|
|
173
176
|
}
|
|
174
177
|
const result = [];
|
|
175
|
-
// Alternate ipv6 and ipv4 addresses.
|
|
176
178
|
for (let i = 0; i < Math.max(firstFamily.length, secondFamily.length); i++) {
|
|
177
|
-
if (firstFamily[i])
|
|
178
|
-
|
|
179
|
+
if (firstFamily[i])
|
|
180
|
+
result.push(firstFamily[i]);
|
|
181
|
+
if (secondFamily[i])
|
|
182
|
+
result.push(secondFamily[i]);
|
|
179
183
|
}
|
|
180
184
|
return result;
|
|
181
185
|
}
|
|
182
186
|
function clientRequestArgsToHostName(options) {
|
|
183
|
-
if (options.hostname)
|
|
184
|
-
|
|
185
|
-
|
|
187
|
+
if (options.hostname)
|
|
188
|
+
return options.hostname;
|
|
189
|
+
if (options.host)
|
|
190
|
+
return options.host;
|
|
191
|
+
throw new Error("Either options.hostname or options.host must be provided");
|
|
186
192
|
}
|
|
187
193
|
function timingForSocket(socket) {
|
|
188
194
|
return {
|
|
189
195
|
dnsLookupAt: socket[kDNSLookupAt],
|
|
190
196
|
tcpConnectionAt: socket[kTCPConnectionAt]
|
|
191
197
|
};
|
|
192
|
-
}
|
|
198
|
+
}
|
|
199
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
200
|
+
0 && (module.exports = {
|
|
201
|
+
createConnectionAsync,
|
|
202
|
+
createSocket,
|
|
203
|
+
createTLSSocket,
|
|
204
|
+
httpHappyEyeballsAgent,
|
|
205
|
+
httpsHappyEyeballsAgent,
|
|
206
|
+
timingForSocket
|
|
207
|
+
});
|