stim 1.24.0 → 1.26.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.
Files changed (162) hide show
  1. package/README.md +1 -1
  2. package/dist/{acquire-artifact-CEs02U2o.mjs → acquire-artifact-DVsvSwf7.mjs} +1 -1
  3. package/dist/{act-Cyvm8xYc.mjs → act-C-BqJEpu.mjs} +158 -36
  4. package/dist/{activity-Dq3ZcdD8.mjs → activity-Lnb_EoRY.mjs} +4 -5
  5. package/dist/{agent-device-usage-output-CccomeE0.mjs → agent-device-usage-output-DbXy5tg8.mjs} +4 -4
  6. package/dist/{android-CX5IcRuf.mjs → android-B5P81yI-.mjs} +1 -1
  7. package/dist/{android-DcztblCT.mjs → android-CSbLRD53.mjs} +5 -5
  8. package/dist/{android-BZppyPe_.mjs → android-CiNQw3kq.mjs} +81 -52
  9. package/dist/{android-882m4hxX.mjs → android-DTAcRwBC.mjs} +81 -34
  10. package/dist/{android-cas-BtCOrNqb.mjs → android-cas-BTVhZ0Qs.mjs} +4 -4
  11. package/dist/{android-project-DVWyCbWU.d.mts → android-project-DUGMbq28.d.mts} +61 -3
  12. package/dist/api.d.mts +8 -5
  13. package/dist/api.mjs +27 -27
  14. package/dist/apk-signed-tail-B46U9hXc.mjs +142 -0
  15. package/dist/{artifact-BR5VNArK.mjs → artifact-BxREhAaV.mjs} +25 -19
  16. package/dist/{artifact-Bdt_n9Jc.mjs → artifact-CsAP6AGK.mjs} +36 -21
  17. package/dist/{attempt-DW-mQqM7.mjs → attempt-ClyJlZPT.mjs} +4 -2
  18. package/dist/{browser-web-ycg9qWB8.mjs → browser-web-rYPyqhTf.mjs} +11 -12
  19. package/dist/{budget-dPGuhNai.mjs → budget-k2mZGvvk.mjs} +242 -38
  20. package/dist/{build-CaF574eS.mjs → build-DPhApsjV.mjs} +28 -24
  21. package/dist/{build-cache-HFUQ9eLz.mjs → build-cache-DrXNCy3T.mjs} +123 -23
  22. package/dist/{build-plan-JsDUq4w1.mjs → build-plan-DrMMdayj.mjs} +5 -5
  23. package/dist/{cache-manifest-BPXRONJz.mjs → cache-manifest-BEZ9Bpl1.mjs} +1 -1
  24. package/dist/cache-manifest.mjs +1 -1
  25. package/dist/{ccache-CCn1S6qG.mjs → ccache-Bx5TbxwG.mjs} +6 -6
  26. package/dist/{cli-xqAidP7O.mjs → cli-BBKFGOFl.mjs} +19 -19
  27. package/dist/cli.mjs +1 -1
  28. package/dist/{client-18-ZowoT.mjs → client-D9CaRks-.mjs} +55 -71
  29. package/dist/collector-run.mjs +4 -4
  30. package/dist/{command-output-DxC0k2rk.mjs → command-output-BF5AR2dL.mjs} +1 -1
  31. package/dist/{config-BZhXY15H.mjs → config-BktkY_zC.mjs} +321 -15
  32. package/dist/{launch-BVlyQw3T.mjs → dependencies-Dw6wfQdv.mjs} +259 -256
  33. package/dist/{dependency-state-C56ll9hY.mjs → dependency-state-DFB41vfr.mjs} +1 -1
  34. package/dist/{dev-client-w_fok0Ek.mjs → dev-client-DXR_tPVY.mjs} +2 -2
  35. package/dist/{device-BktRGdjS.mjs → device-BK-zwyd_.mjs} +64 -33
  36. package/dist/{device-4RUugw5X.mjs → device-BcYeHSFu.mjs} +14 -14
  37. package/dist/{device-capacity-Ic-kdmEV.mjs → device-capacity-DCSvUF0l.mjs} +10 -17
  38. package/dist/device-host-worker.mjs +11 -13
  39. package/dist/{device-ios-DzpSlZyd.mjs → device-ios-BLGfXQeK.mjs} +68 -25
  40. package/dist/{device-lease-run-DUtkbqBQ.mjs → device-lease-run-BmvIl7bI.mjs} +5 -5
  41. package/dist/{device-pool-CgBHk401.mjs → device-pool-Dluix4H3.mjs} +3 -3
  42. package/dist/{doctor-DZgpqR6J.mjs → doctor-Bhg1ii70.mjs} +14 -14
  43. package/dist/{doctor-BZ6oxNum.mjs → doctor-Cp-BhzTS.mjs} +1 -1
  44. package/dist/{doctor-C33AzVfR.mjs → doctor-OnwP94ne.mjs} +81 -26
  45. package/dist/{doctor-fingerprint-zlujA1Gs.mjs → doctor-fingerprint-D3a04Mhu.mjs} +8 -2
  46. package/dist/doctor-fingerprint.mjs +1 -1
  47. package/dist/{doctor-watchman-B453A231.mjs → doctor-watchman-BStK05nt.mjs} +4 -4
  48. package/dist/{eas-build-CxKUNHsb.mjs → eas-build-Dsj93iM9.mjs} +2 -2
  49. package/dist/{eas-fallback-LMxk9Kw0.mjs → eas-fallback-FwkeqqGi.mjs} +13 -12
  50. package/dist/{eas-session-ledger-Ck6YXPAO.mjs → eas-session-ledger-B5vygTiD.mjs} +5 -5
  51. package/dist/{error-diagnostics-BkKCZq4P.mjs → error-diagnostics-BOOm9Db7.mjs} +8 -8
  52. package/dist/{errors-ccaPc4ox.mjs → errors-DHm_U5gv.mjs} +2 -1
  53. package/dist/{gc-DDWEAj0w.mjs → gc-C_79zvz4.mjs} +2 -2
  54. package/dist/{gc-yVKpAOKM.mjs → gc-ldgr-hXU.mjs} +74 -43
  55. package/dist/{guide-Bggftwc5.mjs → guide-D7K0X6KG.mjs} +374 -78
  56. package/dist/{hosted-android-D4dweBof.mjs → hosted-android-Bk54ej6n.mjs} +3 -3
  57. package/dist/{hosted-client-BBTVe3X6.mjs → hosted-client-fHO8yqzc.mjs} +5 -5
  58. package/dist/{hosted-ios-Sn0djzg8.mjs → hosted-ios-D55QhYaD.mjs} +1 -1
  59. package/dist/{hosted-logs-CYIZ5ubJ.mjs → hosted-logs-BfbmDM4M.mjs} +17 -11
  60. package/dist/hosted-logs-sync-B0pvmOk-.mjs +195 -0
  61. package/dist/{hosted-macos-CXjsUNBR.mjs → hosted-macos-CPl0OZ9h.mjs} +5 -5
  62. package/dist/{hosted-native-Doxbfzem.mjs → hosted-native-CpDB3-PO.mjs} +6 -7
  63. package/dist/{idle-shutdown-BInjLKqm.mjs → idle-shutdown-FfxL1KdG.mjs} +22 -9
  64. package/dist/{ios-BItP6lkn.mjs → ios-B7-lToDu.mjs} +8 -8
  65. package/dist/{ios-CVUFFZ6C.mjs → ios-WxpDJ5T1.mjs} +129 -14
  66. package/dist/{ios-device-BI38NFFH.mjs → ios-device-CsyryvpT.mjs} +1 -1
  67. package/dist/{ios-B1FXRCMX.mjs → ios-ftxdQbJS.mjs} +84 -51
  68. package/dist/{ios-project-KYqeJURj.mjs → ios-project-Ty5pHl9O.mjs} +6 -6
  69. package/dist/{ios-state-DlElquYD.mjs → ios-state-Cw7-WQf2.mjs} +1 -1
  70. package/dist/{js-swap-BvrQvXHY.mjs → js-swap-BMhXYVDS.mjs} +4 -4
  71. package/dist/{launch-SfzGH_s9.mjs → launch-DOp8RjDz.mjs} +32 -27
  72. package/dist/{logs-DXE32kyb.mjs → logs-dQDki6Tt.mjs} +9 -173
  73. package/dist/{logs-ovlU7m7N.mjs → logs-s1dRIG1E.mjs} +85 -36
  74. package/dist/{macos-B3BveDrU.mjs → macos-B0VEV3Gf.mjs} +1 -1
  75. package/dist/{macos-CCfhb-jT.mjs → macos-DBBPNnIA.mjs} +18 -19
  76. package/dist/macos-run.mjs +1 -1
  77. package/dist/maintenance-run.mjs +28 -11
  78. package/dist/{metro-Bu8LBfzS.mjs → metro-CjC10t6E.mjs} +2 -2
  79. package/dist/{metro-gateway-DtsOy-0P.mjs → metro-gateway-B6_PgD0L.mjs} +2 -3
  80. package/dist/{named-ports-BWDuU5oQ.mjs → named-ports-BG0j1X4g.mjs} +2 -2
  81. package/dist/{native-android-96BBizbq.mjs → native-android-CL2NGiik.mjs} +17 -17
  82. package/dist/{native-gradle-artifact-inputs-BcLYBZil.mjs → native-gradle-artifact-inputs-btSUulme.mjs} +3 -3
  83. package/dist/{native-run-BmH7U8pr.mjs → native-run-BfIDFKLH.mjs} +2 -3
  84. package/dist/{native-runtime-DgtJkzIa.mjs → native-runtime-Dq3RBcON.mjs} +6 -7
  85. package/dist/{native-xcode-inputs-irplbQb0.mjs → native-xcode-inputs-BW7H8JGu.mjs} +2 -2
  86. package/dist/{native-xcode-ios-BY-6hh6M.mjs → native-xcode-ios-CBXJAxfC.mjs} +18 -18
  87. package/dist/offload-worker.d.mts +7 -2
  88. package/dist/offload-worker.mjs +34 -23
  89. package/dist/{ownership-DxlZGDcV.mjs → ownership-BjYvMNX_.mjs} +2 -2
  90. package/dist/{phone-reverses-BdsdesVF.mjs → phone-reverses-lmj6kcPm.mjs} +3 -3
  91. package/dist/{placement-log-DUvqqsB-.mjs → placement-log-DIFPQAXp.mjs} +1 -1
  92. package/dist/{plan-placement-4axc0Hs7.mjs → plan-placement-IiiSQhtz.mjs} +3 -3
  93. package/dist/{ports-D-E_OiAO.mjs → ports-C2_w1Z0Z.mjs} +3 -3
  94. package/dist/prebuild-gmouvmJZ.mjs +1247 -0
  95. package/dist/{project-Dz-hWkb-.mjs → project-BUu6Is4k.mjs} +15 -16
  96. package/dist/{react-native-android-DOinxgwB.mjs → react-native-android-Cgg99REN.mjs} +48 -33
  97. package/dist/{react-native-build-AuCu-aAP.mjs → react-native-build-oNwqF5Wb.mjs} +8 -8
  98. package/dist/{react-native-doctor-2ivJUmwZ.mjs → react-native-doctor-BhA3KUte.mjs} +49 -8
  99. package/dist/{react-native-ios-D5zTIuH8.mjs → react-native-ios-B-nf4rjN.mjs} +40 -25
  100. package/dist/{recordings-CdPwYwvs.mjs → recordings-BldzVKq0.mjs} +1 -1
  101. package/dist/{reload-Ck9RJeSq.mjs → reload-C9OduiNc.mjs} +1 -1
  102. package/dist/{reload-C1TTVesC.mjs → reload-CCR7KC_l.mjs} +14 -14
  103. package/dist/{remote-DEZ7AOVq.mjs → remote-C8S7FlPF.mjs} +16 -7
  104. package/dist/{result-DqBrb12U.mjs → result-7F5hEwQJ.mjs} +17 -17
  105. package/dist/{run-BIwoU44q.mjs → run-BqB0v3pt.mjs} +1 -1
  106. package/dist/{selection-BLtvaqxc.mjs → selection-BNPBZ6T5.mjs} +157 -44
  107. package/dist/{server-bare-Z1ToVLPn.mjs → server-bare-A75rDIdD.mjs} +55 -3
  108. package/dist/{server-command-C0pmjNdG.mjs → server-command-CssKFOD7.mjs} +4 -4
  109. package/dist/{server-expo-Tt_hLRpy.mjs → server-expo-eQfOdydb.mjs} +8 -6
  110. package/dist/server-expo-wvcj5tiZ.mjs +2 -0
  111. package/dist/{settings-RKwY33wv.mjs → settings-CosW5X-S.mjs} +59 -61
  112. package/dist/{settings-kkt0vP4w.mjs → settings-OaGQF-ri.mjs} +1 -1
  113. package/dist/{settings-write--gj6MACV.mjs → settings-write-QjYfSrjF.mjs} +5 -5
  114. package/dist/settings.schema.json +71 -6
  115. package/dist/{simslim-CdWKT3vA.mjs → simslim-Bax1qcxu.mjs} +22 -6
  116. package/dist/{slot-launch-A1BgotaM.mjs → slot-launch-CYCEhfBY.mjs} +6 -6
  117. package/dist/{stage-ERTMh88n.mjs → stage-jKQ7CP_B.mjs} +1 -1
  118. package/dist/{start-Bmg_qmHi.mjs → start-C_wefNKB.mjs} +1 -1
  119. package/dist/{start-BKGrEhzG.mjs → start-_BdJ32cZ.mjs} +9 -10
  120. package/dist/{state-B1ig0Kqy.mjs → state-C1i2nMOP.mjs} +2 -3
  121. package/dist/{state-BfAltYJP.mjs → state-C4OdpOTF.mjs} +1 -2
  122. package/dist/{stats-B-ckuiUg.mjs → stats-tEpEEH-u.mjs} +4 -4
  123. package/dist/{status-Pw-807f0.mjs → status-B9M7x4CZ.mjs} +1 -1
  124. package/dist/{status-Fect2w9R.mjs → status-CRXz-Gtj.mjs} +1 -1
  125. package/dist/{status-DfFp6a76.mjs → status-DQrqodLj.mjs} +22 -23
  126. package/dist/{status-watch-XC7F-AMf.mjs → status-watch-B5wDIH_o.mjs} +4 -4
  127. package/dist/status-worker.mjs +1 -1
  128. package/dist/{stim-desktop-DS0mzR8U.mjs → stim-desktop-6Dqp-gjX.mjs} +1 -1
  129. package/dist/{stop-BFu7X_Do.mjs → stop-CmdNhGlC.mjs} +2 -2
  130. package/dist/{stop-CL1kDHds.mjs → stop-DRqQVqDJ.mjs} +74 -53
  131. package/dist/{stop-DhclRwOO.mjs → stop-ySNQHXMG.mjs} +4 -5
  132. package/dist/supervisor-run.d.mts +1 -0
  133. package/dist/supervisor-run.mjs +15 -16
  134. package/dist/{support-B3tzVhKn.mjs → support-BGSCBoib.mjs} +4 -4
  135. package/dist/{support-B1W-hmC2.mjs → support-CVOCp0Ft.mjs} +15 -12
  136. package/dist/{swiftpm-artifact-inputs-BWYPj9Sn.mjs → swiftpm-artifact-inputs-CfUzt_0Z.mjs} +1 -1
  137. package/dist/{swiftpm-macos-BVCP5mO4.mjs → swiftpm-macos-x6HPpl_2.mjs} +10 -10
  138. package/dist/toolchain-DoavrvIA.mjs +2 -0
  139. package/dist/toolchain-J4J8MrAr.mjs +2107 -0
  140. package/dist/trigger-DzJu208Q.mjs +2 -0
  141. package/dist/{trigger-CBMe2YLH.mjs → trigger-KVaWWNyn.mjs} +1 -1
  142. package/dist/{warm-progress-ol0ZypEu.mjs → warm-progress-DvhTX_eu.mjs} +3 -4
  143. package/dist/web-BFLueSh-.mjs +2 -0
  144. package/dist/{web-BH7peScT.mjs → web-Bihbf7-u.mjs} +8 -9
  145. package/dist/web-run.mjs +4 -4
  146. package/dist/{workspace-state-CeBpIZgr.mjs → workspace-state-pUg3_RRA.mjs} +45 -7
  147. package/dist/{workspaces-CSV2Orf4.mjs → workspaces-g2lhdBXF.mjs} +17 -17
  148. package/dist/{worktree-Dw8kfacb.mjs → worktree-BKuklFh_.mjs} +34 -31
  149. package/dist/{worktree-DEDUzO_L.mjs → worktree-Bm4cb-nU.mjs} +1 -1
  150. package/package.json +8 -8
  151. package/shim/bundle-response.cjs +53 -1
  152. package/shim/bundle-response.d.cts +1 -1
  153. package/shim/expo-metro-config.cjs +23 -1
  154. package/dist/created-devices-D2Aca-xu.mjs +0 -52
  155. package/dist/paths-DQtTgsBf.mjs +0 -42
  156. package/dist/prebuild-DmVCf5xb.mjs +0 -501
  157. package/dist/server-expo-CEntXzRw.mjs +0 -2
  158. package/dist/toolchain-BjgKdoEf.mjs +0 -2
  159. package/dist/toolchain-D3bmRMia.mjs +0 -897
  160. package/dist/trigger-BLsHgAGR.mjs +0 -2
  161. package/dist/web-BdOFlTJr.mjs +0 -2
  162. package/dist/xcode-DHu41qQ4.mjs +0 -910
