stim 1.20.2 → 1.22.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 (231) hide show
  1. package/README.md +141 -8
  2. package/dist/acquire-artifact-Co2k4f7O.mjs +171 -0
  3. package/dist/act-DsuqEkiM.mjs +2801 -0
  4. package/dist/activity-CMLmzp7o.mjs +1397 -0
  5. package/dist/{agent-device-usage-output-Dzgv6lgR.mjs → agent-device-usage-output-DUFaTMdd.mjs} +23 -67
  6. package/dist/{android-DCKZrNvV.mjs → android-ByRMUoiJ.mjs} +157 -93
  7. package/dist/{android-Mz_Inn3w.mjs → android-C7sVmyI9.mjs} +299 -116
  8. package/dist/{android-Dlzxshgp.mjs → android-DGkNqa_c.mjs} +5 -5
  9. package/dist/{android-HqP1_vB_.mjs → android-DR5lZ2Az.mjs} +2 -2
  10. package/dist/android-cas-compiler.mjs +2 -2
  11. package/dist/{android-cas-Bl-cLJBk.mjs → android-cas-ngferVq2.mjs} +7 -6
  12. package/dist/android-project-BCAAmMwz.mjs +12 -0
  13. package/dist/android-project-DVWyCbWU.d.mts +391 -0
  14. package/dist/api.d.mts +810 -64
  15. package/dist/api.mjs +782 -1
  16. package/dist/{artifact-HSwkIWEQ.mjs → artifact-8EY8SAPw.mjs} +240 -213
  17. package/dist/{artifact-D3czlUvT.mjs → artifact-DJPy518Y.mjs} +203 -164
  18. package/dist/artifact-platform-CXcmX_j3.mjs +27 -0
  19. package/dist/{browser-web-CA-F1GQo.mjs → browser-web-Bcv99PBM.mjs} +194 -64
  20. package/dist/budget-Cvwn54qV.mjs +9285 -0
  21. package/dist/{build-DYDbfkk5.mjs → build-CabC3G23.mjs} +153 -98
  22. package/dist/build-cache-Dv7RN200.mjs +602 -0
  23. package/dist/build-plan-DUC8Ka9y.mjs +248 -0
  24. package/dist/{cache-manifest-XH-fvDUj.mjs → cache-manifest-DSeQjt-Q.mjs} +2 -2
  25. package/dist/cache-manifest.mjs +1 -1
  26. package/dist/{ccache-zdKiYQ3E.mjs → ccache-Btwc36-I.mjs} +10 -9
  27. package/dist/{cdp-Dq_ypAlJ.mjs → cdp-3fwICjzi.mjs} +18 -5
  28. package/dist/{chrome-BnzZMqsR.mjs → chrome-Bbw689-6.mjs} +7 -4
  29. package/dist/{cli-CLP3diBm.mjs → cli-CHZa9Lvk.mjs} +20 -20
  30. package/dist/cli.mjs +1 -1
  31. package/dist/client-OyRoEuSr.mjs +1577 -0
  32. package/dist/collector-run.d.mts +4 -40
  33. package/dist/collector-run.mjs +9 -8
  34. package/dist/{command-output-BTy8hZ0F.mjs → command-output-gwpm28fu.mjs} +1 -1
  35. package/dist/config-DlrsduwG.mjs +955 -0
  36. package/dist/{created-devices-Dzd5C2LF.mjs → created-devices-x9rN6bhs.mjs} +14 -4
  37. package/dist/{dependency-state-DG0p31-y.mjs → dependency-state-1I9KZT1Y.mjs} +20 -5
  38. package/dist/{detached-entry-B9C_zeQC.mjs → detached-entry-BwNEtIrP.mjs} +1 -1
  39. package/dist/{dev-client-DAWVIGBu.mjs → dev-client-BSDR5h3F.mjs} +2 -2
  40. package/dist/{device-BECOiufl.mjs → device-B-L3Fbxy.mjs} +91 -34
  41. package/dist/device-DklWZLqb.mjs +1068 -0
  42. package/dist/{device-capacity-CBUAcRyQ.mjs → device-capacity-DK5_EwRS.mjs} +42 -13
  43. package/dist/device-host-worker.mjs +76 -79
  44. package/dist/{device-ios-COSi6oS1.mjs → device-ios-DoB6KFCO.mjs} +77 -51
  45. package/dist/{device-lease-run-Cw2M4z51.mjs → device-lease-run-xJPQ_QQG.mjs} +14 -26
  46. package/dist/{device-pool-Bf-pOhSw.mjs → device-pool-BMkdsefq.mjs} +5 -5
  47. package/dist/{doctor-kfMBnUw6.mjs → doctor-Bo7BXLux.mjs} +271 -320
  48. package/dist/{doctor-CB8oZKCk.mjs → doctor-D5_EzwfA.mjs} +186 -91
  49. package/dist/doctor-fingerprint-DZLoYFVb.mjs +16 -0
  50. package/dist/doctor-fingerprint.mjs +19 -0
  51. package/dist/doctor-thjWAV0z.mjs +2 -0
  52. package/dist/{doctor-watchman-BRyV2adA.mjs → doctor-watchman-N2wDotwQ.mjs} +40 -21
  53. package/dist/{eas-build-JyfqyHfC.mjs → eas-build-CwknaQYj.mjs} +53 -20
  54. package/dist/{build-plan-B7SZsc2N.mjs → eas-fallback-CSgAulr5.mjs} +41 -214
  55. package/dist/{watchman-CPQFZLXY.mjs → eas-session-ledger-DlY_serQ.mjs} +230 -11
  56. package/dist/{error-diagnostics-BR677IDM.mjs → error-diagnostics-DBWO2rxE.mjs} +172 -82
  57. package/dist/exec-DEoAhcze.mjs +858 -0
  58. package/dist/exec-DnYc4HGH.d.mts +78 -0
  59. package/dist/{gc-qWOMdnER.mjs → gc-CXxN-4SE.mjs} +1091 -1029
  60. package/dist/gc-DnNDQyaP.mjs +3 -0
  61. package/dist/{guide-G9cAbVAc.mjs → guide-Br0LEfKy.mjs} +1165 -297
  62. package/dist/{hosted-android-C3MHGld1.mjs → hosted-android-B-9f-jkd.mjs} +10 -8
  63. package/dist/{hosted-client-ZEKpS9vw.mjs → hosted-client-DZAPrcro.mjs} +34 -19
  64. package/dist/{hosted-ios-l-o3iM9J.mjs → hosted-ios-CsCS21hn.mjs} +1 -1
  65. package/dist/{hosted-logs-EzQM7-3Z.mjs → hosted-logs-FIRx9X2f.mjs} +77 -43
  66. package/dist/{hosted-macos-BACVAVqE.mjs → hosted-macos-_awYSpfv.mjs} +35 -22
  67. package/dist/{hosted-native-A4s1QPXe.mjs → hosted-native-BdzE668-.mjs} +49 -27
  68. package/dist/idle-C4cZ757K.d.mts +24 -0
  69. package/dist/{idle-shutdown-DtxhPTKe.mjs → idle-shutdown-DDg3SdvY.mjs} +11 -10
  70. package/dist/ios-CDvlmUs7.d.mts +24 -0
  71. package/dist/{ios-BwVCF7oA.mjs → ios-Ds1clbIt.mjs} +8 -8
  72. package/dist/{ios-device-D7pi2Sca.mjs → ios-device--h_-8ENa.mjs} +51 -26
  73. package/dist/{ios-device-B5veSDDQ.mjs → ios-device-BXZ0c7Kb.mjs} +1 -1
  74. package/dist/{ios-RkW4pnQf.mjs → ios-hcBpnEGk.mjs} +200 -93
  75. package/dist/{ios-Ce7bc7br.mjs → ios-pm4nL6By.mjs} +160 -108
  76. package/dist/{ios-project-K9hY_Jab.mjs → ios-project-CZhKODF3.mjs} +13 -13
  77. package/dist/ios-signing-BtAffm0A.mjs +489 -0
  78. package/dist/{ios-state-CBLe1xYw.mjs → ios-state-Dtw5K2aI.mjs} +1 -1
  79. package/dist/{ios-nOLJGVdy.mjs → ios-xtlRHaeB.mjs} +1 -1
  80. package/dist/{js-swap-Bb3nsS07.mjs → js-swap-Bwhh4S7V.mjs} +30 -25
  81. package/dist/{launch-C3qJ6Agb.mjs → launch-BjxemNpK.mjs} +85 -543
  82. package/dist/{launch-F4sOqAhB.mjs → launch-CCzXlc8r.mjs} +91 -90
  83. package/dist/logs-BfwwadsZ.mjs +479 -0
  84. package/dist/logs-jTS_lHSo.mjs +248 -0
  85. package/dist/{macos-D7uDvO-z.mjs → macos-DVlSSyUg.mjs} +1 -1
  86. package/dist/macos-NfV2D7dO.mjs +694 -0
  87. package/dist/macos-run.mjs +1 -1
  88. package/dist/maintenance-run.mjs +123 -248
  89. package/dist/{metro-DnCEjCxs.mjs → metro-DiXtA3Ty.mjs} +107 -30
  90. package/dist/metro-gateway-CKZqKqx7.mjs +209 -0
  91. package/dist/{named-ports-4WopRPg-.mjs → named-ports-DkEzOfzO.mjs} +42 -90
  92. package/dist/native-android-CqgnOgsT.mjs +645 -0
  93. package/dist/native-gradle-artifact-inputs-DHFnmrVf.mjs +270 -0
  94. package/dist/native-gradle-inputs-Dnh84Zbd.mjs +211 -0
  95. package/dist/native-inputs-TRTTTRxt.mjs +91 -0
  96. package/dist/native-run-NwUuxbkg.mjs +276 -0
  97. package/dist/{native-runtime-k8dTIrbK.mjs → native-runtime-B7KIafpM.mjs} +11 -9
  98. package/dist/native-source-Y0yLhFyQ.mjs +133 -0
  99. package/dist/{native-xcode-inputs-CykopJdM.mjs → native-xcode-inputs-D_VOfFL7.mjs} +26 -18
  100. package/dist/{native-xcode-ios-Bbf30Gm0.mjs → native-xcode-ios-BYDOHWLN.mjs} +104 -60
  101. package/dist/{ndjson-GOnbyvso.mjs → ndjson-CgE_o3Dl.mjs} +3 -3
  102. package/dist/offload-worker.d.mts +59 -41
  103. package/dist/offload-worker.mjs +478 -115
  104. package/dist/operation-exec-BW0em61G.mjs +171 -0
  105. package/dist/{ownership-DCtw_2IA.mjs → ownership-C5fo5Edb.mjs} +3 -3
  106. package/dist/{page-DRHy329N.mjs → page-DBL2PiUU.mjs} +12 -5
  107. package/dist/paths-BsJMoPP2.mjs +12 -0
  108. package/dist/paths-DQtTgsBf.mjs +42 -0
  109. package/dist/{placement-log-MOfPVgaM.mjs → placement-log-BnGgJRRZ.mjs} +5 -5
  110. package/dist/{plan-placement-V0TdzYXp.mjs → plan-placement-DIsMtN-d.mjs} +15 -11
  111. package/dist/{ports-DdSUicVo.mjs → ports-Cy1RkmuQ.mjs} +3 -3
  112. package/dist/prebuild-D4JoEAEs.mjs +484 -0
  113. package/dist/{project-_phNIJfs.mjs → project-wM_XFTvE.mjs} +65 -37
  114. package/dist/{pull-request-CQ8sPbZa.mjs → pull-request-W1IuLXDt.mjs} +102 -20
  115. package/dist/pull-request-eODyIqZF.d.mts +124 -0
  116. package/dist/pull-requests.d.mts +2 -120
  117. package/dist/pull-requests.mjs +2 -2
  118. package/dist/{react-native-android-CM1XRDwv.mjs → react-native-android-6OZ7MSM7.mjs} +121 -72
  119. package/dist/{gradle-DSrXb6lG.mjs → react-native-build-Dvd8hC21.mjs} +292 -15
  120. package/dist/react-native-doctor-DsoSF1Y9.mjs +234 -0
  121. package/dist/{react-native-ios-Dhq_eiYQ.mjs → react-native-ios-4u1Rn-GR.mjs} +71 -39
  122. package/dist/{recordings-D0d5aQt0.mjs → recordings-CQmfzAh7.mjs} +12 -9
  123. package/dist/registration-BcRgF6Ox.mjs +51 -0
  124. package/dist/{reload-C8JhxjSh.mjs → reload-BzkYabB-.mjs} +94 -47
  125. package/dist/reload-D7AVlb8N.mjs +2 -0
  126. package/dist/{remote-BiR6aYjy.mjs → remote-DjGDmlTZ.mjs} +26 -18
  127. package/dist/result-D2Ykz_iD.mjs +435 -0
  128. package/dist/{run-BtPgpKks.mjs → run-DidHghD1.mjs} +5 -5
  129. package/dist/selection-DSMbWEX2.mjs +620 -0
  130. package/dist/{server-bare-R2m_gsH8.mjs → server-bare-CafzuyFB.mjs} +3 -4
  131. package/dist/{server-command-CTtCkmcQ.mjs → server-command-C6QjeupS.mjs} +14 -7
  132. package/dist/{server-expo-DsguMGUF.mjs → server-expo-CrjB29pq.mjs} +54 -11
  133. package/dist/server-expo-D58c9L0M.mjs +2 -0
  134. package/dist/{settings-B717odTD.mjs → settings-C7O8A6ZI.mjs} +309 -119
  135. package/dist/settings-DpR-1Wnn.mjs +114 -0
  136. package/dist/settings-write-CzD60rOD.mjs +360 -0
  137. package/dist/settings.schema.json +176 -16
  138. package/dist/{simslim-CCr3rE-A.mjs → simslim-BNckWpXi.mjs} +14 -12
  139. package/dist/{slot-launch-DPt0m9Nd.mjs → slot-launch-CbfmNgM6.mjs} +15 -20
  140. package/dist/{spawn-entry-Dcb7sDUz.mjs → spawn-entry-jw19m8Nl.mjs} +0 -1
  141. package/dist/stage-Bps5oius.mjs +200 -0
  142. package/dist/{start-TXeMmmO2.mjs → start-Br-oxqMD.mjs} +1 -1
  143. package/dist/start-EojN4WFz.mjs +1364 -0
  144. package/dist/{state-D1Icyjlu.mjs → state--smjFSTL.mjs} +55 -13
  145. package/dist/{state-CG_OFoaA.mjs → state-08I3hw3_.mjs} +3 -2
  146. package/dist/{stats-BoY5sEPU.mjs → stats-D3GerlFW.mjs} +7 -13
  147. package/dist/stats-report-BzaPrRm6.mjs +16 -0
  148. package/dist/{status-BTA7kKiQ.mjs → status-BRROykC8.mjs} +7 -5
  149. package/dist/status-EvrK72L2.mjs +2 -0
  150. package/dist/{status-WgFbkRzj.mjs → status-WBDajew2.mjs} +554 -452
  151. package/dist/{status-watch-C23ILtf9.mjs → status-watch-Bg_u-pwR.mjs} +222 -25
  152. package/dist/status-worker.d.mts +1 -0
  153. package/dist/status-worker.mjs +19 -0
  154. package/dist/stim-desktop-D5OGpYZM.mjs +112 -0
  155. package/dist/{stop-DR6VoDIk.mjs → stop-DTZ9uTw3.mjs} +2 -2
  156. package/dist/{stop-DPEhunlw.mjs → stop-Dky10AEJ.mjs} +33 -23
  157. package/dist/{stop-BNmBMi1F.mjs → stop-Mv6W9FAk.mjs} +137 -98
  158. package/dist/supervisor-run.d.mts +8 -17
  159. package/dist/supervisor-run.mjs +56 -28
  160. package/dist/{support-CwjbFs9H.mjs → support-CNioewsd.mjs} +14 -14
  161. package/dist/{support-DMTqj3Hm.mjs → support-yUiOjnVY.mjs} +20 -13
  162. package/dist/swiftpm-artifact-inputs-DFcGsXDP.mjs +153 -0
  163. package/dist/swiftpm-macos-BIak-Rxv.mjs +532 -0
  164. package/dist/toolchain-BY8X8HXx.mjs +2 -0
  165. package/dist/toolchain-DpJMHq0n.mjs +876 -0
  166. package/dist/{trigger-CigAYjeL.mjs → trigger-Cbyc41d_.mjs} +21 -6
  167. package/dist/trigger-yb_nFzPF.mjs +2 -0
  168. package/dist/{warm-progress-BuY-Fvfn.mjs → warm-progress-CA3TgT3-.mjs} +263 -156
  169. package/dist/web-CZ07gd77.mjs +2 -0
  170. package/dist/{web-BDBMxDpx.mjs → web-DKx6yoFA.mjs} +20 -14
  171. package/dist/web-run.mjs +13 -12
  172. package/dist/windows-report.d.mts +1 -0
  173. package/dist/windows-report.mjs +18 -0
  174. package/dist/windows-report.ps1 +43 -0
  175. package/dist/{workspace-state-DJt_MMvf.mjs → workspace-state-U08dEzhG.mjs} +62 -58
  176. package/dist/{workspaces-C36s2jb9.mjs → workspaces-CpANmBlq.mjs} +1723 -1286
  177. package/dist/{worktree-CgvJYJ-Q.mjs → worktree-CHecZ4Oq.mjs} +1097 -547
  178. package/dist/worktree-ZqZVjD9K.mjs +2 -0
  179. package/dist/xcode-BXn9-xYx.mjs +896 -0
  180. package/package.json +7 -5
  181. package/shim/android-audio/Main.java +24 -0
  182. package/shim/android-audio/README.md +17 -0
  183. package/shim/android-audio.jar +0 -0
  184. package/shim/android-optimizations.gradle +7 -5
  185. package/dist/activity-BSV745Kz.mjs +0 -629
  186. package/dist/api-qvOzWyfO.mjs +0 -154
  187. package/dist/api-run.mjs +0 -294
  188. package/dist/app-install-BIKtMfPq.mjs +0 -896
  189. package/dist/artifact-lifecycle-DzPpBYvK.mjs +0 -30
  190. package/dist/budget-f7516Zk0.mjs +0 -4106
  191. package/dist/build-facts-DcLv2HSd.d.mts +0 -111
  192. package/dist/cancellation-C_22VQTH.mjs +0 -24
  193. package/dist/client-qQAaXSUs.mjs +0 -1771
  194. package/dist/config-BYDxlMY3.mjs +0 -562
  195. package/dist/device-DuiPJQSn.mjs +0 -290
  196. package/dist/device-lease-BX1sJQ2E.mjs +0 -1224
  197. package/dist/device-remote-xRT0Vmo9.mjs +0 -1272
  198. package/dist/eas-session-ledger-Cm0Gwq2F.mjs +0 -207
  199. package/dist/exec-DqKo9GKJ.mjs +0 -268
  200. package/dist/git-DDfFzkMm.mjs +0 -45
  201. package/dist/launch-verify-B6Q8hZP-.mjs +0 -428
  202. package/dist/logs-BGrEUaEs.mjs +0 -383
  203. package/dist/macos-Ch5VJmcS.mjs +0 -584
  204. package/dist/metro-gateway-CX9Xlkq2.mjs +0 -103
  205. package/dist/miss-reason-mKzZ4VvN.mjs +0 -238
  206. package/dist/native-android-D5qc3-_v.mjs +0 -226
  207. package/dist/native-gradle-inputs-BsLRrl7u.mjs +0 -349
  208. package/dist/ndjson-Du3j0AQ9.d.mts +0 -17
  209. package/dist/plan-C4TjdPsR.mjs +0 -260
  210. package/dist/prebuild-DYbucPXy.mjs +0 -212
  211. package/dist/preview-78a9kR_-.mjs +0 -1011
  212. package/dist/react-native-build-CtCccJtb.mjs +0 -239
  213. package/dist/react-native-doctor-CfRnFfjs.mjs +0 -78
  214. package/dist/remote-cache-OyOyVIS3.mjs +0 -526
  215. package/dist/result-CaJg5Iat.mjs +0 -186
  216. package/dist/server-expo-Bigriskl.mjs +0 -2
  217. package/dist/settings-BORNaaCO.mjs +0 -402
  218. package/dist/settings-vk3mJGSm.d.mts +0 -13
  219. package/dist/spawn-claims-DVS5RkMS.mjs +0 -72
  220. package/dist/stage-KNTQopqv.mjs +0 -157
  221. package/dist/start-BWqzODpb.mjs +0 -1116
  222. package/dist/stim-desktop-BzBN2Em2.mjs +0 -63
  223. package/dist/swiftpm-macos-DRNVJWlb.mjs +0 -119
  224. package/dist/tailnet-Dh-qiYzG.mjs +0 -265
  225. package/dist/toolchain-BFkAcstd.mjs +0 -2
  226. package/dist/toolchain-DxSsNssu.mjs +0 -1657
  227. package/dist/trigger-9_USgmxz.mjs +0 -2
  228. package/dist/web-Dq-i3wzJ.mjs +0 -2
  229. package/dist/worktree-DpLdCHga.mjs +0 -2
  230. package/dist/{api-run.d.mts → doctor-fingerprint.d.mts} +0 -0
  231. package/dist/{errors-DzkMYh8Q.mjs → errors-ccaPc4ox.mjs} +2 -2
