stim 1.19.0 → 1.20.1
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 +20 -3
- package/dist/{activity-BSw0x84R.mjs → activity-BaMpUQ4-.mjs} +3 -3
- package/dist/{agent-device-usage-output-Bjxu_VmX.mjs → agent-device-usage-output-VPaOgGaF.mjs} +7 -7
- package/dist/android-CLbBJ2ve.mjs +1258 -0
- package/dist/{android-DE5g_5gv.mjs → android-CZh6ElG5.mjs} +2 -2
- package/dist/{android-BdQC6zs1.mjs → android-DE8-JfGW.mjs} +105 -47
- package/dist/{android-cas-C87geAg-.mjs → android-cas-BFpS84v2.mjs} +9 -5
- package/dist/android-cas-compiler.mjs +1 -1
- package/dist/android-eXfIjKJr.mjs +6 -0
- package/dist/api-run.mjs +159 -8
- package/dist/{api-DIf_s86s.mjs → api-zuX3ynYN.mjs} +5 -1
- package/dist/api.d.mts +98 -4
- package/dist/api.mjs +1 -1
- package/dist/{app-install-CFI4ptUL.mjs → app-install-Cg9YJy3x.mjs} +9 -8
- package/dist/artifact-Ctb2jpw6.mjs +807 -0
- package/dist/artifact-DXk_Fle_.mjs +772 -0
- package/dist/artifact-lifecycle-DzPpBYvK.mjs +30 -0
- package/dist/{browser-web-CDhqQxhv.mjs → browser-web-xQWC2RWl.mjs} +19 -19
- package/dist/{budget-Dz-kyXLv.mjs → budget-RFbwFpG5.mjs} +3101 -3062
- package/dist/build-COBA1tBc.mjs +462 -0
- package/dist/{build-facts-B87vo-Im.d.mts → build-facts-DcLv2HSd.d.mts} +1 -32
- package/dist/build-plan-CRjAA6Qi.mjs +553 -0
- package/dist/{cache-manifest-DiwKSyv9.mjs → cache-manifest-qA3dT2x2.mjs} +1 -1
- package/dist/cache-manifest.mjs +1 -1
- package/dist/{manifest-CX0d1IkZ.mjs → ccache-CtbqWxIC.mjs} +13 -19
- package/dist/{chrome-BTUOo8p2.mjs → chrome-Dp2lMLBe.mjs} +1 -1
- package/dist/{cli-C9Zvgbdc.mjs → cli-sGqlPu1n.mjs} +20 -20
- package/dist/cli.mjs +1 -1
- package/dist/{client-CuUo8Nvg.mjs → client-zqjFd79D.mjs} +89 -307
- package/dist/collector-run.d.mts +4 -0
- package/dist/collector-run.mjs +7 -7
- package/dist/{command-output-Bt8ygHE7.mjs → command-output-CPDq_90S.mjs} +2 -2
- package/dist/{config-DC5jEtd1.mjs → config-D0LhTY3S.mjs} +8 -12
- package/dist/{created-devices-D0s26Hx5.mjs → created-devices-CXBMtoj5.mjs} +7 -6
- package/dist/{dependency-state-DKaS1OM9.mjs → dependency-state-B2m8eqsS.mjs} +2 -2
- package/dist/{detached-entry-pB_IPfV4.mjs → detached-entry-BXq4fIl-.mjs} +1 -1
- package/dist/{dev-client-CDY_zAmD.mjs → dev-client-BqYjMIaC.mjs} +2 -2
- package/dist/{device-BHw0WlHl.mjs → device-BgNj-qVj.mjs} +8 -8
- package/dist/device-D4DqjSZZ.mjs +727 -0
- package/dist/{device-capacity-BoN1jQkO.mjs → device-capacity-DrwHwR97.mjs} +13 -14
- package/dist/device-host-worker.mjs +38 -18
- package/dist/device-ios-DE8KJd3b.mjs +413 -0
- package/dist/{device-lease-Cu7PtQpZ.mjs → device-lease-C309csaB.mjs} +138 -24
- package/dist/{device-lease-run-D38SnZtt.mjs → device-lease-run-Baelt3nc.mjs} +4 -4
- package/dist/{device-pool-CP4rAsHx.mjs → device-pool-DtK9S6AD.mjs} +3 -3
- package/dist/{device-remote-B5GiUifk.mjs → device-remote-DjsNw8DD.mjs} +17 -68
- package/dist/doctor-DiP9HsIP.mjs +515 -0
- package/dist/{doctor-PRJH94v6.mjs → doctor-Dunu3Nv1.mjs} +333 -744
- package/dist/{doctor-watchman-wZhyTdp4.mjs → doctor-watchman-XJzT8tK-.mjs} +15 -13
- package/dist/{simslim-D9LkJxIO.mjs → eas-build-0gadvrca.mjs} +6 -152
- package/dist/{stim-installations-DbmUjsLv.mjs → eas-session-ledger-DJDeL4Uq.mjs} +57 -4
- package/dist/{error-diagnostics--v5HGOU0.mjs → error-diagnostics-BhQtoLrZ.mjs} +17 -12
- package/dist/errors-DzkMYh8Q.mjs +205 -0
- package/dist/{exec-i8GDPwq9.mjs → exec-B81Qodjn.mjs} +40 -10
- package/dist/{gc-CyHMcKcn.mjs → gc-D5cz5G0k.mjs} +22 -21
- package/dist/{device-ios-B2ruohE-.mjs → gradle-CZZo1TSA.mjs} +21 -650
- package/dist/{guide-dRaQJJk9.mjs → guide-DakjcoUt.mjs} +503 -251
- package/dist/{hosted-android-Bs7fytj7.mjs → hosted-android-C-D8Dj0_.mjs} +5 -5
- package/dist/{hosted-client-C5G4h_OJ.mjs → hosted-client--hNFgixu.mjs} +9 -3
- package/dist/{hosted-ios-Bik035eL.mjs → hosted-ios-Chx9XQyI.mjs} +3 -3
- package/dist/{hosted-logs-CI9Az9a4.mjs → hosted-logs-Bkz0Hxzh.mjs} +8 -8
- package/dist/{hosted-macos-DABm3ScO.mjs → hosted-macos-ckTjN-0V.mjs} +7 -6
- package/dist/{hosted-native-DbV2aUVw.mjs → hosted-native-3KXZ5-qn.mjs} +17 -14
- package/dist/{idle-shutdown-DYiMBn34.mjs → idle-shutdown-DhAUyf5s.mjs} +7 -7
- package/dist/{ios-DYUr9LGc.mjs → ios-BDBN-xpf.mjs} +8 -7
- package/dist/ios-CQ8bHQXB.mjs +1112 -0
- package/dist/{ios-DCrkgXEM.mjs → ios-VGvNdsv2.mjs} +1 -1
- package/dist/{ios-device-CrW8aMb5.mjs → ios-device-B1B14xND.mjs} +1 -1
- package/dist/{ios-device-CJ_ZOGky.mjs → ios-device-BWHKGaJq.mjs} +3 -3
- package/dist/{ios-BWbHFZVz.mjs → ios-o896T9PE.mjs} +195 -35
- package/dist/ios-project-BeOXKPt2.mjs +197 -0
- package/dist/{ios-state-By0XuLTQ.mjs → ios-state-BsXMwo5y.mjs} +1 -1
- package/dist/js-swap-Z_mSuRrx.mjs +432 -0
- package/dist/{react-native-ios-CSpIxexZ.mjs → launch-BootbMk4.mjs} +59 -612
- package/dist/launch-V1zqiOYn.mjs +745 -0
- package/dist/{launch-verify-DCveSE6d.mjs → launch-verify-Dl78EVgR.mjs} +26 -7
- package/dist/{logs-Bao1HOMy.mjs → logs-Bh4eqCCc.mjs} +11 -11
- package/dist/{macos-ciyBdTY5.mjs → macos-D7irBW3A.mjs} +42 -50
- package/dist/macos-kivF8qKz.mjs +2 -0
- package/dist/macos-run.mjs +1 -1
- package/dist/maintenance-run.mjs +13 -10
- package/dist/{metro-DI2AjPF_.mjs → metro-_ZIE3Axg.mjs} +18 -5
- package/dist/{metro-gateway-BxpJLIwh.mjs → metro-gateway-BzlQZQmU.mjs} +2 -2
- package/dist/miss-reason-SuTptY-I.mjs +238 -0
- package/dist/{named-ports-B4iWH4E-.mjs → named-ports-O1TIl7tx.mjs} +3 -3
- package/dist/native-android-D94RlJ-X.mjs +226 -0
- package/dist/native-gradle-inputs-BQnIdAlL.mjs +356 -0
- package/dist/{native-runtime-BGxsbfny.mjs → native-runtime-D024BAvm.mjs} +9 -8
- package/dist/native-xcode-inputs-UElfGs59.mjs +306 -0
- package/dist/native-xcode-ios-CjS-nDVY.mjs +434 -0
- package/dist/{ndjson-LGZAMsqa.mjs → ndjson-GOnbyvso.mjs} +6 -6
- package/dist/offload-worker.d.mts +41 -7
- package/dist/offload-worker.mjs +409 -74
- package/dist/{ownership-EB0ySdGK.mjs → ownership-BrjepDiv.mjs} +2 -2
- package/dist/{placement-log-Dxe34rJm.mjs → placement-log-BItXET1x.mjs} +1 -1
- package/dist/plan-Jwu_vr-F.mjs +260 -0
- package/dist/plan-placement-B466UYMU.mjs +73 -0
- package/dist/{ports-ByPc0_97.mjs → ports-BFRL6JTj.mjs} +3 -3
- package/dist/{prebuild-BKJ3wJI1.mjs → prebuild-DB_zLOLc.mjs} +4 -4
- package/dist/{preview-BbSottmO.mjs → preview-BRLFRhTz.mjs} +50 -32
- package/dist/project-DX8fXyw_.mjs +1131 -0
- package/dist/project-plan-BPwbLwQu.mjs +10 -0
- package/dist/{pull-request-IHNdMnG8.mjs → pull-request-vOhLNmIb.mjs} +1 -1
- package/dist/pull-requests.mjs +1 -1
- package/dist/react-native-android-CuXM3QS8.mjs +921 -0
- package/dist/react-native-build-JUF31S8U.mjs +239 -0
- package/dist/react-native-doctor-BQHqiXaQ.mjs +78 -0
- package/dist/react-native-ios-DtVO4qf2.mjs +595 -0
- package/dist/{recordings-Bv8McZN4.mjs → recordings-Bk-VivUV.mjs} +1 -1
- package/dist/{reload-rAPdqeRR.mjs → reload-D9V7D8gP.mjs} +17 -13
- package/dist/remote-CZiTijxG.mjs +192 -0
- package/dist/{remote-cache-N3hAEaAL.mjs → remote-cache-fxcl5C-L.mjs} +5 -5
- package/dist/result-BrfgXtdO.mjs +186 -0
- package/dist/{run-lAkle1-c.mjs → run-ClC8UVB5.mjs} +3 -3
- package/dist/{server-bare-CkIjnegq.mjs → server-bare-dWjAarki.mjs} +5 -5
- package/dist/server-command-DnJYLnr4.mjs +69 -0
- package/dist/{server-expo-n3tUi3Em.mjs → server-expo-CUuzP9Mp.mjs} +107 -82
- package/dist/server-expo-Dvkd7JcF.mjs +2 -0
- package/dist/{settings-CxgngUZk.mjs → settings-Bbztm4oV.mjs} +179 -129
- package/dist/{settings-2am7TSxp.mjs → settings-BuKMOANA.mjs} +6 -6
- package/dist/{state-lKh8shBp.d.mts → settings-vk3mJGSm.d.mts} +4 -2
- package/dist/settings.schema.json +84 -0
- package/dist/simslim-ChMfe8rg.mjs +149 -0
- package/dist/{slot-launch-HV_KtPIw.mjs → slot-launch-CeCRr6MK.mjs} +6 -6
- package/dist/{stage-BgaZJVZY.mjs → stage-BNKKdDNc.mjs} +6 -3
- package/dist/{start-DtxthMfI.mjs → start-CRkG-mZ7.mjs} +97 -68
- package/dist/start-mh6bS27z.mjs +2 -0
- package/dist/{state-Tp4uImDS.mjs → state-BUpAmt2r.mjs} +1 -1
- package/dist/{state-D2KtnALG.mjs → state-lqxdOH_g.mjs} +32 -12
- package/dist/{stats-8EJ5ivFT.mjs → stats-CaB1MxMi.mjs} +5 -5
- package/dist/{status-BEeL6IKz.mjs → status-BDGHwkCs.mjs} +3 -1
- package/dist/{status-BOyp0CUl.mjs → status-C7vzkInu.mjs} +81 -293
- package/dist/status-watch-ZaVqRdtW.mjs +296 -0
- package/dist/{stim-desktop-C65jk_q2.mjs → stim-desktop-8GQX2OV8.mjs} +1 -1
- package/dist/{stop-zDlknFoz.mjs → stop-BO80KJoT.mjs} +21 -20
- package/dist/{stop-DRipAg-e.mjs → stop-BU7JaFCg.mjs} +2 -2
- package/dist/{stop-D0UIpZuh.mjs → stop-Cftw_sXJ.mjs} +5 -5
- package/dist/supervisor-run.d.mts +7 -2
- package/dist/supervisor-run.mjs +32 -20
- package/dist/{support-DsNaFg6D.mjs → support-Ca6PZbpr.mjs} +17 -7
- package/dist/{support-CNqYkV0y.mjs → support-Co0wk8Cv.mjs} +61 -8
- package/dist/{swiftpm-macos-aJzPAj1t.mjs → swiftpm-macos-siFSkmCO.mjs} +5 -5
- package/dist/tailnet-D7-tE_ug.mjs +265 -0
- package/dist/toolchain-B12psPA2.mjs +2 -0
- package/dist/{toolchain-C3xSoyUl.mjs → toolchain-SqehyPLw.mjs} +206 -53
- package/dist/{trigger-CAhmG-4s.mjs → trigger-C0MWBi8O.mjs} +2 -2
- package/dist/trigger-SHLOWJ4O.mjs +2 -0
- package/dist/{warm-progress-pFLB2e6P.mjs → warm-progress-5FAXkXIg.mjs} +6 -6
- package/dist/{watchman-BL1IdOtq.mjs → watchman-CqmaGcIb.mjs} +6 -6
- package/dist/{web-DbbrPUn0.mjs → web-BTjzE8mc.mjs} +9 -13
- package/dist/web-CHN5gh34.mjs +2 -0
- package/dist/web-run.mjs +10 -10
- package/dist/{workspace-state-CR9X86xJ.mjs → workspace-state-CvgTFe-h.mjs} +36 -36
- package/dist/{workspaces-Djb2gfi9.mjs → workspaces-C4kqIOlx.mjs} +1260 -1258
- package/dist/worktree-Cgnm6vZt.mjs +2 -0
- package/dist/{worktree-BL4M1rhB.mjs → worktree-DtRsh6go.mjs} +86 -50
- package/package.json +6 -5
- package/shim/native-android.gradle +101 -0
- package/dist/android-BXc6BmEi.mjs +0 -3732
- package/dist/android-BvV1gGdN.mjs +0 -4
- package/dist/ios-ITYno9rO.mjs +0 -2241
- package/dist/macos-nIOATJmR.mjs +0 -2
- package/dist/metro-store-BAHFcJm6.mjs +0 -106
- package/dist/miss-reason-CjQCOKqq.mjs +0 -1743
- package/dist/plan-placement-BVY59qa8.mjs +0 -290
- package/dist/project-B5eQ1USs.mjs +0 -612
- package/dist/react-native-ios-BMh2i25I.mjs +0 -2
- package/dist/server-expo-DGsdUGX2.mjs +0 -2
- package/dist/start-D8NbxNBb.mjs +0 -2
- package/dist/trigger-CoalsMTV.mjs +0 -2
- package/dist/web-DFpFeZu5.mjs +0 -2
- package/dist/worktree-DV-A0LNL.mjs +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as getExecutor } from "./exec-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { t as getExecutor } from "./exec-B81Qodjn.mjs";
|
|
2
|
+
import { n as TOOL_ERROR_PREFIX } from "./ios-device-B1B14xND.mjs";
|
|
3
|
+
import { i as INSTALL_ERROR } from "./app-install-Cg9YJy3x.mjs";
|
|
4
4
|
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
import { tmpdir } from "node:os";
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { t as getExecutor } from "./exec-
|
|
1
|
+
import { t as getExecutor } from "./exec-B81Qodjn.mjs";
|
|
2
|
+
import { _ as loadConfig$1, j as formatBytes } from "./config-D0LhTY3S.mjs";
|
|
2
3
|
import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { n as settingDefault, t as STIM_DESKTOP_OPEN_OPTIONS } from "./stim-desktop-C65jk_q2.mjs";
|
|
4
|
+
import { n as settingDefault, t as STIM_DESKTOP_OPEN_OPTIONS } from "./stim-desktop-8GQX2OV8.mjs";
|
|
5
|
+
import { it as isStimOwnedSim } from "./android-DE8-JfGW.mjs";
|
|
6
|
+
import { r as recordCreatedDevice, t as forgetCreatedDevice } from "./created-devices-CXBMtoj5.mjs";
|
|
7
7
|
import { closeSync, existsSync, lstatSync, mkdtempSync, openSync, readSync, readdirSync, rmSync, writeFileSync } from "node:fs";
|
|
8
8
|
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
9
|
-
import { IOS_SIMULATOR_APPS, settingDefinition } from "@stim-cli/core/state";
|
|
10
|
-
import { tmpdir } from "node:os";
|
|
9
|
+
import { IOS_SIMULATOR_APPS, isJsonObject, settingDefinition } from "@stim-cli/core/state";
|
|
11
10
|
import { createHash } from "node:crypto";
|
|
11
|
+
import { tmpdir, totalmem } from "node:os";
|
|
12
12
|
//#region src/engine/installed-artifact.ts
|
|
13
13
|
const READ_CHUNK_BYTES = 1048576;
|
|
14
14
|
const DEVICE_PATH_TIMEOUT_MS = 3e4;
|
|
@@ -139,6 +139,136 @@ function deviceHoldsBundle({ udid, bundleId, appPath }, { exec = null } = {}) {
|
|
|
139
139
|
return artifactsMatch(hashBundle(appPath), installed);
|
|
140
140
|
}
|
|
141
141
|
//#endregion
|
|
142
|
+
//#region src/memory-culprits.ts
|
|
143
|
+
const GIB = 1024 ** 3;
|
|
144
|
+
const UNITS = {
|
|
145
|
+
B: 1,
|
|
146
|
+
K: 1024,
|
|
147
|
+
M: 1024 ** 2,
|
|
148
|
+
G: GIB,
|
|
149
|
+
T: 1024 * GIB
|
|
150
|
+
};
|
|
151
|
+
const GENERAL_FLOOR_BYTES = 8 * GIB;
|
|
152
|
+
const GENERAL_SHARE_OF_RAM = .25;
|
|
153
|
+
const TOP_ROWS = 20;
|
|
154
|
+
const GRADLE_DAEMON = /\borg\.gradle\.launcher\.daemon\.bootstrap\.GradleDaemon\b/;
|
|
155
|
+
const KOTLIN_DAEMON = /\bKotlinCompileDaemon\b/;
|
|
156
|
+
const GRADLE_NOTE = "Stim stops only idle daemons; the next build starts a new one.";
|
|
157
|
+
const RESTARTABLE = [
|
|
158
|
+
{
|
|
159
|
+
name: "fseventsd",
|
|
160
|
+
matches: ({ name }) => name === "fseventsd",
|
|
161
|
+
bytes: 2 * GIB,
|
|
162
|
+
command: "sudo killall fseventsd",
|
|
163
|
+
note: "launchd restarts it at once, and file watchers rescan their folders once."
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: "Watchman",
|
|
167
|
+
matches: ({ name }) => name === "watchman",
|
|
168
|
+
bytes: 2 * GIB,
|
|
169
|
+
command: "stim gc --delete --cache watchman",
|
|
170
|
+
note: "Stim stops the daemon only when no workspace uses it; the next Metro starts a fresh one."
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: "Gradle daemon",
|
|
174
|
+
matches: ({ name }, commandLine) => name === "java" && GRADLE_DAEMON.test(commandLine ?? ""),
|
|
175
|
+
command: "stim gc --delete --cache gradle-daemons",
|
|
176
|
+
note: GRADLE_NOTE
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: "Kotlin daemon",
|
|
180
|
+
matches: ({ name }, commandLine) => name === "java" && KOTLIN_DAEMON.test(commandLine ?? ""),
|
|
181
|
+
command: "stim gc --delete --cache gradle-daemons",
|
|
182
|
+
note: GRADLE_NOTE
|
|
183
|
+
}
|
|
184
|
+
];
|
|
185
|
+
/** Parses `top -l 1 -stats pid,mem,command` output: the rows after its `PID MEM COMMAND` header. */
|
|
186
|
+
function parseTopMemory(output) {
|
|
187
|
+
const rows = [];
|
|
188
|
+
let header = false;
|
|
189
|
+
for (const line of output.split("\n")) {
|
|
190
|
+
if (!header) {
|
|
191
|
+
header = /^\s*PID\s+MEM\s+COMMAND\b/.test(line);
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
const match = /^\s*(\d+)\s+(\d+(?:\.\d+)?)([BKMGT])[+-]?\s+(\S.*?)\s*$/.exec(line);
|
|
195
|
+
if (match) rows.push({
|
|
196
|
+
pid: Number(match[1]),
|
|
197
|
+
bytes: Math.round(Number(match[2]) * UNITS[match[3]]),
|
|
198
|
+
name: match[4]
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
return rows;
|
|
202
|
+
}
|
|
203
|
+
function findMemoryCulprits(processes, totalBytes, commandLines = /* @__PURE__ */ new Map()) {
|
|
204
|
+
const general = Math.max(GENERAL_FLOOR_BYTES, totalBytes * GENERAL_SHARE_OF_RAM);
|
|
205
|
+
const culprits = [];
|
|
206
|
+
for (const row of processes) {
|
|
207
|
+
const known = RESTARTABLE.find((entry) => entry.matches(row, commandLines.get(row.pid)));
|
|
208
|
+
if (row.bytes < Math.min(general, known?.bytes ?? general)) continue;
|
|
209
|
+
culprits.push({
|
|
210
|
+
pid: row.pid,
|
|
211
|
+
name: known?.name ?? row.name,
|
|
212
|
+
bytes: row.bytes,
|
|
213
|
+
command: known?.command ?? null,
|
|
214
|
+
note: known?.note ?? null
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
return culprits.toSorted((a, b) => b.bytes - a.bytes);
|
|
218
|
+
}
|
|
219
|
+
function memoryCulpritAdvice(culprits) {
|
|
220
|
+
if (!culprits?.length) return null;
|
|
221
|
+
return culprits.map((culprit) => {
|
|
222
|
+
const uses = `${culprit.name} (pid ${culprit.pid}) uses ${formatBytes(culprit.bytes)} of memory`;
|
|
223
|
+
return culprit.command ? `${uses}; run \`${culprit.command}\` to free it: ${culprit.note}` : `${uses}; Stim knows no safe restart for it, so ask before quitting it.`;
|
|
224
|
+
}).join(" ");
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* The abnormal processes by footprint, from the setuid `top`: unlike `proc_pid_rusage` without root, it reads
|
|
228
|
+
* root-owned daemons such as fseventsd, and unlike `ps` RSS it counts compressed and swapped memory. Null off macOS
|
|
229
|
+
* or when `top` fails.
|
|
230
|
+
*/
|
|
231
|
+
function readMemoryCulprits(exec = getExecutor(), platform = process.platform, totalBytes = totalmem()) {
|
|
232
|
+
if (platform !== "darwin") return null;
|
|
233
|
+
const output = exec.runFileQuiet("/usr/bin/top", [
|
|
234
|
+
"-l",
|
|
235
|
+
"1",
|
|
236
|
+
"-o",
|
|
237
|
+
"mem",
|
|
238
|
+
"-n",
|
|
239
|
+
String(TOP_ROWS),
|
|
240
|
+
"-stats",
|
|
241
|
+
"pid,mem,command"
|
|
242
|
+
], { timeoutMs: 1e4 });
|
|
243
|
+
if (output === null) return null;
|
|
244
|
+
const processes = parseTopMemory(output);
|
|
245
|
+
const java = processes.filter((entry) => entry.name === "java").map((entry) => entry.pid);
|
|
246
|
+
const commandLines = /* @__PURE__ */ new Map();
|
|
247
|
+
if (java.length) {
|
|
248
|
+
const listed = exec.runFileQuiet("/bin/ps", [
|
|
249
|
+
"-ww",
|
|
250
|
+
"-o",
|
|
251
|
+
"pid=,command=",
|
|
252
|
+
"-p",
|
|
253
|
+
java.join(",")
|
|
254
|
+
], { timeoutMs: 5e3 });
|
|
255
|
+
for (const line of listed?.split("\n") ?? []) {
|
|
256
|
+
const match = /^\s*(\d+)\s+(.*)$/.exec(line);
|
|
257
|
+
if (match) commandLines.set(Number(match[1]), match[2]);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return findMemoryCulprits(processes, totalBytes, commandLines);
|
|
261
|
+
}
|
|
262
|
+
function memoryCulpritFindings(culprits) {
|
|
263
|
+
return (culprits ?? []).filter((culprit) => culprit.name !== "Watchman").map((culprit) => ({
|
|
264
|
+
code: "memory-culprit",
|
|
265
|
+
level: "cost",
|
|
266
|
+
title: `${culprit.name} uses ${formatBytes(culprit.bytes)} of memory`,
|
|
267
|
+
detail: memoryCulpritAdvice([culprit]),
|
|
268
|
+
fix: culprit.command ? `Run \`${culprit.command}\`. ${culprit.note}` : "Stim knows no safe restart for this process. Ask before quitting it."
|
|
269
|
+
}));
|
|
270
|
+
}
|
|
271
|
+
//#endregion
|
|
142
272
|
//#region src/host-memory.ts
|
|
143
273
|
function readHostMemoryPressure(exec = getExecutor(), platform = process.platform) {
|
|
144
274
|
if (platform !== "darwin") return null;
|
|
@@ -153,9 +283,13 @@ function readHostMemoryPressure(exec = getExecutor(), platform = process.platfor
|
|
|
153
283
|
return null;
|
|
154
284
|
}
|
|
155
285
|
}
|
|
156
|
-
function
|
|
286
|
+
function memoryCulpritsUnder(pressure, exec = getExecutor()) {
|
|
287
|
+
return pressure === "warning" || pressure === "critical" ? readMemoryCulprits(exec) : null;
|
|
288
|
+
}
|
|
289
|
+
function hostMemoryPressureAdvice(pressure, culprits = null) {
|
|
157
290
|
if (pressure === null || pressure === "normal") return null;
|
|
158
|
-
|
|
291
|
+
const named = memoryCulpritAdvice(culprits);
|
|
292
|
+
return `macOS reports ${pressure} host memory pressure.${named ? ` ${named}` : ""} Simulator processes can stall even when the device is Booted. Free memory before retrying: use \`stim stop\` only in workspaces you own, and ask before closing other apps or devices. For parallel iOS work, consider a reviewed SimSlim profile (\`stim guide lifecycle simslim\`). This observation does not establish an OOM crash.`;
|
|
159
293
|
}
|
|
160
294
|
//#endregion
|
|
161
295
|
//#region src/devices/ios-simulator-viewer.ts
|
|
@@ -291,7 +425,8 @@ const BOOTSTATUS_ATTEMPT_MS = 24e4;
|
|
|
291
425
|
const BOOTSTATUS_ATTEMPT_FLOOR_MS = 1e3;
|
|
292
426
|
const BOOT_STATE_LIST_TIMEOUT_MS = 3e4;
|
|
293
427
|
function iosSimulatorFailureAdvice(exec = getExecutor()) {
|
|
294
|
-
|
|
428
|
+
const pressure = readHostMemoryPressure(exec);
|
|
429
|
+
return hostMemoryPressureAdvice(pressure, memoryCulpritsUnder(pressure, exec)) ?? "The simulator may be unresponsive. Check Activity Monitor for memory pressure and free host memory before retrying.";
|
|
295
430
|
}
|
|
296
431
|
function bootstatusTimeout(command) {
|
|
297
432
|
const e = /* @__PURE__ */ new Error(`${command} timed out`);
|
|
@@ -418,15 +553,19 @@ async function bootIosSim(udid, { timeoutMs = IOS_BOOT_TIMEOUT_MS, attemptMs = B
|
|
|
418
553
|
if (deadline - Date.now() <= 0) throw new Error(`Simulator ${udid} did not finish booting within ${Math.round(timeoutMs / 1e3)}s.`);
|
|
419
554
|
}
|
|
420
555
|
} catch (error) {
|
|
421
|
-
sample();
|
|
422
|
-
throw new Error(`${error?.message || error} Last boot output: ${phase}. Highest observed memory pressure: ${worst ?? "unknown"}; unavailable samples: ${unknown}.${coverage()} ${recovery} These observations do not establish an OOM crash.`, { cause: error });
|
|
556
|
+
const named = memoryCulpritAdvice(memoryCulpritsUnder(sample(), exec));
|
|
557
|
+
throw new Error(`${error?.message || error} Last boot output: ${phase}. Highest observed memory pressure: ${worst ?? "unknown"}; unavailable samples: ${unknown}.${coverage()}${named ? ` ${named}` : ""} ${recovery} These observations do not establish an OOM crash.`, { cause: error });
|
|
423
558
|
} finally {
|
|
424
559
|
clearInterval(monitor);
|
|
425
560
|
}
|
|
426
561
|
if (openViewer) viewer.open(udid);
|
|
427
562
|
}
|
|
428
563
|
function shutdownIosSim(udid) {
|
|
429
|
-
getExecutor().
|
|
564
|
+
getExecutor().runFileQuiet("xcrun", [
|
|
565
|
+
"simctl",
|
|
566
|
+
"shutdown",
|
|
567
|
+
udid
|
|
568
|
+
], SIMCTL_OPTIONS);
|
|
430
569
|
}
|
|
431
570
|
function listIosDeviceTypes() {
|
|
432
571
|
const out = getExecutor().runFile("xcrun", [
|
|
@@ -438,10 +577,15 @@ function listIosDeviceTypes() {
|
|
|
438
577
|
timeoutMs: 3e4,
|
|
439
578
|
killSignal: "SIGKILL"
|
|
440
579
|
});
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
580
|
+
const data = JSON.parse(out);
|
|
581
|
+
return isJsonObject(data) ? deviceTypesOf(data.devicetypes) : [];
|
|
582
|
+
}
|
|
583
|
+
function deviceTypesOf(value) {
|
|
584
|
+
if (!Array.isArray(value)) return [];
|
|
585
|
+
return value.flatMap((entry) => isJsonObject(entry) && typeof entry.identifier === "string" && typeof entry.name === "string" ? [{
|
|
586
|
+
identifier: entry.identifier,
|
|
587
|
+
name: entry.name
|
|
588
|
+
}] : []);
|
|
445
589
|
}
|
|
446
590
|
function rankIphone(name) {
|
|
447
591
|
const gen = /^iPhone\s+(\d+)/i.exec(name);
|
|
@@ -531,7 +675,13 @@ function createOwnedIosSim(label, { deviceType, runtime, suffix = "" } = {}, cho
|
|
|
531
675
|
model: choice.deviceType,
|
|
532
676
|
runtime: choice.runtime
|
|
533
677
|
}, suffix);
|
|
534
|
-
const udid = getExecutor().
|
|
678
|
+
const udid = getExecutor().runFile("xcrun", [
|
|
679
|
+
"simctl",
|
|
680
|
+
"create",
|
|
681
|
+
name,
|
|
682
|
+
choice.deviceTypeId,
|
|
683
|
+
choice.runtimeId
|
|
684
|
+
], {
|
|
535
685
|
timeoutMs: SIMCTL_CREATE_TIMEOUT_MS,
|
|
536
686
|
killSignal: "SIGKILL"
|
|
537
687
|
}).trim();
|
|
@@ -690,7 +840,11 @@ function deleteIosSim(udid) {
|
|
|
690
840
|
const result = resolveOwnedIosSim(udid);
|
|
691
841
|
if (result.missing) return;
|
|
692
842
|
if (result.notOwned) throw new Error(`Refusing to delete simulator "${result.notOwned}" (${udid}): not a Stim-owned sim; Stim has no record of creating it.`);
|
|
693
|
-
getExecutor().
|
|
843
|
+
getExecutor().runFile("xcrun", [
|
|
844
|
+
"simctl",
|
|
845
|
+
"delete",
|
|
846
|
+
udid
|
|
847
|
+
], SIMCTL_OPTIONS);
|
|
694
848
|
forgetCreatedDevice("ios", udid);
|
|
695
849
|
}
|
|
696
850
|
const PARKED_DELETE_TIMEOUT_MS = 3e4;
|
|
@@ -708,25 +862,31 @@ function deleteParkedIosSim(udid) {
|
|
|
708
862
|
], { timeoutMs: PARKED_DELETE_TIMEOUT_MS });
|
|
709
863
|
forgetCreatedDevice("ios", udid);
|
|
710
864
|
}
|
|
865
|
+
const LIST_RUNTIMES_ARGS = [
|
|
866
|
+
"simctl",
|
|
867
|
+
"list",
|
|
868
|
+
"runtimes",
|
|
869
|
+
"--json"
|
|
870
|
+
];
|
|
871
|
+
const LIST_RUNTIMES_OPTIONS = {
|
|
872
|
+
timeoutMs: 3e4,
|
|
873
|
+
killSignal: "SIGKILL"
|
|
874
|
+
};
|
|
711
875
|
function listIosRuntimes() {
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
return (JSON.parse(out).runtimes || []).filter((r) => r.isAvailable && r.platform === "iOS").map((r) => ({
|
|
876
|
+
return parseIosRuntimes(getExecutor().runFile("xcrun", LIST_RUNTIMES_ARGS, LIST_RUNTIMES_OPTIONS));
|
|
877
|
+
}
|
|
878
|
+
async function listIosRuntimesAsync() {
|
|
879
|
+
return parseIosRuntimes(await getExecutor().runFileAsync("xcrun", LIST_RUNTIMES_ARGS, LIST_RUNTIMES_OPTIONS));
|
|
880
|
+
}
|
|
881
|
+
function parseIosRuntimes(out) {
|
|
882
|
+
const data = JSON.parse(out);
|
|
883
|
+
if (!isJsonObject(data) || !Array.isArray(data.runtimes)) return [];
|
|
884
|
+
return data.runtimes.flatMap((r) => isJsonObject(r) && r.isAvailable === true && r.platform === "iOS" && typeof r.identifier === "string" && typeof r.name === "string" && typeof r.version === "string" ? [{
|
|
722
885
|
identifier: r.identifier,
|
|
723
886
|
name: r.name,
|
|
724
887
|
version: r.version,
|
|
725
|
-
supportedDeviceTypes: (r.supportedDeviceTypes
|
|
726
|
-
|
|
727
|
-
name: d.name
|
|
728
|
-
}))
|
|
729
|
-
}));
|
|
888
|
+
supportedDeviceTypes: deviceTypesOf(r.supportedDeviceTypes)
|
|
889
|
+
}] : []);
|
|
730
890
|
}
|
|
731
891
|
//#endregion
|
|
732
|
-
export {
|
|
892
|
+
export { configuredIosSimulatorViewer as A, resetIosKeychain as C, sanitizeDeviceLabel as D, resolveOwnedIosSim as E, memoryCulpritAdvice as F, memoryCulpritFindings as I, readMemoryCulprits as L, hostMemoryPressureAdvice as M, memoryCulpritsUnder as N, shutdownIosSim as O, readHostMemoryPressure as P, deviceHoldsApk as R, renameIosSim as S, resolveIosCreation as T, ownedSimName as _, createOwnedIosSim as a, parseSimctlList as b, eraseIosSim as c, listAllIosSims as d, listAllIosSimsAsync as f, listUserApps as g, listIosRuntimesAsync as h, createIosSimSnapshot as i, parseIosSimulatorApp as j, uninstallIosApp as k, iosRuntimeMatches as l, listIosRuntimes as m, bootIosSim as n, deleteIosSim as o, listIosDeviceTypes as p, clearIosAppData as r, deleteParkedIosSim as s, IOS_BOOT_TIMEOUT_MS as t, iosSimulatorFailureAdvice as u, parkedSimName as v, resetIosPrivacy as w, pickDefaultIosCreation as x, parseRuntimeVersion as y, deviceHoldsBundle as z };
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { y as workspaceAgentDeviceDir } from "./workspace-state-CvgTFe-h.mjs";
|
|
2
|
+
import { i as formatDuration, l as phaseLine } from "./command-output-CPDq_90S.mjs";
|
|
3
|
+
import { i as workspaceLinkLine } from "./stim-desktop-8GQX2OV8.mjs";
|
|
4
|
+
import { Dt as recordFinishedBuild } from "./budget-RFbwFpG5.mjs";
|
|
5
|
+
import { a as easAuthNote, n as UPLOAD_TIMEOUT_MS, r as cacheLevel, s as isEasAuthFailureText } from "./remote-cache-fxcl5C-L.mjs";
|
|
6
|
+
import "./launch-verify-Dl78EVgR.mjs";
|
|
7
|
+
import { S as compilationCacheActivityLine, _ as COMPILATION_CACHE_NOT_RUN } from "./toolchain-SqehyPLw.mjs";
|
|
8
|
+
import { i as deviceLabel } from "./support-Co0wk8Cv.mjs";
|
|
9
|
+
import { buildDiagnostics } from "@stim-cli/core/state";
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
//#region src/commands/ios/result.ts
|
|
12
|
+
function lastBuildRecord({ devicePlacement, fingerprint = null, cacheKey = null, cacheHit = false, cacheSkipped = false, durationMs = 0, appPath = null, bundleId = null, startedAt, status, errorCode = null, missReason = null, diagnostics = null, configuration = null, buildMachine = "auto", builtOn, offloadedTo = null, offloadFallback = null }) {
|
|
13
|
+
const record = {
|
|
14
|
+
platform: "ios",
|
|
15
|
+
fingerprint,
|
|
16
|
+
cacheKey,
|
|
17
|
+
cacheHit: cacheLevel(cacheHit),
|
|
18
|
+
cacheSkipped: Boolean(cacheSkipped),
|
|
19
|
+
durationMs,
|
|
20
|
+
appPath,
|
|
21
|
+
bundleId,
|
|
22
|
+
startedAt,
|
|
23
|
+
status,
|
|
24
|
+
configuration
|
|
25
|
+
};
|
|
26
|
+
if (errorCode) record.errorCode = errorCode;
|
|
27
|
+
if (devicePlacement) record.devicePlacement = devicePlacement;
|
|
28
|
+
record.buildMachine = buildMachine;
|
|
29
|
+
if (builtOn) record.builtOn = builtOn;
|
|
30
|
+
if (offloadedTo) record.offloadedTo = offloadedTo;
|
|
31
|
+
if (offloadFallback) record.offloadFallback = offloadFallback;
|
|
32
|
+
if (missReason && !cacheLevel(cacheHit)) record.missReason = missReason;
|
|
33
|
+
const recorded = status === "failed" ? buildDiagnostics(diagnostics) : [];
|
|
34
|
+
if (recorded.length) record.diagnostics = recorded;
|
|
35
|
+
return record;
|
|
36
|
+
}
|
|
37
|
+
function iosFacts({ root, slot, udid, deviceName, deviceType = null, runtime = null, fingerprint, configuration = null, scheme = null, cacheKey, cacheHit, cacheSkipped = false, compilationCache = COMPILATION_CACHE_NOT_RUN, waitedForBuild = null, appPath, bundleId, installSkipped = false, metroPort, logsDir, durationMs, launched = true, webPreviewUrl = null, lease, devServer = null, buildMachine = "auto", builtOn, offloadedTo = null, offloadFallback = null }) {
|
|
38
|
+
return {
|
|
39
|
+
platform: "ios",
|
|
40
|
+
...slot && slot !== "default" ? { slot } : {},
|
|
41
|
+
udid,
|
|
42
|
+
deviceName: deviceName ?? null,
|
|
43
|
+
deviceType: deviceType ?? null,
|
|
44
|
+
runtime: runtime ?? null,
|
|
45
|
+
fingerprint,
|
|
46
|
+
configuration: configuration ?? null,
|
|
47
|
+
...scheme ? { scheme } : {},
|
|
48
|
+
cacheKey,
|
|
49
|
+
cacheHit: cacheLevel(cacheHit),
|
|
50
|
+
cacheSkipped: Boolean(cacheSkipped),
|
|
51
|
+
buildMachine,
|
|
52
|
+
...builtOn ? { builtOn } : {},
|
|
53
|
+
...offloadedTo ? { offloadedTo } : {},
|
|
54
|
+
...offloadFallback ? { offloadFallback } : {},
|
|
55
|
+
compilationCache,
|
|
56
|
+
waitedForBuild: waitedForBuild ? {
|
|
57
|
+
pid: waitedForBuild.pid ?? null,
|
|
58
|
+
ms: waitedForBuild.ms ?? 0
|
|
59
|
+
} : null,
|
|
60
|
+
appPath,
|
|
61
|
+
bundleId,
|
|
62
|
+
installSkipped: Boolean(installSkipped),
|
|
63
|
+
launched: launched === "unverified" || launched === "bundling" ? launched : Boolean(launched),
|
|
64
|
+
metroPort,
|
|
65
|
+
logs: { dir: logsDir },
|
|
66
|
+
...root ? { agentDevice: { stateDir: workspaceAgentDeviceDir(root) } } : {},
|
|
67
|
+
durationMs,
|
|
68
|
+
...webPreviewUrl ? { webPreviewUrl } : {},
|
|
69
|
+
...lease === void 0 ? {} : { lease },
|
|
70
|
+
...devServer ? { devServer } : {}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function writeLastBuild(root, record, { record: recordBuild = recordFinishedBuild } = {}) {
|
|
74
|
+
try {
|
|
75
|
+
recordBuild(root, record);
|
|
76
|
+
} catch {}
|
|
77
|
+
return record;
|
|
78
|
+
}
|
|
79
|
+
async function finishIosUpload(uploadPending, remote, phase, note) {
|
|
80
|
+
if (!uploadPending) return false;
|
|
81
|
+
const upload = await uploadPending;
|
|
82
|
+
if (upload?.uploaded) phase("cache", `uploaded (${remote?.name})`);
|
|
83
|
+
else if (upload?.timedOut) {
|
|
84
|
+
note(chalk.yellow(phaseLine("cache", `${remote?.name} upload still running after ${formatDuration(UPLOAD_TIMEOUT_MS)}; not waiting`)));
|
|
85
|
+
return true;
|
|
86
|
+
} else if (upload?.failed) {
|
|
87
|
+
const authNote = remote?.name === "eas" && isEasAuthFailureText(upload.failed) ? easAuthNote({
|
|
88
|
+
code: "logged-out",
|
|
89
|
+
reason: upload.failed,
|
|
90
|
+
phase: "upload"
|
|
91
|
+
}) : null;
|
|
92
|
+
note(chalk.yellow(phaseLine("cache", authNote || `${remote?.name} upload failed: ${upload.failed}`)));
|
|
93
|
+
}
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
function reportIosResult({ devicePlacement, host, slot, root, json, release, runtimeKind = release ? "embedded-js" : "metro", configuration, buildScheme = null, metroCheck, metroPort, logsDir, device, udid, appPath, bundleId, installSkipped, elapsed, startedAt, storeHash, storeKey, cacheHit, missReason, compilationCache, useBuildCache, waitedForBuild, launchState, launchWarning, providerName, buildMachine = "auto", builtOn, offloadedTo = null, offloadFallback = null, closeWriter, webPreviewUrl, lease, recordRun, reclaimed = [], devServer = null, links }) {
|
|
97
|
+
const durationMs = elapsed();
|
|
98
|
+
recordRun({
|
|
99
|
+
failed: false,
|
|
100
|
+
cacheHit,
|
|
101
|
+
waited: waitedForBuild,
|
|
102
|
+
durationMs,
|
|
103
|
+
offloadedTo
|
|
104
|
+
});
|
|
105
|
+
writeLastBuild(root, lastBuildRecord({
|
|
106
|
+
devicePlacement,
|
|
107
|
+
fingerprint: storeHash,
|
|
108
|
+
cacheKey: storeKey,
|
|
109
|
+
cacheHit,
|
|
110
|
+
cacheSkipped: !useBuildCache,
|
|
111
|
+
missReason,
|
|
112
|
+
durationMs,
|
|
113
|
+
appPath,
|
|
114
|
+
bundleId,
|
|
115
|
+
startedAt,
|
|
116
|
+
status: "ok",
|
|
117
|
+
configuration: configuration ?? "Debug",
|
|
118
|
+
buildMachine,
|
|
119
|
+
builtOn,
|
|
120
|
+
offloadedTo,
|
|
121
|
+
offloadFallback
|
|
122
|
+
}));
|
|
123
|
+
closeWriter();
|
|
124
|
+
const facts = iosFacts({
|
|
125
|
+
root,
|
|
126
|
+
slot,
|
|
127
|
+
udid,
|
|
128
|
+
deviceName: device?.deviceName ?? null,
|
|
129
|
+
deviceType: device?.deviceType,
|
|
130
|
+
runtime: device?.runtime,
|
|
131
|
+
fingerprint: storeHash,
|
|
132
|
+
configuration,
|
|
133
|
+
scheme: buildScheme,
|
|
134
|
+
cacheKey: storeKey,
|
|
135
|
+
cacheHit,
|
|
136
|
+
compilationCache,
|
|
137
|
+
cacheSkipped: !useBuildCache,
|
|
138
|
+
waitedForBuild,
|
|
139
|
+
appPath,
|
|
140
|
+
bundleId,
|
|
141
|
+
installSkipped,
|
|
142
|
+
metroPort,
|
|
143
|
+
logsDir,
|
|
144
|
+
durationMs,
|
|
145
|
+
launched: launchState,
|
|
146
|
+
webPreviewUrl,
|
|
147
|
+
lease,
|
|
148
|
+
devServer,
|
|
149
|
+
buildMachine,
|
|
150
|
+
builtOn,
|
|
151
|
+
offloadedTo,
|
|
152
|
+
offloadFallback
|
|
153
|
+
});
|
|
154
|
+
if (devicePlacement) facts.devicePlacement = devicePlacement;
|
|
155
|
+
if (host) facts.host = host;
|
|
156
|
+
if (json) console.log(JSON.stringify({
|
|
157
|
+
...facts,
|
|
158
|
+
...links ? { links } : {},
|
|
159
|
+
...reclaimed.length ? { reclaimed } : {}
|
|
160
|
+
}));
|
|
161
|
+
else {
|
|
162
|
+
const summary = `${launchWarning ? "WARNING" : "OK"}: ${bundleId} on ${host ? `${device.deviceName} (iOS ${device.runtime?.replace(/^iOS /, "")}) on ${host.machine}` : deviceLabel(device, udid)}, ` + (runtimeKind === "process" ? `${configuration ?? "Debug"} (native process, no Metro)` : runtimeKind === "embedded-js" ? `${configuration} (embedded JS, no Metro)` : `Metro port ${metroPort}`) + ` (${cacheDescription(cacheHit, providerName, offloadedTo)}, ${formatDuration(durationMs)})`;
|
|
163
|
+
const outcome = launchWarning ? chalk.yellow(`${summary} -- ${launchWarning}`) : launchState === "unverified" ? chalk.yellow(`${summary} -- launch UNVERIFIED`) : launchState === "bundling" ? chalk.green(`${summary} -- bundle requested, still building`) : chalk.green(summary);
|
|
164
|
+
const deviceName = device?.deviceName ?? device?.name ?? udid;
|
|
165
|
+
const cacheResult = useBuildCache ? cacheDescription(cacheHit, providerName, offloadedTo) : `bypassed; ${cacheDescription(false, null, offloadedTo)}`;
|
|
166
|
+
const metroResult = runtimeKind === "process" ? "native process (no Metro)" : runtimeKind === "embedded-js" ? `embedded (${configuration})` : !metroCheck ? `check skipped on port ${metroPort}` : launchState === "unverified" ? `state unverified on port ${metroPort}` : `running on port ${metroPort}${devServer ? ` (started: ${devServer.reason})` : ""}`;
|
|
167
|
+
console.log([
|
|
168
|
+
outcome,
|
|
169
|
+
phaseLine("device", host ? `${deviceName} (iOS ${device.runtime?.replace(/^iOS /, "")}) on ${host.machine}` : `${deviceName} (${udid})`),
|
|
170
|
+
phaseLine("app", bundleId),
|
|
171
|
+
phaseLine(runtimeKind === "process" ? "runtime" : "metro", metroResult),
|
|
172
|
+
phaseLine("cache", cacheResult),
|
|
173
|
+
...compilationCache.status === "not-run" ? [phaseLine("compilation cache", compilationCacheActivityLine(compilationCache))] : [],
|
|
174
|
+
phaseLine("logs", logsDir),
|
|
175
|
+
phaseLine("agent-device", `AGENT_DEVICE_STATE_DIR=${workspaceAgentDeviceDir(root)}`)
|
|
176
|
+
].join("\n"));
|
|
177
|
+
if (facts.webPreviewUrl) console.error(chalk.dim(`Watch this device: ${facts.webPreviewUrl}`));
|
|
178
|
+
if (links) console.error(chalk.dim(workspaceLinkLine(links)));
|
|
179
|
+
}
|
|
180
|
+
return facts;
|
|
181
|
+
}
|
|
182
|
+
function cacheDescription(cacheHit, providerName = null, offloadedTo = null) {
|
|
183
|
+
if (cacheHit === "remote") return `from ${providerName || "the remote cache"}`;
|
|
184
|
+
if (cacheHit === "local") return "from cache";
|
|
185
|
+
return offloadedTo ? `built on ${offloadedTo}` : "built";
|
|
186
|
+
}
|
|
187
|
+
//#endregion
|
|
188
|
+
//#region src/integrations/ios-project.ts
|
|
189
|
+
var IosRecipeRefusal = class extends Error {
|
|
190
|
+
failure;
|
|
191
|
+
constructor(failure) {
|
|
192
|
+
super(failure.message ?? failure.code);
|
|
193
|
+
this.failure = failure;
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
//#endregion
|
|
197
|
+
export { lastBuildRecord as a, iosFacts as i, cacheDescription as n, reportIosResult as o, finishIosUpload as r, writeLastBuild as s, IosRecipeRefusal as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-
|
|
1
|
+
import { a as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-CvgTFe-h.mjs";
|
|
2
2
|
import { HOSTED_METRO_REQUESTS_KEY, hostedMetroRequests, hostedNativeRecords, isJsonObject, parseHostedNativePlacement, unreadableHostedNative } from "@stim-cli/core/state";
|
|
3
3
|
//#region src/device-host/ios-state.ts
|
|
4
4
|
function readHostedNative(root, platform, slot) {
|