@@ -1,8 +1,7 @@
1
1
  import { S as process_identity_exports } from "./exec-VFRpu1iA.mjs";
2
- import { c as supervisorPidFile, g as workspaceStateFile$1 } from "./paths-DQtTgsBf.mjs";
3
- import { U as parseDeviceSlotKey, V as deviceSlotKey, _ as loadConfig$1, g as isPathPrefix, l as findEnclosingWorktreeRoot, p as getProject } from "./config-BZhXY15H.mjs";
4
- import { c as withWorkspaceStateLock, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-CeBpIZgr.mjs";
5
- import { K as resolveIosProjectDir, Mt as repoRoot, W as resolveAndroidLayout, at as webSettings, tt as settingValueAt } from "./settings-RKwY33wv.mjs";
2
+ import { C as supervisorPidFile, c as withWorkspaceStateLock, j as workspaceStateFile$1, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { U as parseDeviceSlotKey, V as deviceSlotKey, _ as loadConfig$1, g as isPathPrefix, l as findEnclosingWorktreeRoot, p as getProject } from "./config-BktkY_zC.mjs";
4
+ import { G as resolveAndroidLayout, Nt as repoRoot, nt as settingValueAt, ot as webSettings, q as resolveIosProjectDir } from "./settings-CosW5X-S.mjs";
6
5
  import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
7
6
  import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
8
7
  import { projectRootDirectories } from "@stim-cli/core/state";
@@ -312,8 +311,8 @@ const nativeAndroidIntegration = {
312
311
  application: true,
313
312
  platforms: () => ["android"],
314
313
  validate: (operation) => operation === "android" ? null : void 0,
315
- android: async () => (await import("./native-android-96BBizbq.mjs")).nativeAndroidProject(root),
316
- doctor: async () => (await import("./native-android-96BBizbq.mjs")).nativeAndroidDoctor(root)
314
+ android: async () => (await import("./native-android-CL2NGiik.mjs")).nativeAndroidProject(root),
315
+ doctor: async () => (await import("./native-android-CL2NGiik.mjs")).nativeAndroidDoctor(root)
317
316
  };
318
317
  }
319
318
  };
