@checkly/playwright-core 1.51.17-beta.1 → 1.54.2-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ThirdPartyNotices.txt +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 -36
- 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 +90 -113
- 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-DrMbgOIo.js +0 -16684
- package/lib/vite/recorder/assets/codeMirrorModule-DuST8d_k.css +0 -344
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-5NM3V7eb.css +0 -2524
- package/lib/vite/recorder/assets/index-CT-scFHn.js +0 -16848
- package/lib/vite/recorder/index.html +0 -29
- package/lib/vite/recorder/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/assets/codeMirrorModule-CB-2okZ8.js +0 -16684
- package/lib/vite/traceViewer/assets/defaultSettingsView-CBiB4avC.js +0 -217
- package/lib/vite/traceViewer/assets/inspectorTab-CwgfffWb.js +0 -25143
- package/lib/vite/traceViewer/assets/workbench-CWZselvp.js +0 -2470
- package/lib/vite/traceViewer/assets/xtermModule-Es_gt_u7.js +0 -5994
- package/lib/vite/traceViewer/codeMirrorModule.DuST8d_k.css +0 -344
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/defaultSettingsView.Dp3b_92q.css +0 -41
- package/lib/vite/traceViewer/embedded.BeldSa2G.css +0 -68
- package/lib/vite/traceViewer/embedded.gzudoghF.js +0 -106
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/index.DilotR1h.js +0 -314
- package/lib/vite/traceViewer/index.QewjJ85u.css +0 -131
- package/lib/vite/traceViewer/index.html +0 -47
- package/lib/vite/traceViewer/inspectorTab.DnGm18kV.css +0 -3178
- package/lib/vite/traceViewer/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/recorder.DLgqV9db.css +0 -15
- package/lib/vite/traceViewer/recorder.DVrkq3Um.js +0 -551
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/snapshot.html +0 -21
- package/lib/vite/traceViewer/sw.bundle.js +0 -3
- package/lib/vite/traceViewer/uiMode.C9_OcpPU.js +0 -1756
- package/lib/vite/traceViewer/uiMode.c5ORgcrX.css +0 -1424
- package/lib/vite/traceViewer/uiMode.html +0 -21
- package/lib/vite/traceViewer/workbench.xUZSA8PY.css +0 -787
- package/lib/vite/traceViewer/xtermModule.EsaqrrTX.css +0 -209
|
@@ -1,28 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty
|
|
4
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var hostPlatform_exports = {};
|
|
30
|
+
__export(hostPlatform_exports, {
|
|
31
|
+
hostPlatform: () => hostPlatform,
|
|
32
|
+
isOfficiallySupportedPlatform: () => isOfficiallySupportedPlatform
|
|
5
33
|
});
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
-
/**
|
|
11
|
-
* Copyright (c) Microsoft Corporation.
|
|
12
|
-
*
|
|
13
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
14
|
-
* you may not use this file except in compliance with the License.
|
|
15
|
-
* You may obtain a copy of the License at
|
|
16
|
-
*
|
|
17
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
-
*
|
|
19
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
20
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
21
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
22
|
-
* See the License for the specific language governing permissions and
|
|
23
|
-
* limitations under the License.
|
|
24
|
-
*/
|
|
25
|
-
|
|
34
|
+
module.exports = __toCommonJS(hostPlatform_exports);
|
|
35
|
+
var import_os = __toESM(require("os"));
|
|
36
|
+
var import_linuxUtils = require("./linuxUtils");
|
|
26
37
|
function calculatePlatform() {
|
|
27
38
|
if (process.env.PLAYWRIGHT_HOST_PLATFORM_OVERRIDE) {
|
|
28
39
|
return {
|
|
@@ -30,116 +41,69 @@ function calculatePlatform() {
|
|
|
30
41
|
isOfficiallySupportedPlatform: false
|
|
31
42
|
};
|
|
32
43
|
}
|
|
33
|
-
const platform =
|
|
34
|
-
if (platform ===
|
|
35
|
-
const ver =
|
|
36
|
-
let macVersion =
|
|
44
|
+
const platform = import_os.default.platform();
|
|
45
|
+
if (platform === "darwin") {
|
|
46
|
+
const ver = import_os.default.release().split(".").map((a) => parseInt(a, 10));
|
|
47
|
+
let macVersion = "";
|
|
37
48
|
if (ver[0] < 18) {
|
|
38
|
-
|
|
39
|
-
macVersion = 'mac10.13';
|
|
49
|
+
macVersion = "mac10.13";
|
|
40
50
|
} else if (ver[0] === 18) {
|
|
41
|
-
macVersion =
|
|
51
|
+
macVersion = "mac10.14";
|
|
42
52
|
} else if (ver[0] === 19) {
|
|
43
|
-
macVersion =
|
|
53
|
+
macVersion = "mac10.15";
|
|
44
54
|
} else {
|
|
45
|
-
// ver[0] >= 20
|
|
46
55
|
const LAST_STABLE_MACOS_MAJOR_VERSION = 15;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (_os.default.cpus().some(cpu => cpu.model.includes('Apple'))) macVersion += '-arm64';
|
|
56
|
+
macVersion = "mac" + Math.min(ver[0] - 9, LAST_STABLE_MACOS_MAJOR_VERSION);
|
|
57
|
+
if (import_os.default.cpus().some((cpu) => cpu.model.includes("Apple")))
|
|
58
|
+
macVersion += "-arm64";
|
|
51
59
|
}
|
|
52
|
-
return {
|
|
53
|
-
hostPlatform: macVersion,
|
|
54
|
-
isOfficiallySupportedPlatform: true
|
|
55
|
-
};
|
|
60
|
+
return { hostPlatform: macVersion, isOfficiallySupportedPlatform: true };
|
|
56
61
|
}
|
|
57
|
-
if (platform ===
|
|
58
|
-
if (![
|
|
59
|
-
hostPlatform:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
// Pop!_OS is ubuntu-based and has the same versions.
|
|
66
|
-
// KDE Neon is ubuntu-based and has the same versions.
|
|
67
|
-
// TUXEDO OS is ubuntu-based and has the same versions.
|
|
68
|
-
if ((distroInfo === null || distroInfo === void 0 ? void 0 : distroInfo.id) === 'ubuntu' || (distroInfo === null || distroInfo === void 0 ? void 0 : distroInfo.id) === 'pop' || (distroInfo === null || distroInfo === void 0 ? void 0 : distroInfo.id) === 'neon' || (distroInfo === null || distroInfo === void 0 ? void 0 : distroInfo.id) === 'tuxedo') {
|
|
69
|
-
const isUbuntu = (distroInfo === null || distroInfo === void 0 ? void 0 : distroInfo.id) === 'ubuntu';
|
|
70
|
-
const version = distroInfo === null || distroInfo === void 0 ? void 0 : distroInfo.version;
|
|
62
|
+
if (platform === "linux") {
|
|
63
|
+
if (!["x64", "arm64"].includes(import_os.default.arch()))
|
|
64
|
+
return { hostPlatform: "<unknown>", isOfficiallySupportedPlatform: false };
|
|
65
|
+
const archSuffix = "-" + import_os.default.arch();
|
|
66
|
+
const distroInfo = (0, import_linuxUtils.getLinuxDistributionInfoSync)();
|
|
67
|
+
if (distroInfo?.id === "ubuntu" || distroInfo?.id === "pop" || distroInfo?.id === "neon" || distroInfo?.id === "tuxedo") {
|
|
68
|
+
const isUbuntu = distroInfo?.id === "ubuntu";
|
|
69
|
+
const version = distroInfo?.version;
|
|
71
70
|
const major = parseInt(distroInfo.version, 10);
|
|
72
|
-
if (major < 20)
|
|
73
|
-
hostPlatform:
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (major <
|
|
77
|
-
hostPlatform:
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
hostPlatform: 'ubuntu22.04' + archSuffix,
|
|
82
|
-
isOfficiallySupportedPlatform: isUbuntu && version === '22.04'
|
|
83
|
-
};
|
|
84
|
-
if (major < 26) return {
|
|
85
|
-
hostPlatform: 'ubuntu24.04' + archSuffix,
|
|
86
|
-
isOfficiallySupportedPlatform: isUbuntu && version === '24.04'
|
|
87
|
-
};
|
|
88
|
-
return {
|
|
89
|
-
hostPlatform: 'ubuntu' + distroInfo.version + archSuffix,
|
|
90
|
-
isOfficiallySupportedPlatform: false
|
|
91
|
-
};
|
|
71
|
+
if (major < 20)
|
|
72
|
+
return { hostPlatform: "ubuntu18.04" + archSuffix, isOfficiallySupportedPlatform: false };
|
|
73
|
+
if (major < 22)
|
|
74
|
+
return { hostPlatform: "ubuntu20.04" + archSuffix, isOfficiallySupportedPlatform: isUbuntu && version === "20.04" };
|
|
75
|
+
if (major < 24)
|
|
76
|
+
return { hostPlatform: "ubuntu22.04" + archSuffix, isOfficiallySupportedPlatform: isUbuntu && version === "22.04" };
|
|
77
|
+
if (major < 26)
|
|
78
|
+
return { hostPlatform: "ubuntu24.04" + archSuffix, isOfficiallySupportedPlatform: isUbuntu && version === "24.04" };
|
|
79
|
+
return { hostPlatform: "ubuntu" + distroInfo.version + archSuffix, isOfficiallySupportedPlatform: false };
|
|
92
80
|
}
|
|
93
|
-
|
|
94
|
-
if ((distroInfo === null || distroInfo === void 0 ? void 0 : distroInfo.id) === 'linuxmint') {
|
|
81
|
+
if (distroInfo?.id === "linuxmint") {
|
|
95
82
|
const mintMajor = parseInt(distroInfo.version, 10);
|
|
96
|
-
if (mintMajor <= 20)
|
|
97
|
-
hostPlatform:
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
hostPlatform: 'ubuntu22.04' + archSuffix,
|
|
102
|
-
isOfficiallySupportedPlatform: false
|
|
103
|
-
};
|
|
104
|
-
return {
|
|
105
|
-
hostPlatform: 'ubuntu24.04' + archSuffix,
|
|
106
|
-
isOfficiallySupportedPlatform: false
|
|
107
|
-
};
|
|
83
|
+
if (mintMajor <= 20)
|
|
84
|
+
return { hostPlatform: "ubuntu20.04" + archSuffix, isOfficiallySupportedPlatform: false };
|
|
85
|
+
if (mintMajor === 21)
|
|
86
|
+
return { hostPlatform: "ubuntu22.04" + archSuffix, isOfficiallySupportedPlatform: false };
|
|
87
|
+
return { hostPlatform: "ubuntu24.04" + archSuffix, isOfficiallySupportedPlatform: false };
|
|
108
88
|
}
|
|
109
|
-
if (
|
|
110
|
-
const
|
|
111
|
-
if (
|
|
112
|
-
hostPlatform:
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
if (
|
|
116
|
-
hostPlatform:
|
|
117
|
-
isOfficiallySupportedPlatform
|
|
118
|
-
};
|
|
119
|
-
// use most recent supported release for 'debian testing' and 'unstable'.
|
|
120
|
-
// they never include a numeric version entry in /etc/os-release.
|
|
121
|
-
if ((distroInfo === null || distroInfo === void 0 ? void 0 : distroInfo.version) === '') return {
|
|
122
|
-
hostPlatform: 'debian12' + archSuffix,
|
|
123
|
-
isOfficiallySupportedPlatform
|
|
124
|
-
};
|
|
89
|
+
if (distroInfo?.id === "debian" || distroInfo?.id === "raspbian") {
|
|
90
|
+
const isOfficiallySupportedPlatform2 = distroInfo?.id === "debian";
|
|
91
|
+
if (distroInfo?.version === "11")
|
|
92
|
+
return { hostPlatform: "debian11" + archSuffix, isOfficiallySupportedPlatform: isOfficiallySupportedPlatform2 };
|
|
93
|
+
if (distroInfo?.version === "12")
|
|
94
|
+
return { hostPlatform: "debian12" + archSuffix, isOfficiallySupportedPlatform: isOfficiallySupportedPlatform2 };
|
|
95
|
+
if (distroInfo?.version === "")
|
|
96
|
+
return { hostPlatform: "debian12" + archSuffix, isOfficiallySupportedPlatform: isOfficiallySupportedPlatform2 };
|
|
125
97
|
}
|
|
126
|
-
return {
|
|
127
|
-
hostPlatform: 'ubuntu20.04' + archSuffix,
|
|
128
|
-
isOfficiallySupportedPlatform: false
|
|
129
|
-
};
|
|
98
|
+
return { hostPlatform: "ubuntu20.04" + archSuffix, isOfficiallySupportedPlatform: false };
|
|
130
99
|
}
|
|
131
|
-
if (platform ===
|
|
132
|
-
hostPlatform:
|
|
133
|
-
|
|
134
|
-
};
|
|
135
|
-
return {
|
|
136
|
-
hostPlatform: '<unknown>',
|
|
137
|
-
isOfficiallySupportedPlatform: false
|
|
138
|
-
};
|
|
100
|
+
if (platform === "win32")
|
|
101
|
+
return { hostPlatform: "win64", isOfficiallySupportedPlatform: true };
|
|
102
|
+
return { hostPlatform: "<unknown>", isOfficiallySupportedPlatform: false };
|
|
139
103
|
}
|
|
140
|
-
const {
|
|
104
|
+
const { hostPlatform, isOfficiallySupportedPlatform } = calculatePlatform();
|
|
105
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
106
|
+
0 && (module.exports = {
|
|
141
107
|
hostPlatform,
|
|
142
108
|
isOfficiallySupportedPlatform
|
|
143
|
-
}
|
|
144
|
-
exports.isOfficiallySupportedPlatform = isOfficiallySupportedPlatform;
|
|
145
|
-
exports.hostPlatform = hostPlatform;
|
|
109
|
+
});
|
|
@@ -1,227 +1,209 @@
|
|
|
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 httpServer_exports = {};
|
|
30
|
+
__export(httpServer_exports, {
|
|
31
|
+
HttpServer: () => HttpServer
|
|
5
32
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
-
/**
|
|
16
|
-
* Copyright (c) Microsoft Corporation.
|
|
17
|
-
*
|
|
18
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
19
|
-
* you may not use this file except in compliance with the License.
|
|
20
|
-
* You may obtain a copy of the License at
|
|
21
|
-
*
|
|
22
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
23
|
-
*
|
|
24
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
25
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
26
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
27
|
-
* See the License for the specific language governing permissions and
|
|
28
|
-
* limitations under the License.
|
|
29
|
-
*/
|
|
30
|
-
|
|
33
|
+
module.exports = __toCommonJS(httpServer_exports);
|
|
34
|
+
var import_fs = __toESM(require("fs"));
|
|
35
|
+
var import_path = __toESM(require("path"));
|
|
36
|
+
var import_utilsBundle = require("../../utilsBundle");
|
|
37
|
+
var import_crypto = require("./crypto");
|
|
38
|
+
var import_assert = require("../../utils/isomorphic/assert");
|
|
39
|
+
var import_manualPromise = require("../../utils/isomorphic/manualPromise");
|
|
40
|
+
var import_network = require("./network");
|
|
31
41
|
class HttpServer {
|
|
32
42
|
constructor() {
|
|
33
|
-
this.
|
|
34
|
-
this.
|
|
35
|
-
this._urlPrefixHumanReadable = '';
|
|
43
|
+
this._urlPrefixPrecise = "";
|
|
44
|
+
this._urlPrefixHumanReadable = "";
|
|
36
45
|
this._port = 0;
|
|
37
46
|
this._started = false;
|
|
38
47
|
this._routes = [];
|
|
39
|
-
this.
|
|
40
|
-
this._server = (0, _network.createHttpServer)(this._onRequest.bind(this));
|
|
48
|
+
this._server = (0, import_network.createHttpServer)(this._onRequest.bind(this));
|
|
41
49
|
}
|
|
42
50
|
server() {
|
|
43
51
|
return this._server;
|
|
44
52
|
}
|
|
45
53
|
routePrefix(prefix, handler) {
|
|
46
|
-
this._routes.push({
|
|
47
|
-
prefix,
|
|
48
|
-
handler
|
|
49
|
-
});
|
|
54
|
+
this._routes.push({ prefix, handler });
|
|
50
55
|
}
|
|
51
|
-
routePath(
|
|
52
|
-
this._routes.push({
|
|
53
|
-
exact: path,
|
|
54
|
-
handler
|
|
55
|
-
});
|
|
56
|
+
routePath(path2, handler) {
|
|
57
|
+
this._routes.push({ exact: path2, handler });
|
|
56
58
|
}
|
|
57
59
|
port() {
|
|
58
60
|
return this._port;
|
|
59
61
|
}
|
|
60
62
|
async _tryStart(port, host) {
|
|
61
|
-
const errorPromise = new
|
|
62
|
-
const errorListener = error => errorPromise.reject(error);
|
|
63
|
-
this._server.on(
|
|
63
|
+
const errorPromise = new import_manualPromise.ManualPromise();
|
|
64
|
+
const errorListener = (error) => errorPromise.reject(error);
|
|
65
|
+
this._server.on("error", errorListener);
|
|
64
66
|
try {
|
|
65
67
|
this._server.listen(port, host);
|
|
66
|
-
await Promise.race([
|
|
68
|
+
await Promise.race([
|
|
69
|
+
new Promise((cb) => this._server.once("listening", cb)),
|
|
70
|
+
errorPromise
|
|
71
|
+
]);
|
|
67
72
|
} finally {
|
|
68
|
-
this._server.removeListener(
|
|
73
|
+
this._server.removeListener("error", errorListener);
|
|
69
74
|
}
|
|
70
75
|
}
|
|
71
76
|
createWebSocket(transport, guid) {
|
|
72
|
-
(0,
|
|
73
|
-
this._wsGuid = guid || (0,
|
|
74
|
-
const wss = new
|
|
75
|
-
|
|
76
|
-
path: '/' + this._wsGuid
|
|
77
|
-
});
|
|
78
|
-
wss.on('connection', ws => {
|
|
77
|
+
(0, import_assert.assert)(!this._wsGuid, "can only create one main websocket transport per server");
|
|
78
|
+
this._wsGuid = guid || (0, import_crypto.createGuid)();
|
|
79
|
+
const wss = new import_utilsBundle.wsServer({ server: this._server, path: "/" + this._wsGuid });
|
|
80
|
+
wss.on("connection", (ws) => {
|
|
79
81
|
transport.onconnect();
|
|
80
|
-
transport.sendEvent = (method, params) => ws.send(JSON.stringify({
|
|
81
|
-
method,
|
|
82
|
-
params
|
|
83
|
-
}));
|
|
82
|
+
transport.sendEvent = (method, params) => ws.send(JSON.stringify({ method, params }));
|
|
84
83
|
transport.close = () => ws.close();
|
|
85
|
-
ws.on(
|
|
86
|
-
const {
|
|
87
|
-
id,
|
|
88
|
-
method,
|
|
89
|
-
params
|
|
90
|
-
} = JSON.parse(String(message));
|
|
84
|
+
ws.on("message", async (message) => {
|
|
85
|
+
const { id, method, params } = JSON.parse(String(message));
|
|
91
86
|
try {
|
|
92
87
|
const result = await transport.dispatch(method, params);
|
|
93
|
-
ws.send(JSON.stringify({
|
|
94
|
-
id,
|
|
95
|
-
result
|
|
96
|
-
}));
|
|
88
|
+
ws.send(JSON.stringify({ id, result }));
|
|
97
89
|
} catch (e) {
|
|
98
|
-
ws.send(JSON.stringify({
|
|
99
|
-
id,
|
|
100
|
-
error: String(e)
|
|
101
|
-
}));
|
|
90
|
+
ws.send(JSON.stringify({ id, error: String(e) }));
|
|
102
91
|
}
|
|
103
92
|
});
|
|
104
|
-
ws.on(
|
|
105
|
-
ws.on(
|
|
93
|
+
ws.on("close", () => transport.onclose());
|
|
94
|
+
ws.on("error", () => transport.onclose());
|
|
106
95
|
});
|
|
107
96
|
}
|
|
108
97
|
wsGuid() {
|
|
109
98
|
return this._wsGuid;
|
|
110
99
|
}
|
|
111
100
|
async start(options = {}) {
|
|
112
|
-
(0,
|
|
101
|
+
(0, import_assert.assert)(!this._started, "server already started");
|
|
113
102
|
this._started = true;
|
|
114
|
-
const host = options.host ||
|
|
103
|
+
const host = options.host || "localhost";
|
|
115
104
|
if (options.preferredPort) {
|
|
116
105
|
try {
|
|
117
106
|
await this._tryStart(options.preferredPort, host);
|
|
118
107
|
} catch (e) {
|
|
119
|
-
if (!e || !e.message || !e.message.includes(
|
|
120
|
-
|
|
108
|
+
if (!e || !e.message || !e.message.includes("EADDRINUSE"))
|
|
109
|
+
throw e;
|
|
110
|
+
await this._tryStart(void 0, host);
|
|
121
111
|
}
|
|
122
112
|
} else {
|
|
123
113
|
await this._tryStart(options.port, host);
|
|
124
114
|
}
|
|
125
115
|
const address = this._server.address();
|
|
126
|
-
(0,
|
|
127
|
-
if (typeof address ===
|
|
116
|
+
(0, import_assert.assert)(address, "Could not bind server socket");
|
|
117
|
+
if (typeof address === "string") {
|
|
128
118
|
this._urlPrefixPrecise = address;
|
|
129
119
|
this._urlPrefixHumanReadable = address;
|
|
130
120
|
} else {
|
|
131
121
|
this._port = address.port;
|
|
132
|
-
const resolvedHost = address.family ===
|
|
122
|
+
const resolvedHost = address.family === "IPv4" ? address.address : `[${address.address}]`;
|
|
133
123
|
this._urlPrefixPrecise = `http://${resolvedHost}:${address.port}`;
|
|
134
124
|
this._urlPrefixHumanReadable = `http://${host}:${address.port}`;
|
|
135
125
|
}
|
|
136
126
|
}
|
|
137
127
|
async stop() {
|
|
138
|
-
await new Promise(cb => this._server.close(cb));
|
|
128
|
+
await new Promise((cb) => this._server.close(cb));
|
|
139
129
|
}
|
|
140
130
|
urlPrefix(purpose) {
|
|
141
|
-
return purpose ===
|
|
131
|
+
return purpose === "human-readable" ? this._urlPrefixHumanReadable : this._urlPrefixPrecise;
|
|
142
132
|
}
|
|
143
133
|
serveFile(request, response, absoluteFilePath, headers) {
|
|
144
134
|
try {
|
|
145
|
-
for (const [name, value] of Object.entries(headers || {}))
|
|
146
|
-
|
|
135
|
+
for (const [name, value] of Object.entries(headers || {}))
|
|
136
|
+
response.setHeader(name, value);
|
|
137
|
+
if (request.headers.range)
|
|
138
|
+
this._serveRangeFile(request, response, absoluteFilePath);
|
|
139
|
+
else
|
|
140
|
+
this._serveFile(response, absoluteFilePath);
|
|
147
141
|
return true;
|
|
148
142
|
} catch (e) {
|
|
149
143
|
return false;
|
|
150
144
|
}
|
|
151
145
|
}
|
|
152
146
|
_serveFile(response, absoluteFilePath) {
|
|
153
|
-
const content =
|
|
147
|
+
const content = import_fs.default.readFileSync(absoluteFilePath);
|
|
154
148
|
response.statusCode = 200;
|
|
155
|
-
const contentType =
|
|
156
|
-
response.setHeader(
|
|
157
|
-
response.setHeader(
|
|
149
|
+
const contentType = import_utilsBundle.mime.getType(import_path.default.extname(absoluteFilePath)) || "application/octet-stream";
|
|
150
|
+
response.setHeader("Content-Type", contentType);
|
|
151
|
+
response.setHeader("Content-Length", content.byteLength);
|
|
158
152
|
response.end(content);
|
|
159
153
|
}
|
|
160
154
|
_serveRangeFile(request, response, absoluteFilePath) {
|
|
161
155
|
const range = request.headers.range;
|
|
162
|
-
if (!range || !range.startsWith(
|
|
156
|
+
if (!range || !range.startsWith("bytes=") || range.includes(", ") || [...range].filter((char) => char === "-").length !== 1) {
|
|
163
157
|
response.statusCode = 400;
|
|
164
|
-
return response.end(
|
|
158
|
+
return response.end("Bad request");
|
|
165
159
|
}
|
|
166
|
-
|
|
167
|
-
// Parse the range header: https://datatracker.ietf.org/doc/html/rfc7233#section-2.1
|
|
168
|
-
const [startStr, endStr] = range.replace(/bytes=/, '').split('-');
|
|
169
|
-
|
|
170
|
-
// Both start and end (when passing to fs.createReadStream) and the range header are inclusive and start counting at 0.
|
|
160
|
+
const [startStr, endStr] = range.replace(/bytes=/, "").split("-");
|
|
171
161
|
let start;
|
|
172
162
|
let end;
|
|
173
|
-
const size =
|
|
174
|
-
if (startStr !==
|
|
175
|
-
// No end specified: use the whole file
|
|
163
|
+
const size = import_fs.default.statSync(absoluteFilePath).size;
|
|
164
|
+
if (startStr !== "" && endStr === "") {
|
|
176
165
|
start = +startStr;
|
|
177
166
|
end = size - 1;
|
|
178
|
-
} else if (startStr ===
|
|
179
|
-
// No start specified: calculate start manually
|
|
167
|
+
} else if (startStr === "" && endStr !== "") {
|
|
180
168
|
start = size - +endStr;
|
|
181
169
|
end = size - 1;
|
|
182
170
|
} else {
|
|
183
171
|
start = +startStr;
|
|
184
172
|
end = +endStr;
|
|
185
173
|
}
|
|
186
|
-
|
|
187
|
-
// Handle unavailable range request
|
|
188
174
|
if (Number.isNaN(start) || Number.isNaN(end) || start >= size || end >= size || start > end) {
|
|
189
|
-
// Return the 416 Range Not Satisfiable: https://datatracker.ietf.org/doc/html/rfc7233#section-4.4
|
|
190
175
|
response.writeHead(416, {
|
|
191
|
-
|
|
176
|
+
"Content-Range": `bytes */${size}`
|
|
192
177
|
});
|
|
193
178
|
return response.end();
|
|
194
179
|
}
|
|
195
|
-
|
|
196
|
-
// Sending Partial Content: https://datatracker.ietf.org/doc/html/rfc7233#section-4.1
|
|
197
180
|
response.writeHead(206, {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
});
|
|
203
|
-
const readable = _fs.default.createReadStream(absoluteFilePath, {
|
|
204
|
-
start,
|
|
205
|
-
end
|
|
181
|
+
"Content-Range": `bytes ${start}-${end}/${size}`,
|
|
182
|
+
"Accept-Ranges": "bytes",
|
|
183
|
+
"Content-Length": end - start + 1,
|
|
184
|
+
"Content-Type": import_utilsBundle.mime.getType(import_path.default.extname(absoluteFilePath))
|
|
206
185
|
});
|
|
186
|
+
const readable = import_fs.default.createReadStream(absoluteFilePath, { start, end });
|
|
207
187
|
readable.pipe(response);
|
|
208
188
|
}
|
|
209
189
|
_onRequest(request, response) {
|
|
210
|
-
if (request.method ===
|
|
190
|
+
if (request.method === "OPTIONS") {
|
|
211
191
|
response.writeHead(200);
|
|
212
192
|
response.end();
|
|
213
193
|
return;
|
|
214
194
|
}
|
|
215
|
-
request.on(
|
|
195
|
+
request.on("error", () => response.end());
|
|
216
196
|
try {
|
|
217
197
|
if (!request.url) {
|
|
218
198
|
response.end();
|
|
219
199
|
return;
|
|
220
200
|
}
|
|
221
|
-
const url = new URL(
|
|
201
|
+
const url = new URL("http://localhost" + request.url);
|
|
222
202
|
for (const route of this._routes) {
|
|
223
|
-
if (route.exact && url.pathname === route.exact && route.handler(request, response))
|
|
224
|
-
|
|
203
|
+
if (route.exact && url.pathname === route.exact && route.handler(request, response))
|
|
204
|
+
return;
|
|
205
|
+
if (route.prefix && url.pathname.startsWith(route.prefix) && route.handler(request, response))
|
|
206
|
+
return;
|
|
225
207
|
}
|
|
226
208
|
response.statusCode = 404;
|
|
227
209
|
response.end();
|
|
@@ -230,4 +212,7 @@ class HttpServer {
|
|
|
230
212
|
}
|
|
231
213
|
}
|
|
232
214
|
}
|
|
233
|
-
|
|
215
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
216
|
+
0 && (module.exports = {
|
|
217
|
+
HttpServer
|
|
218
|
+
});
|