@swmansion/argent 0.33.1-next.1 → 0.33.1-next.3
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/dist/cli-cmds.mjs +1 -1
- package/dist/installer.mjs +1 -1
- package/dist/tool-server.cjs +129 -80
- package/package.json +1 -1
package/dist/cli-cmds.mjs
CHANGED
|
@@ -35872,7 +35872,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
|
|
|
35872
35872
|
var SESSION_ID2 = randomUUID5();
|
|
35873
35873
|
function readCliVersion() {
|
|
35874
35874
|
if (true) {
|
|
35875
|
-
return "0.33.1-next.
|
|
35875
|
+
return "0.33.1-next.3";
|
|
35876
35876
|
}
|
|
35877
35877
|
return "0.0.0";
|
|
35878
35878
|
}
|
package/dist/installer.mjs
CHANGED
|
@@ -16981,7 +16981,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
|
|
|
16981
16981
|
var SESSION_ID = randomUUID4();
|
|
16982
16982
|
function readCliVersion() {
|
|
16983
16983
|
if (true) {
|
|
16984
|
-
return "0.33.1-next.
|
|
16984
|
+
return "0.33.1-next.3";
|
|
16985
16985
|
}
|
|
16986
16986
|
return "0.0.0";
|
|
16987
16987
|
}
|
package/dist/tool-server.cjs
CHANGED
|
@@ -101273,7 +101273,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
|
|
|
101273
101273
|
var SESSION_ID = (0, import_node_crypto3.randomUUID)();
|
|
101274
101274
|
function readCliVersion() {
|
|
101275
101275
|
if (true) {
|
|
101276
|
-
return "0.33.1-next.
|
|
101276
|
+
return "0.33.1-next.3";
|
|
101277
101277
|
}
|
|
101278
101278
|
return "0.0.0";
|
|
101279
101279
|
}
|
|
@@ -133481,13 +133481,38 @@ var fs32 = __toESM(require("node:fs"));
|
|
|
133481
133481
|
var fsp2 = __toESM(require("node:fs/promises"));
|
|
133482
133482
|
var os12 = __toESM(require("node:os"));
|
|
133483
133483
|
var path28 = __toESM(require("node:path"));
|
|
133484
|
+
var import_node_util20 = require("node:util");
|
|
133484
133485
|
init_src2();
|
|
133486
|
+
var execFileAsync20 = (0, import_node_util20.promisify)(import_node_child_process27.execFile);
|
|
133485
133487
|
function logsRoot() {
|
|
133486
133488
|
return path28.join(os12.homedir(), ".argent", "ios-device-runner", "logs");
|
|
133487
133489
|
}
|
|
133488
133490
|
function resultsRoot() {
|
|
133489
133491
|
return path28.join(os12.homedir(), ".argent", "ios-device-runner", "results");
|
|
133490
133492
|
}
|
|
133493
|
+
var RUNNER_ATTACHMENT_SETTINGS = [
|
|
133494
|
+
["PreferredScreenCaptureFormat", "screenshots"],
|
|
133495
|
+
["SystemAttachmentLifetime", "keepNever"],
|
|
133496
|
+
["UserAttachmentLifetime", "keepNever"]
|
|
133497
|
+
];
|
|
133498
|
+
var RUNNER_TEST_TARGET_KEY_PATHS = ["ArgentRunnerUITests", "TestConfigurations.0.TestTargets.0"];
|
|
133499
|
+
async function disableRunnerAttachments(xctestrunPath) {
|
|
133500
|
+
for (const target of RUNNER_TEST_TARGET_KEY_PATHS) {
|
|
133501
|
+
try {
|
|
133502
|
+
for (const [key2, value] of RUNNER_ATTACHMENT_SETTINGS) {
|
|
133503
|
+
await execFileAsync20(
|
|
133504
|
+
"plutil",
|
|
133505
|
+
["-replace", `${target}.${key2}`, "-string", value, xctestrunPath],
|
|
133506
|
+
{
|
|
133507
|
+
timeout: 1e4
|
|
133508
|
+
}
|
|
133509
|
+
);
|
|
133510
|
+
}
|
|
133511
|
+
return;
|
|
133512
|
+
} catch {
|
|
133513
|
+
}
|
|
133514
|
+
}
|
|
133515
|
+
}
|
|
133491
133516
|
async function launchRunner(opts) {
|
|
133492
133517
|
const logDir = logsRoot();
|
|
133493
133518
|
const resultsDir = resultsRoot();
|
|
@@ -133499,6 +133524,7 @@ async function launchRunner(opts) {
|
|
|
133499
133524
|
const logPath = path28.join(logDir, `runner-${deviceTag}.log`);
|
|
133500
133525
|
const resultBundlePath = path28.join(resultsDir, `argent-${deviceTag}.xcresult`);
|
|
133501
133526
|
await fsp2.rm(resultBundlePath, { recursive: true, force: true });
|
|
133527
|
+
await disableRunnerAttachments(opts.xctestrunPath);
|
|
133502
133528
|
const logFd = fs32.openSync(logPath, "w");
|
|
133503
133529
|
const child = (0, import_node_child_process27.spawn)(
|
|
133504
133530
|
"xcodebuild",
|
|
@@ -133581,14 +133607,14 @@ function killRunnerProcess(child) {
|
|
|
133581
133607
|
|
|
133582
133608
|
// ../tool-server/src/utils/ios-device/runner-sweep.ts
|
|
133583
133609
|
var import_node_child_process28 = require("node:child_process");
|
|
133584
|
-
var
|
|
133610
|
+
var import_node_util21 = require("node:util");
|
|
133585
133611
|
var path29 = __toESM(require("node:path"));
|
|
133586
|
-
var
|
|
133612
|
+
var execFileAsync21 = (0, import_node_util21.promisify)(import_node_child_process28.execFile);
|
|
133587
133613
|
var PROCESS_TABLE_MAX_BYTES = 16 * 1024 * 1024;
|
|
133588
133614
|
var STALE_EXIT_TIMEOUT_MS = 5e3;
|
|
133589
133615
|
var STALE_EXIT_POLL_INTERVAL_MS = 100;
|
|
133590
133616
|
async function listProcessTable() {
|
|
133591
|
-
const { stdout } = await
|
|
133617
|
+
const { stdout } = await execFileAsync21(PS_BIN, ["-ax", "-o", "pid=,ppid=,command="], {
|
|
133592
133618
|
maxBuffer: PROCESS_TABLE_MAX_BYTES
|
|
133593
133619
|
});
|
|
133594
133620
|
return stdout;
|
|
@@ -133980,9 +134006,9 @@ function defaultSendViaUsbmux(udid, port, body, deadline) {
|
|
|
133980
134006
|
|
|
133981
134007
|
// ../tool-server/src/utils/ios-device/runner-crash.ts
|
|
133982
134008
|
var import_node_child_process29 = require("node:child_process");
|
|
133983
|
-
var
|
|
134009
|
+
var import_node_util22 = require("node:util");
|
|
133984
134010
|
var fs33 = __toESM(require("node:fs/promises"));
|
|
133985
|
-
var
|
|
134011
|
+
var execFileAsync22 = (0, import_node_util22.promisify)(import_node_child_process29.execFile);
|
|
133986
134012
|
var XCRESULTTOOL_TIMEOUT_MS = 15e3;
|
|
133987
134013
|
var XCRESULTTOOL_MAX_JSON_BYTES = 32 * 1024 * 1024;
|
|
133988
134014
|
function extractCrashFailureText(summary) {
|
|
@@ -134002,7 +134028,7 @@ function extractCrashFailureText(summary) {
|
|
|
134002
134028
|
async function readRunnerCrashSummary(resultBundlePath) {
|
|
134003
134029
|
try {
|
|
134004
134030
|
await fs33.access(resultBundlePath);
|
|
134005
|
-
const { stdout } = await
|
|
134031
|
+
const { stdout } = await execFileAsync22(
|
|
134006
134032
|
"xcrun",
|
|
134007
134033
|
["xcresulttool", "get", "test-results", "summary", "--path", resultBundlePath],
|
|
134008
134034
|
{ timeout: XCRESULTTOOL_TIMEOUT_MS, maxBuffer: XCRESULTTOOL_MAX_JSON_BYTES }
|
|
@@ -134338,6 +134364,7 @@ function iosDeviceRunnerRef(device) {
|
|
|
134338
134364
|
};
|
|
134339
134365
|
}
|
|
134340
134366
|
var RUNNER_READY_TIMEOUT_MS = 12e4;
|
|
134367
|
+
var RUNNER_CLEAN_EXIT_TIMEOUT_MS = 1e4;
|
|
134341
134368
|
async function startRunner(udid, artifact) {
|
|
134342
134369
|
const launched = await launchRunner({
|
|
134343
134370
|
udid,
|
|
@@ -134491,9 +134518,12 @@ var iosDeviceRunnerBlueprint = {
|
|
|
134491
134518
|
disposed = true;
|
|
134492
134519
|
try {
|
|
134493
134520
|
await client2.run({ command: "shutdown" }, { timeoutMs: 3e3 });
|
|
134521
|
+
await settleExit(RUNNER_CLEAN_EXIT_TIMEOUT_MS);
|
|
134494
134522
|
} catch {
|
|
134495
134523
|
}
|
|
134496
|
-
|
|
134524
|
+
if (exitCode === void 0) {
|
|
134525
|
+
killRunnerProcess(launched.child);
|
|
134526
|
+
}
|
|
134497
134527
|
}
|
|
134498
134528
|
};
|
|
134499
134529
|
},
|
|
@@ -143362,7 +143392,7 @@ function debuggerServiceRef(params) {
|
|
|
143362
143392
|
// ../tool-server/src/tools/debugger/not-connected.ts
|
|
143363
143393
|
var GUIDANCE = {
|
|
143364
143394
|
metro_not_running: "Metro is not running on this port. Do not retry in a loop \u2014 the result will not change until Metro is started. Start Metro with the project's own start script if it has one (else `npx react-native start` or `npx expo start`) or ask the user, wait for it to report ready, then retry once.",
|
|
143365
|
-
no_app_connected: "Metro is running but no app is attached. Do not retry immediately \u2014 launch or restart the RN app on the target device (launch-app / restart-app), wait a few seconds for the bundle to load, then retry once. On Android, if the app cannot reach Metro, first run `adb reverse tcp:<port> tcp:<port>`.",
|
|
143395
|
+
no_app_connected: "Metro is running, but no app on the target device is attached to it. Do not retry immediately \u2014 launch or restart the RN app on the target device (launch-app / restart-app), wait a few seconds for the bundle to load, then retry once. On Android, if the app cannot reach Metro, first run `adb reverse tcp:<port> tcp:<port>`.",
|
|
143366
143396
|
device_mismatch: "The device_id does not match any debugger target on this Metro. Re-target with the logicalDeviceId listed in the detail message, or give the device its own Metro port.",
|
|
143367
143397
|
cdp_unreachable: "The runtime's CDP endpoint could not be reached. Verify the app is running (launch-app), then call debugger-connect and retry once.",
|
|
143368
143398
|
runtime_unresponsive: "The runtime accepted the debugger connection but did not answer within the timeout \u2014 it is likely frozen, or paused at a breakpoint. Do not retry in a loop (each attempt waits out the full timeout). Check the app; if it is hung, restart it (restart-app), then retry once.",
|
|
@@ -146924,8 +146954,18 @@ function deviceKey(target) {
|
|
|
146924
146954
|
}
|
|
146925
146955
|
return target.deviceName;
|
|
146926
146956
|
}
|
|
146957
|
+
var seenLogicalDeviceIds = /* @__PURE__ */ new Set();
|
|
146958
|
+
function listDevices(devices) {
|
|
146959
|
+
return [...devices].map(
|
|
146960
|
+
(d) => d.logicalId ? `${d.name ?? "unknown"} (${d.logicalId})` : `${d.name ?? "unknown"} (legacy inspector \u2014 no logicalDeviceId)`
|
|
146961
|
+
).join(", ");
|
|
146962
|
+
}
|
|
146927
146963
|
function selectTarget(targets, port, options) {
|
|
146928
146964
|
const pool = targets;
|
|
146965
|
+
for (const t of pool) {
|
|
146966
|
+
const id = t.reactNative?.logicalDeviceId;
|
|
146967
|
+
if (id) seenLogicalDeviceIds.add(id);
|
|
146968
|
+
}
|
|
146929
146969
|
let candidates = pool;
|
|
146930
146970
|
if (typeof options?.deviceId === "string" && options.deviceId) {
|
|
146931
146971
|
const deviceId = options.deviceId;
|
|
@@ -146944,9 +146984,7 @@ function selectTarget(targets, port, options) {
|
|
|
146944
146984
|
}
|
|
146945
146985
|
}
|
|
146946
146986
|
if (distinctDevices.size > 1) {
|
|
146947
|
-
const listed =
|
|
146948
|
-
(d) => d.logicalId ? `${d.name ?? "unknown"} (${d.logicalId})` : `${d.name ?? "unknown"} (legacy inspector \u2014 no logicalDeviceId)`
|
|
146949
|
-
).join(", ");
|
|
146987
|
+
const listed = listDevices(distinctDevices.values());
|
|
146950
146988
|
throw new FailureError(
|
|
146951
146989
|
`No debugger target matches device_id "${deviceId}". ${distinctDevices.size} devices are connected to Metro on port ${port}: ${listed}. Re-target with the logicalDeviceId in parentheses \u2014 that is what debugger-connect returns and what subsequent debugger-* calls must pass. A legacy-inspector device (RN 0.72 / Vega) reports none and cannot be singled out of a shared Metro: give it its own Metro port.`,
|
|
146952
146990
|
{
|
|
@@ -146957,6 +146995,17 @@ function selectTarget(targets, port, options) {
|
|
|
146957
146995
|
}
|
|
146958
146996
|
);
|
|
146959
146997
|
}
|
|
146998
|
+
if (seenLogicalDeviceIds.has(deviceId)) {
|
|
146999
|
+
throw new FailureError(
|
|
147000
|
+
`Device with logicalDeviceId "${deviceId}" is no longer attached to Metro on port ${port} \u2014 its app likely exited or reloaded onto another Metro. Not falling back to the remaining device: ${listDevices(distinctDevices.values())}. If the app exited, relaunch it on the target device (launch-app / restart-app), then retry with the same id: a relaunched app keeps its logicalDeviceId. If it was reinstalled (reinstall-app), iOS can give it a new logicalDeviceId: when the device listed above is your target, retry with the id shown for it.`,
|
|
147001
|
+
{
|
|
147002
|
+
error_code: FAILURE_CODES.DEBUGGER_METRO_NO_TARGETS,
|
|
147003
|
+
failure_stage: "debugger_select_target",
|
|
147004
|
+
failure_area: "tool_server",
|
|
147005
|
+
error_kind: "not_found"
|
|
147006
|
+
}
|
|
147007
|
+
);
|
|
147008
|
+
}
|
|
146960
147009
|
}
|
|
146961
147010
|
}
|
|
146962
147011
|
if (options?.deviceName) {
|
|
@@ -149495,7 +149544,7 @@ var import_node_fs15 = require("node:fs");
|
|
|
149495
149544
|
var import_promises13 = require("node:fs/promises");
|
|
149496
149545
|
var import_node_os14 = require("node:os");
|
|
149497
149546
|
var import_node_path19 = require("node:path");
|
|
149498
|
-
var
|
|
149547
|
+
var import_node_util25 = require("node:util");
|
|
149499
149548
|
init_zod();
|
|
149500
149549
|
init_src();
|
|
149501
149550
|
init_src2();
|
|
@@ -149503,8 +149552,8 @@ init_adb();
|
|
|
149503
149552
|
|
|
149504
149553
|
// ../tool-server/src/utils/emulator-process.ts
|
|
149505
149554
|
var import_node_child_process31 = require("node:child_process");
|
|
149506
|
-
var
|
|
149507
|
-
var
|
|
149555
|
+
var import_node_util23 = require("node:util");
|
|
149556
|
+
var execFileAsync23 = (0, import_node_util23.promisify)(import_node_child_process31.execFile);
|
|
149508
149557
|
var EMULATOR_PROCESS_RE = /(?:^|\/)(?:qemu-system-[\w-]+|emulator|emulator64-[\w-]+)\s/;
|
|
149509
149558
|
function escapeRegExp(value) {
|
|
149510
149559
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -149524,7 +149573,7 @@ function parseEmulatorPidsForAvd(psOutput, avdName) {
|
|
|
149524
149573
|
async function listEmulatorPidsForAvd(avdName) {
|
|
149525
149574
|
if (process.platform === "win32") return [];
|
|
149526
149575
|
try {
|
|
149527
|
-
const { stdout } = await
|
|
149576
|
+
const { stdout } = await execFileAsync23(PS_BIN, [...PS_ARGS_WITH_PID], {
|
|
149528
149577
|
timeout: 5e3,
|
|
149529
149578
|
maxBuffer: 16 * 1024 * 1024
|
|
149530
149579
|
});
|
|
@@ -149607,8 +149656,8 @@ var import_node_child_process32 = require("node:child_process");
|
|
|
149607
149656
|
var import_node_fs14 = __toESM(require("node:fs"));
|
|
149608
149657
|
var import_node_os13 = __toESM(require("node:os"));
|
|
149609
149658
|
var import_node_path18 = __toESM(require("node:path"));
|
|
149610
|
-
var
|
|
149611
|
-
var
|
|
149659
|
+
var import_node_util24 = require("node:util");
|
|
149660
|
+
var execFileAsync24 = (0, import_node_util24.promisify)(import_node_child_process32.execFile);
|
|
149612
149661
|
var CORE_SIMULATOR_INFO_PLIST = "/Library/Developer/PrivateFrameworks/CoreSimulator.framework/Versions/A/Resources/Info.plist";
|
|
149613
149662
|
var LAUNCH_WATCH_MS = 1e4;
|
|
149614
149663
|
var LAUNCH_POLL_MS = 250;
|
|
@@ -149637,7 +149686,7 @@ function persistVerdict(key2, verdict) {
|
|
|
149637
149686
|
}
|
|
149638
149687
|
}
|
|
149639
149688
|
async function bundleVersion(infoPlist) {
|
|
149640
|
-
const { stdout } = await
|
|
149689
|
+
const { stdout } = await execFileAsync24(
|
|
149641
149690
|
"plutil",
|
|
149642
149691
|
["-extract", "CFBundleVersion", "raw", "-o", "-", infoPlist],
|
|
149643
149692
|
{ timeout: 5e3 }
|
|
@@ -149653,7 +149702,7 @@ async function launchKey(simulatorApp) {
|
|
|
149653
149702
|
}
|
|
149654
149703
|
var comparablePath = (p) => p.normalize("NFC").toLowerCase();
|
|
149655
149704
|
async function runningExecutables() {
|
|
149656
|
-
const { stdout } = await
|
|
149705
|
+
const { stdout } = await execFileAsync24(PS_BIN, ["-xo", "comm="], {
|
|
149657
149706
|
timeout: 5e3,
|
|
149658
149707
|
env: { ...process.env, LC_ALL: "en_US.UTF-8" }
|
|
149659
149708
|
});
|
|
@@ -150076,7 +150125,7 @@ async function bootMacosApp(registry2, opts) {
|
|
|
150076
150125
|
}
|
|
150077
150126
|
|
|
150078
150127
|
// ../tool-server/src/tools/devices/boot-device.ts
|
|
150079
|
-
var
|
|
150128
|
+
var execFileAsync25 = (0, import_node_util25.promisify)(import_node_child_process34.execFile);
|
|
150080
150129
|
function bootTarget(params) {
|
|
150081
150130
|
return params.udid ?? params.avdName ?? params.vvdImage ?? params.harmonyInstance ?? params.electronAppPath ?? params.macosAppPath ?? "device";
|
|
150082
150131
|
}
|
|
@@ -150298,7 +150347,7 @@ async function pickOwnSerial(avdName, newSerials) {
|
|
|
150298
150347
|
}
|
|
150299
150348
|
async function bootSimctl(prefix, [sub, udid, ...rest], timeoutMs) {
|
|
150300
150349
|
try {
|
|
150301
|
-
await
|
|
150350
|
+
await execFileAsync25("xcrun", [...prefix, sub, udid, ...rest], {
|
|
150302
150351
|
timeout: timeoutMs,
|
|
150303
150352
|
killSignal: SIMCTL_KILL_SIGNAL
|
|
150304
150353
|
});
|
|
@@ -150397,7 +150446,7 @@ async function bootIos(udid, registry2, force, headless) {
|
|
|
150397
150446
|
return buildInitFailedResult(udid, initFailure);
|
|
150398
150447
|
}
|
|
150399
150448
|
if (!deviceSet) {
|
|
150400
|
-
await
|
|
150449
|
+
await execFileAsync25("defaults", [
|
|
150401
150450
|
"write",
|
|
150402
150451
|
"com.apple.iphonesimulator",
|
|
150403
150452
|
"CurrentDeviceUDID",
|
|
@@ -150413,20 +150462,20 @@ async function bootIos(udid, registry2, force, headless) {
|
|
|
150413
150462
|
}
|
|
150414
150463
|
async function openSimulatorWindow(udid) {
|
|
150415
150464
|
const timeout = 5e3;
|
|
150416
|
-
const { stdout } = await
|
|
150465
|
+
const { stdout } = await execFileAsync25("xcode-select", ["-p"], { timeout });
|
|
150417
150466
|
const developerDir2 = (0, import_node_fs15.realpathSync)(stdout.trim());
|
|
150418
150467
|
const simulatorApp = (0, import_node_path19.join)(developerDir2, "Applications", "Simulator.app");
|
|
150419
150468
|
if ((0, import_node_fs15.existsSync)(simulatorApp)) {
|
|
150420
150469
|
const launched = await launchSimulatorApp(
|
|
150421
150470
|
simulatorApp,
|
|
150422
|
-
() =>
|
|
150471
|
+
() => execFileAsync25("open", ["-a", simulatorApp], { timeout })
|
|
150423
150472
|
);
|
|
150424
150473
|
return launched ? void 0 : `${simulatorApp} exits right after launch on this host, so Argent no longer opens it and the device runs without a window. Delete ~/.argent/simulator-app-launch.json to try opening it again.`;
|
|
150425
150474
|
}
|
|
150426
150475
|
const deviceHubApp = (0, import_node_path19.join)(developerDir2, "..", "Applications", "DeviceHub.app");
|
|
150427
150476
|
if ((0, import_node_fs15.existsSync)(deviceHubApp)) {
|
|
150428
150477
|
const url2 = `devices://device/open?id=${encodeURIComponent(udid)}`;
|
|
150429
|
-
await
|
|
150478
|
+
await execFileAsync25("open", ["-a", deviceHubApp, url2], { timeout });
|
|
150430
150479
|
}
|
|
150431
150480
|
}
|
|
150432
150481
|
async function bootIosRemote(id, registry2, force) {
|
|
@@ -151593,10 +151642,10 @@ var BUNDLE_ID_MESSAGE = "bundleId may only contain letters, digits, '.', '_' and
|
|
|
151593
151642
|
|
|
151594
151643
|
// ../tool-server/src/tools/launch-app/platforms/ios.ts
|
|
151595
151644
|
var import_node_child_process35 = require("node:child_process");
|
|
151596
|
-
var
|
|
151645
|
+
var import_node_util26 = require("node:util");
|
|
151597
151646
|
init_src2();
|
|
151598
151647
|
init_external_devices();
|
|
151599
|
-
var
|
|
151648
|
+
var execFileAsync26 = (0, import_node_util26.promisify)(import_node_child_process35.execFile);
|
|
151600
151649
|
function makeIosImpl(registry2) {
|
|
151601
151650
|
return {
|
|
151602
151651
|
requires: ["xcrun"],
|
|
@@ -151612,7 +151661,7 @@ function makeIosImpl(registry2) {
|
|
|
151612
151661
|
}
|
|
151613
151662
|
if (params.launchArgs?.length) {
|
|
151614
151663
|
try {
|
|
151615
|
-
await
|
|
151664
|
+
await execFileAsync26(
|
|
151616
151665
|
"xcrun",
|
|
151617
151666
|
await simctlArgsForUdid(params.udid, ["terminate", params.udid, params.bundleId]),
|
|
151618
151667
|
{ timeout: 15e3, killSignal: SIMCTL_KILL_SIGNAL }
|
|
@@ -151634,7 +151683,7 @@ function makeIosImpl(registry2) {
|
|
|
151634
151683
|
}
|
|
151635
151684
|
}
|
|
151636
151685
|
try {
|
|
151637
|
-
await
|
|
151686
|
+
await execFileAsync26(
|
|
151638
151687
|
"xcrun",
|
|
151639
151688
|
await simctlArgsForUdid(params.udid, [
|
|
151640
151689
|
"launch",
|
|
@@ -152122,10 +152171,10 @@ init_device_info();
|
|
|
152122
152171
|
|
|
152123
152172
|
// ../tool-server/src/tools/restart-app/platforms/ios.ts
|
|
152124
152173
|
var import_node_child_process36 = require("node:child_process");
|
|
152125
|
-
var
|
|
152174
|
+
var import_node_util27 = require("node:util");
|
|
152126
152175
|
init_src2();
|
|
152127
152176
|
init_external_devices();
|
|
152128
|
-
var
|
|
152177
|
+
var execFileAsync27 = (0, import_node_util27.promisify)(import_node_child_process36.execFile);
|
|
152129
152178
|
function makeIosImpl2(registry2) {
|
|
152130
152179
|
return {
|
|
152131
152180
|
requires: ["xcrun"],
|
|
@@ -152141,7 +152190,7 @@ function makeIosImpl2(registry2) {
|
|
|
152141
152190
|
if (blocked) return blocked;
|
|
152142
152191
|
}
|
|
152143
152192
|
try {
|
|
152144
|
-
await
|
|
152193
|
+
await execFileAsync27("xcrun", await simctlArgsForUdid(udid, ["terminate", udid, bundleId]), {
|
|
152145
152194
|
timeout: 15e3,
|
|
152146
152195
|
killSignal: SIMCTL_KILL_SIGNAL
|
|
152147
152196
|
});
|
|
@@ -152161,7 +152210,7 @@ function makeIosImpl2(registry2) {
|
|
|
152161
152210
|
}
|
|
152162
152211
|
}
|
|
152163
152212
|
try {
|
|
152164
|
-
await
|
|
152213
|
+
await execFileAsync27(
|
|
152165
152214
|
"xcrun",
|
|
152166
152215
|
await simctlArgsForUdid(udid, ["launch", udid, bundleId, ...params.launchArgs ?? []]),
|
|
152167
152216
|
{ timeout: 3e4, killSignal: SIMCTL_KILL_SIGNAL }
|
|
@@ -152404,11 +152453,11 @@ Returns { restarted, bundleId, <flag:macos-apps>appPath?, args?, note?, </flag:m
|
|
|
152404
152453
|
|
|
152405
152454
|
// ../tool-server/src/tools/terminate-app/index.ts
|
|
152406
152455
|
var import_node_child_process37 = require("node:child_process");
|
|
152407
|
-
var
|
|
152456
|
+
var import_node_util28 = require("node:util");
|
|
152408
152457
|
init_zod();
|
|
152409
152458
|
init_src2();
|
|
152410
152459
|
init_adb();
|
|
152411
|
-
var
|
|
152460
|
+
var execFileAsync28 = (0, import_node_util28.promisify)(import_node_child_process37.execFile);
|
|
152412
152461
|
var capability5 = {
|
|
152413
152462
|
apple: { simulator: true },
|
|
152414
152463
|
appleRemote: { simulator: true },
|
|
@@ -152442,7 +152491,7 @@ Succeeds when the app is not running or not installed.`,
|
|
|
152442
152491
|
requires: ["xcrun"],
|
|
152443
152492
|
handler: async (_services, { udid, bundleId }) => {
|
|
152444
152493
|
const args = await simctlArgsForUdid(udid, ["terminate", udid, bundleId]);
|
|
152445
|
-
const terminate =
|
|
152494
|
+
const terminate = execFileAsync28("xcrun", args, {
|
|
152446
152495
|
timeout: 15e3,
|
|
152447
152496
|
killSignal: SIMCTL_KILL_SIGNAL
|
|
152448
152497
|
}).catch((err) => {
|
|
@@ -152498,7 +152547,7 @@ init_zod();
|
|
|
152498
152547
|
|
|
152499
152548
|
// ../tool-server/src/tools/reinstall-app/platforms/ios.ts
|
|
152500
152549
|
var import_node_child_process39 = require("node:child_process");
|
|
152501
|
-
var
|
|
152550
|
+
var import_node_util30 = require("node:util");
|
|
152502
152551
|
var import_node_path21 = require("node:path");
|
|
152503
152552
|
init_src2();
|
|
152504
152553
|
|
|
@@ -152506,7 +152555,7 @@ init_src2();
|
|
|
152506
152555
|
var import_node_child_process38 = require("node:child_process");
|
|
152507
152556
|
var import_promises15 = require("node:fs/promises");
|
|
152508
152557
|
var import_node_path20 = require("node:path");
|
|
152509
|
-
var
|
|
152558
|
+
var import_node_util29 = require("node:util");
|
|
152510
152559
|
init_capability();
|
|
152511
152560
|
|
|
152512
152561
|
// ../tool-server/src/utils/apk-package.ts
|
|
@@ -152605,7 +152654,7 @@ function readStringPool(xml, chunk) {
|
|
|
152605
152654
|
}
|
|
152606
152655
|
|
|
152607
152656
|
// ../tool-server/src/tools/reinstall-app/validate-app.ts
|
|
152608
|
-
var
|
|
152657
|
+
var execFileAsync29 = (0, import_node_util29.promisify)(import_node_child_process38.execFile);
|
|
152609
152658
|
async function requirePath(absolute, kind, what) {
|
|
152610
152659
|
const info = await (0, import_promises15.stat)(absolute).catch(() => null);
|
|
152611
152660
|
if (!info) {
|
|
@@ -152629,7 +152678,7 @@ async function assertIosAppBundle(absolute, bundleId, { readBundleId = true } =
|
|
|
152629
152678
|
);
|
|
152630
152679
|
}
|
|
152631
152680
|
if (!readBundleId) return;
|
|
152632
|
-
const actual = await
|
|
152681
|
+
const actual = await execFileAsync29("plutil", [
|
|
152633
152682
|
"-extract",
|
|
152634
152683
|
"CFBundleIdentifier",
|
|
152635
152684
|
"raw",
|
|
@@ -152682,7 +152731,7 @@ async function assertHap(absolute, bundleName) {
|
|
|
152682
152731
|
}
|
|
152683
152732
|
|
|
152684
152733
|
// ../tool-server/src/tools/reinstall-app/platforms/ios.ts
|
|
152685
|
-
var
|
|
152734
|
+
var execFileAsync30 = (0, import_node_util30.promisify)(import_node_child_process39.execFile);
|
|
152686
152735
|
var iosImpl = {
|
|
152687
152736
|
requires: ["xcrun"],
|
|
152688
152737
|
handler: async (_services, params) => {
|
|
@@ -152691,7 +152740,7 @@ var iosImpl = {
|
|
|
152691
152740
|
await assertIosAppBundle(absolute, bundleId);
|
|
152692
152741
|
const { nativeId, prefix } = await simctlTargetForUdid(udid);
|
|
152693
152742
|
try {
|
|
152694
|
-
await
|
|
152743
|
+
await execFileAsync30("xcrun", [...prefix, "uninstall", nativeId, bundleId], {
|
|
152695
152744
|
timeout: 3e4,
|
|
152696
152745
|
killSignal: SIMCTL_KILL_SIGNAL
|
|
152697
152746
|
});
|
|
@@ -152711,7 +152760,7 @@ var iosImpl = {
|
|
|
152711
152760
|
}
|
|
152712
152761
|
}
|
|
152713
152762
|
try {
|
|
152714
|
-
await
|
|
152763
|
+
await execFileAsync30("xcrun", [...prefix, "install", nativeId, absolute], {
|
|
152715
152764
|
timeout: 18e4,
|
|
152716
152765
|
killSignal: SIMCTL_KILL_SIGNAL
|
|
152717
152766
|
});
|
|
@@ -152980,10 +153029,10 @@ var PERMISSION_NAMES = [
|
|
|
152980
153029
|
|
|
152981
153030
|
// ../tool-server/src/tools/settings-permissions/platforms/ios.ts
|
|
152982
153031
|
var import_node_child_process40 = require("node:child_process");
|
|
152983
|
-
var
|
|
153032
|
+
var import_node_util31 = require("node:util");
|
|
152984
153033
|
init_src2();
|
|
152985
153034
|
init_capability();
|
|
152986
|
-
var
|
|
153035
|
+
var execFileAsync31 = (0, import_node_util31.promisify)(import_node_child_process40.execFile);
|
|
152987
153036
|
var SIMCTL_ACTION = {
|
|
152988
153037
|
grant: "grant",
|
|
152989
153038
|
deny: "revoke",
|
|
@@ -153008,7 +153057,7 @@ var NON_TCC_GRANT_NEEDS_INSTALL = /* @__PURE__ */ new Set([
|
|
|
153008
153057
|
]);
|
|
153009
153058
|
var localBackend = {
|
|
153010
153059
|
async run(udid, simctlAction, service, bundleId) {
|
|
153011
|
-
await
|
|
153060
|
+
await execFileAsync31(
|
|
153012
153061
|
"xcrun",
|
|
153013
153062
|
await simctlArgsForUdid(udid, ["privacy", udid, simctlAction, service, bundleId]),
|
|
153014
153063
|
{ timeout: 3e4 }
|
|
@@ -153016,7 +153065,7 @@ var localBackend = {
|
|
|
153016
153065
|
},
|
|
153017
153066
|
async isInstalled(udid, bundleId) {
|
|
153018
153067
|
try {
|
|
153019
|
-
await
|
|
153068
|
+
await execFileAsync31(
|
|
153020
153069
|
"xcrun",
|
|
153021
153070
|
await simctlArgsForUdid(udid, ["get_app_container", udid, bundleId]),
|
|
153022
153071
|
{ timeout: 15e3 }
|
|
@@ -153301,7 +153350,7 @@ init_device_info();
|
|
|
153301
153350
|
|
|
153302
153351
|
// ../tool-server/src/tools/open-url/platforms/ios.ts
|
|
153303
153352
|
var import_node_child_process41 = require("node:child_process");
|
|
153304
|
-
var
|
|
153353
|
+
var import_node_util32 = require("node:util");
|
|
153305
153354
|
init_src2();
|
|
153306
153355
|
|
|
153307
153356
|
// ../tool-server/src/tools/open-url/deep-link-note.ts
|
|
@@ -153311,13 +153360,13 @@ function httpDeepLinkNote(url2) {
|
|
|
153311
153360
|
}
|
|
153312
153361
|
|
|
153313
153362
|
// ../tool-server/src/tools/open-url/platforms/ios.ts
|
|
153314
|
-
var
|
|
153363
|
+
var execFileAsync32 = (0, import_node_util32.promisify)(import_node_child_process41.execFile);
|
|
153315
153364
|
var iosImpl3 = {
|
|
153316
153365
|
requires: ["xcrun"],
|
|
153317
153366
|
handler: async (_services, params) => {
|
|
153318
153367
|
await firstSimulatorPoll();
|
|
153319
153368
|
try {
|
|
153320
|
-
await
|
|
153369
|
+
await execFileAsync32(
|
|
153321
153370
|
"xcrun",
|
|
153322
153371
|
await simctlArgsForUdid(params.udid, ["openurl", params.udid, params.url]),
|
|
153323
153372
|
{ timeout: 3e4, killSignal: SIMCTL_KILL_SIGNAL }
|
|
@@ -153441,14 +153490,14 @@ var chromiumImpl2 = {
|
|
|
153441
153490
|
// ../tool-server/src/tools/open-url/platforms/macos.ts
|
|
153442
153491
|
var import_node_child_process42 = require("node:child_process");
|
|
153443
153492
|
var path36 = __toESM(require("node:path"));
|
|
153444
|
-
var
|
|
153493
|
+
var import_node_util33 = require("node:util");
|
|
153445
153494
|
init_src2();
|
|
153446
153495
|
init_capability();
|
|
153447
|
-
var
|
|
153496
|
+
var execFileAsync33 = (0, import_node_util33.promisify)(import_node_child_process42.execFile);
|
|
153448
153497
|
var WEB_URL_NOTE = "The URL went to the app of the device, not to the default browser. The app shows it only if it handles that URL.";
|
|
153449
153498
|
async function declaredSchemes(appPath) {
|
|
153450
153499
|
try {
|
|
153451
|
-
const { stdout } = await
|
|
153500
|
+
const { stdout } = await execFileAsync33(
|
|
153452
153501
|
"plutil",
|
|
153453
153502
|
[
|
|
153454
153503
|
"-extract",
|
|
@@ -153494,7 +153543,7 @@ var macosImpl3 = {
|
|
|
153494
153543
|
);
|
|
153495
153544
|
}
|
|
153496
153545
|
try {
|
|
153497
|
-
await
|
|
153546
|
+
await execFileAsync33("open", ["-g", "-a", app.appPath, params.url], { timeout: 1e4 });
|
|
153498
153547
|
} catch (err) {
|
|
153499
153548
|
const stderr = err.stderr?.trim();
|
|
153500
153549
|
throw macosFailure(
|
|
@@ -153582,7 +153631,7 @@ Returns { opened, url, note? }. \`note\` explains the routing caveat when a web
|
|
|
153582
153631
|
|
|
153583
153632
|
// ../tool-server/src/tools/screenshot/index.ts
|
|
153584
153633
|
var import_node_child_process43 = require("node:child_process");
|
|
153585
|
-
var
|
|
153634
|
+
var import_node_util34 = require("node:util");
|
|
153586
153635
|
var os16 = __toESM(require("node:os"));
|
|
153587
153636
|
var path37 = __toESM(require("node:path"));
|
|
153588
153637
|
init_zod();
|
|
@@ -153791,7 +153840,7 @@ async function captureHarmonyScreenshotPng(opts) {
|
|
|
153791
153840
|
// ../tool-server/src/tools/screenshot/index.ts
|
|
153792
153841
|
init_capability();
|
|
153793
153842
|
var fs43 = __toESM(require("node:fs/promises"));
|
|
153794
|
-
var
|
|
153843
|
+
var execFileAsync34 = (0, import_node_util34.promisify)(import_node_child_process43.execFile);
|
|
153795
153844
|
var capability9 = {
|
|
153796
153845
|
apple: { simulator: true, device: true },
|
|
153797
153846
|
appleRemote: { simulator: true },
|
|
@@ -153829,11 +153878,11 @@ async function tvScreenshot(udid, scale, signal) {
|
|
|
153829
153878
|
os16.tmpdir(),
|
|
153830
153879
|
`argent-tv-screenshot-${udid.slice(0, 8)}-${process.hrtime.bigint()}.png`
|
|
153831
153880
|
);
|
|
153832
|
-
await
|
|
153881
|
+
await execFileAsync34("xcrun", await simctlArgsForUdid(udid, ["io", udid, "screenshot", file2]), {
|
|
153833
153882
|
signal
|
|
153834
153883
|
});
|
|
153835
153884
|
if (scale === void 0 || scale < 1) {
|
|
153836
|
-
await
|
|
153885
|
+
await execFileAsync34("sips", ["-Z", String(await tvTargetLongSide(file2, scale)), file2], {
|
|
153837
153886
|
signal
|
|
153838
153887
|
}).catch(() => {
|
|
153839
153888
|
});
|
|
@@ -153843,7 +153892,7 @@ async function tvScreenshot(udid, scale, signal) {
|
|
|
153843
153892
|
async function tvTargetLongSide(file2, scale) {
|
|
153844
153893
|
let longSide = 3840;
|
|
153845
153894
|
try {
|
|
153846
|
-
const { stdout } = await
|
|
153895
|
+
const { stdout } = await execFileAsync34("sips", ["-g", "pixelWidth", "-g", "pixelHeight", file2]);
|
|
153847
153896
|
const width = Number(/pixelWidth:\s*(\d+)/.exec(stdout)?.[1]);
|
|
153848
153897
|
const height = Number(/pixelHeight:\s*(\d+)/.exec(stdout)?.[1]);
|
|
153849
153898
|
if (Number.isFinite(width) && Number.isFinite(height) && width > 0 && height > 0) {
|
|
@@ -153878,7 +153927,7 @@ async function downscalePngInPlace(file2, scale, signal) {
|
|
|
153878
153927
|
if (scale >= 1) {
|
|
153879
153928
|
return;
|
|
153880
153929
|
}
|
|
153881
|
-
await
|
|
153930
|
+
await execFileAsync34("sips", ["-Z", String(await tvTargetLongSide(file2, scale)), file2], {
|
|
153882
153931
|
signal
|
|
153883
153932
|
}).catch(() => {
|
|
153884
153933
|
});
|
|
@@ -156439,7 +156488,7 @@ var shakeZodSchema = external_exports.object({
|
|
|
156439
156488
|
|
|
156440
156489
|
// ../tool-server/src/tools/shake/platforms/ios.ts
|
|
156441
156490
|
var import_node_child_process45 = require("node:child_process");
|
|
156442
|
-
var
|
|
156491
|
+
var import_node_util35 = require("node:util");
|
|
156443
156492
|
init_src2();
|
|
156444
156493
|
init_capability();
|
|
156445
156494
|
|
|
@@ -156644,7 +156693,7 @@ async function prepareHostWindowShake(target) {
|
|
|
156644
156693
|
}
|
|
156645
156694
|
|
|
156646
156695
|
// ../tool-server/src/tools/shake/platforms/ios.ts
|
|
156647
|
-
var
|
|
156696
|
+
var execFileAsync35 = (0, import_node_util35.promisify)(import_node_child_process45.execFile);
|
|
156648
156697
|
var SHAKE_NOTIFICATION = "com.apple.UIKit.SimulatorShake";
|
|
156649
156698
|
var SHAKE_INTERVAL_MS = 400;
|
|
156650
156699
|
var sleep13 = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
@@ -156686,7 +156735,7 @@ var iosImpl4 = {
|
|
|
156686
156735
|
if (i > 0) await sleep13(SHAKE_INTERVAL_MS);
|
|
156687
156736
|
shaker.begin();
|
|
156688
156737
|
try {
|
|
156689
|
-
await
|
|
156738
|
+
await execFileAsync35("xcrun", args, { timeout: 15e3 });
|
|
156690
156739
|
} catch (err) {
|
|
156691
156740
|
const error63 = err instanceof Error ? err : new Error(String(err));
|
|
156692
156741
|
throw shakeFailure(udid, error63.message, error63);
|
|
@@ -161492,9 +161541,9 @@ init_src2();
|
|
|
161492
161541
|
// ../tool-server/src/utils/debugger/runtime-device.ts
|
|
161493
161542
|
var import_node_crypto14 = require("node:crypto");
|
|
161494
161543
|
var import_node_child_process46 = require("node:child_process");
|
|
161495
|
-
var
|
|
161544
|
+
var import_node_util36 = require("node:util");
|
|
161496
161545
|
init_adb();
|
|
161497
|
-
var
|
|
161546
|
+
var execFileAsync36 = (0, import_node_util36.promisify)(import_node_child_process46.execFile);
|
|
161498
161547
|
var LOG_READ_TIMEOUT_MS = 5e3;
|
|
161499
161548
|
var RETRY_DELAY_MS = 300;
|
|
161500
161549
|
async function findRuntimeDevice(cdp) {
|
|
@@ -161568,7 +161617,7 @@ async function simulatorLogHolds(udid, marker) {
|
|
|
161568
161617
|
"--predicate",
|
|
161569
161618
|
`eventMessage CONTAINS ${JSON.stringify(marker)} AND process != "log"`
|
|
161570
161619
|
]);
|
|
161571
|
-
const { stdout } = await
|
|
161620
|
+
const { stdout } = await execFileAsync36("xcrun", args, {
|
|
161572
161621
|
timeout: LOG_READ_TIMEOUT_MS,
|
|
161573
161622
|
killSignal: SIMCTL_KILL_SIGNAL,
|
|
161574
161623
|
encoding: "utf-8"
|
|
@@ -165845,8 +165894,8 @@ var import_util14 = require("util");
|
|
|
165845
165894
|
var DEFAULT_EXEC_TIMEOUT_MS = 6e4;
|
|
165846
165895
|
var DEFAULT_EXEC_MAX_BUFFER = 256 * 1024 * 1024;
|
|
165847
165896
|
async function execFileAsyncWithTimeout(file2, args, options = {}) {
|
|
165848
|
-
const
|
|
165849
|
-
const { stdout, stderr } = await
|
|
165897
|
+
const execFileAsync41 = (0, import_util14.promisify)(import_child_process2.execFile);
|
|
165898
|
+
const { stdout, stderr } = await execFileAsync41(file2, args, {
|
|
165850
165899
|
encoding: "utf-8",
|
|
165851
165900
|
...options,
|
|
165852
165901
|
// Applied after ...options so a caller cannot weaken the guards; maxBuffer
|
|
@@ -169947,7 +169996,7 @@ var WATERMARK_PNG_HEIGHT = 277;
|
|
|
169947
169996
|
var WATERMARK_PNG_BASE64 = "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";
|
|
169948
169997
|
|
|
169949
169998
|
// ../tool-server/src/tools/screen-recording/watermark.ts
|
|
169950
|
-
var
|
|
169999
|
+
var execFileAsync37 = (0, import_util15.promisify)(import_child_process6.execFile);
|
|
169951
170000
|
var OUTPUT_FPS = 30;
|
|
169952
170001
|
var EVEN_CROP = "crop=trunc(iw/2)*2:trunc(ih/2)*2:0:0";
|
|
169953
170002
|
function encoderArgs(outputFile) {
|
|
@@ -169982,7 +170031,7 @@ var MASK_DARK_MAX_LUMA = 90;
|
|
|
169982
170031
|
var MASK_LIGHT_MIN_LUMA = 165;
|
|
169983
170032
|
async function resolveBinary(name, fallbacks) {
|
|
169984
170033
|
try {
|
|
169985
|
-
await
|
|
170034
|
+
await execFileAsync37("/bin/sh", ["-c", `command -v ${name}`], { timeout: 2e3 });
|
|
169986
170035
|
return name;
|
|
169987
170036
|
} catch {
|
|
169988
170037
|
}
|
|
@@ -170537,7 +170586,7 @@ init_src2();
|
|
|
170537
170586
|
init_device_info();
|
|
170538
170587
|
var POST_PASS_TIMEOUT_MS = 10 * 6e4;
|
|
170539
170588
|
var PROBE_TIMEOUT_MS2 = 15e3;
|
|
170540
|
-
var
|
|
170589
|
+
var execFileAsync38 = (0, import_util16.promisify)(import_child_process8.execFile);
|
|
170541
170590
|
var TRIM_FILTERS = `fps=${OUTPUT_FPS},mpdecimate=hi=1:lo=1:frac=1,setpts=N/${OUTPUT_FPS}/TB,tpad=stop_mode=clone:stop_duration=1`;
|
|
170542
170591
|
function outputPath(deviceId) {
|
|
170543
170592
|
return path46.join(
|
|
@@ -170765,7 +170814,7 @@ async function postProcess(opts) {
|
|
|
170765
170814
|
}
|
|
170766
170815
|
args.push(...encoderArgs(outputFile));
|
|
170767
170816
|
try {
|
|
170768
|
-
await
|
|
170817
|
+
await execFileAsync38(ffmpeg, args, { timeout: POST_PASS_TIMEOUT_MS });
|
|
170769
170818
|
await statNonEmptyOutput(outputFile, "screen_recording_post_process");
|
|
170770
170819
|
return { outputFile, trimmed: opts.trimStatic, ...warning ? { warning } : {} };
|
|
170771
170820
|
} catch (err) {
|
|
@@ -170785,7 +170834,7 @@ async function probe3(file2, entries) {
|
|
|
170785
170834
|
const ffprobe = await resolveFfprobe();
|
|
170786
170835
|
if (!ffprobe) return null;
|
|
170787
170836
|
try {
|
|
170788
|
-
const { stdout } = await
|
|
170837
|
+
const { stdout } = await execFileAsync38(
|
|
170789
170838
|
ffprobe,
|
|
170790
170839
|
[
|
|
170791
170840
|
"-v",
|
|
@@ -181023,7 +181072,7 @@ init_src2();
|
|
|
181023
181072
|
// ../tool-server/src/tools/screenshot-diff/screenshot-diff-ocr.ts
|
|
181024
181073
|
var import_child_process9 = require("child_process");
|
|
181025
181074
|
var import_util17 = require("util");
|
|
181026
|
-
var
|
|
181075
|
+
var execFileAsync39 = (0, import_util17.promisify)(import_child_process9.execFile);
|
|
181027
181076
|
var OCR_TIMEOUT_MS = 1e4;
|
|
181028
181077
|
var OCR_MAX_BUFFER_BYTES = 32 * 1024 * 1024;
|
|
181029
181078
|
var TESSERACT_BINARY = "tesseract";
|
|
@@ -181068,7 +181117,7 @@ async function extractOcrTextBlocks(imagePath) {
|
|
|
181068
181117
|
}
|
|
181069
181118
|
}
|
|
181070
181119
|
async function recognizeTsv(imagePath) {
|
|
181071
|
-
const { stdout } = await
|
|
181120
|
+
const { stdout } = await execFileAsync39(
|
|
181072
181121
|
TESSERACT_BINARY,
|
|
181073
181122
|
[
|
|
181074
181123
|
imagePath,
|
|
@@ -183352,10 +183401,10 @@ async function runSnapshot(env, opts) {
|
|
|
183352
183401
|
|
|
183353
183402
|
// ../tool-server/src/utils/status-bar.ts
|
|
183354
183403
|
var import_node_child_process49 = require("node:child_process");
|
|
183355
|
-
var
|
|
183404
|
+
var import_node_util37 = require("node:util");
|
|
183356
183405
|
init_adb();
|
|
183357
183406
|
init_device_info();
|
|
183358
|
-
var
|
|
183407
|
+
var execFileAsync40 = (0, import_node_util37.promisify)(import_node_child_process49.execFile);
|
|
183359
183408
|
var DEMO_BROADCAST = "am broadcast -a com.android.systemui.demo";
|
|
183360
183409
|
var IOS_STATUS_BAR_OVERRIDE = [
|
|
183361
183410
|
"override",
|
|
@@ -183379,7 +183428,7 @@ async function pinStatusBar(device, signal) {
|
|
|
183379
183428
|
if (isIosPhysicalDevice(device)) return false;
|
|
183380
183429
|
try {
|
|
183381
183430
|
if (device.platform === "ios") {
|
|
183382
|
-
await
|
|
183431
|
+
await execFileAsync40(
|
|
183383
183432
|
"xcrun",
|
|
183384
183433
|
await simctlArgsForUdid(device.id, ["status_bar", device.id, ...IOS_STATUS_BAR_OVERRIDE])
|
|
183385
183434
|
);
|
|
@@ -183415,7 +183464,7 @@ async function pinStatusBar(device, signal) {
|
|
|
183415
183464
|
async function restoreStatusBar(device) {
|
|
183416
183465
|
try {
|
|
183417
183466
|
if (device.platform === "ios") {
|
|
183418
|
-
await
|
|
183467
|
+
await execFileAsync40(
|
|
183419
183468
|
"xcrun",
|
|
183420
183469
|
await simctlArgsForUdid(device.id, ["status_bar", device.id, "clear"])
|
|
183421
183470
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swmansion/argent",
|
|
3
|
-
"version": "0.33.1-next.
|
|
3
|
+
"version": "0.33.1-next.3",
|
|
4
4
|
"mcpName": "io.github.software-mansion/argent",
|
|
5
5
|
"description": "MCP server for iOS Simulator, Android Emulator, Chromium app and Mac app control",
|
|
6
6
|
"license": "Apache-2.0",
|