phantomwright-driver-core 1.57.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/README.md +3 -0
- package/ThirdPartyNotices.txt +1161 -0
- package/bin/install_media_pack.ps1 +5 -0
- package/bin/install_webkit_wsl.ps1 +33 -0
- package/bin/reinstall_chrome_beta_linux.sh +42 -0
- package/bin/reinstall_chrome_beta_mac.sh +13 -0
- package/bin/reinstall_chrome_beta_win.ps1 +24 -0
- package/bin/reinstall_chrome_stable_linux.sh +42 -0
- package/bin/reinstall_chrome_stable_mac.sh +12 -0
- package/bin/reinstall_chrome_stable_win.ps1 +24 -0
- package/bin/reinstall_msedge_beta_linux.sh +48 -0
- package/bin/reinstall_msedge_beta_mac.sh +11 -0
- package/bin/reinstall_msedge_beta_win.ps1 +23 -0
- package/bin/reinstall_msedge_dev_linux.sh +48 -0
- package/bin/reinstall_msedge_dev_mac.sh +11 -0
- package/bin/reinstall_msedge_dev_win.ps1 +23 -0
- package/bin/reinstall_msedge_stable_linux.sh +48 -0
- package/bin/reinstall_msedge_stable_mac.sh +11 -0
- package/bin/reinstall_msedge_stable_win.ps1 +24 -0
- package/browsers.json +80 -0
- package/cli.js +18 -0
- package/index.d.ts +17 -0
- package/index.js +32 -0
- package/index.mjs +28 -0
- package/lib/androidServerImpl.js +65 -0
- package/lib/browserServerImpl.js +120 -0
- package/lib/cli/driver.js +97 -0
- package/lib/cli/program.js +590 -0
- package/lib/cli/programWithTestStub.js +74 -0
- package/lib/client/android.js +361 -0
- package/lib/client/api.js +134 -0
- package/lib/client/artifact.js +79 -0
- package/lib/client/browser.js +163 -0
- package/lib/client/browserContext.js +547 -0
- package/lib/client/browserType.js +184 -0
- package/lib/client/cdpSession.js +51 -0
- package/lib/client/channelOwner.js +194 -0
- package/lib/client/clientHelper.js +64 -0
- package/lib/client/clientInstrumentation.js +55 -0
- package/lib/client/clientStackTrace.js +69 -0
- package/lib/client/clock.js +68 -0
- package/lib/client/connection.js +314 -0
- package/lib/client/consoleMessage.js +58 -0
- package/lib/client/coverage.js +44 -0
- package/lib/client/dialog.js +56 -0
- package/lib/client/download.js +62 -0
- package/lib/client/electron.js +138 -0
- package/lib/client/elementHandle.js +281 -0
- package/lib/client/errors.js +77 -0
- package/lib/client/eventEmitter.js +314 -0
- package/lib/client/events.js +100 -0
- package/lib/client/fetch.js +369 -0
- package/lib/client/fileChooser.js +46 -0
- package/lib/client/fileUtils.js +34 -0
- package/lib/client/frame.js +408 -0
- package/lib/client/harRouter.js +87 -0
- package/lib/client/input.js +84 -0
- package/lib/client/jsHandle.js +109 -0
- package/lib/client/jsonPipe.js +39 -0
- package/lib/client/localUtils.js +60 -0
- package/lib/client/locator.js +369 -0
- package/lib/client/network.js +747 -0
- package/lib/client/page.js +718 -0
- package/lib/client/platform.js +74 -0
- package/lib/client/playwright.js +71 -0
- package/lib/client/selectors.js +55 -0
- package/lib/client/stream.js +39 -0
- package/lib/client/timeoutSettings.js +79 -0
- package/lib/client/tracing.js +119 -0
- package/lib/client/types.js +28 -0
- package/lib/client/video.js +59 -0
- package/lib/client/waiter.js +142 -0
- package/lib/client/webError.js +39 -0
- package/lib/client/webSocket.js +93 -0
- package/lib/client/worker.js +85 -0
- package/lib/client/writableStream.js +39 -0
- package/lib/generated/bindingsControllerSource.js +28 -0
- package/lib/generated/clockSource.js +28 -0
- package/lib/generated/injectedScriptSource.js +28 -0
- package/lib/generated/pollingRecorderSource.js +28 -0
- package/lib/generated/storageScriptSource.js +28 -0
- package/lib/generated/utilityScriptSource.js +28 -0
- package/lib/generated/webSocketMockSource.js +336 -0
- package/lib/inProcessFactory.js +60 -0
- package/lib/inprocess.js +3 -0
- package/lib/outofprocess.js +76 -0
- package/lib/protocol/serializers.js +192 -0
- package/lib/protocol/validator.js +2890 -0
- package/lib/protocol/validatorPrimitives.js +193 -0
- package/lib/remote/playwrightConnection.js +129 -0
- package/lib/remote/playwrightServer.js +335 -0
- package/lib/server/android/android.js +465 -0
- package/lib/server/android/backendAdb.js +177 -0
- package/lib/server/artifact.js +127 -0
- package/lib/server/bidi/bidiBrowser.js +505 -0
- package/lib/server/bidi/bidiChromium.js +153 -0
- package/lib/server/bidi/bidiConnection.js +212 -0
- package/lib/server/bidi/bidiExecutionContext.js +221 -0
- package/lib/server/bidi/bidiFirefox.js +130 -0
- package/lib/server/bidi/bidiInput.js +146 -0
- package/lib/server/bidi/bidiNetworkManager.js +383 -0
- package/lib/server/bidi/bidiOverCdp.js +102 -0
- package/lib/server/bidi/bidiPage.js +572 -0
- package/lib/server/bidi/bidiPdf.js +106 -0
- package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +98 -0
- package/lib/server/bidi/third_party/bidiKeyboard.js +256 -0
- package/lib/server/bidi/third_party/bidiProtocol.js +24 -0
- package/lib/server/bidi/third_party/bidiProtocolCore.js +179 -0
- package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
- package/lib/server/bidi/third_party/bidiSerializer.js +148 -0
- package/lib/server/bidi/third_party/firefoxPrefs.js +259 -0
- package/lib/server/browser.js +149 -0
- package/lib/server/browserContext.js +695 -0
- package/lib/server/browserType.js +328 -0
- package/lib/server/callLog.js +82 -0
- package/lib/server/chromium/appIcon.png +0 -0
- package/lib/server/chromium/chromium.js +402 -0
- package/lib/server/chromium/chromiumSwitches.js +104 -0
- package/lib/server/chromium/crBrowser.js +510 -0
- package/lib/server/chromium/crConnection.js +202 -0
- package/lib/server/chromium/crCoverage.js +235 -0
- package/lib/server/chromium/crDevTools.js +113 -0
- package/lib/server/chromium/crDragDrop.js +131 -0
- package/lib/server/chromium/crExecutionContext.js +146 -0
- package/lib/server/chromium/crInput.js +187 -0
- package/lib/server/chromium/crNetworkManager.js +666 -0
- package/lib/server/chromium/crPage.js +1069 -0
- package/lib/server/chromium/crPdf.js +121 -0
- package/lib/server/chromium/crProtocolHelper.js +145 -0
- package/lib/server/chromium/crServiceWorker.js +136 -0
- package/lib/server/chromium/defaultFontFamilies.js +162 -0
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +115 -0
- package/lib/server/clock.js +149 -0
- package/lib/server/codegen/csharp.js +327 -0
- package/lib/server/codegen/java.js +274 -0
- package/lib/server/codegen/javascript.js +270 -0
- package/lib/server/codegen/jsonl.js +52 -0
- package/lib/server/codegen/language.js +132 -0
- package/lib/server/codegen/languages.js +68 -0
- package/lib/server/codegen/python.js +279 -0
- package/lib/server/codegen/types.js +16 -0
- package/lib/server/console.js +57 -0
- package/lib/server/cookieStore.js +206 -0
- package/lib/server/debugController.js +191 -0
- package/lib/server/debugger.js +119 -0
- package/lib/server/deviceDescriptors.js +39 -0
- package/lib/server/deviceDescriptorsSource.json +1779 -0
- package/lib/server/dialog.js +116 -0
- package/lib/server/dispatchers/androidDispatcher.js +325 -0
- package/lib/server/dispatchers/artifactDispatcher.js +118 -0
- package/lib/server/dispatchers/browserContextDispatcher.js +381 -0
- package/lib/server/dispatchers/browserDispatcher.js +118 -0
- package/lib/server/dispatchers/browserTypeDispatcher.js +64 -0
- package/lib/server/dispatchers/cdpSessionDispatcher.js +44 -0
- package/lib/server/dispatchers/debugControllerDispatcher.js +78 -0
- package/lib/server/dispatchers/dialogDispatcher.js +47 -0
- package/lib/server/dispatchers/dispatcher.js +371 -0
- package/lib/server/dispatchers/electronDispatcher.js +89 -0
- package/lib/server/dispatchers/elementHandlerDispatcher.js +181 -0
- package/lib/server/dispatchers/frameDispatcher.js +227 -0
- package/lib/server/dispatchers/jsHandleDispatcher.js +85 -0
- package/lib/server/dispatchers/jsonPipeDispatcher.js +58 -0
- package/lib/server/dispatchers/localUtilsDispatcher.js +149 -0
- package/lib/server/dispatchers/networkDispatchers.js +213 -0
- package/lib/server/dispatchers/pageDispatcher.js +389 -0
- package/lib/server/dispatchers/playwrightDispatcher.js +108 -0
- package/lib/server/dispatchers/streamDispatcher.js +67 -0
- package/lib/server/dispatchers/tracingDispatcher.js +68 -0
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +165 -0
- package/lib/server/dispatchers/writableStreamDispatcher.js +79 -0
- package/lib/server/dom.js +806 -0
- package/lib/server/download.js +70 -0
- package/lib/server/electron/electron.js +270 -0
- package/lib/server/electron/loader.js +29 -0
- package/lib/server/errors.js +69 -0
- package/lib/server/fetch.js +621 -0
- package/lib/server/fileChooser.js +43 -0
- package/lib/server/fileUploadUtils.js +84 -0
- package/lib/server/firefox/ffBrowser.js +428 -0
- package/lib/server/firefox/ffConnection.js +147 -0
- package/lib/server/firefox/ffExecutionContext.js +150 -0
- package/lib/server/firefox/ffInput.js +159 -0
- package/lib/server/firefox/ffNetworkManager.js +256 -0
- package/lib/server/firefox/ffPage.js +500 -0
- package/lib/server/firefox/firefox.js +116 -0
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +147 -0
- package/lib/server/frameSelectors.js +154 -0
- package/lib/server/frames.js +1455 -0
- package/lib/server/har/harRecorder.js +147 -0
- package/lib/server/har/harTracer.js +607 -0
- package/lib/server/harBackend.js +157 -0
- package/lib/server/helper.js +96 -0
- package/lib/server/index.js +58 -0
- package/lib/server/input.js +277 -0
- package/lib/server/instrumentation.js +69 -0
- package/lib/server/javascript.js +291 -0
- package/lib/server/launchApp.js +128 -0
- package/lib/server/localUtils.js +214 -0
- package/lib/server/macEditingCommands.js +143 -0
- package/lib/server/network.js +629 -0
- package/lib/server/page.js +886 -0
- package/lib/server/pipeTransport.js +89 -0
- package/lib/server/playwright.js +69 -0
- package/lib/server/progress.js +112 -0
- package/lib/server/protocolError.js +52 -0
- package/lib/server/recorder/chat.js +161 -0
- package/lib/server/recorder/recorderApp.js +387 -0
- package/lib/server/recorder/recorderRunner.js +138 -0
- package/lib/server/recorder/recorderSignalProcessor.js +83 -0
- package/lib/server/recorder/recorderUtils.js +157 -0
- package/lib/server/recorder/throttledFile.js +57 -0
- package/lib/server/recorder.js +499 -0
- package/lib/server/registry/browserFetcher.js +175 -0
- package/lib/server/registry/dependencies.js +371 -0
- package/lib/server/registry/index.js +1399 -0
- package/lib/server/registry/nativeDeps.js +1280 -0
- package/lib/server/registry/oopDownloadBrowserMain.js +124 -0
- package/lib/server/screenshotter.js +333 -0
- package/lib/server/selectors.js +112 -0
- package/lib/server/socksClientCertificatesInterceptor.js +383 -0
- package/lib/server/socksInterceptor.js +95 -0
- package/lib/server/trace/recorder/snapshotter.js +147 -0
- package/lib/server/trace/recorder/snapshotterInjected.js +541 -0
- package/lib/server/trace/recorder/tracing.js +604 -0
- package/lib/server/trace/test/inMemorySnapshotter.js +87 -0
- package/lib/server/trace/viewer/traceViewer.js +241 -0
- package/lib/server/transport.js +181 -0
- package/lib/server/types.js +28 -0
- package/lib/server/usKeyboardLayout.js +145 -0
- package/lib/server/utils/ascii.js +44 -0
- package/lib/server/utils/comparators.js +139 -0
- package/lib/server/utils/crypto.js +216 -0
- package/lib/server/utils/debug.js +42 -0
- package/lib/server/utils/debugLogger.js +122 -0
- package/lib/server/utils/env.js +73 -0
- package/lib/server/utils/eventsHelper.js +39 -0
- package/lib/server/utils/expectUtils.js +38 -0
- package/lib/server/utils/fileUtils.js +191 -0
- package/lib/server/utils/happyEyeballs.js +207 -0
- package/lib/server/utils/hostPlatform.js +123 -0
- package/lib/server/utils/httpServer.js +218 -0
- package/lib/server/utils/imageUtils.js +141 -0
- package/lib/server/utils/image_tools/colorUtils.js +89 -0
- package/lib/server/utils/image_tools/compare.js +109 -0
- package/lib/server/utils/image_tools/imageChannel.js +78 -0
- package/lib/server/utils/image_tools/stats.js +102 -0
- package/lib/server/utils/linuxUtils.js +71 -0
- package/lib/server/utils/network.js +233 -0
- package/lib/server/utils/nodePlatform.js +148 -0
- package/lib/server/utils/pipeTransport.js +84 -0
- package/lib/server/utils/processLauncher.js +241 -0
- package/lib/server/utils/profiler.js +65 -0
- package/lib/server/utils/socksProxy.js +511 -0
- package/lib/server/utils/spawnAsync.js +41 -0
- package/lib/server/utils/task.js +51 -0
- package/lib/server/utils/userAgent.js +98 -0
- package/lib/server/utils/wsServer.js +121 -0
- package/lib/server/utils/zipFile.js +74 -0
- package/lib/server/utils/zones.js +57 -0
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +110 -0
- package/lib/server/webkit/wkBrowser.js +339 -0
- package/lib/server/webkit/wkConnection.js +149 -0
- package/lib/server/webkit/wkExecutionContext.js +154 -0
- package/lib/server/webkit/wkInput.js +181 -0
- package/lib/server/webkit/wkInterceptableRequest.js +169 -0
- package/lib/server/webkit/wkPage.js +1130 -0
- package/lib/server/webkit/wkProvisionalPage.js +83 -0
- package/lib/server/webkit/wkWorkers.js +105 -0
- package/lib/third_party/pixelmatch.js +255 -0
- package/lib/utils/isomorphic/ariaSnapshot.js +397 -0
- package/lib/utils/isomorphic/assert.js +31 -0
- package/lib/utils/isomorphic/colors.js +72 -0
- package/lib/utils/isomorphic/cssParser.js +245 -0
- package/lib/utils/isomorphic/cssTokenizer.js +1051 -0
- package/lib/utils/isomorphic/headers.js +53 -0
- package/lib/utils/isomorphic/locatorGenerators.js +689 -0
- package/lib/utils/isomorphic/locatorParser.js +176 -0
- package/lib/utils/isomorphic/locatorUtils.js +81 -0
- package/lib/utils/isomorphic/manualPromise.js +114 -0
- package/lib/utils/isomorphic/mimeType.js +459 -0
- package/lib/utils/isomorphic/multimap.js +80 -0
- package/lib/utils/isomorphic/protocolFormatter.js +81 -0
- package/lib/utils/isomorphic/protocolMetainfo.js +322 -0
- package/lib/utils/isomorphic/rtti.js +43 -0
- package/lib/utils/isomorphic/selectorParser.js +386 -0
- package/lib/utils/isomorphic/semaphore.js +54 -0
- package/lib/utils/isomorphic/stackTrace.js +158 -0
- package/lib/utils/isomorphic/stringUtils.js +155 -0
- package/lib/utils/isomorphic/time.js +49 -0
- package/lib/utils/isomorphic/timeoutRunner.js +66 -0
- package/lib/utils/isomorphic/traceUtils.js +58 -0
- package/lib/utils/isomorphic/types.js +16 -0
- package/lib/utils/isomorphic/urlMatch.js +190 -0
- package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
- package/lib/utils.js +109 -0
- package/lib/utilsBundle.js +112 -0
- package/lib/utilsBundleImpl/index.js +218 -0
- package/lib/utilsBundleImpl/xdg-open +1066 -0
- package/lib/vite/htmlReport/index.html +84 -0
- package/lib/vite/recorder/assets/codeMirrorModule-BoWUGj0J.js +25 -0
- package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +1 -0
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-DJqDAOZp.js +193 -0
- package/lib/vite/recorder/assets/index-Ri0uHF7I.css +1 -0
- package/lib/vite/recorder/index.html +29 -0
- package/lib/vite/recorder/playwright-logo.svg +9 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-Bucv2d7q.js +25 -0
- package/lib/vite/traceViewer/assets/defaultSettingsView-BEpdCv1S.js +266 -0
- package/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
- package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +1 -0
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/defaultSettingsView.ConWv5KN.css +1 -0
- package/lib/vite/traceViewer/index.BxQ34UMZ.js +2 -0
- package/lib/vite/traceViewer/index.C4Y3Aw8n.css +1 -0
- package/lib/vite/traceViewer/index.html +43 -0
- package/lib/vite/traceViewer/manifest.webmanifest +16 -0
- package/lib/vite/traceViewer/playwright-logo.svg +9 -0
- package/lib/vite/traceViewer/snapshot.html +21 -0
- package/lib/vite/traceViewer/sw.bundle.js +3 -0
- package/lib/vite/traceViewer/uiMode.BWTwXl41.js +5 -0
- package/lib/vite/traceViewer/uiMode.Btcz36p_.css +1 -0
- package/lib/vite/traceViewer/uiMode.html +17 -0
- package/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
- package/lib/zipBundle.js +34 -0
- package/lib/zipBundleImpl.js +5 -0
- package/package.json +42 -0
- package/types/protocol.d.ts +23245 -0
- package/types/structs.d.ts +45 -0
- package/types/types.d.ts +22856 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
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 processLauncher_exports = {};
|
|
30
|
+
__export(processLauncher_exports, {
|
|
31
|
+
envArrayToObject: () => envArrayToObject,
|
|
32
|
+
gracefullyCloseAll: () => gracefullyCloseAll,
|
|
33
|
+
gracefullyCloseSet: () => gracefullyCloseSet,
|
|
34
|
+
gracefullyProcessExitDoNotHang: () => gracefullyProcessExitDoNotHang,
|
|
35
|
+
launchProcess: () => launchProcess
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(processLauncher_exports);
|
|
38
|
+
var childProcess = __toESM(require("child_process"));
|
|
39
|
+
var import_fs = __toESM(require("fs"));
|
|
40
|
+
var readline = __toESM(require("readline"));
|
|
41
|
+
var import_fileUtils = require("./fileUtils");
|
|
42
|
+
var import_utils = require("../../utils");
|
|
43
|
+
const gracefullyCloseSet = /* @__PURE__ */ new Set();
|
|
44
|
+
const killSet = /* @__PURE__ */ new Set();
|
|
45
|
+
async function gracefullyCloseAll() {
|
|
46
|
+
await Promise.all(Array.from(gracefullyCloseSet).map((gracefullyClose) => gracefullyClose().catch((e) => {
|
|
47
|
+
})));
|
|
48
|
+
}
|
|
49
|
+
function gracefullyProcessExitDoNotHang(code) {
|
|
50
|
+
setTimeout(() => process.exit(code), 3e4);
|
|
51
|
+
gracefullyCloseAll().then(() => {
|
|
52
|
+
process.exit(code);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function exitHandler() {
|
|
56
|
+
for (const kill of killSet)
|
|
57
|
+
kill();
|
|
58
|
+
}
|
|
59
|
+
let sigintHandlerCalled = false;
|
|
60
|
+
function sigintHandler() {
|
|
61
|
+
const exitWithCode130 = () => {
|
|
62
|
+
if ((0, import_utils.isUnderTest)()) {
|
|
63
|
+
setTimeout(() => process.exit(130), 1e3);
|
|
64
|
+
} else {
|
|
65
|
+
process.exit(130);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
if (sigintHandlerCalled) {
|
|
69
|
+
process.off("SIGINT", sigintHandler);
|
|
70
|
+
for (const kill of killSet)
|
|
71
|
+
kill();
|
|
72
|
+
exitWithCode130();
|
|
73
|
+
} else {
|
|
74
|
+
sigintHandlerCalled = true;
|
|
75
|
+
gracefullyCloseAll().then(() => exitWithCode130());
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function sigtermHandler() {
|
|
79
|
+
gracefullyCloseAll();
|
|
80
|
+
}
|
|
81
|
+
function sighupHandler() {
|
|
82
|
+
gracefullyCloseAll();
|
|
83
|
+
}
|
|
84
|
+
const installedHandlers = /* @__PURE__ */ new Set();
|
|
85
|
+
const processHandlers = {
|
|
86
|
+
exit: exitHandler,
|
|
87
|
+
SIGINT: sigintHandler,
|
|
88
|
+
SIGTERM: sigtermHandler,
|
|
89
|
+
SIGHUP: sighupHandler
|
|
90
|
+
};
|
|
91
|
+
function addProcessHandlerIfNeeded(name) {
|
|
92
|
+
if (!installedHandlers.has(name)) {
|
|
93
|
+
installedHandlers.add(name);
|
|
94
|
+
process.on(name, processHandlers[name]);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function removeProcessHandlersIfNeeded() {
|
|
98
|
+
if (killSet.size)
|
|
99
|
+
return;
|
|
100
|
+
for (const handler of installedHandlers)
|
|
101
|
+
process.off(handler, processHandlers[handler]);
|
|
102
|
+
installedHandlers.clear();
|
|
103
|
+
}
|
|
104
|
+
async function launchProcess(options) {
|
|
105
|
+
const stdio = options.stdio === "pipe" ? ["ignore", "pipe", "pipe", "pipe", "pipe"] : ["pipe", "pipe", "pipe"];
|
|
106
|
+
options.log(`<launching> ${options.command} ${options.args ? options.args.join(" ") : ""}`);
|
|
107
|
+
const spawnOptions = {
|
|
108
|
+
// On non-windows platforms, `detached: true` makes child process a leader of a new
|
|
109
|
+
// process group, making it possible to kill child process tree with `.kill(-pid)` command.
|
|
110
|
+
// @see https://nodejs.org/api/child_process.html#child_process_options_detached
|
|
111
|
+
detached: process.platform !== "win32",
|
|
112
|
+
env: options.env,
|
|
113
|
+
cwd: options.cwd,
|
|
114
|
+
shell: options.shell,
|
|
115
|
+
stdio
|
|
116
|
+
};
|
|
117
|
+
const spawnedProcess = childProcess.spawn(options.command, options.args || [], spawnOptions);
|
|
118
|
+
const cleanup = async () => {
|
|
119
|
+
options.log(`[pid=${spawnedProcess.pid || "N/A"}] starting temporary directories cleanup`);
|
|
120
|
+
const errors = await (0, import_fileUtils.removeFolders)(options.tempDirectories);
|
|
121
|
+
for (let i = 0; i < options.tempDirectories.length; ++i) {
|
|
122
|
+
if (errors[i])
|
|
123
|
+
options.log(`[pid=${spawnedProcess.pid || "N/A"}] exception while removing ${options.tempDirectories[i]}: ${errors[i]}`);
|
|
124
|
+
}
|
|
125
|
+
options.log(`[pid=${spawnedProcess.pid || "N/A"}] finished temporary directories cleanup`);
|
|
126
|
+
};
|
|
127
|
+
spawnedProcess.on("error", () => {
|
|
128
|
+
});
|
|
129
|
+
if (!spawnedProcess.pid) {
|
|
130
|
+
let failed;
|
|
131
|
+
const failedPromise = new Promise((f, r) => failed = f);
|
|
132
|
+
spawnedProcess.once("error", (error) => {
|
|
133
|
+
failed(new Error("Failed to launch: " + error));
|
|
134
|
+
});
|
|
135
|
+
return failedPromise.then(async (error) => {
|
|
136
|
+
await cleanup();
|
|
137
|
+
throw error;
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
options.log(`<launched> pid=${spawnedProcess.pid}`);
|
|
141
|
+
const stdout = readline.createInterface({ input: spawnedProcess.stdout });
|
|
142
|
+
stdout.on("line", (data) => {
|
|
143
|
+
options.log(`[pid=${spawnedProcess.pid}][out] ` + data);
|
|
144
|
+
});
|
|
145
|
+
const stderr = readline.createInterface({ input: spawnedProcess.stderr });
|
|
146
|
+
stderr.on("line", (data) => {
|
|
147
|
+
options.log(`[pid=${spawnedProcess.pid}][err] ` + data);
|
|
148
|
+
});
|
|
149
|
+
let processClosed = false;
|
|
150
|
+
let fulfillCleanup = () => {
|
|
151
|
+
};
|
|
152
|
+
const waitForCleanup = new Promise((f) => fulfillCleanup = f);
|
|
153
|
+
spawnedProcess.once("close", (exitCode, signal) => {
|
|
154
|
+
options.log(`[pid=${spawnedProcess.pid}] <process did exit: exitCode=${exitCode}, signal=${signal}>`);
|
|
155
|
+
processClosed = true;
|
|
156
|
+
gracefullyCloseSet.delete(gracefullyClose);
|
|
157
|
+
killSet.delete(killProcessAndCleanup);
|
|
158
|
+
removeProcessHandlersIfNeeded();
|
|
159
|
+
options.onExit(exitCode, signal);
|
|
160
|
+
cleanup().then(fulfillCleanup);
|
|
161
|
+
});
|
|
162
|
+
addProcessHandlerIfNeeded("exit");
|
|
163
|
+
if (options.handleSIGINT)
|
|
164
|
+
addProcessHandlerIfNeeded("SIGINT");
|
|
165
|
+
if (options.handleSIGTERM)
|
|
166
|
+
addProcessHandlerIfNeeded("SIGTERM");
|
|
167
|
+
if (options.handleSIGHUP)
|
|
168
|
+
addProcessHandlerIfNeeded("SIGHUP");
|
|
169
|
+
gracefullyCloseSet.add(gracefullyClose);
|
|
170
|
+
killSet.add(killProcessAndCleanup);
|
|
171
|
+
let gracefullyClosing = false;
|
|
172
|
+
async function gracefullyClose() {
|
|
173
|
+
if (gracefullyClosing) {
|
|
174
|
+
options.log(`[pid=${spawnedProcess.pid}] <forcefully close>`);
|
|
175
|
+
killProcess();
|
|
176
|
+
await waitForCleanup;
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
gracefullyClosing = true;
|
|
180
|
+
options.log(`[pid=${spawnedProcess.pid}] <gracefully close start>`);
|
|
181
|
+
await options.attemptToGracefullyClose().catch(() => killProcess());
|
|
182
|
+
await waitForCleanup;
|
|
183
|
+
options.log(`[pid=${spawnedProcess.pid}] <gracefully close end>`);
|
|
184
|
+
}
|
|
185
|
+
function killProcess() {
|
|
186
|
+
gracefullyCloseSet.delete(gracefullyClose);
|
|
187
|
+
killSet.delete(killProcessAndCleanup);
|
|
188
|
+
removeProcessHandlersIfNeeded();
|
|
189
|
+
options.log(`[pid=${spawnedProcess.pid}] <kill>`);
|
|
190
|
+
if (spawnedProcess.pid && !spawnedProcess.killed && !processClosed) {
|
|
191
|
+
options.log(`[pid=${spawnedProcess.pid}] <will force kill>`);
|
|
192
|
+
try {
|
|
193
|
+
if (process.platform === "win32") {
|
|
194
|
+
const taskkillProcess = childProcess.spawnSync(`taskkill /pid ${spawnedProcess.pid} /T /F`, { shell: true });
|
|
195
|
+
const [stdout2, stderr2] = [taskkillProcess.stdout.toString(), taskkillProcess.stderr.toString()];
|
|
196
|
+
if (stdout2)
|
|
197
|
+
options.log(`[pid=${spawnedProcess.pid}] taskkill stdout: ${stdout2}`);
|
|
198
|
+
if (stderr2)
|
|
199
|
+
options.log(`[pid=${spawnedProcess.pid}] taskkill stderr: ${stderr2}`);
|
|
200
|
+
} else {
|
|
201
|
+
process.kill(-spawnedProcess.pid, "SIGKILL");
|
|
202
|
+
}
|
|
203
|
+
} catch (e) {
|
|
204
|
+
options.log(`[pid=${spawnedProcess.pid}] exception while trying to kill process: ${e}`);
|
|
205
|
+
}
|
|
206
|
+
} else {
|
|
207
|
+
options.log(`[pid=${spawnedProcess.pid}] <skipped force kill spawnedProcess.killed=${spawnedProcess.killed} processClosed=${processClosed}>`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function killProcessAndCleanup() {
|
|
211
|
+
killProcess();
|
|
212
|
+
options.log(`[pid=${spawnedProcess.pid || "N/A"}] starting temporary directories cleanup`);
|
|
213
|
+
for (const dir of options.tempDirectories) {
|
|
214
|
+
try {
|
|
215
|
+
import_fs.default.rmSync(dir, { force: true, recursive: true, maxRetries: 5 });
|
|
216
|
+
} catch (e) {
|
|
217
|
+
options.log(`[pid=${spawnedProcess.pid || "N/A"}] exception while removing ${dir}: ${e}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
options.log(`[pid=${spawnedProcess.pid || "N/A"}] finished temporary directories cleanup`);
|
|
221
|
+
}
|
|
222
|
+
function killAndWait() {
|
|
223
|
+
killProcess();
|
|
224
|
+
return waitForCleanup;
|
|
225
|
+
}
|
|
226
|
+
return { launchedProcess: spawnedProcess, gracefullyClose, kill: killAndWait };
|
|
227
|
+
}
|
|
228
|
+
function envArrayToObject(env) {
|
|
229
|
+
const result = {};
|
|
230
|
+
for (const { name, value } of env)
|
|
231
|
+
result[name] = value;
|
|
232
|
+
return result;
|
|
233
|
+
}
|
|
234
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
235
|
+
0 && (module.exports = {
|
|
236
|
+
envArrayToObject,
|
|
237
|
+
gracefullyCloseAll,
|
|
238
|
+
gracefullyCloseSet,
|
|
239
|
+
gracefullyProcessExitDoNotHang,
|
|
240
|
+
launchProcess
|
|
241
|
+
});
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
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 profiler_exports = {};
|
|
30
|
+
__export(profiler_exports, {
|
|
31
|
+
startProfiling: () => startProfiling,
|
|
32
|
+
stopProfiling: () => stopProfiling
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(profiler_exports);
|
|
35
|
+
var import_fs = __toESM(require("fs"));
|
|
36
|
+
var import_path = __toESM(require("path"));
|
|
37
|
+
const profileDir = process.env.PWTEST_PROFILE_DIR || "";
|
|
38
|
+
let session;
|
|
39
|
+
async function startProfiling() {
|
|
40
|
+
if (!profileDir)
|
|
41
|
+
return;
|
|
42
|
+
session = new (require("inspector")).Session();
|
|
43
|
+
session.connect();
|
|
44
|
+
await new Promise((f) => {
|
|
45
|
+
session.post("Profiler.enable", () => {
|
|
46
|
+
session.post("Profiler.start", f);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
async function stopProfiling(profileName) {
|
|
51
|
+
if (!profileDir)
|
|
52
|
+
return;
|
|
53
|
+
await new Promise((f) => session.post("Profiler.stop", (err, { profile }) => {
|
|
54
|
+
if (!err) {
|
|
55
|
+
import_fs.default.mkdirSync(profileDir, { recursive: true });
|
|
56
|
+
import_fs.default.writeFileSync(import_path.default.join(profileDir, profileName + ".json"), JSON.stringify(profile));
|
|
57
|
+
}
|
|
58
|
+
f();
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
62
|
+
0 && (module.exports = {
|
|
63
|
+
startProfiling,
|
|
64
|
+
stopProfiling
|
|
65
|
+
});
|