patchright-core 1.58.2 → 1.59.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 +126 -650
- package/browsers.json +16 -14
- package/lib/bootstrap.js +77 -0
- package/lib/cli/browserActions.js +308 -0
- package/lib/cli/driver.js +3 -2
- package/lib/cli/installActions.js +171 -0
- package/lib/cli/program.js +47 -411
- package/lib/client/android.js +4 -4
- package/lib/client/api.js +3 -3
- package/lib/client/browser.js +8 -0
- package/lib/client/browserContext.js +22 -61
- package/lib/client/browserType.js +19 -51
- package/lib/client/cdpSession.js +6 -2
- package/lib/client/channelOwner.js +1 -1
- package/lib/client/clientHelper.js +2 -1
- package/lib/client/clock.js +0 -1
- package/lib/client/{webSocket.js → connect.js} +57 -7
- package/lib/client/connection.js +8 -4
- package/lib/client/consoleMessage.js +3 -0
- package/lib/client/debugger.js +57 -0
- package/lib/client/dialog.js +8 -1
- package/lib/client/disposable.js +76 -0
- package/lib/client/electron.js +1 -0
- package/lib/client/elementHandle.js +1 -4
- package/lib/client/events.js +3 -3
- package/lib/client/fetch.js +0 -1
- package/lib/client/frame.js +10 -23
- package/lib/client/harRouter.js +13 -1
- package/lib/client/jsHandle.js +4 -8
- package/lib/client/locator.js +13 -44
- package/lib/client/network.js +15 -16
- package/lib/client/page.js +41 -75
- package/lib/client/platform.js +0 -3
- package/lib/client/screencast.js +88 -0
- package/lib/client/selectors.js +3 -1
- package/lib/client/tracing.js +11 -5
- package/lib/client/video.js +13 -20
- package/lib/client/worker.js +6 -6
- package/lib/generated/bindingsControllerSource.js +1 -1
- package/lib/generated/clockSource.js +1 -1
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/pollingRecorderSource.js +1 -1
- package/lib/generated/storageScriptSource.js +1 -1
- package/lib/generated/utilityScriptSource.js +1 -1
- package/lib/mcpBundle.js +0 -6
- package/lib/mcpBundleImpl.js +91 -0
- package/lib/protocol/validator.js +224 -138
- package/lib/protocol/validatorPrimitives.js +1 -1
- package/lib/remote/playwrightConnection.js +10 -8
- package/lib/remote/playwrightPipeServer.js +100 -0
- package/lib/remote/playwrightServer.js +13 -8
- package/lib/remote/playwrightWebSocketServer.js +73 -0
- package/lib/remote/serverTransport.js +96 -0
- package/lib/server/android/android.js +2 -2
- package/lib/server/bidi/bidiBrowser.js +30 -8
- package/lib/server/bidi/bidiChromium.js +18 -5
- package/lib/server/bidi/bidiNetworkManager.js +39 -11
- package/lib/server/bidi/bidiPage.js +31 -15
- package/lib/server/bidi/third_party/firefoxPrefs.js +3 -1
- package/lib/server/browser.js +84 -21
- package/lib/server/browserContext.js +110 -58
- package/lib/server/browserType.js +14 -12
- package/lib/server/chromium/chromium.js +15 -12
- package/lib/server/chromium/chromiumSwitches.js +14 -2
- package/lib/server/chromium/crBrowser.js +20 -17
- package/lib/server/chromium/crCoverage.js +1 -13
- package/lib/server/chromium/crDevTools.js +1 -0
- package/lib/server/chromium/crNetworkManager.js +12 -267
- package/lib/server/chromium/crPage.js +67 -199
- package/lib/server/chromium/crServiceWorker.js +7 -14
- package/lib/server/clock.js +33 -41
- package/lib/server/console.js +5 -1
- package/lib/server/debugController.js +12 -6
- package/lib/server/debugger.js +40 -47
- package/lib/server/deviceDescriptorsSource.json +137 -137
- package/lib/server/dispatchers/browserContextDispatcher.js +29 -30
- package/lib/server/dispatchers/browserDispatcher.js +11 -5
- package/lib/server/dispatchers/browserTypeDispatcher.js +7 -0
- package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -1
- package/lib/server/dispatchers/debuggerDispatcher.js +84 -0
- package/lib/server/dispatchers/dispatcher.js +1 -1
- package/lib/server/dispatchers/disposableDispatcher.js +39 -0
- package/lib/server/dispatchers/electronDispatcher.js +2 -1
- package/lib/server/dispatchers/frameDispatcher.js +6 -6
- package/lib/server/dispatchers/jsHandleDispatcher.js +2 -2
- package/lib/server/dispatchers/localUtilsDispatcher.js +37 -1
- package/lib/server/dispatchers/networkDispatchers.js +6 -5
- package/lib/server/dispatchers/pageDispatcher.js +101 -38
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +4 -5
- package/lib/server/disposable.js +41 -0
- package/lib/server/dom.js +44 -26
- package/lib/server/download.js +3 -2
- package/lib/server/electron/electron.js +12 -7
- package/lib/server/firefox/ffBrowser.js +9 -19
- package/lib/server/firefox/ffInput.js +21 -5
- package/lib/server/firefox/ffNetworkManager.js +2 -2
- package/lib/server/firefox/ffPage.js +24 -27
- package/lib/server/frameSelectors.js +5 -172
- package/lib/server/frames.js +234 -687
- package/lib/server/har/harRecorder.js +2 -2
- package/lib/server/har/harTracer.js +5 -4
- package/lib/server/input.js +49 -4
- package/lib/server/instrumentation.js +5 -0
- package/lib/server/javascript.js +6 -26
- package/lib/server/launchApp.js +1 -3
- package/lib/server/localUtils.js +6 -6
- package/lib/server/network.js +9 -8
- package/lib/server/overlay.js +138 -0
- package/lib/server/page.js +157 -105
- package/lib/server/progress.js +6 -0
- package/lib/server/recorder/recorderApp.js +9 -8
- package/lib/server/recorder.js +76 -40
- package/lib/server/registry/index.js +55 -82
- package/lib/server/registry/nativeDeps.js +1 -0
- package/lib/server/screencast.js +90 -143
- package/lib/server/screenshotter.js +0 -6
- package/lib/server/trace/recorder/snapshotter.js +8 -17
- package/lib/server/trace/recorder/snapshotterInjected.js +82 -20
- package/lib/server/trace/recorder/tracing.js +87 -44
- package/lib/server/trace/viewer/traceViewer.js +3 -4
- package/lib/server/usKeyboardLayout.js +7 -0
- package/lib/server/utils/comparators.js +1 -1
- package/lib/server/utils/disposable.js +32 -0
- package/lib/server/utils/eventsHelper.js +3 -1
- package/lib/server/utils/fileUtils.js +16 -2
- package/lib/server/utils/happyEyeballs.js +15 -12
- package/lib/server/utils/hostPlatform.js +0 -15
- package/lib/server/utils/httpServer.js +5 -3
- package/lib/server/utils/network.js +2 -1
- package/lib/server/utils/nodePlatform.js +0 -6
- package/lib/server/utils/processLauncher.js +8 -6
- package/lib/server/utils/zipFile.js +2 -2
- package/lib/server/videoRecorder.js +82 -12
- package/lib/server/webkit/wkBrowser.js +1 -6
- package/lib/server/webkit/wkPage.js +27 -25
- package/lib/server/webkit/wkWorkers.js +2 -1
- package/lib/serverRegistry.js +156 -0
- package/lib/tools/backend/browserBackend.js +79 -0
- package/lib/tools/backend/common.js +63 -0
- package/lib/tools/backend/config.js +41 -0
- package/lib/tools/backend/console.js +66 -0
- package/lib/tools/backend/context.js +296 -0
- package/lib/tools/backend/cookies.js +152 -0
- package/lib/tools/backend/devtools.js +69 -0
- package/lib/tools/backend/dialogs.js +59 -0
- package/lib/tools/backend/evaluate.js +64 -0
- package/lib/tools/backend/files.js +60 -0
- package/lib/tools/backend/form.js +64 -0
- package/lib/tools/backend/keyboard.js +155 -0
- package/lib/tools/backend/logFile.js +95 -0
- package/lib/tools/backend/mouse.js +168 -0
- package/lib/tools/backend/navigate.js +106 -0
- package/lib/tools/backend/network.js +135 -0
- package/lib/tools/backend/pdf.js +48 -0
- package/lib/tools/backend/response.js +305 -0
- package/lib/tools/backend/route.js +140 -0
- package/lib/tools/backend/runCode.js +77 -0
- package/lib/tools/backend/screenshot.js +88 -0
- package/lib/tools/backend/sessionLog.js +74 -0
- package/lib/tools/backend/snapshot.js +208 -0
- package/lib/tools/backend/storage.js +68 -0
- package/lib/tools/backend/tab.js +445 -0
- package/lib/tools/backend/tabs.js +67 -0
- package/lib/tools/backend/tool.js +47 -0
- package/lib/tools/backend/tools.js +102 -0
- package/lib/tools/backend/tracing.js +78 -0
- package/lib/tools/backend/utils.js +83 -0
- package/lib/tools/backend/verify.js +151 -0
- package/lib/tools/backend/video.js +98 -0
- package/lib/tools/backend/wait.js +63 -0
- package/lib/tools/backend/webstorage.js +223 -0
- package/lib/tools/cli-client/cli.js +6 -0
- package/lib/tools/cli-client/help.json +399 -0
- package/lib/tools/cli-client/minimist.js +128 -0
- package/lib/tools/cli-client/program.js +350 -0
- package/lib/tools/cli-client/registry.js +176 -0
- package/lib/tools/cli-client/session.js +289 -0
- package/lib/tools/cli-client/skill/SKILL.md +328 -0
- package/lib/tools/cli-client/skill/references/element-attributes.md +23 -0
- package/lib/tools/cli-client/skill/references/playwright-tests.md +39 -0
- package/lib/tools/cli-client/skill/references/request-mocking.md +87 -0
- package/lib/tools/cli-client/skill/references/running-code.md +231 -0
- package/lib/tools/cli-client/skill/references/session-management.md +169 -0
- package/lib/tools/cli-client/skill/references/storage-state.md +275 -0
- package/lib/tools/cli-client/skill/references/test-generation.md +88 -0
- package/lib/tools/cli-client/skill/references/tracing.md +139 -0
- package/lib/tools/cli-client/skill/references/video-recording.md +143 -0
- package/lib/tools/cli-daemon/command.js +73 -0
- package/lib/tools/cli-daemon/commands.js +956 -0
- package/lib/tools/cli-daemon/daemon.js +157 -0
- package/lib/tools/cli-daemon/helpGenerator.js +177 -0
- package/lib/tools/cli-daemon/program.js +129 -0
- package/lib/tools/dashboard/appIcon.png +0 -0
- package/lib/tools/dashboard/dashboardApp.js +284 -0
- package/lib/tools/dashboard/dashboardController.js +296 -0
- package/lib/tools/exports.js +60 -0
- package/lib/tools/mcp/browserFactory.js +233 -0
- package/lib/tools/mcp/cdpRelay.js +352 -0
- package/lib/tools/mcp/cli-stub.js +7 -0
- package/lib/tools/mcp/config.d.js +16 -0
- package/lib/tools/mcp/config.js +446 -0
- package/lib/tools/mcp/configIni.js +189 -0
- package/lib/tools/mcp/extensionContextFactory.js +55 -0
- package/lib/tools/mcp/index.js +62 -0
- package/lib/tools/mcp/log.js +35 -0
- package/lib/tools/mcp/program.js +107 -0
- package/lib/tools/mcp/protocol.js +28 -0
- package/lib/tools/mcp/watchdog.js +44 -0
- package/lib/tools/trace/SKILL.md +171 -0
- package/lib/{server/trace/viewer/traceParser.js → tools/trace/installSkill.js} +15 -39
- package/lib/tools/trace/traceActions.js +142 -0
- package/lib/tools/trace/traceAttachments.js +69 -0
- package/lib/tools/trace/traceCli.js +87 -0
- package/lib/tools/trace/traceConsole.js +97 -0
- package/lib/tools/trace/traceErrors.js +55 -0
- package/lib/tools/trace/traceOpen.js +69 -0
- package/lib/tools/trace/traceParser.js +96 -0
- package/lib/tools/trace/traceRequests.js +182 -0
- package/lib/tools/trace/traceScreenshot.js +68 -0
- package/lib/tools/trace/traceSnapshot.js +149 -0
- package/lib/tools/trace/traceUtils.js +153 -0
- package/lib/tools/utils/connect.js +32 -0
- package/lib/tools/utils/mcp/http.js +152 -0
- package/lib/tools/utils/mcp/server.js +230 -0
- package/lib/tools/utils/mcp/tool.js +47 -0
- package/lib/tools/utils/socketConnection.js +108 -0
- package/lib/utils/isomorphic/formatUtils.js +64 -0
- package/lib/utils/isomorphic/jsonSchema.js +89 -0
- package/lib/utils/isomorphic/mimeType.js +7 -2
- package/lib/utils/isomorphic/protocolFormatter.js +2 -2
- package/lib/utils/isomorphic/protocolMetainfo.js +127 -106
- package/lib/utils/isomorphic/stringUtils.js +3 -3
- package/lib/utils/isomorphic/timeoutRunner.js +3 -3
- package/lib/utils/isomorphic/trace/snapshotRenderer.js +35 -42
- package/lib/utils/isomorphic/trace/traceLoader.js +15 -14
- package/lib/utils/isomorphic/trace/traceModel.js +3 -2
- package/lib/utils/isomorphic/trace/traceModernizer.js +1 -0
- package/lib/utils/isomorphic/urlMatch.js +54 -1
- package/lib/utils/isomorphic/utilityScriptSerializers.js +11 -0
- package/lib/utils.js +6 -2
- package/lib/utilsBundle.js +3 -21
- package/lib/utilsBundleImpl/index.js +132 -133
- package/lib/vite/dashboard/assets/index-BAOybkp8.js +50 -0
- package/lib/vite/dashboard/assets/index-CZAYOG76.css +1 -0
- package/lib/vite/dashboard/index.html +28 -0
- package/lib/vite/htmlReport/index.html +2 -70
- package/lib/vite/htmlReport/report.css +1 -0
- package/lib/vite/htmlReport/report.js +72 -0
- package/lib/vite/recorder/assets/{codeMirrorModule-CFUTFUO7.js → codeMirrorModule-C8KMvO9L.js} +20 -20
- package/lib/vite/recorder/assets/index-CqAYX1I3.js +193 -0
- package/lib/vite/recorder/index.html +1 -1
- package/lib/vite/traceViewer/assets/{codeMirrorModule-BVA4h_ZY.js → codeMirrorModule-DS0FLvoc.js} +20 -20
- package/lib/vite/traceViewer/assets/defaultSettingsView-GTWI-W_B.js +262 -0
- package/lib/vite/traceViewer/defaultSettingsView.B4dS75f0.css +1 -0
- package/lib/vite/traceViewer/{index.BVu7tZDe.css → index.CzXZzn5A.css} +1 -1
- package/lib/vite/traceViewer/{index.BtyWtaE-.js → index.Dtstcb7U.js} +1 -1
- package/lib/vite/traceViewer/index.html +4 -4
- package/lib/vite/traceViewer/sw.bundle.js +4 -4
- package/lib/vite/traceViewer/uiMode.Vipi55dB.js +6 -0
- package/lib/vite/traceViewer/uiMode.html +3 -3
- package/lib/zipBundleImpl.js +2 -2
- package/lib/zodBundle.js +39 -0
- package/lib/zodBundleImpl.js +40 -0
- package/package.json +6 -1
- package/types/protocol.d.ts +947 -51
- package/types/types.d.ts +854 -74
- package/lib/client/pageAgent.js +0 -64
- package/lib/mcpBundleImpl/index.js +0 -147
- package/lib/server/agent/actionRunner.js +0 -335
- package/lib/server/agent/actions.js +0 -128
- package/lib/server/agent/codegen.js +0 -111
- package/lib/server/agent/context.js +0 -150
- package/lib/server/agent/expectTools.js +0 -156
- package/lib/server/agent/pageAgent.js +0 -204
- package/lib/server/agent/performTools.js +0 -262
- package/lib/server/agent/tool.js +0 -109
- package/lib/server/dispatchers/pageAgentDispatcher.js +0 -96
- package/lib/server/pageBinding.js +0 -87
- package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +0 -248
- package/lib/vite/recorder/assets/index-CVkBxsGf.js +0 -193
- package/lib/vite/traceViewer/assets/defaultSettingsView-CjfmcdOz.js +0 -266
- package/lib/vite/traceViewer/defaultSettingsView.7ch9cixO.css +0 -1
- package/lib/vite/traceViewer/uiMode.fyrXARf2.js +0 -5
- /package/lib/{server/utils → utils/isomorphic}/imageUtils.js +0 -0
- /package/lib/utils/isomorphic/{traceUtils.js → trace/traceUtils.js} +0 -0
|
@@ -38,6 +38,7 @@ var import_snapshotter = require("./snapshotter");
|
|
|
38
38
|
var import_protocolMetainfo = require("../../../utils/isomorphic/protocolMetainfo");
|
|
39
39
|
var import_assert = require("../../../utils/isomorphic/assert");
|
|
40
40
|
var import_time = require("../../../utils/isomorphic/time");
|
|
41
|
+
var import_manualPromise = require("../../../utils/isomorphic/manualPromise");
|
|
41
42
|
var import_eventsHelper = require("../../utils/eventsHelper");
|
|
42
43
|
var import_crypto = require("../../utils/crypto");
|
|
43
44
|
var import_userAgent = require("../../utils/userAgent");
|
|
@@ -48,15 +49,14 @@ var import_errors = require("../../errors");
|
|
|
48
49
|
var import_fileUtils = require("../../utils/fileUtils");
|
|
49
50
|
var import_harTracer = require("../../har/harTracer");
|
|
50
51
|
var import_instrumentation = require("../../instrumentation");
|
|
51
|
-
var import_page = require("../../page");
|
|
52
52
|
var import_progress = require("../../progress");
|
|
53
53
|
const version = 8;
|
|
54
|
-
const kScreencastOptions = { width: 800, height: 600, quality: 90 };
|
|
55
54
|
class Tracing extends import_instrumentation.SdkObject {
|
|
56
55
|
constructor(context, tracesDir) {
|
|
57
56
|
super(context, "tracing");
|
|
58
57
|
this._fs = new import_fileUtils.SerializedFS();
|
|
59
58
|
this._screencastListeners = [];
|
|
59
|
+
this._pageTracingRecorders = /* @__PURE__ */ new Map();
|
|
60
60
|
this._eventListeners = [];
|
|
61
61
|
this._isStopping = false;
|
|
62
62
|
this._allResources = /* @__PURE__ */ new Set();
|
|
@@ -219,10 +219,9 @@ class Tracing extends import_instrumentation.SdkObject {
|
|
|
219
219
|
}
|
|
220
220
|
_stopScreencast() {
|
|
221
221
|
import_eventsHelper.eventsHelper.removeEventListeners(this._screencastListeners);
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
page.screencast.setOptions(null);
|
|
222
|
+
for (const recorder of this._pageTracingRecorders.values())
|
|
223
|
+
recorder.dispose();
|
|
224
|
+
this._pageTracingRecorders.clear();
|
|
226
225
|
}
|
|
227
226
|
_allocateNewTraceFile(state) {
|
|
228
227
|
const suffix = state.chunkOrdinal ? `-chunk${state.chunkOrdinal}` : ``;
|
|
@@ -331,15 +330,27 @@ class Tracing extends import_instrumentation.SdkObject {
|
|
|
331
330
|
await this._snapshotter?.captureSnapshot(sdkObject.attribution.page, metadata.id, snapshotName).catch(() => {
|
|
332
331
|
});
|
|
333
332
|
}
|
|
334
|
-
_shouldCaptureSnapshot(sdkObject, metadata) {
|
|
335
|
-
|
|
333
|
+
_shouldCaptureSnapshot(sdkObject, metadata, phase) {
|
|
334
|
+
if (!sdkObject.attribution.page || !this._snapshotter?.started())
|
|
335
|
+
return;
|
|
336
|
+
const metainfo = (0, import_protocolMetainfo.getMetainfo)(metadata);
|
|
337
|
+
if (!metainfo?.snapshot)
|
|
338
|
+
return false;
|
|
339
|
+
switch (phase) {
|
|
340
|
+
case "before":
|
|
341
|
+
return !metainfo.input || !!metainfo.isAutoWaiting;
|
|
342
|
+
case "input":
|
|
343
|
+
return !!metainfo.input;
|
|
344
|
+
case "after":
|
|
345
|
+
return true;
|
|
346
|
+
}
|
|
336
347
|
}
|
|
337
348
|
onBeforeCall(sdkObject, metadata, parentId) {
|
|
338
349
|
const event = createBeforeActionTraceEvent(metadata, parentId ?? this._currentGroupId());
|
|
339
350
|
if (!event)
|
|
340
351
|
return Promise.resolve();
|
|
341
|
-
sdkObject.attribution.page
|
|
342
|
-
if (this._shouldCaptureSnapshot(sdkObject, metadata))
|
|
352
|
+
this._temporarilyDisableThrottling(sdkObject.attribution.page);
|
|
353
|
+
if (this._shouldCaptureSnapshot(sdkObject, metadata, "before"))
|
|
343
354
|
event.beforeSnapshot = `before@${metadata.id}`;
|
|
344
355
|
this._state?.callIds.add(metadata.id);
|
|
345
356
|
this._appendTraceEvent(event);
|
|
@@ -351,8 +362,8 @@ class Tracing extends import_instrumentation.SdkObject {
|
|
|
351
362
|
const event = createInputActionTraceEvent(metadata);
|
|
352
363
|
if (!event)
|
|
353
364
|
return Promise.resolve();
|
|
354
|
-
sdkObject.attribution.page
|
|
355
|
-
if (this._shouldCaptureSnapshot(sdkObject, metadata))
|
|
365
|
+
this._temporarilyDisableThrottling(sdkObject.attribution.page);
|
|
366
|
+
if (this._shouldCaptureSnapshot(sdkObject, metadata, "input"))
|
|
356
367
|
event.inputSnapshot = `input@${metadata.id}`;
|
|
357
368
|
this._appendTraceEvent(event);
|
|
358
369
|
return this._captureSnapshot(event.inputSnapshot, sdkObject, metadata);
|
|
@@ -375,8 +386,8 @@ class Tracing extends import_instrumentation.SdkObject {
|
|
|
375
386
|
const event = createAfterActionTraceEvent(metadata);
|
|
376
387
|
if (!event)
|
|
377
388
|
return Promise.resolve();
|
|
378
|
-
sdkObject.attribution.page
|
|
379
|
-
if (this._shouldCaptureSnapshot(sdkObject, metadata))
|
|
389
|
+
this._temporarilyDisableThrottling(sdkObject.attribution.page);
|
|
390
|
+
if (this._shouldCaptureSnapshot(sdkObject, metadata, "after"))
|
|
380
391
|
event.afterSnapshot = `after@${metadata.id}`;
|
|
381
392
|
this._appendTraceEvent(event);
|
|
382
393
|
return this._captureSnapshot(event.afterSnapshot, sdkObject, metadata);
|
|
@@ -483,26 +494,28 @@ class Tracing extends import_instrumentation.SdkObject {
|
|
|
483
494
|
};
|
|
484
495
|
this._appendTraceEvent(event);
|
|
485
496
|
}
|
|
497
|
+
_temporarilyDisableThrottling(page) {
|
|
498
|
+
if (page)
|
|
499
|
+
this._pageTracingRecorders.get(page)?.temporarilyDisableThrottling();
|
|
500
|
+
}
|
|
486
501
|
_startScreencastInPage(page) {
|
|
487
|
-
page.screencast.setOptions(kScreencastOptions);
|
|
488
502
|
const prefix = page.guid;
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
);
|
|
503
|
+
const onFrame = (params) => {
|
|
504
|
+
const suffix = Date.now();
|
|
505
|
+
const sha1 = `${prefix}-${suffix}.jpeg`;
|
|
506
|
+
const event = {
|
|
507
|
+
type: "screencast-frame",
|
|
508
|
+
pageId: page.guid,
|
|
509
|
+
sha1,
|
|
510
|
+
width: params.viewportWidth,
|
|
511
|
+
height: params.viewportHeight,
|
|
512
|
+
timestamp: (0, import_time.monotonicTime)(),
|
|
513
|
+
frameSwapWallTime: params.frameSwapWallTime
|
|
514
|
+
};
|
|
515
|
+
this._appendResource(sha1, params.buffer);
|
|
516
|
+
this._appendTraceEvent(event);
|
|
517
|
+
};
|
|
518
|
+
this._pageTracingRecorders.set(page, new ScreencastTracingRecorder(page.screencast, onFrame));
|
|
506
519
|
}
|
|
507
520
|
_appendTraceEvent(event) {
|
|
508
521
|
const visited = visitTraceEvent(event, this._state.traceSha1s);
|
|
@@ -545,13 +558,7 @@ function visitTraceEvent(object, sha1s) {
|
|
|
545
558
|
}
|
|
546
559
|
return object;
|
|
547
560
|
}
|
|
548
|
-
function shouldCaptureSnapshot(metadata) {
|
|
549
|
-
const metainfo = import_protocolMetainfo.methodMetainfo.get(metadata.type + "." + metadata.method);
|
|
550
|
-
return !!metainfo?.snapshot;
|
|
551
|
-
}
|
|
552
561
|
function createBeforeActionTraceEvent(metadata, parentId) {
|
|
553
|
-
if (metadata.type === "Route" && metadata.method === "continue" && metadata.params?.isFallback)
|
|
554
|
-
return null;
|
|
555
562
|
if (metadata.internal || metadata.method.startsWith("tracing"))
|
|
556
563
|
return null;
|
|
557
564
|
const event = {
|
|
@@ -570,8 +577,6 @@ function createBeforeActionTraceEvent(metadata, parentId) {
|
|
|
570
577
|
return event;
|
|
571
578
|
}
|
|
572
579
|
function createInputActionTraceEvent(metadata) {
|
|
573
|
-
if (metadata.type === "Route" && metadata.method === "continue" && metadata.params?.isFallback)
|
|
574
|
-
return null;
|
|
575
580
|
if (metadata.internal || metadata.method.startsWith("tracing"))
|
|
576
581
|
return null;
|
|
577
582
|
return {
|
|
@@ -581,8 +586,6 @@ function createInputActionTraceEvent(metadata) {
|
|
|
581
586
|
};
|
|
582
587
|
}
|
|
583
588
|
function createActionLogTraceEvent(metadata, message) {
|
|
584
|
-
if (metadata.type === "Route" && metadata.method === "continue" && metadata.params?.isFallback)
|
|
585
|
-
return null;
|
|
586
589
|
if (metadata.internal || metadata.method.startsWith("tracing"))
|
|
587
590
|
return null;
|
|
588
591
|
return {
|
|
@@ -593,8 +596,6 @@ function createActionLogTraceEvent(metadata, message) {
|
|
|
593
596
|
};
|
|
594
597
|
}
|
|
595
598
|
function createAfterActionTraceEvent(metadata) {
|
|
596
|
-
if (metadata.type === "Route" && metadata.method === "continue" && metadata.params?.isFallback)
|
|
597
|
-
return null;
|
|
598
599
|
if (metadata.internal || metadata.method.startsWith("tracing"))
|
|
599
600
|
return null;
|
|
600
601
|
return {
|
|
@@ -606,6 +607,48 @@ function createAfterActionTraceEvent(metadata) {
|
|
|
606
607
|
point: metadata.point
|
|
607
608
|
};
|
|
608
609
|
}
|
|
610
|
+
const throttledRate = 200;
|
|
611
|
+
const unthrottleDuration = 500;
|
|
612
|
+
class ScreencastTracingRecorder {
|
|
613
|
+
constructor(screencast, onFrame) {
|
|
614
|
+
this._unthrottledUntil = 0;
|
|
615
|
+
this._screencast = screencast;
|
|
616
|
+
this._client = {
|
|
617
|
+
onFrame: (frame) => {
|
|
618
|
+
const time = (0, import_time.monotonicTime)();
|
|
619
|
+
if (time < this._unthrottledUntil) {
|
|
620
|
+
onFrame(frame);
|
|
621
|
+
return;
|
|
622
|
+
}
|
|
623
|
+
if (this._pendingAck)
|
|
624
|
+
return;
|
|
625
|
+
onFrame(frame);
|
|
626
|
+
this._pendingAck = new import_manualPromise.ManualPromise();
|
|
627
|
+
this._timer = setTimeout(() => this._clearPendingAck(), throttledRate);
|
|
628
|
+
return this._pendingAck;
|
|
629
|
+
},
|
|
630
|
+
gracefulClose: () => this.dispose(),
|
|
631
|
+
dispose: () => this.dispose()
|
|
632
|
+
};
|
|
633
|
+
this._screencast.addClient(this._client);
|
|
634
|
+
}
|
|
635
|
+
dispose() {
|
|
636
|
+
this._screencast.removeClient(this._client);
|
|
637
|
+
this._clearPendingAck();
|
|
638
|
+
}
|
|
639
|
+
temporarilyDisableThrottling() {
|
|
640
|
+
this._unthrottledUntil = (0, import_time.monotonicTime)() + unthrottleDuration;
|
|
641
|
+
this._clearPendingAck();
|
|
642
|
+
}
|
|
643
|
+
_clearPendingAck() {
|
|
644
|
+
this._pendingAck?.resolve();
|
|
645
|
+
this._pendingAck = void 0;
|
|
646
|
+
if (this._timer) {
|
|
647
|
+
clearTimeout(this._timer);
|
|
648
|
+
this._timer = void 0;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
}
|
|
609
652
|
// Annotate the CommonJS export names for ESM import in node:
|
|
610
653
|
0 && (module.exports = {
|
|
611
654
|
Tracing
|
|
@@ -91,7 +91,7 @@ async function startTraceViewerServer(options) {
|
|
|
91
91
|
});
|
|
92
92
|
const transport = options?.transport || (options?.isServer ? new StdinServer() : void 0);
|
|
93
93
|
if (transport)
|
|
94
|
-
server.createWebSocket(transport);
|
|
94
|
+
server.createWebSocket(() => transport);
|
|
95
95
|
const { host, port } = options || {};
|
|
96
96
|
await server.start({ preferredPort: port, host });
|
|
97
97
|
return server;
|
|
@@ -126,13 +126,12 @@ async function installRootRedirect(server, traceUrl, options) {
|
|
|
126
126
|
return true;
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
|
-
async function runTraceViewerApp(traceUrl, browserName, options
|
|
129
|
+
async function runTraceViewerApp(traceUrl, browserName, options) {
|
|
130
130
|
traceUrl = validateTraceUrlOrPath(traceUrl);
|
|
131
131
|
const server = await startTraceViewerServer(options);
|
|
132
132
|
await installRootRedirect(server, traceUrl, options);
|
|
133
133
|
const page = await openTraceViewerApp(server.urlPrefix("precise"), browserName, options);
|
|
134
|
-
|
|
135
|
-
page.on("close", () => (0, import_utils.gracefullyProcessExitDoNotHang)(0));
|
|
134
|
+
page.on("close", () => (0, import_utils.gracefullyProcessExitDoNotHang)(0));
|
|
136
135
|
return page;
|
|
137
136
|
}
|
|
138
137
|
async function runTraceInBrowser(traceUrl, options) {
|
|
@@ -119,6 +119,13 @@ const USKeyboardLayout = {
|
|
|
119
119
|
"ArrowUp": { "keyCode": 38, "key": "ArrowUp" },
|
|
120
120
|
"ArrowRight": { "keyCode": 39, "key": "ArrowRight" },
|
|
121
121
|
"ArrowDown": { "keyCode": 40, "key": "ArrowDown" },
|
|
122
|
+
// Media keys
|
|
123
|
+
"AudioVolumeMute": { "keyCode": 173, "key": "AudioVolumeMute" },
|
|
124
|
+
"AudioVolumeDown": { "keyCode": 174, "key": "AudioVolumeDown" },
|
|
125
|
+
"AudioVolumeUp": { "keyCode": 175, "key": "AudioVolumeUp" },
|
|
126
|
+
"MediaTrackNext": { "keyCode": 176, "key": "MediaTrackNext" },
|
|
127
|
+
"MediaTrackPrevious": { "keyCode": 177, "key": "MediaTrackPrevious" },
|
|
128
|
+
"MediaPlayPause": { "keyCode": 179, "key": "MediaPlayPause" },
|
|
122
129
|
// Numpad
|
|
123
130
|
"NumLock": { "keyCode": 144, "key": "NumLock" },
|
|
124
131
|
"NumpadDivide": { "keyCode": 111, "key": "/", "location": 3 },
|
|
@@ -37,7 +37,7 @@ var import_pixelmatch = __toESM(require("../../third_party/pixelmatch"));
|
|
|
37
37
|
var import_utilsBundle = require("../../utilsBundle");
|
|
38
38
|
var import_utilsBundle2 = require("../../utilsBundle");
|
|
39
39
|
var import_utilsBundle3 = require("../../utilsBundle");
|
|
40
|
-
var import_imageUtils = require("
|
|
40
|
+
var import_imageUtils = require("../../utils/isomorphic/imageUtils");
|
|
41
41
|
function getComparator(mimeType) {
|
|
42
42
|
if (mimeType === "image/png")
|
|
43
43
|
return compareImages.bind(null, "image/png");
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var disposable_exports = {};
|
|
20
|
+
__export(disposable_exports, {
|
|
21
|
+
disposeAll: () => disposeAll
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(disposable_exports);
|
|
24
|
+
async function disposeAll(disposables) {
|
|
25
|
+
const copy = [...disposables];
|
|
26
|
+
disposables.length = 0;
|
|
27
|
+
await Promise.all(copy.map((d) => d.dispose()));
|
|
28
|
+
}
|
|
29
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
30
|
+
0 && (module.exports = {
|
|
31
|
+
disposeAll
|
|
32
|
+
});
|
|
@@ -24,7 +24,9 @@ module.exports = __toCommonJS(eventsHelper_exports);
|
|
|
24
24
|
class EventsHelper {
|
|
25
25
|
static addEventListener(emitter, eventName, handler) {
|
|
26
26
|
emitter.on(eventName, handler);
|
|
27
|
-
return { emitter, eventName, handler
|
|
27
|
+
return { emitter, eventName, handler, dispose: async () => {
|
|
28
|
+
emitter.removeListener(eventName, handler);
|
|
29
|
+
} };
|
|
28
30
|
}
|
|
29
31
|
static removeEventListeners(listeners) {
|
|
30
32
|
for (const listener of listeners)
|
|
@@ -32,6 +32,7 @@ __export(fileUtils_exports, {
|
|
|
32
32
|
canAccessFile: () => canAccessFile,
|
|
33
33
|
copyFileAndMakeWritable: () => copyFileAndMakeWritable,
|
|
34
34
|
existsAsync: () => existsAsync,
|
|
35
|
+
makeSocketPath: () => makeSocketPath,
|
|
35
36
|
mkdirIfNeeded: () => mkdirIfNeeded,
|
|
36
37
|
removeFolders: () => removeFolders,
|
|
37
38
|
sanitizeForFilePath: () => sanitizeForFilePath,
|
|
@@ -39,9 +40,10 @@ __export(fileUtils_exports, {
|
|
|
39
40
|
});
|
|
40
41
|
module.exports = __toCommonJS(fileUtils_exports);
|
|
41
42
|
var import_fs = __toESM(require("fs"));
|
|
43
|
+
var import_os = __toESM(require("os"));
|
|
42
44
|
var import_path = __toESM(require("path"));
|
|
45
|
+
var import_crypto = require("./crypto");
|
|
43
46
|
var import_manualPromise = require("../../utils/isomorphic/manualPromise");
|
|
44
|
-
var import_zipBundle = require("../../zipBundle");
|
|
45
47
|
const existsAsync = (path2) => new Promise((resolve) => import_fs.default.stat(path2, (err) => resolve(!err)));
|
|
46
48
|
async function mkdirIfNeeded(filePath) {
|
|
47
49
|
await import_fs.default.promises.mkdir(import_path.default.dirname(filePath), { recursive: true }).catch(() => {
|
|
@@ -72,6 +74,16 @@ function sanitizeForFilePath(s) {
|
|
|
72
74
|
function toPosixPath(aPath) {
|
|
73
75
|
return aPath.split(import_path.default.sep).join(import_path.default.posix.sep);
|
|
74
76
|
}
|
|
77
|
+
function makeSocketPath(domain, name) {
|
|
78
|
+
const userNameHash = (0, import_crypto.calculateSha1)(process.env.USERNAME || process.env.USER || "default").slice(0, 8);
|
|
79
|
+
if (process.platform === "win32")
|
|
80
|
+
return `\\\\.\\pipe\\pw-${userNameHash}-${domain}-${name}`;
|
|
81
|
+
const baseDir = process.env.PLAYWRIGHT_SOCKETS_DIR || import_path.default.join(import_os.default.tmpdir(), `pw-${userNameHash}`);
|
|
82
|
+
const dir = import_path.default.join(baseDir, domain);
|
|
83
|
+
const result = import_path.default.join(dir, `${name}.sock`);
|
|
84
|
+
import_fs.default.mkdirSync(dir, { recursive: true });
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
75
87
|
class SerializedFS {
|
|
76
88
|
constructor() {
|
|
77
89
|
this._buffers = /* @__PURE__ */ new Map();
|
|
@@ -165,7 +177,8 @@ class SerializedFS {
|
|
|
165
177
|
return;
|
|
166
178
|
}
|
|
167
179
|
case "zip": {
|
|
168
|
-
const
|
|
180
|
+
const { yazl } = await import("playwright-core/lib/zipBundle");
|
|
181
|
+
const zipFile = new yazl.ZipFile();
|
|
169
182
|
const result = new import_manualPromise.ManualPromise();
|
|
170
183
|
zipFile.on("error", (error) => result.reject(error));
|
|
171
184
|
for (const entry of op.entries)
|
|
@@ -184,6 +197,7 @@ class SerializedFS {
|
|
|
184
197
|
canAccessFile,
|
|
185
198
|
copyFileAndMakeWritable,
|
|
186
199
|
existsAsync,
|
|
200
|
+
makeSocketPath,
|
|
187
201
|
mkdirIfNeeded,
|
|
188
202
|
removeFolders,
|
|
189
203
|
sanitizeForFilePath,
|
|
@@ -166,20 +166,23 @@ async function createConnectionAsync(options, oncreate, useTLS) {
|
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
async function lookupAddresses(hostname) {
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
169
|
+
const [v4Result, v6Result] = await Promise.allSettled([
|
|
170
|
+
import_dns.default.promises.lookup(hostname, { all: true, family: 4 }),
|
|
171
|
+
import_dns.default.promises.lookup(hostname, { all: true, family: 6 })
|
|
172
|
+
]);
|
|
173
|
+
const v4Addresses = v4Result.status === "fulfilled" ? v4Result.value : [];
|
|
174
|
+
const v6Addresses = v6Result.status === "fulfilled" ? v6Result.value : [];
|
|
175
|
+
if (!v4Addresses.length && !v6Addresses.length) {
|
|
176
|
+
if (v4Result.status === "rejected")
|
|
177
|
+
throw v4Result.reason;
|
|
178
|
+
throw v6Result.reason;
|
|
176
179
|
}
|
|
177
180
|
const result = [];
|
|
178
|
-
for (let i = 0; i < Math.max(
|
|
179
|
-
if (
|
|
180
|
-
result.push(
|
|
181
|
-
if (
|
|
182
|
-
result.push(
|
|
181
|
+
for (let i = 0; i < Math.max(v4Addresses.length, v6Addresses.length); i++) {
|
|
182
|
+
if (v6Addresses[i])
|
|
183
|
+
result.push(v6Addresses[i]);
|
|
184
|
+
if (v4Addresses[i])
|
|
185
|
+
result.push(v4Addresses[i]);
|
|
183
186
|
}
|
|
184
187
|
return result;
|
|
185
188
|
}
|
|
@@ -28,13 +28,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
var hostPlatform_exports = {};
|
|
30
30
|
__export(hostPlatform_exports, {
|
|
31
|
-
hasGpuMac: () => hasGpuMac,
|
|
32
31
|
hostPlatform: () => hostPlatform,
|
|
33
32
|
isOfficiallySupportedPlatform: () => isOfficiallySupportedPlatform,
|
|
34
33
|
shortPlatform: () => shortPlatform
|
|
35
34
|
});
|
|
36
35
|
module.exports = __toCommonJS(hostPlatform_exports);
|
|
37
|
-
var import_child_process = require("child_process");
|
|
38
36
|
var import_os = __toESM(require("os"));
|
|
39
37
|
var import_linuxUtils = require("./linuxUtils");
|
|
40
38
|
function calculatePlatform() {
|
|
@@ -117,21 +115,8 @@ function toShortPlatform(hostPlatform2) {
|
|
|
117
115
|
return hostPlatform2.endsWith("arm64") ? "linux-arm64" : "linux-x64";
|
|
118
116
|
}
|
|
119
117
|
const shortPlatform = toShortPlatform(hostPlatform);
|
|
120
|
-
let hasGpuMacValue;
|
|
121
|
-
function hasGpuMac() {
|
|
122
|
-
try {
|
|
123
|
-
if (hasGpuMacValue === void 0) {
|
|
124
|
-
const output = (0, import_child_process.execSync)("system_profiler SPDisplaysDataType", { stdio: ["ignore", "pipe", "ignore"] }).toString();
|
|
125
|
-
hasGpuMacValue = output.includes("Metal: Supported") || output.includes("Metal Support: Metal");
|
|
126
|
-
}
|
|
127
|
-
return hasGpuMacValue;
|
|
128
|
-
} catch (e) {
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
118
|
// Annotate the CommonJS export names for ESM import in node:
|
|
133
119
|
0 && (module.exports = {
|
|
134
|
-
hasGpuMac,
|
|
135
120
|
hostPlatform,
|
|
136
121
|
isOfficiallySupportedPlatform,
|
|
137
122
|
shortPlatform
|
|
@@ -58,14 +58,16 @@ class HttpServer {
|
|
|
58
58
|
port() {
|
|
59
59
|
return this._port;
|
|
60
60
|
}
|
|
61
|
-
createWebSocket(
|
|
61
|
+
createWebSocket(transportFactory, guid) {
|
|
62
62
|
(0, import_assert.assert)(!this._wsGuid, "can only create one main websocket transport per server");
|
|
63
63
|
this._wsGuid = guid || (0, import_crypto.createGuid)();
|
|
64
64
|
const wss = new import_utilsBundle.wsServer({ server: this._server, path: "/" + this._wsGuid });
|
|
65
|
-
wss.on("connection", (ws) => {
|
|
66
|
-
|
|
65
|
+
wss.on("connection", (ws, request) => {
|
|
66
|
+
const url = new URL(request.url ?? "/", "http://localhost");
|
|
67
|
+
const transport = transportFactory(url);
|
|
67
68
|
transport.sendEvent = (method, params) => ws.send(JSON.stringify({ method, params }));
|
|
68
69
|
transport.close = () => ws.close();
|
|
70
|
+
transport.onconnect();
|
|
69
71
|
ws.on("message", async (message) => {
|
|
70
72
|
const { id, method, params } = JSON.parse(String(message));
|
|
71
73
|
try {
|
|
@@ -33,6 +33,7 @@ __export(network_exports, {
|
|
|
33
33
|
createHttpServer: () => createHttpServer,
|
|
34
34
|
createHttpsServer: () => createHttpsServer,
|
|
35
35
|
createProxyAgent: () => createProxyAgent,
|
|
36
|
+
decorateServer: () => decorateServer,
|
|
36
37
|
fetchData: () => fetchData,
|
|
37
38
|
httpRequest: () => httpRequest,
|
|
38
39
|
isURLAvailable: () => isURLAvailable,
|
|
@@ -62,7 +63,6 @@ function httpRequest(params, onResponse, onError) {
|
|
|
62
63
|
url = parsedProxyURL;
|
|
63
64
|
} else {
|
|
64
65
|
options.agent = new import_utilsBundle.HttpsProxyAgent(parsedProxyURL);
|
|
65
|
-
options.rejectUnauthorized = false;
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
options.agent ??= url.protocol === "https:" ? import_happyEyeballs.httpsHappyEyeballsAgent : import_happyEyeballs.httpHappyEyeballsAgent;
|
|
@@ -235,6 +235,7 @@ function decorateServer(server) {
|
|
|
235
235
|
createHttpServer,
|
|
236
236
|
createHttpsServer,
|
|
237
237
|
createProxyAgent,
|
|
238
|
+
decorateServer,
|
|
238
239
|
fetchData,
|
|
239
240
|
httpRequest,
|
|
240
241
|
isURLAvailable,
|
|
@@ -42,7 +42,6 @@ var import_utilsBundle = require("../../utilsBundle");
|
|
|
42
42
|
var import_debugLogger = require("./debugLogger");
|
|
43
43
|
var import_zones = require("./zones");
|
|
44
44
|
var import_debug = require("./debug");
|
|
45
|
-
var import_mcpBundle = require("../../mcpBundle");
|
|
46
45
|
const pipelineAsync = util.promisify(import_stream.pipeline);
|
|
47
46
|
class NodeZone {
|
|
48
47
|
constructor(zone) {
|
|
@@ -106,11 +105,6 @@ const nodePlatform = {
|
|
|
106
105
|
streamWritable: (channel) => {
|
|
107
106
|
return new WritableStreamImpl(channel);
|
|
108
107
|
},
|
|
109
|
-
zodToJsonSchema: (schema) => {
|
|
110
|
-
if ("_zod" in schema)
|
|
111
|
-
return import_mcpBundle.z.toJSONSchema(schema);
|
|
112
|
-
return (0, import_mcpBundle.zodToJsonSchema)(schema);
|
|
113
|
-
},
|
|
114
108
|
zones: {
|
|
115
109
|
current: () => new NodeZone((0, import_zones.currentZone)()),
|
|
116
110
|
empty: new NodeZone(import_zones.emptyZone)
|
|
@@ -46,11 +46,12 @@ async function gracefullyCloseAll() {
|
|
|
46
46
|
await Promise.all(Array.from(gracefullyCloseSet).map((gracefullyClose) => gracefullyClose().catch((e) => {
|
|
47
47
|
})));
|
|
48
48
|
}
|
|
49
|
-
function gracefullyProcessExitDoNotHang(code) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
function gracefullyProcessExitDoNotHang(code, onExit) {
|
|
50
|
+
const beforeExit = onExit ? () => onExit().catch(() => {
|
|
51
|
+
}) : () => Promise.resolve();
|
|
52
|
+
const callback = () => beforeExit().then(() => process.exit(code));
|
|
53
|
+
setTimeout(callback, 3e4);
|
|
54
|
+
gracefullyCloseAll().then(callback);
|
|
54
55
|
}
|
|
55
56
|
function exitHandler() {
|
|
56
57
|
for (const kill of killSet)
|
|
@@ -109,6 +110,7 @@ async function launchProcess(options) {
|
|
|
109
110
|
// process group, making it possible to kill child process tree with `.kill(-pid)` command.
|
|
110
111
|
// @see https://nodejs.org/api/child_process.html#child_process_options_detached
|
|
111
112
|
detached: process.platform !== "win32",
|
|
113
|
+
windowsHide: true,
|
|
112
114
|
env: options.env,
|
|
113
115
|
cwd: options.cwd,
|
|
114
116
|
shell: options.shell,
|
|
@@ -191,7 +193,7 @@ async function launchProcess(options) {
|
|
|
191
193
|
options.log(`[pid=${spawnedProcess.pid}] <will force kill>`);
|
|
192
194
|
try {
|
|
193
195
|
if (process.platform === "win32") {
|
|
194
|
-
const taskkillProcess = childProcess.spawnSync(`taskkill /pid ${spawnedProcess.pid} /T /F`, { shell: true });
|
|
196
|
+
const taskkillProcess = childProcess.spawnSync(`taskkill /pid ${spawnedProcess.pid} /T /F`, { shell: true, windowsHide: true });
|
|
195
197
|
const [stdout2, stderr2] = [taskkillProcess.stdout.toString(), taskkillProcess.stderr.toString()];
|
|
196
198
|
if (stdout2)
|
|
197
199
|
options.log(`[pid=${spawnedProcess.pid}] taskkill stdout: ${stdout2}`);
|
|
@@ -21,7 +21,6 @@ __export(zipFile_exports, {
|
|
|
21
21
|
ZipFile: () => ZipFile
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(zipFile_exports);
|
|
24
|
-
var import_zipBundle = require("../../zipBundle");
|
|
25
24
|
class ZipFile {
|
|
26
25
|
constructor(fileName) {
|
|
27
26
|
this._entries = /* @__PURE__ */ new Map();
|
|
@@ -29,8 +28,9 @@ class ZipFile {
|
|
|
29
28
|
this._openedPromise = this._open();
|
|
30
29
|
}
|
|
31
30
|
async _open() {
|
|
31
|
+
const { yauzl } = require("../../zipBundle");
|
|
32
32
|
await new Promise((fulfill, reject) => {
|
|
33
|
-
|
|
33
|
+
yauzl.open(this._fileName, { autoClose: false }, (e, z) => {
|
|
34
34
|
if (e) {
|
|
35
35
|
reject(e);
|
|
36
36
|
return;
|