@@ -1,32 +1,36 @@
1
- import { K as validateDeviceSlot, V as deviceSlotPlatforms, p as getProject } from "./config-BYDxlMY3.mjs";
2
- import { t as getExecutor } from "./exec-DqKo9GKJ.mjs";
3
- import { Ft as makeTemporaryDirectory, It as removeTemporaryEntry, L as publicUrlSetting, U as resolveAndroidLayout, V as remoteEasFallbackSetting, Z as settingOriginScope, et as settingsLayers, m as defaultAndroidLayout, tt as tunnelModeSetting, z as realpathInside } from "./settings-B717odTD.mjs";
4
- import { B as captureAssetManifest, D as fingerprintProject, E as fingerprintDiffRecord, F as storedAssetManifest, H as readAssetManifest, L as untrackedMissLine, M as refingerprintAfterMutation, N as resolveBuild, O as inputsChangedDuringBuild, P as storeBuild, R as untrackedNativeFiles, S as configInputsChanged, T as filesystemBuildCapability, V as compareAssetManifests, b as buildCacheKey, x as changedDuringBuildLine, z as assetDiffReason } from "./device-lease-BX1sJQ2E.mjs";
5
- import { r as readWorkspaceState } from "./workspace-state-DJt_MMvf.mjs";
1
+ import { _ as reportSignal, d as spawnDeclared, m as operationState, t as getExecutor } from "./exec-DEoAhcze.mjs";
2
+ import { H as deviceSlotPlatforms, p as getProject, q as validateDeviceSlot } from "./config-DlrsduwG.mjs";
6
3
  import { r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
7
- import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-BTy8hZ0F.mjs";
8
- import { _ as detectIsExpo } from "./project-_phNIJfs.mjs";
9
- import { A as listAvds, B as ownedAvdSystemImage, D as hostSystemImageArch, I as ownedAvdDirectory, T as findBuildTool, W as pickDefaultSystemImage, j as listInstalledSystemImages, l as androidSystemImageAbi, r as androidBuildToolName } from "./android-Mz_Inn3w.mjs";
10
- import { It as statsProjectKey } from "./budget-f7516Zk0.mjs";
11
- import { t as cleanLine } from "./server-expo-DsguMGUF.mjs";
12
- import { c as loadProjectProvider, i as checkEasAuth, p as resolveRemote } from "./remote-cache-OyOyVIS3.mjs";
13
- import { h as detectAppIds, m as detectAndroidPackage } from "./start-BWqzODpb.mjs";
14
- import { n as fingerprintErrorMissReason, t as explainBuildMiss } from "./miss-reason-mKzZ4VvN.mjs";
15
- import { o as resolveCcache } from "./ccache-zdKiYQ3E.mjs";
16
- import { M as startBuildHeartbeat, P as tailLines, n as androidToolchain, t as androidRequirements, y as HEARTBEAT_INTERVAL_MS } from "./toolchain-DxSsNssu.mjs";
17
- 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-DMTqj3Hm.mjs";
18
- import { i as AndroidRecipeRefusal, r as resolveAndroidRunPlan } from "./plan-C4TjdPsR.mjs";
19
- import { c as readProductFlavors, n as buildAndroid, s as productFlavorRefusal } from "./react-native-build-CtCccJtb.mjs";
20
- import { n as planFlagRefusal, o as checkEasFallback, r as planPayload, t as planCachedBuild } from "./build-plan-B7SZsc2N.mjs";
21
- import { i as planEasDevelopmentBuild } from "./eas-build-JyfqyHfC.mjs";
22
- import { n as androidProcessRuntime, t as androidMetroRuntime } from "./launch-F4sOqAhB.mjs";
23
- import { i as staleNativeDirRefusal, n as recordPrebuild, r as runPrebuild, t as planPrebuild } from "./prebuild-DYbucPXy.mjs";
24
- import { n as detectEntryFile, r as refreshUpdatesManifestFile, t as UPDATES_MANIFEST_NAME } from "./js-swap-Bb3nsS07.mjs";
25
- import { t as planHostedDevice } from "./plan-placement-V0TdzYXp.mjs";
26
- import { constants, copyFileSync, existsSync, mkdirSync, readFileSync, renameSync } from "node:fs";
4
+ import { i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-gwpm28fu.mjs";
5
+ import { a as killOnAbort, f as throwIfCancelled, t as runOperationFile } from "./operation-exec-BW0em61G.mjs";
6
+ import { r as readWorkspaceState } from "./workspace-state-U08dEzhG.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-C7O8A6ZI.mjs";
8
+ import { v as detectIsExpo } from "./project-wM_XFTvE.mjs";
9
+ import { Bn as checkEasAuth, Fn as processContext, Jn as resolveRemote, Un as loadProjectProvider, Xn as bundleInvocation, Y as statsProjectKey } from "./budget-Cvwn54qV.mjs";
10
+ import { C as compareAssetManifests, S as captureAssetManifest, _ as storedAssetManifest, b as untrackedNativeFiles, c as fingerprintDiffRecord, g as storeBuild, h as resolveBuild, i as configInputsChanged, l as fingerprintProject, m as refingerprintAfterMutation, n as buildCacheKey, r as changedDuringBuildLine, s as filesystemBuildCapability, u as inputsChangedDuringBuild, w as readAssetManifest, x as assetDiffReason, y as untrackedMissLine } from "./build-cache-Dv7RN200.mjs";
11
+ 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-C7sVmyI9.mjs";
12
+ import { t as cleanLine } from "./server-expo-CrjB29pq.mjs";
13
+ import { o as resolveCcache } from "./ccache-Btwc36-I.mjs";
14
+ import { _ as tailLines, h as startBuildHeartbeat, r as HEARTBEAT_INTERVAL_MS } from "./xcode-BXn9-xYx.mjs";
15
+ import { r as androidToolchainAsync, t as androidRequirements } from "./toolchain-DpJMHq0n.mjs";
16
+ import { h as detectAppIds, m as detectAndroidPackage } from "./start-EojN4WFz.mjs";
17
+ import { c as readProductFlavors, n as buildAndroid, s as productFlavorRefusal } from "./react-native-build-Dvd8hC21.mjs";
18
+ import { t as readDoctorFingerprint } from "./doctor-fingerprint-DZLoYFVb.mjs";
19
+ import { i as planEasDevelopmentBuild } from "./eas-build-CwknaQYj.mjs";
20
+ import { a as staleNativeDirRefusal, i as runPrebuild, n as planPrebuildAsync, o as explainBuildMiss, r as recordPrebuild, s as fingerprintErrorMissReason, t as planPrebuild } from "./prebuild-D4JoEAEs.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-yUiOjnVY.mjs";
22
+ import { t as AndroidRecipeRefusal } from "./android-project-BCAAmMwz.mjs";
23
+ import { c as resolveAndroidRunPlan } from "./result-D2Ykz_iD.mjs";
24
+ import { t as checkEasFallback } from "./eas-fallback-CSgAulr5.mjs";
25
+ import { n as androidProcessRuntime, t as androidMetroRuntime } from "./launch-CCzXlc8r.mjs";
26
+ import { n as planFlagRefusal, r as planPayload, t as planCachedBuild } from "./build-plan-DUC8Ka9y.mjs";
27
+ import { n as detectEntryFile, r as refreshUpdatesManifestFile, t as UPDATES_MANIFEST_NAME } from "./js-swap-Bwhh4S7V.mjs";
28
+ import { t as planHostedDevice } from "./plan-placement-DIsMtN-d.mjs";
29
+ import { constants, existsSync, mkdirSync, readFileSync, renameSync } from "node:fs";
27
30
  import { basename, dirname, isAbsolute, join, relative } from "node:path";
28
- import { loadCacheProvider } from "@stim-cli/cache";
29
31
  import chalk from "chalk";
32
+ import { copyFile } from "node:fs/promises";
33
+ import { loadCacheProvider } from "@stim-cli/cache";
30
34
  //#region src/engine/apk-swap.ts
31
35
  const ANDROID_BUNDLE_NAME = "index.android.bundle";
32
36
  const LAST_LINES = 5;
@@ -176,7 +180,7 @@ function apksignerArgs({ keystore, apkPath }) {
176
180
  apkPath
177
181
  ];
178
182
  }
179
- async function swapApkBundle({ root, isExpo, cachedApkPath, keystore, logWriter = null, exec = null, spawnFn = null, mkdtemp = () => makeTemporaryDirectory(cachedApkPath, "stim-apk-swap-"), exists = existsSync, hermesEnabled = null, layout = defaultAndroidLayout(root), buildTools = null, findTool = findBuildTool, storedAssets = null, readManifest = readAssetManifest, now = Date.now, heartbeatMs = HEARTBEAT_INTERVAL_MS, onHeartbeat = (line) => console.error(line), platform = process.platform }) {
183
+ async function swapApkBundle({ context, root, isExpo, cachedApkPath, keystore, logWriter = null, exec = null, spawnFn = null, mkdtemp = () => makeTemporaryDirectory(cachedApkPath, "stim-apk-swap-"), exists = existsSync, hermesEnabled = null, layout = defaultAndroidLayout(root), buildTools = null, findTool = findBuildTool, storedAssets = null, readManifest = readAssetManifest, now = Date.now, heartbeatMs = HEARTBEAT_INTERVAL_MS, onHeartbeat = (line) => console.error(line), platform = process.platform }) {
180
184
  const e = exec || getExecutor();
181
185
  const startedAt = now();
182
186
  const elapsed = () => now() - startedAt;
@@ -204,7 +208,7 @@ async function swapApkBundle({ root, isExpo, cachedApkPath, keystore, logWriter
204
208
  const base = basename(cachedApkPath);
205
209
  work = join(tmp, `unaligned-${base}`);
206
210
  final = join(tmp, base);
207
- copyApk(e, cachedApkPath, work, platform);
211
+ await copyApk(context, e, cachedApkPath, work, platform);
208
212
  } catch (err) {
209
213
  return fail("copy", `could not copy ${cachedApkPath} aside: ${describe(err)}`);
210
214
  }
@@ -245,7 +249,8 @@ async function swapApkBundle({ root, isExpo, cachedApkPath, keystore, logWriter
245
249
  };
246
250
  let child;
247
251
  try {
248
- child = spawn(command.file, command.args, {
252
+ const invocation = bundleInvocation(root, isExpo, command.args.slice(1));
253
+ child = spawnDeclared(context, () => spawn(invocation.file, invocation.args, {
249
254
  cwd: root,
250
255
  stdio: [
251
256
  "ignore",
@@ -253,10 +258,11 @@ async function swapApkBundle({ root, isExpo, cachedApkPath, keystore, logWriter
253
258
  "pipe"
254
259
  ],
255
260
  env: {
256
- ...process.env,
261
+ ...context?.env ?? process.env,
257
262
  FORCE_COLOR: "0"
258
263
  }
259
- });
264
+ }));
265
+ killOnAbort(context ? operationState(context).runSignal ?? context.signal : void 0)(child);
260
266
  } catch (err) {
261
267
  return fail("bundle", `could not run ${command.file} ${command.args[0]}: ${describe(err)}`);
262
268
  }
@@ -296,7 +302,7 @@ async function swapApkBundle({ root, isExpo, cachedApkPath, keystore, logWriter
296
302
  else {
297
303
  const hbc = `${bundleOutput}.hbc`;
298
304
  try {
299
- e.runFile(hermesc, androidHermescArgs({
305
+ await runOperationFile(context, e, hermesc, androidHermescArgs({
300
306
  bundle: bundleOutput,
301
307
  out: hbc
302
308
  }), { timeoutMs: "unbounded" });
@@ -328,10 +334,10 @@ async function swapApkBundle({ root, isExpo, cachedApkPath, keystore, logWriter
328
334
  if (!fresh) return fail("assets", `could not hash the assets emitted into ${assetsDest}, so the asset set cannot be verified`);
329
335
  const diff = compareAssetManifests(fresh, storedAssets);
330
336
  if (!diff.same) return refuse(assetDiffReason(diff), diff);
331
- const jar = jarPath();
337
+ const jar = jarPath({ javaHome: (context?.env ?? process.env).JAVA_HOME ?? "" });
332
338
  const updatesManifest = join(stage, "assets", UPDATES_MANIFEST_NAME);
333
339
  try {
334
- e.runFile(jar, [
340
+ await runOperationFile(context, e, jar, [
335
341
  "--extract",
336
342
  "--file",
337
343
  work,
@@ -345,7 +351,7 @@ async function swapApkBundle({ root, isExpo, cachedApkPath, keystore, logWriter
345
351
  return fail("updates", `could not refresh the expo-updates manifest from ${work}: ${describe(err)}`);
346
352
  }
347
353
  try {
348
- e.runFile(jar, [
354
+ await runOperationFile(context, e, jar, [
349
355
  "--update",
350
356
  "--file",
351
357
  work,
@@ -360,7 +366,7 @@ async function swapApkBundle({ root, isExpo, cachedApkPath, keystore, logWriter
360
366
  const tools = buildTools ?? findTool(["zipalign"]);
361
367
  if (!tools) return fail("zipalign", "no zipalign found under the Android SDK build-tools; install one with `sdkmanager \"build-tools;36.0.0\"`");
362
368
  try {
363
- e.runFile(tools.path, zipalignArgs({
369
+ await runOperationFile(context, e, tools.path, zipalignArgs({
364
370
  buildToolsMajor: tools.major,
365
371
  input: work,
366
372
  output: final
@@ -374,10 +380,19 @@ async function swapApkBundle({ root, isExpo, cachedApkPath, keystore, logWriter
374
380
  } : findTool(["apksigner"]);
375
381
  if (!signer) return fail("apksigner", "no apksigner found under the Android SDK build-tools; install one with `sdkmanager \"build-tools;36.0.0\"`");
376
382
  try {
377
- e.runFile(signer.path, apksignerArgs({
383
+ let signerFile = signer.path;
384
+ const signerArgs = apksignerArgs({
378
385
  keystore,
379
386
  apkPath: final
380
- }), keystore.password === null ? { timeoutMs: "unbounded" } : {
387
+ });
388
+ if (platform === "win32") {
389
+ const javaHome = ((context?.env ?? process.env).JAVA_HOME ?? "").replaceAll("\"", "");
390
+ signerFile = javaHome ? join(javaHome, "bin", "java.exe") : "java.exe";
391
+ const fallbackJar = join(dirname(signer.path), "..", "framework", "apksigner.jar");
392
+ const signerJar = [join(dirname(signer.path), "apksigner.jar"), join(dirname(signer.path), "lib", "apksigner.jar")].find(exists) ?? fallbackJar;
393
+ signerArgs.unshift("-Xmx1024M", "-Xss1m", "-jar", signerJar);
394
+ }
395
+ await runOperationFile(context, e, signerFile, signerArgs, keystore.password === null ? { timeoutMs: "unbounded" } : {
381
396
  timeoutMs: "unbounded",
382
397
  env: { [KEYSTORE_PASSWORD_ENV]: keystore.password },
383
398
  redact: [keystore.password]
@@ -401,16 +416,20 @@ async function swapApkBundle({ root, isExpo, cachedApkPath, keystore, logWriter
401
416
  if (note) result.note = note;
402
417
  return result;
403
418
  }
404
- function copyApk(e, from, to, platform) {
419
+ async function copyApk(context, e, from, to, platform) {
405
420
  if (platform === "darwin") try {
406
- e.runFile("cp", [
421
+ await runOperationFile(context, e, "cp", [
407
422
  "-c",
408
423
  from,
409
424
  to
410
425
  ], { timeoutMs: "unbounded" });
411
426
  return;
412
- } catch {}
413
- copyFileSync(from, to, constants.COPYFILE_FICLONE);
427
+ } catch {
428
+ throwIfCancelled(context ? operationState(context).runSignal ?? context.signal : void 0, "APK swap");
429
+ }
430
+ throwIfCancelled(context ? operationState(context).runSignal ?? context.signal : void 0, "APK swap");
431
+ await copyFile(from, to, constants.COPYFILE_FICLONE);
432
+ throwIfCancelled(context ? operationState(context).runSignal ?? context.signal : void 0, "APK swap");
414
433
  }
415
434
  function describe(err) {
416
435
  const e = err;
@@ -425,27 +444,24 @@ const DEFAULT_PLAN_DEPS = {
425
444
  listSystemImages: listInstalledSystemImages,
426
445
  avdSystemImage: ownedAvdSystemImage,
427
446
  avdDirectory: ownedAvdDirectory,
428
- listAvds,
447
+ listAvds: listAvdsAsync,
429
448
  loadCacheProvider,
430
449
  loadProjectProvider,
431
450
  checkEasAuth,
432
451
  resolveRemote,
433
- planPrebuild
452
+ planPrebuild: planPrebuildAsync
434
453
  };
435
- function note(line) {
436
- console.error(line);
437
- }
438
454
  function refuse(refusal, lines = []) {
439
455
  return {
440
456
  refusal,
441
457
  lines
442
458
  };
443
459
  }
444
- function emulatorImage(root, slot, requested, deps) {
460
+ async function emulatorImage(root, slot, requested, deps, signal) {
445
461
  const record = deviceSlotPlatforms(getProject(root), slot)?.android;
446
462
  if (record?.avdName && !record.setupIncomplete) {
447
463
  if (record.owned && deps.avdDirectory(record.avdName)) return { systemImage: deps.avdSystemImage(record.avdName) };
448
- if (!record.owned && avdListed(record.avdName, deps.listAvds)) return { systemImage: null };
464
+ if (!record.owned && await avdListed(record.avdName, deps.listAvds, signal)) return { systemImage: null };
449
465
  }
450
466
  let images;
451
467
  try {
@@ -466,22 +482,29 @@ function emulatorImage(root, slot, requested, deps) {
466
482
  remedy: `Install one, e.g.: sdkmanager "system-images;android-36;google_apis;${arch}", then try again.`
467
483
  } };
468
484
  }
469
- function avdListed(avdName, list) {
485
+ async function avdListed(avdName, list, signal) {
470
486
  try {
471
- return list({ timeoutMs: 1e4 }).includes(avdName);
487
+ return (await list({
488
+ timeoutMs: 1e4,
489
+ signal
490
+ })).includes(avdName);
472
491
  } catch {
492
+ signal?.throwIfAborted();
473
493
  return false;
474
494
  }
475
495
  }
476
- async function planReactNativeAndroid(root, opts, runtimeKind, { context: settingsContext, settings }, layout, variantProblem, overrides = {}) {
496
+ async function planReactNativeAndroid(root, opts, runtimeKind, { context: settingsContext, settings }, layout, variantProblem, overrides = {}, operation = processContext(root)) {
497
+ const note = (line) => operation.output("stderr", `${line}\n`);
477
498
  const deps = {
478
499
  ...DEFAULT_PLAN_DEPS,
479
500
  ...overrides
480
501
  };
481
502
  const slot = validateDeviceSlot(opts.slot);
482
- const planned = resolveAndroidRunPlan({
503
+ const planned = await resolveAndroidRunPlan({
483
504
  settings,
484
505
  settingsContext,
506
+ env: operation?.env,
507
+ signal: operation?.signal,
485
508
  slot,
486
509
  easProfile: opts.easProfile,
487
510
  variant: opts.variant ?? null,
@@ -516,6 +539,9 @@ async function planReactNativeAndroid(root, opts, runtimeKind, { context: settin
516
539
  };
517
540
  if (opts.easProfile !== void 0) {
518
541
  const eas = await planEasDevelopmentBuild({
542
+ context: operation,
543
+ env: operation?.env,
544
+ signal: operation?.signal,
519
545
  root,
520
546
  platform: PLATFORM,
521
547
  profile: opts.easProfile,
@@ -547,12 +573,14 @@ async function planReactNativeAndroid(root, opts, runtimeKind, { context: settin
547
573
  remedy: "Run `stim android` to build with the CAS, or set optimizations.android.compilerCache to ccache."
548
574
  });
549
575
  const abiKeyed = build.targetAbiOnly && !build.release;
550
- const localImage = () => abiKeyed ? emulatorImage(root, slot, target.systemImage, deps) : { systemImage: null };
576
+ let localImageRead;
577
+ const localImage = () => localImageRead ??= abiKeyed ? emulatorImage(root, slot, target.systemImage, deps, operation.signal) : Promise.resolve({ systemImage: null });
551
578
  let image;
552
579
  let hostedAbi = null;
553
580
  let placement;
554
581
  if (target.kind === "hosted") {
555
582
  const hostedPlan = await planHostedDevice({
583
+ operation,
556
584
  root,
557
585
  slot,
558
586
  platform: "android",
@@ -561,14 +589,16 @@ async function planReactNativeAndroid(root, opts, runtimeKind, { context: settin
561
589
  ...target.systemImage ? { systemImage: target.systemImage } : {},
562
590
  ...target.deviceProfile ? { deviceProfile: target.deviceProfile } : {}
563
591
  },
564
- sameKey: (choice) => {
592
+ sameKey: async (choice) => {
565
593
  if (build.targetAbiOnly && build.release) return !("architecture" in choice && choice.architecture);
566
594
  if (!abiKeyed) return true;
567
- const local = localImage();
595
+ const local = await localImage();
568
596
  if ("refusal" in local || !("systemImage" in choice)) return null;
569
597
  return androidSystemImageAbi(local.systemImage) === androidSystemImageAbi(choice.systemImage);
570
598
  },
571
599
  ...remoteEasFallbackSetting(settings) ? { eas: () => checkEasFallback({
600
+ operation,
601
+ env: operation?.env,
572
602
  root,
573
603
  platform: "android",
574
604
  slot,
@@ -586,8 +616,8 @@ async function planReactNativeAndroid(root, opts, runtimeKind, { context: settin
586
616
  });
587
617
  placement = hostedPlan.placement;
588
618
  if (hostedPlan.kind === "hosted" && "architecture" in hostedPlan.choice) hostedAbi = hostedPlan.choice.architecture ?? null;
589
- image = hostedPlan.kind === "hosted" ? { systemImage: abiKeyed && "systemImage" in hostedPlan.choice ? hostedPlan.choice.systemImage : null } : localImage();
590
- } else image = localImage();
619
+ image = hostedPlan.kind === "hosted" ? { systemImage: abiKeyed && "systemImage" in hostedPlan.choice ? hostedPlan.choice.systemImage : null } : await localImage();
620
+ } else image = await localImage();
591
621
  if ("refusal" in image) return refuse(image.refusal);
592
622
  const { abi, runOptions, remoteRunOptions } = androidBuildOptions({
593
623
  release: build.release,
@@ -602,22 +632,30 @@ async function planReactNativeAndroid(root, opts, runtimeKind, { context: settin
602
632
  });
603
633
  let fingerprint;
604
634
  try {
605
- fingerprint = await deps.fingerprint(root, {
635
+ fingerprint = operation && reportSignal(operation) ? await readDoctorFingerprint(operation, {
636
+ root,
637
+ platform: PLATFORM,
638
+ androidLayout: layout
639
+ }) : await deps.fingerprint(root, {
606
640
  platform: PLATFORM,
607
641
  androidLayout: layout
608
642
  });
609
643
  } catch (error) {
644
+ operation?.signal.throwIfAborted();
610
645
  return refuse({
611
646
  code: NO_FINGERPRINT,
612
647
  message: `@expo/fingerprint could not fingerprint ${root}: ${error?.message || error}`,
613
648
  remedy: "Fix the @expo/fingerprint error above, then retry."
614
649
  });
615
650
  }
616
- if (!fingerprint?.hash) return refuse({
617
- code: NO_FINGERPRINT,
618
- message: `@expo/fingerprint returned no hash for ${root}, so the build cache cannot be addressed.`,
619
- remedy: "Check the project native inputs and the @expo/fingerprint error above, then retry."
620
- });
651
+ if (!fingerprint?.hash) {
652
+ operation?.signal.throwIfAborted();
653
+ return refuse({
654
+ code: NO_FINGERPRINT,
655
+ message: `@expo/fingerprint returned no hash for ${root}, so the build cache cannot be addressed.`,
656
+ remedy: "Check the project native inputs and the @expo/fingerprint error above, then retry."
657
+ });
658
+ }
621
659
  const plan = await planCachedBuild({
622
660
  ...planTarget,
623
661
  isExpo,
@@ -629,6 +667,7 @@ async function planReactNativeAndroid(root, opts, runtimeKind, { context: settin
629
667
  expoRemote: abi || build.profile || !build.cache.remote ? null : { runOptions: remoteRunOptions }
630
668
  }, {
631
669
  ...deps,
670
+ operation,
632
671
  note
633
672
  });
634
673
  return placement ? {
@@ -647,7 +686,7 @@ function reactNativeAndroidProject(root, { context, settings }, dependencies = {
647
686
  variant
648
687
  });
649
688
  return {
650
- plan: (options, resolved) => planReactNativeAndroid(root, options, runtimeKind, resolved, layout, variantProblem, dependencies.plan),
689
+ plan: (options, resolved, operation) => planReactNativeAndroid(root, options, runtimeKind, resolved, layout, variantProblem, dependencies.plan, operation),
651
690
  isExpo,
652
691
  appIds: () => detectAppIds(root, void 0, layout.moduleDir),
653
692
  packageRemedy: `Set \`expo.android.package\` in app.json / app.config.js, or \`namespace\` in ${relative(root, layout.moduleDir) || "."}/build.gradle.`,
@@ -670,7 +709,7 @@ function reactNativeAndroidProject(root, { context, settings }, dependencies = {
670
709
  artifact: (artifactContext) => reactNativeAndroidArtifact(artifactContext, isExpo, layout, context, dependencies)
671
710
  };
672
711
  }
673
- function reactNativeAndroidArtifact({ 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 }) {
712
+ 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 }) {
674
713
  const { variant, release, profile, cas } = buildPlan;
675
714
  const runOptions = {
676
715
  ...variant ? { variant } : {},
@@ -702,6 +741,8 @@ function reactNativeAndroidArtifact({ root, buildLog, writer, settings, buildPla
702
741
  return null;
703
742
  }
704
743
  const swap = await swapApk({
744
+ context: operation,
745
+ onHeartbeat: out,
705
746
  root,
706
747
  isExpo,
707
748
  cachedApkPath: cachedPath,
@@ -751,6 +792,7 @@ function reactNativeAndroidArtifact({ root, buildLog, writer, settings, buildPla
751
792
  return identity();
752
793
  },
753
794
  cache: (compiled = false) => filesystemBuildCapability({
795
+ context: operation,
754
796
  resolve: resolveCached,
755
797
  store: storeCached,
756
798
  sources,
@@ -816,7 +858,7 @@ function reactNativeAndroidArtifact({ root, buildLog, writer, settings, buildPla
816
858
  identity: identity(),
817
859
  rekeyedBy,
818
860
  cacheRefusal: editedConfig.length ? "prebuild changed config inputs, so the APK cannot be cached" : null,
819
- ...prebuildRan ? { androidPackage: detectAndroidPackage(root, layout.moduleDir) } : {}
861
+ ...prebuildRan ? { androidPackage: await detectAndroidPackage(root, layout.moduleDir) } : {}
820
862
  };
821
863
  },
822
864
  async validate() {
@@ -854,10 +896,13 @@ function reactNativeAndroidArtifact({ root, buildLog, writer, settings, buildPla
854
896
  abi: target.abi
855
897
  }, {
856
898
  estimateMs: estimates().coldBuildMs,
899
+ onHeartbeat: out,
900
+ onNote: out,
857
901
  ccache: buildPlan.compilerCache === "ccache" ? ccacheFor({
858
902
  root,
859
903
  layout,
860
- onNote: out
904
+ onNote: out,
905
+ env: operation?.env
861
906
  }) : null,
862
907
  cas,
863
908
  buildCache: buildPlan.gradleBuildCache,
@@ -885,19 +930,23 @@ function reactNativeAndroidArtifact({ root, buildLog, writer, settings, buildPla
885
930
  };
886
931
  },
887
932
  untrackedLine: () => untrackedMissLine(untracked({ projectRoot: root })),
888
- legacyCache: target.abi || cas || profile || !buildPlan.cache.remote ? null : {
889
- load: () => loadProvider(root, { isExpo }),
933
+ expoCache: target.abi || cas || profile || !buildPlan.cache.remote ? null : {
934
+ load: () => loadProvider(root, {
935
+ context: operation,
936
+ isExpo
937
+ }),
890
938
  runOptions: Object.keys(runOptions).length ? runOptions : null
891
939
  },
892
940
  offload: {
893
941
  unsupported: release ? `${variant} builds build here` : cas ? "Apple Clang CAS builds build here" : !buildPlan.cache.write ? "the build cache is off" : null,
894
- target: () => ({
942
+ target: async () => ({
895
943
  platform: "android",
896
- local: androidToolchain(),
944
+ local: await androidToolchainAsync(operation?.env),
897
945
  requires: androidRequirements(root)
898
946
  }),
899
947
  request: {
900
948
  platform: "android",
949
+ cacheArtifact: buildPlan.cache.write && buildPlan.cache.remote,
901
950
  isExpo,
902
951
  android: {
903
952
  variant,