@@ -741,8 +740,8 @@ const nativeXcodeProjectIntegration = {
741
740
  application: problem === null,
742
741
  platforms: () => problem ? [] : ["ios"],
743
742
  validate: (operation) => operation === "ios" ? problem : void 0,
744
- ios: async () => (await import("./native-xcode-ios-BY-6hh6M.mjs")).nativeXcodeIosProject(root),
745
- doctor: async () => (await import("./native-xcode-ios-BY-6hh6M.mjs")).nativeXcodeDoctor(root)
743
+ ios: async () => (await import("./native-xcode-ios-CBXJAxfC.mjs")).nativeXcodeIosProject(root),
744
+ doctor: async () => (await import("./native-xcode-ios-CBXJAxfC.mjs")).nativeXcodeDoctor(root)
746
745
  };
747
746
  }
748
747
  };
@@ -947,7 +946,7 @@ function createProjectRegistry(integrations) {
947
946
  //#region src/integrations/projects.ts
948
947
  const expo = {
949
948
  mode: MODE_EXPO,
950
- loadDevServer: async () => (await import("./server-expo-CEntXzRw.mjs")).startExpoServer,
949
+ loadDevServer: async () => (await import("./server-expo-wvcj5tiZ.mjs")).startExpoServer,
951
950
  platforms(root) {
952
951
  const appJson = readAppJson(root);
953
952
  const config = appJson?.expo ?? appJson;
@@ -967,7 +966,7 @@ const expo = {
967
966
  };
968
967
  const reactNative = {
969
968
  mode: MODE_BARE,
970
- loadDevServer: async () => (await import("./server-bare-Z1ToVLPn.mjs")).startBareServer,
969
+ loadDevServer: async () => (await import("./server-bare-A75rDIdD.mjs")).startBareServer,
971
970
  platforms(root, { context, settings }) {
972
971
  if (!declaresAppDependency(readPackageJson(root))) return [];
973
972
  const platforms = [];
@@ -997,9 +996,9 @@ const projectRegistry = createProjectRegistry([
997
996
  ownedRoots: problem === null ? [join(root, "ios"), join(root, "android")] : [],
998
997
  platforms: (resolved) => nativeProjectIntegration(root).platforms(root, resolved),
999
998
  validate: (operation) => operation === "ios" || operation === "android" || operation === "dev-server" ? problem : void 0,
1000
- ios: async (settings) => (await import("./react-native-ios-D5zTIuH8.mjs")).reactNativeIosProject(root, settings),
1001
- android: async (resolved) => (await import("./react-native-android-DOinxgwB.mjs")).reactNativeAndroidProject(root, resolved),
1002
- doctor: async () => (await import("./react-native-doctor-2ivJUmwZ.mjs")).reactNativeProjectDoctor(root)
999
+ ios: async (settings) => (await import("./react-native-ios-B-nf4rjN.mjs")).reactNativeIosProject(root, settings),
1000
+ android: async (resolved) => (await import("./react-native-android-Cgg99REN.mjs")).reactNativeAndroidProject(root, resolved),
1001
+ doctor: async () => (await import("./react-native-doctor-BhA3KUte.mjs")).reactNativeProjectDoctor(root)
1003
1002
  };
1004
1003
  }
1005
1004
  },
@@ -1013,9 +1012,9 @@ const projectRegistry = createProjectRegistry([
1013
1012
  application: true,
1014
1013
  platforms: ({ settings }) => settingValueAt(settings, "macos.product") && settingValueAt(settings, "macos.infoPlist") ? ["macos"] : [],
1015
1014
  validate: (operation) => operation === "macos" ? null : void 0,
1016
- macos: async () => (await import("./swiftpm-macos-BVCP5mO4.mjs")).swiftpmMacosProject(root),
1015
+ macos: async () => (await import("./swiftpm-macos-x6HPpl_2.mjs")).swiftpmMacosProject(root),
1017
1016
  doctor: async () => {
1018
- const { macosToolchain, macosToolchainAsync } = await import("./toolchain-BjgKdoEf.mjs");
1017
+ const { macosToolchain, macosToolchainAsync } = await import("./toolchain-DoavrvIA.mjs");
1019
1018
  return {
1020
1019
  inspect: () => [],
1021
1020
  offloadTargets: ({ options: { host = process.platform, platform, operation } }) => host === "darwin" && platform === void 0 ? async () => [{
@@ -1035,7 +1034,7 @@ const projectRegistry = createProjectRegistry([
1035
1034
  application: false,
1036
1035
  platforms: ({ settings }) => webSettings(settings).url !== null ? ["web"] : [],
1037
1036
  validate: (operation) => operation === "web" ? null : void 0,
1038
- web: async () => (await import("./browser-web-ycg9qWB8.mjs")).browserWebProject(root)
1037
+ web: async () => (await import("./browser-web-rYPyqhTf.mjs")).browserWebProject(root)
1039
1038
  };
1040
1039
  }
1041
1040
  },
@@ -1,31 +1,30 @@
1
1
  import { C as reportSignal, _ as spawnDeclared, b as operationState, c as throwIfCancelled, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { H as deviceSlotPlatforms, p as getProject, q as validateDeviceSlot } from "./config-BZhXY15H.mjs";
2
+ import { r as readWorkspaceState } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { H as deviceSlotPlatforms, p as getProject, q as validateDeviceSlot } from "./config-BktkY_zC.mjs";
3
4
  import { r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-DxC0k2rk.mjs";
5
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-BF5AR2dL.mjs";
5
6
  import { a as killOnAbort, t as runOperationFile } from "./operation-exec-CUZifp6Z.mjs";
6
- import { r as readWorkspaceState } from "./workspace-state-CeBpIZgr.mjs";
7
- import { $ as settingOriginScope, B as realpathInside, H as remoteEasFallbackSetting, Ht as makeTemporaryDirectory, R as publicUrlSetting, Ut as removeTemporaryEntry, W as resolveAndroidLayout, m as defaultAndroidLayout, nt as settingsLayers, rt as tunnelModeSetting } from "./settings-RKwY33wv.mjs";
8
- import { v as detectIsExpo } from "./project-Dz-hWkb-.mjs";
9
- import { E as findBuildTool, F as listAvdsAsync, I as listInstalledSystemImages, K as ownedAvdSystemImage, V as ownedAvdDirectory, X as pickDefaultSystemImage, k as hostSystemImageArch, l as androidSystemImageAbi, r as androidBuildToolName } from "./android-882m4hxX.mjs";
10
- import { Gn as loadProjectProvider, Hn as checkEasAuth, Ln as processContext, Qn as bundleInvocation, Xn as resolveRemote, Z as statsProjectKey } from "./budget-dPGuhNai.mjs";
11
- import { D as captureAssetManifest, E as assetDiffReason, O as compareAssetManifests, T as untrackedNativeFiles, a as configInputsChanged, b as storeBuild, d as fingerprintProject, f as gitignoredFingerprintInputs, k as readAssetManifest, l as filesystemBuildCapability, m as inputsChangedDuringBuild, n as buildCacheKey, r as changedDuringBuildLine, u as fingerprintDiffRecord, v as refingerprintAfterMutation, w as untrackedMissLine, x as storedAssetManifest, y as resolveBuild } from "./build-cache-HFUQ9eLz.mjs";
12
- import { s as expoTelemetryEnv, t as cleanLine } from "./server-expo-Tt_hLRpy.mjs";
13
- import { o as resolveCcache } from "./ccache-CCn1S6qG.mjs";
14
- import { _ as tailLines, h as startBuildHeartbeat, r as HEARTBEAT_INTERVAL_MS } from "./xcode-DHu41qQ4.mjs";
15
- import { r as androidToolchainAsync, t as androidRequirements } from "./toolchain-D3bmRMia.mjs";
16
- import { h as detectAppIds, m as detectAndroidPackage } from "./start-BKGrEhzG.mjs";
17
- import { c as readProductFlavors, h as androidPathRoomRefusal, n as buildAndroid, s as productFlavorRefusal } from "./react-native-build-AuCu-aAP.mjs";
18
- import { t as readDoctorFingerprint } from "./doctor-fingerprint-zlujA1Gs.mjs";
19
- import { i as planEasDevelopmentBuild } from "./eas-build-CxKUNHsb.mjs";
20
- import { a as runPrebuild, c as fingerprintErrorMissReason, i as recordPrebuildAsync, n as planPrebuildAsync, o as staleNativeDirRefusal, s as explainBuildMiss, t as planPrebuild } from "./prebuild-DmVCf5xb.mjs";
21
- import { a as PLATFORM, c as androidGradleProject, h as displayPath, i as NO_FINGERPRINT, l as androidJobLayout, o as androidBuildOptions, r as NO_DEVICE } from "./support-B3tzVhKn.mjs";
7
+ import { G as resolveAndroidLayout, U as remoteEasFallbackSetting, Ut as makeTemporaryDirectory, V as realpathInside, Wt as removeTemporaryEntry, et as settingOriginScope, it as tunnelModeSetting, m as defaultAndroidLayout, rt as settingsLayers, z as publicUrlSetting } from "./settings-CosW5X-S.mjs";
8
+ import { v as detectIsExpo } from "./project-BUu6Is4k.mjs";
9
+ import { E as findBuildTool, F as listAvdsAsync, I as listInstalledSystemImages, K as ownedAvdSystemImage, V as ownedAvdDirectory, X as pickDefaultSystemImage, k as hostSystemImageArch, l as androidSystemImageAbi, r as androidBuildToolName } from "./android-DTAcRwBC.mjs";
10
+ import { Hn as processContext, Xn as loadProjectProvider, qn as checkEasAuth, rr as bundleInvocation, tr as resolveRemote, tt as statsProjectKey } from "./budget-k2mZGvvk.mjs";
11
+ import { A as assetDiffReason, C as storeBuild, M as compareAssetManifests, N as readAssetManifest, O as untrackedMissLine, S as resolveBuild, T as storedAssetManifest, a as configInputsChanged, d as fingerprintDiffRecord, g as inputsChangedDuringBuild, j as captureAssetManifest, k as untrackedNativeFiles, m as gitignoredFingerprintInputs, n as buildCacheKey, p as fingerprintProject, r as changedDuringBuildLine, u as filesystemBuildCapability, x as refingerprintAfterMutation } from "./build-cache-DrXNCy3T.mjs";
12
+ import { s as expoTelemetryEnv, t as cleanLine } from "./server-expo-eQfOdydb.mjs";
13
+ import { o as resolveCcache } from "./ccache-Bx5TbxwG.mjs";
14
+ import { G as tailLines, U as startBuildHeartbeat, j as HEARTBEAT_INTERVAL_MS, r as androidToolchainAsync, t as androidRequirements } from "./toolchain-J4J8MrAr.mjs";
15
+ import { h as detectAppIds, m as detectAndroidPackage } from "./start-_BdJ32cZ.mjs";
16
+ import { c as readProductFlavors, h as androidPathRoomRefusal, n as buildAndroid, s as productFlavorRefusal } from "./react-native-build-oNwqF5Wb.mjs";
17
+ import { t as readDoctorFingerprint } from "./doctor-fingerprint-D3a04Mhu.mjs";
18
+ import { i as planEasDevelopmentBuild } from "./eas-build-Dsj93iM9.mjs";
19
+ import { a as runPrebuild, c as fingerprintErrorMissReason, d as memoizedFingerprint, i as recordPrebuildAsync, n as planPrebuildAsync, o as staleNativeDirRefusal, s as explainBuildMiss, t as planPrebuild } from "./prebuild-gmouvmJZ.mjs";
20
+ import { a as PLATFORM, c as androidGradleProject, g as dumpApkManifest, h as displayPath, i as NO_FINGERPRINT, l as androidJobLayout, o as androidBuildOptions, p as apkPackage, r as NO_DEVICE } from "./support-BGSCBoib.mjs";
22
21
  import { t as AndroidRecipeRefusal } from "./android-project-BCAAmMwz.mjs";
23
- import { u as resolveAndroidRunPlan } from "./result-DqBrb12U.mjs";
24
- import { t as checkEasFallback } from "./eas-fallback-LMxk9Kw0.mjs";
25
- import { n as androidProcessRuntime, t as androidMetroRuntime } from "./launch-SfzGH_s9.mjs";
26
- import { n as planFlagRefusal, r as planPayload, t as planCachedBuild } from "./build-plan-JsDUq4w1.mjs";
27
- import { n as detectEntryFile, r as refreshUpdatesManifestFile, t as UPDATES_MANIFEST_NAME } from "./js-swap-BvrQvXHY.mjs";
28
- import { t as planHostedDevice } from "./plan-placement-4axc0Hs7.mjs";
22
+ import { u as resolveAndroidRunPlan } from "./result-7F5hEwQJ.mjs";
23
+ import { t as checkEasFallback } from "./eas-fallback-FwkeqqGi.mjs";
24
+ import { n as androidProcessRuntime, t as androidMetroRuntime } from "./launch-DOp8RjDz.mjs";
25
+ import { n as planFlagRefusal, r as planPayload, t as planCachedBuild } from "./build-plan-DrMMdayj.mjs";
26
+ import { n as detectEntryFile, r as refreshUpdatesManifestFile, t as UPDATES_MANIFEST_NAME } from "./js-swap-BMhXYVDS.mjs";
27
+ import { t as planHostedDevice } from "./plan-placement-IiiSQhtz.mjs";
29
28
  import { constants, existsSync, mkdirSync, readFileSync, renameSync } from "node:fs";
30
29
  import { basename, dirname, isAbsolute, join, relative } from "node:path";
31
30
  import chalk from "chalk";
@@ -663,14 +662,19 @@ async function planReactNativeAndroid(root, opts, runtimeKind, { context: settin
663
662
  });
664
663
  let fingerprint;
665
664
  try {
666
- fingerprint = operation && reportSignal(operation) ? await readDoctorFingerprint(operation, {
667
- root,
668
- platform: PLATFORM,
669
- androidLayout: layout
670
- }) : await deps.fingerprint(root, {
665
+ fingerprint = (await memoizedFingerprint(root, {
671
666
  platform: PLATFORM,
672
667
  androidLayout: layout
673
- });
668
+ }, {
669
+ consult: build.cache.read,
670
+ operation: operation && reportSignal(operation) ? void 0 : operation,
671
+ record: false,
672
+ fingerprint: (projectRoot, fingerprintTarget) => operation && reportSignal(operation) ? readDoctorFingerprint(operation, {
673
+ root: projectRoot,
674
+ platform: PLATFORM,
675
+ androidLayout: layout
676
+ }) : deps.fingerprint(projectRoot, fingerprintTarget)
677
+ })).fingerprint;
674
678
  } catch (error) {
675
679
  operation?.signal.throwIfAborted();
676
680
  return refuse({
@@ -744,7 +748,7 @@ function reactNativeAndroidProject(root, { context, settings }, dependencies = {
744
748
  artifact: (artifactContext) => reactNativeAndroidArtifact(artifactContext, isExpo, layout, context, dependencies)
745
749
  };
746
750
  }
747
- function reactNativeAndroidArtifact({ operation, root, buildLog, writer, settings, buildPlan, target, phase, out, step, estimates }, isExpo, layout, context, { fingerprint = fingerprintProject, untracked = untrackedNativeFiles, resolveCached = resolveBuild, storeCached = storeBuild, storedAssets = storedAssetManifest, captureAssets = captureAssetManifest, loadProvider = loadProjectProvider, planPrebuildFor = planPrebuild, prebuild = runPrebuild, build = buildAndroid, ccacheFor = resolveCcache, swapApk = swapApkBundle, readState = readWorkspaceState }) {
751
+ function reactNativeAndroidArtifact({ operation, root, buildLog, writer, settings, buildPlan, target, phase, out, step, estimates }, isExpo, layout, context, { fingerprint = fingerprintProject, memoize = memoizedFingerprint, untracked = untrackedNativeFiles, resolveCached = resolveBuild, storeCached = storeBuild, storedAssets = storedAssetManifest, captureAssets = captureAssetManifest, loadProvider = loadProjectProvider, planPrebuildFor = planPrebuild, prebuild = runPrebuild, build = buildAndroid, ccacheFor = resolveCcache, swapApk = swapApkBundle, readState = readWorkspaceState }) {
748
752
  const { variant, release, profile, cas } = buildPlan;
749
753
  const runOptions = {
750
754
  ...variant ? { variant } : {},
@@ -758,6 +762,7 @@ function reactNativeAndroidArtifact({ operation, root, buildLog, writer, setting
758
762
  let initialSources = [];
759
763
  let prebuildRan = false;
760
764
  let editedConfig = [];
765
+ let fingerprintCheck = null;
761
766
  const identity = () => ({
762
767
  hash,
763
768
  key: buildCacheKey("android", hash, runOptions)
@@ -800,13 +805,22 @@ function reactNativeAndroidArtifact({ operation, root, buildLog, writer, setting
800
805
  return null;
801
806
  };
802
807
  return {
808
+ fingerprintCheck: () => fingerprintCheck,
803
809
  async identity() {
804
810
  let computed;
805
811
  try {
806
- computed = await fingerprint(root, {
812
+ const memo = await memoize(root, {
807
813
  platform: "android",
808
814
  androidLayout: layout
815
+ }, {
816
+ consult: buildPlan.cache.read,
817
+ record: true,
818
+ operation,
819
+ fingerprint
809
820
  });
821
+ computed = memo.fingerprint;
822
+ fingerprintCheck = memo.check;
823
+ if (memo.memoHit) phase("fingerprint", chalk.dim("matches a recorded fingerprint of this tree; confirming it in the background"));
810
824
  } catch (error) {
811
825
  const message = String(error?.message || error);
812
826
  throw new AndroidRecipeRefusal({
@@ -831,6 +845,7 @@ function reactNativeAndroidArtifact({ operation, root, buildLog, writer, setting
831
845
  resolve: resolveCached,
832
846
  store: storeCached,
833
847
  sources,
848
+ readAppId: async (path) => apkPackage(await dumpApkManifest(path, { context: operation })),
834
849
  ...compiled ? { assetManifest: release ? captureAssets(root, {
835
850
  variant,
836
851
  layout
@@ -975,7 +990,7 @@ function reactNativeAndroidArtifact({ operation, root, buildLog, writer, setting
975
990
  target: async () => ({
976
991
  platform: "android",
977
992
  local: await androidToolchainAsync(operation?.env),
978
- requires: androidRequirements(root)
993
+ requires: androidRequirements(root, layout.gradleRoot)
979
994
  }),
980
995
  request: {
981
996
  platform: "android",
@@ -1,14 +1,14 @@
1
1
  import { _ as spawnDeclared, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { o as sharedCompilationCache } from "./paths-DQtTgsBf.mjs";
2
+ import { x as sharedCompilationCache } from "./workspace-state-pUg3_RRA.mjs";
3
3
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { l as phaseLine } from "./command-output-DxC0k2rk.mjs";
4
+ import { l as phaseLine } from "./command-output-BF5AR2dL.mjs";
5
5
  import { a as killOnAbort } from "./operation-exec-CUZifp6Z.mjs";
6
- import { C as resolvePackageJson } from "./project-Dz-hWkb-.mjs";
7
- import { o as androidHome } from "./android-882m4hxX.mjs";
8
- import { r as register } from "./cache-manifest-BPXRONJz.mjs";
9
- import { p as resolveOptimizations } from "./errors-ccaPc4ox.mjs";
10
- import { a as readCcacheActivity, n as CCACHE_UNAVAILABLE } from "./ccache-CCn1S6qG.mjs";
11
- import { a as buildXcode, d as pickXcodeProject, g as swiftPrefixMappingSupported, h as startBuildHeartbeat, i as SWIFT_PREFIX_MAPPING_MIN_SWIFT, l as parseSwiftVersion, r as HEARTBEAT_INTERVAL_MS, s as compilationCacheSettings, u as parseXcodeMajor } from "./xcode-DHu41qQ4.mjs";
6
+ import { C as resolvePackageJson } from "./project-BUu6Is4k.mjs";
7
+ import { o as androidHome } from "./android-DTAcRwBC.mjs";
8
+ import { r as register } from "./cache-manifest-BEZ9Bpl1.mjs";
9
+ import { p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
10
+ import { a as readCcacheActivity, n as CCACHE_UNAVAILABLE } from "./ccache-Bx5TbxwG.mjs";
11
+ import { F as compilationCacheSettings, L as parseSwiftVersion, M as SWIFT_PREFIX_MAPPING_MIN_SWIFT, N as buildXcode, R as parseXcodeMajor, U as startBuildHeartbeat, W as swiftPrefixMappingSupported, j as HEARTBEAT_INTERVAL_MS, z as pickXcodeProject } from "./toolchain-J4J8MrAr.mjs";
12
12
  import { createHash } from "node:crypto";
13
13
  import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync } from "node:fs";
14
14
  import { dirname, isAbsolute, join, relative, sep } from "node:path";
@@ -1,13 +1,41 @@
1
1
  import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { l as phaseLine } from "./command-output-DxC0k2rk.mjs";
3
- import { K as resolveIosProjectDir, W as resolveAndroidLayout } from "./settings-RKwY33wv.mjs";
4
- import { v as detectIsExpo } from "./project-Dz-hWkb-.mjs";
5
- import { b as bundlerPin } from "./xcode-DHu41qQ4.mjs";
6
- import { a as iosToolchainAsync, n as androidToolchain, r as androidToolchainAsync, t as androidRequirements } from "./toolchain-D3bmRMia.mjs";
7
- import { a as reactNativeDoctorFindings, i as mainCheckoutProjectRoot, n as detectFingerprintParity, r as detectLinkedLibraryGitMetadata, s as repairCxxLauncherState, t as checkMainCheckout } from "./doctor-C33AzVfR.mjs";
8
- import { existsSync, readdirSync } from "node:fs";
2
+ import { l as phaseLine } from "./command-output-BF5AR2dL.mjs";
3
+ import { G as resolveAndroidLayout, q as resolveIosProjectDir } from "./settings-CosW5X-S.mjs";
4
+ import { v as detectIsExpo } from "./project-BUu6Is4k.mjs";
5
+ import { J as bundlerPin, n as androidToolchain, r as androidToolchainAsync, s as iosToolchainAsync, t as androidRequirements } from "./toolchain-J4J8MrAr.mjs";
6
+ import { a as reactNativeDoctorFindings, i as mainCheckoutProjectRoot, n as detectFingerprintParity, r as detectLinkedLibraryGitMetadata, s as repairCxxLauncherState, t as checkMainCheckout } from "./doctor-OnwP94ne.mjs";
7
+ import { existsSync, readdirSync, statSync } from "node:fs";
9
8
  import { join, relative } from "node:path";
10
9
  //#region src/diagnostics/doctor-ios-architectures.ts
10
+ const INSPECTION_TTL_MS = 6e5;
11
+ const inspections = /* @__PURE__ */ new Map();
12
+ function inspectionInputs(iosRoot) {
13
+ let names;
14
+ try {
15
+ names = readdirSync(iosRoot).toSorted();
16
+ } catch {
17
+ names = [];
18
+ }
19
+ return JSON.stringify([
20
+ ...names.filter((name) => name.endsWith(".xcodeproj")).map((name) => join(iosRoot, name, "project.pbxproj")),
21
+ ...names.filter((name) => name.endsWith(".xcconfig")).map((name) => join(iosRoot, name)),
22
+ join(iosRoot, "Podfile"),
23
+ join(iosRoot, "Podfile.lock"),
24
+ join(iosRoot, "Pods", "Manifest.lock"),
25
+ join(iosRoot, "Pods", "Pods.xcodeproj", "project.pbxproj")
26
+ ].map((path) => {
27
+ try {
28
+ const stat = statSync(path);
29
+ return [
30
+ path,
31
+ stat.mtimeMs,
32
+ stat.size
33
+ ];
34
+ } catch {
35
+ return [path, null];
36
+ }
37
+ }));
38
+ }
11
39
  const COMPILED_PRODUCTS = /* @__PURE__ */ new Set([
12
40
  "com.apple.product-type.application",
13
41
  "com.apple.product-type.application.on-demand-install-capable",
@@ -80,6 +108,19 @@ function parseIosDebugArchitectures(output) {
80
108
  }
81
109
  async function inspectIosDebugArchitectures(projectRoot, iosProjectPath = "ios") {
82
110
  const iosRoot = join(projectRoot, iosProjectPath);
111
+ const key = `${projectRoot}\0${iosRoot}`;
112
+ const inputs = inspectionInputs(iosRoot);
113
+ const cached = inspections.get(key);
114
+ if (cached && cached.inputs === inputs && Date.now() - cached.at < INSPECTION_TTL_MS) return [...await cached.findings];
115
+ const findings = inspect(projectRoot, iosRoot);
116
+ inspections.set(key, {
117
+ inputs,
118
+ at: Date.now(),
119
+ findings
120
+ });
121
+ return [...await findings];
122
+ }
123
+ async function inspect(projectRoot, iosRoot) {
83
124
  if (!existsSync(iosRoot)) return [];
84
125
  const findings = [];
85
126
  const unknown = [];
@@ -192,7 +233,7 @@ function reactNativeProjectDoctor(root) {
192
233
  if (checksAndroid) targets.push({
193
234
  platform: "android",
194
235
  local: operation ? await androidToolchainAsync(operation.env) : androidToolchain(),
195
- requires: androidRequirements(root)
236
+ requires: androidRequirements(root, androidDir)
196
237
  });
197
238
  return targets;
198
239
  };
@@ -1,21 +1,20 @@
1
1
  import { C as reportSignal } from "./exec-VFRpu1iA.mjs";
2
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-DxC0k2rk.mjs";
3
- import { H as remoteEasFallbackSetting, K as resolveIosProjectDir, R as publicUrlSetting, U as remoteIosSetting, a as SETTING_SHAPE_REMEDY, et as settingShapeErrors, p as cacheProviderSettingError, rt as tunnelModeSetting } from "./settings-RKwY33wv.mjs";
4
- import { Ln as processContext, Z as statsProjectKey } from "./budget-dPGuhNai.mjs";
5
- import { d as runCancellationSignal } from "./native-run-BmH7U8pr.mjs";
6
- import { C as trackedFingerprintPaths, a as configInputsChanged, f as gitignoredFingerprintInputs, l as filesystemBuildCapability, m as inputsChangedDuringBuild, n as buildCacheKey, p as ignoredFingerprintPaths, r as changedDuringBuildLine, u as fingerprintDiffRecord, v as refingerprintAfterMutation, w as untrackedMissLine } from "./build-cache-HFUQ9eLz.mjs";
7
- import { d as optimizationBuildProfile, l as artifactCachePolicy, p as resolveOptimizations } from "./errors-ccaPc4ox.mjs";
8
- import { b as bundlerPin } from "./xcode-DHu41qQ4.mjs";
9
- import { a as iosToolchainAsync } from "./toolchain-D3bmRMia.mjs";
10
- import { a as deviceModelRefusal, c as iosProjectPathError, f as podAction, h as resolveDeviceType, l as iosProviderRunOptions, m as resolveConfiguration, u as isReleaseConfiguration, v as resolveRuntime, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-B1W-hmC2.mjs";
11
- import { t as readDoctorFingerprint } from "./doctor-fingerprint-zlujA1Gs.mjs";
12
- import { i as planEasDevelopmentBuild, n as easDeviceBuildRemedy } from "./eas-build-CxKUNHsb.mjs";
13
- import { c as fingerprintErrorMissReason, i as recordPrebuildAsync, o as staleNativeDirRefusal, s as explainBuildMiss } from "./prebuild-DmVCf5xb.mjs";
14
- import { r as planPayload, t as planCachedBuild } from "./build-plan-JsDUq4w1.mjs";
15
- import { t as IosRecipeRefusal } from "./ios-project-KYqeJURj.mjs";
16
- import { a as hostedIosSelectors } from "./remote-DEZ7AOVq.mjs";
17
- import { c as copyAppAside, i as DEFAULT_DEPS, n as iosMetroRuntime, r as iosProcessRuntime, u as writeIpTxt } from "./launch-BVlyQw3T.mjs";
18
- import { t as planHostedDevice } from "./plan-placement-4axc0Hs7.mjs";
2
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-BF5AR2dL.mjs";
3
+ import { U as remoteEasFallbackSetting, W as remoteIosSetting, a as SETTING_SHAPE_REMEDY, it as tunnelModeSetting, p as cacheProviderSettingError, q as resolveIosProjectDir, tt as settingShapeErrors, z as publicUrlSetting } from "./settings-CosW5X-S.mjs";
4
+ import { Hn as processContext, tt as statsProjectKey } from "./budget-k2mZGvvk.mjs";
5
+ import { d as runCancellationSignal } from "./native-run-BfIDFKLH.mjs";
6
+ import { D as trackedFingerprintPaths, O as untrackedMissLine, a as configInputsChanged, d as fingerprintDiffRecord, g as inputsChangedDuringBuild, h as ignoredFingerprintPaths, m as gitignoredFingerprintInputs, n as buildCacheKey, r as changedDuringBuildLine, u as filesystemBuildCapability, x as refingerprintAfterMutation } from "./build-cache-DrXNCy3T.mjs";
7
+ import { d as optimizationBuildProfile, l as artifactCachePolicy, p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
8
+ import { J as bundlerPin, s as iosToolchainAsync } from "./toolchain-J4J8MrAr.mjs";
9
+ import { a as deviceModelRefusal, c as iosProjectPathError, f as podAction, h as resolveDeviceType, l as iosProviderRunOptions, m as resolveConfiguration, u as isReleaseConfiguration, v as resolveRuntime, x as simulatorBuildArch, y as resolveSchemeSelection } from "./support-CVOCp0Ft.mjs";
10
+ import { t as readDoctorFingerprint } from "./doctor-fingerprint-D3a04Mhu.mjs";
11
+ import { i as planEasDevelopmentBuild, n as easDeviceBuildRemedy } from "./eas-build-Dsj93iM9.mjs";
12
+ import { c as fingerprintErrorMissReason, d as memoizedFingerprint, i as recordPrebuildAsync, o as staleNativeDirRefusal, s as explainBuildMiss } from "./prebuild-gmouvmJZ.mjs";
13
+ import { r as planPayload, t as planCachedBuild } from "./build-plan-DrMMdayj.mjs";
14
+ import { t as IosRecipeRefusal } from "./ios-project-Ty5pHl9O.mjs";
15
+ import { a as hostedIosSelectors } from "./remote-C8S7FlPF.mjs";
16
+ import { a as writeIpTxt, c as iosProcessRuntime, r as copyAppAside, s as iosMetroRuntime, t as DEFAULT_DEPS } from "./dependencies-Dw6wfQdv.mjs";
17
+ import { t as planHostedDevice } from "./plan-placement-IiiSQhtz.mjs";
19
18
  import { rmSync } from "node:fs";
20
19
  import chalk from "chalk";
21
20
  //#region src/integrations/react-native-ios-plan.ts
@@ -122,14 +121,19 @@ async function planReactNativeIos(root, opts, d, schemeProblem, { context: setti
122
121
  const cachePolicy = artifactCachePolicy(optimizations, opts.buildCache !== false, isReleaseConfiguration(configuration));
123
122
  let fingerprint;
124
123
  try {
125
- fingerprint = operation && reportSignal(operation) ? await readDoctorFingerprint(operation, {
126
- root,
127
- platform: "ios",
128
- iosProjectPath: iosProject.relative
129
- }) : await d.fingerprintProject(root, {
124
+ fingerprint = (await memoizedFingerprint(root, {
130
125
  platform: "ios",
131
126
  iosProjectPath: iosProject.relative
132
- });
127
+ }, {
128
+ consult: cachePolicy.read,
129
+ operation: operation && reportSignal(operation) ? void 0 : operation,
130
+ record: false,
131
+ fingerprint: (projectRoot, fingerprintTarget) => operation && reportSignal(operation) ? readDoctorFingerprint(operation, {
132
+ root: projectRoot,
133
+ platform: "ios",
134
+ iosProjectPath: iosProject.relative
135
+ }) : d.fingerprintProject(projectRoot, fingerprintTarget)
136
+ })).fingerprint;
133
137
  } catch (error) {
134
138
  operation?.signal.throwIfAborted();
135
139
  note(chalk.dim(`Fingerprinting failed: ${error?.message || error}`));
@@ -274,6 +278,7 @@ function reactNativeIosArtifact({ operation, root, logFile, configuration, build
274
278
  let storeHash = null;
275
279
  let storeSources = [];
276
280
  let mutatingSteps = [];
281
+ let fingerprintCheck = null;
277
282
  const identity = () => storeHash ? {
278
283
  hash: storeHash,
279
284
  key: buildCacheKey(PLATFORM, storeHash, keyOptions)
@@ -370,10 +375,18 @@ function reactNativeIosArtifact({ operation, root, logFile, configuration, build
370
375
  let computedFingerprint;
371
376
  let fingerprintError = "no hash";
372
377
  try {
373
- const computed = await d.fingerprintProject(root, {
378
+ const memo = await d.memoizedFingerprint(root, {
374
379
  platform: PLATFORM,
375
380
  iosProjectPath: iosProject.relative
381
+ }, {
382
+ consult: cachePolicy.read,
383
+ record: true,
384
+ operation,
385
+ fingerprint: d.fingerprintProject
376
386
  });
387
+ const computed = memo.fingerprint;
388
+ fingerprintCheck = memo.check;
389
+ if (memo.memoHit) phase("fingerprint", chalk.dim("matches a recorded fingerprint of this tree; confirming it in the background"));
377
390
  computedFingerprint = computed?.hash ?? null;
378
391
  fingerprintSources = computed?.sources ?? [];
379
392
  } catch (error) {
@@ -394,11 +407,13 @@ function reactNativeIosArtifact({ operation, root, logFile, configuration, build
394
407
  storeSources = fingerprintSources;
395
408
  return identity();
396
409
  },
410
+ fingerprintCheck: () => fingerprintCheck,
397
411
  cache: () => filesystemBuildCapability({
398
412
  context: operation,
399
413
  resolve: d.resolveBuild,
400
414
  store: d.storeBuild,
401
- sources: storeSources
415
+ sources: storeSources,
416
+ readAppId: (path) => d.readBundleId(path)
402
417
  }),
403
418
  async validateExternal(path) {
404
419
  if (device) {
@@ -1,4 +1,4 @@
1
- import { yt as gitCommonDirOnDisk } from "./settings-RKwY33wv.mjs";
1
+ import { bt as gitCommonDirOnDisk } from "./settings-CosW5X-S.mjs";
2
2
  import { existsSync } from "node:fs";
3
3
  import { loadConfig, recordingEnabled, workspaceRecordingsDir } from "@stim-cli/core/state";
4
4
  import { rm } from "node:fs/promises";
@@ -1,2 +1,2 @@
1
- import { n as reloadCommand, r as runReload, t as registerReload } from "./reload-C1TTVesC.mjs";
1
+ import { n as reloadCommand, r as runReload, t as registerReload } from "./reload-CCR7KC_l.mjs";
2
2
  export { reloadCommand as default, registerReload, runReload };
@@ -1,18 +1,18 @@
1
1
  import { c as throwIfCancelled, i as loadScaledBudgetMs, o as cancellableSleep, s as cancelledError } from "./exec-VFRpu1iA.mjs";
2
- import { H as deviceSlotPlatforms, U as parseDeviceSlotKey, p as getProject } from "./config-BZhXY15H.mjs";
3
- import { f as refuseNoProject, l as phaseLine } from "./command-output-DxC0k2rk.mjs";
4
- import { a as recordWorkspaceUseAsync, r as readWorkspaceState$1 } from "./workspace-state-CeBpIZgr.mjs";
5
- import { Nt as repoRootAsync } from "./settings-RKwY33wv.mjs";
6
- import { I as readWorkspaceLaunches, P as readRemoteSession, r as findCommandWorkspaceAsync } from "./project-Dz-hWkb-.mjs";
7
- import { nt as resolveOwnedAvdSerialAsync } from "./android-882m4hxX.mjs";
8
- import { a as listeningPidsAsync, d as resolveProjectMetro, h as isMetroRunning, u as processCwds } from "./metro-Bu8LBfzS.mjs";
9
- import { d as webFactsAsync, o as readWebRecord, r as cdpEndpoint } from "./state-B1ig0Kqy.mjs";
10
- import { pn as androidAppProcess, wn as iosAppProcess, yn as ensureMetroReverse } from "./budget-dPGuhNai.mjs";
11
- import { E as resolveOwnedIosSim, f as listAllIosSimsAsync } from "./ios-CVUFFZ6C.mjs";
12
- import { f as probeHostedSession } from "./hosted-client-BBTVe3X6.mjs";
13
- import { r as readHostedNative } from "./ios-state-DlElquYD.mjs";
14
- import { r as reopenHostedAndroidMetro } from "./hosted-android-D4dweBof.mjs";
15
- import { n as nativeRunCommand } from "./slot-launch-A1BgotaM.mjs";
2
+ import { a as recordWorkspaceUseAsync, r as readWorkspaceState$1 } from "./workspace-state-pUg3_RRA.mjs";
3
+ import { H as deviceSlotPlatforms, U as parseDeviceSlotKey, p as getProject } from "./config-BktkY_zC.mjs";
4
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-BF5AR2dL.mjs";
5
+ import { Pt as repoRootAsync } from "./settings-CosW5X-S.mjs";
6
+ import { I as readWorkspaceLaunches, P as readRemoteSession, r as findCommandWorkspaceAsync } from "./project-BUu6Is4k.mjs";
7
+ import { nt as resolveOwnedAvdSerialAsync } from "./android-DTAcRwBC.mjs";
8
+ import { a as listeningPidsAsync, d as resolveProjectMetro, h as isMetroRunning, u as processCwds } from "./metro-CjC10t6E.mjs";
9
+ import { d as webFactsAsync, o as readWebRecord, r as cdpEndpoint } from "./state-C1i2nMOP.mjs";
10
+ import { kn as iosAppProcess, vn as androidAppProcess, wn as ensureMetroReverse } from "./budget-k2mZGvvk.mjs";
11
+ import { D as resolveOwnedIosSim, f as listAllIosSimsAsync } from "./ios-WxpDJ5T1.mjs";
12
+ import { f as probeHostedSession } from "./hosted-client-fHO8yqzc.mjs";
13
+ import { r as readHostedNative } from "./ios-state-Cw7-WQf2.mjs";
14
+ import { r as reopenHostedAndroidMetro } from "./hosted-android-Bk54ej6n.mjs";
15
+ import { n as nativeRunCommand } from "./slot-launch-CYCEhfBY.mjs";
16
16
  import { n as sendToOwnedPage, t as liveWebRecord } from "./page-CzEA_-5_.mjs";
17
17
  import { hostedAndroidDeviceName, hostedNativeRecords } from "@stim-cli/core/state";
18
18
  import { WebSocket } from "ws";
@@ -1,10 +1,11 @@
1
- import { H as deviceSlotPlatforms } from "./config-BZhXY15H.mjs";
2
- import { l as phaseLine } from "./command-output-DxC0k2rk.mjs";
3
- import { F as parseIosRemote, H as remoteEasFallbackSetting, R as publicUrlSetting, U as remoteIosSetting, rt as tunnelModeSetting } from "./settings-RKwY33wv.mjs";
4
- import "./budget-dPGuhNai.mjs";
5
- import { b as resolveSimulatorAppFlag } from "./support-B1W-hmC2.mjs";
6
- import { n as devicePlacementRecord } from "./placement-log-DUvqqsB-.mjs";
7
- import { r as devicePlacementLine } from "./eas-fallback-LMxk9Kw0.mjs";
1
+ import { l as WorkspaceProcessCleanupError } from "./exec-VFRpu1iA.mjs";
2
+ import { H as deviceSlotPlatforms } from "./config-BktkY_zC.mjs";
3
+ import { l as phaseLine } from "./command-output-BF5AR2dL.mjs";
4
+ import { I as parseIosRemote, U as remoteEasFallbackSetting, W as remoteIosSetting, it as tunnelModeSetting, z as publicUrlSetting } from "./settings-CosW5X-S.mjs";
5
+ import "./budget-k2mZGvvk.mjs";
6
+ import { b as resolveSimulatorAppFlag } from "./support-CVOCp0Ft.mjs";
7
+ import { n as devicePlacementRecord } from "./placement-log-DIFPQAXp.mjs";
8
+ import { r as devicePlacementLine } from "./eas-fallback-FwkeqqGi.mjs";
8
9
  import chalk from "chalk";
9
10
  //#region src/commands/ios/remote.ts
10
11
  function deviceRemoteConflict(remote, physical) {
@@ -73,11 +74,19 @@ async function selectIosPlacement(args) {
73
74
  const refusal = await args.validateSelectors();
74
75
  if (refusal) return { failure: refusal };
75
76
  const easFallback = args.supportsRemote && remoteEasFallbackSetting(args.settings);
77
+ const localSims = await args.simSnapshot.readAsync?.({
78
+ signal: args.operation?.signal,
79
+ operation: args.operation
80
+ }).then((sims) => sims.filter((sim) => sim.available)).catch((error) => {
81
+ if (error instanceof WorkspaceProcessCleanupError || error instanceof Error && "reportCleanup" in error) throw error;
82
+ args.operation?.signal.throwIfAborted();
83
+ });
76
84
  try {
77
85
  const placed = await d.automaticDevicePlacement({
78
86
  root,
79
87
  slot,
80
88
  platform: "ios",
89
+ ...localSims ? { localSims } : {},
81
90
  selectors: hostedIosSelectors(deviceType, runtime),
82
91
  appMode,
83
92
  buildMachine: opts.remoteBuild,
@@ -1,20 +1,20 @@
1
- import { l as workspaceAgentDeviceDir } from "./paths-DQtTgsBf.mjs";
2
- import { H as deviceSlotPlatforms, p as getProject } from "./config-BZhXY15H.mjs";
3
- import { i as formatDuration, l as phaseLine } from "./command-output-DxC0k2rk.mjs";
4
- import { $ as settingOriginScope, F as parseIosRemote, G as resolveCacheProviderConfig, V as remoteAndroidSetting, W as resolveAndroidLayout, Z as settingFile, a as SETTING_SHAPE_REMEDY, d as androidLayoutSetting, et as settingShapeErrors, f as androidLayoutSettingError, it as unknownSettingKeys, nt as settingsLayers, p as cacheProviderSettingError, s as androidAvdConfigSettingError, u as androidDataPartitionSizeGbSettingError } from "./settings-RKwY33wv.mjs";
5
- import { v as detectIsExpo } from "./project-Dz-hWkb-.mjs";
6
- import { a as workspaceLinkLine } from "./stim-desktop-DS0mzR8U.mjs";
7
- import { B as ownedAvdDeviceProfile, I as listInstalledSystemImages, K as ownedAvdSystemImage, N as listAvdDeviceProfilesAsync, Q as profileNeedsFoldFeature, X as pickDefaultSystemImage, at as systemImageSupportsFold, k as hostSystemImageArch, l as androidSystemImageAbi, t as DEFAULT_AVD_DEVICE_PROFILE, vt as parkedMaxSetting } from "./android-882m4hxX.mjs";
8
- import { B as recordFinishedBuild, Bn as UPLOAD_TIMEOUT_MS, Un as easAuthNote, Vn as cacheLevel, Wn as isEasAuthFailureText } from "./budget-dPGuhNai.mjs";
9
- import { d as optimizationBuildProfile, l as artifactCachePolicy, p as resolveOptimizations, u as compilerCacheFallbackMessage } from "./errors-ccaPc4ox.mjs";
10
- import { n as CCACHE_UNAVAILABLE, r as ccacheActivityLine } from "./ccache-CCn1S6qG.mjs";
11
- import { n as buildPlacementCandidates } from "./client-18-ZowoT.mjs";
12
- import { c as readProductFlavors, s as productFlavorRefusal } from "./react-native-build-AuCu-aAP.mjs";
13
- import { l as parseDeviceWait } from "./device-lease-run-DUtkbqBQ.mjs";
14
- import { t as DEFAULT_DEVICE_SLOT_WAIT_MS } from "./device-capacity-Ic-kdmEV.mjs";
15
- import { n as resolveAndroidCas, r as resolveAndroidCompilerCache } from "./android-cas-BtCOrNqb.mjs";
16
- import { r as isPhysicalDeviceRequest } from "./native-runtime-DgtJkzIa.mjs";
17
- import { C as remoteAvdFlagRefusal, D as systemImageRefusal, E as resolveVariant, T as resolveSystemImage, a as PLATFORM, m as deviceProfileRefusal, v as foldableImageRefusal, w as resolveDeviceProfile, y as isReleaseVariant } from "./support-B3tzVhKn.mjs";
1
+ import { w as workspaceAgentDeviceDir } from "./workspace-state-pUg3_RRA.mjs";
2
+ import { H as deviceSlotPlatforms, p as getProject } from "./config-BktkY_zC.mjs";
3
+ import { i as formatDuration, l as phaseLine } from "./command-output-BF5AR2dL.mjs";
4
+ import { G as resolveAndroidLayout, H as remoteAndroidSetting, I as parseIosRemote, K as resolveCacheProviderConfig, Q as settingFile, a as SETTING_SHAPE_REMEDY, at as unknownSettingKeys, d as androidLayoutSetting, et as settingOriginScope, f as androidLayoutSettingError, p as cacheProviderSettingError, rt as settingsLayers, s as androidAvdConfigSettingError, tt as settingShapeErrors, u as androidDataPartitionSizeGbSettingError } from "./settings-CosW5X-S.mjs";
5
+ import { v as detectIsExpo } from "./project-BUu6Is4k.mjs";
6
+ import { a as workspaceLinkLine } from "./stim-desktop-6Dqp-gjX.mjs";
7
+ import { B as ownedAvdDeviceProfile, I as listInstalledSystemImages, K as ownedAvdSystemImage, N as listAvdDeviceProfilesAsync, Q as profileNeedsFoldFeature, X as pickDefaultSystemImage, at as systemImageSupportsFold, k as hostSystemImageArch, l as androidSystemImageAbi, t as DEFAULT_AVD_DEVICE_PROFILE, vt as parkedMaxSetting } from "./android-DTAcRwBC.mjs";
8
+ import { Gn as UPLOAD_TIMEOUT_MS, Jn as easAuthNote, Kn as cacheLevel, W as recordFinishedBuild, Yn as isEasAuthFailureText } from "./budget-k2mZGvvk.mjs";
9
+ import { d as optimizationBuildProfile, l as artifactCachePolicy, p as resolveOptimizations, u as compilerCacheFallbackMessage } from "./errors-DHm_U5gv.mjs";
10
+ import { n as CCACHE_UNAVAILABLE, r as ccacheActivityLine } from "./ccache-Bx5TbxwG.mjs";
11
+ import { n as buildPlacementCandidates } from "./client-D9CaRks-.mjs";
12
+ import { c as readProductFlavors, s as productFlavorRefusal } from "./react-native-build-oNwqF5Wb.mjs";
13
+ import { l as parseDeviceWait } from "./device-lease-run-BmvIl7bI.mjs";
14
+ import { t as DEFAULT_DEVICE_SLOT_WAIT_MS } from "./device-capacity-DCSvUF0l.mjs";
15
+ import { n as resolveAndroidCas, r as resolveAndroidCompilerCache } from "./android-cas-BTVhZ0Qs.mjs";
16
+ import { r as isPhysicalDeviceRequest } from "./native-runtime-Dq3RBcON.mjs";
17
+ import { C as remoteAvdFlagRefusal, D as systemImageRefusal, E as resolveVariant, T as resolveSystemImage, a as PLATFORM, m as deviceProfileRefusal, v as foldableImageRefusal, w as resolveDeviceProfile, y as isReleaseVariant } from "./support-BGSCBoib.mjs";
18
18
  import { buildDiagnostics } from "@stim-cli/core/state";
19
19
  import chalk from "chalk";
20
20
  //#region src/commands/android/plan.ts
@@ -1,5 +1,5 @@
1
1
  import { D as ownership_claim_exports, S as process_identity_exports, t as getExecutor } from "./exec-VFRpu1iA.mjs";
2
- import { a as macosRuntimeClaim, i as macosProcess, r as macosLogFile, s as updateMacosRecord } from "./state-BfAltYJP.mjs";
2
+ import { a as macosRuntimeClaim, i as macosProcess, r as macosLogFile, s as updateMacosRecord } from "./state-C4OdpOTF.mjs";
3
3
  import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
4
4
  import { LOG_ROTATE_BYTES } from "@stim-cli/core";
5
5
  import { readMacosRecord } from "@stim-cli/core/state";