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,239 +0,0 @@
1
- import { r as register } from "./cache-manifest-XH-fvDUj.mjs";
2
- import { g as sharedCompilationCache } from "./workspace-state-DJt_MMvf.mjs";
3
- import { l as phaseLine } from "./command-output-BTy8hZ0F.mjs";
4
- import { S as resolvePackageJson } from "./project-_phNIJfs.mjs";
5
- import { p as resolveOptimizations } from "./errors-DzkMYh8Q.mjs";
6
- import { a as buildGradle, i as assembleTaskFor, n as BUILD_ERROR, o as parseProductFlavors, s as variantNameOf, t as ASSEMBLE_TASK } from "./gradle-DSrXb6lG.mjs";
7
- import { C as compilationCacheSettings, N as swiftPrefixMappingSupported, O as pickXcodeProject, T as detectXcodeMajor, b as SWIFT_PREFIX_MAPPING_MIN_SWIFT, w as detectSwiftVersion, x as buildXcode } from "./toolchain-DxSsNssu.mjs";
8
- import { existsSync, readFileSync, readdirSync } from "node:fs";
9
- import { join, relative } from "node:path";
10
- import chalk from "chalk";
11
- /** The ABI name a build for every ABI has to fit; `stim android` narrows a build to the device's. */
12
- const LONGEST_ANDROID_ABI = "armeabi-v7a";
13
- function androidPathRoom(root, { abi = null, variant = null, platform = process.platform } = {}) {
14
- if (platform !== "win32") return null;
15
- const abiName = abi ?? LONGEST_ANDROID_ABI;
16
- const tail = 198 + (/release$/i.test(variant ?? "") ? 14 : 5) - 5 + abiName.length;
17
- const longest = root.length + tail;
18
- if (longest < 240) return null;
19
- return {
20
- root,
21
- abi: abiName,
22
- longest,
23
- maxRootLength: 239 - tail
24
- };
25
- }
26
- function androidPathRoomMessage({ root, abi, longest, maxRootLength }) {
27
- return `The project root ${root} is ${root.length} characters, so the longest known Android native object path (react_codegen_safeareacontext for ${abi}) reaches ${longest} characters, past the 239 the NDK's ninja can be given on Windows; the root can be at most ${maxRootLength} characters.`;
28
- }
29
- function androidPathRoomRemedy({ root }) {
30
- return `Map the project to a drive letter (\`subst X: "${root}"\`) and run Stim from X:\\, or move it under a shorter root.`;
31
- }
32
- //#endregion
33
- //#region src/integrations/react-native-build.ts
34
- function gradlewPath(layout) {
35
- return join(layout.gradleRoot, process.platform === "win32" ? "gradlew.bat" : "gradlew");
36
- }
37
- function apkOutputsDir(layout) {
38
- return join(layout.moduleDir, "build", "outputs", "apk");
39
- }
40
- function discoverAndroidProject(root, layout) {
41
- const dir = layout.gradleRoot;
42
- if (!existsSync(dir)) return {
43
- failed: true,
44
- code: BUILD_ERROR,
45
- reason: `No ${relative(root, dir) || "."}/ directory in ${root}.`,
46
- remedy: "Generate it (`npx expo prebuild -p android`, which `stim android` runs itself on an Expo project) or check out the native sources."
47
- };
48
- const gradlew = gradlewPath(layout);
49
- if (!existsSync(gradlew)) return {
50
- failed: true,
51
- code: BUILD_ERROR,
52
- reason: `${gradlew} does not exist, so there is no gradle wrapper to build with.`,
53
- remedy: `Restore the wrapper (\`gradle wrapper\` in ${relative(root, dir) || "."}/, or regenerate the project with \`npx expo prebuild -p android --clean\`).`
54
- };
55
- return {
56
- androidDir: dir,
57
- gradlew
58
- };
59
- }
60
- function readProductFlavors(layout) {
61
- return parseProductFlavors(readOrNull(join(layout.moduleDir, "build.gradle")));
62
- }
63
- function productFlavorRefusal({ flavors, variant }) {
64
- if (variant) return null;
65
- if (!flavors.known || flavors.dimensions.length === 0) return null;
66
- let combinations = [[]];
67
- for (const group of flavors.dimensions) combinations = combinations.flatMap((combination) => group.map((flavor) => combination.concat(flavor)));
68
- if (combinations.length < 2) return null;
69
- const count = flavors.dimensions.reduce((total, group) => total + group.length, 0);
70
- const variants = combinations.map((combination) => variantNameOf(combination.concat("debug")));
71
- return {
72
- code: "STIM_BAD_ARG",
73
- reason: `android/app/build.gradle declares ${count} product flavors, so \`./gradlew ${ASSEMBLE_TASK}\` builds an APK for each of them and nothing says which flavor to install.`,
74
- remedy: `Pass \`--variant ${variants[0]}\` or set the android.variant setting -- e.g. {"android": {"variant": "${variants[0]}"}} in .stim.json. The debug variants are: ${variants.join(", ")}.`
75
- };
76
- }
77
- function readOrNull(path) {
78
- try {
79
- return readFileSync(path, "utf-8");
80
- } catch {
81
- return null;
82
- }
83
- }
84
- async function buildAndroid({ root, layout, logWriter, variant = null, abi = null }, options = {}) {
85
- const project = discoverAndroidProject(root, layout);
86
- if (project.failed) return {
87
- ok: false,
88
- code: project.code,
89
- reason: project.reason,
90
- remedy: project.remedy,
91
- diagnostics: [],
92
- truncated: 0,
93
- lastLines: [],
94
- durationMs: 0
95
- };
96
- const room = androidPathRoom(root, {
97
- abi,
98
- variant,
99
- platform: options.platform ?? process.platform
100
- });
101
- return buildGradle({
102
- root,
103
- logWriter,
104
- variant,
105
- project: {
106
- directory: project.androidDir,
107
- gradlew: project.gradlew,
108
- module: layout.module,
109
- outputsDir: apkOutputsDir(layout)
110
- },
111
- task: layout.custom ? `${layout.module}:${assembleTaskFor(variant)}` : assembleTaskFor(variant),
112
- projectArgs: abi ? [`-PreactNativeArchitectures=${abi}`] : [],
113
- preflightFailure: room ? {
114
- code: "STIM_PATH_TOO_LONG",
115
- reason: androidPathRoomMessage(room),
116
- remedy: androidPathRoomRemedy(room)
117
- } : null
118
- }, options);
119
- }
120
- const PREBUILD_REMEDY = "Generate it with `npx expo prebuild -p ios` (stim ios does this automatically for an Expo project with no ios/ directory), or commit the native project.";
121
- function buildFailure(message, remedy) {
122
- return { error: {
123
- code: "STIM_BUILD_FAILED",
124
- message,
125
- remedy
126
- } };
127
- }
128
- function discoverXcodeProject(root, dir) {
129
- let entries;
130
- try {
131
- entries = readdirSync(dir);
132
- } catch {
133
- return buildFailure(`No ${relative(root, dir) || "."}/ directory in ${root}.`, PREBUILD_REMEDY);
134
- }
135
- const picked = pickXcodeProject(entries);
136
- if (!picked) return buildFailure(`${dir} contains no .xcworkspace and no .xcodeproj.`, PREBUILD_REMEDY);
137
- return {
138
- ...picked,
139
- dir,
140
- appRoot: root,
141
- path: join(dir, picked.file)
142
- };
143
- }
144
- function ccacheEnabled(podfileProperties) {
145
- if (!podfileProperties || typeof podfileProperties !== "object") return false;
146
- return podfileProperties["apple.ccacheEnabled"] === "true";
147
- }
148
- function readPodfileProperties(iosDir) {
149
- try {
150
- const parsed = JSON.parse(readFileSync(join(iosDir, "Podfile.properties.json"), "utf-8"));
151
- return parsed && typeof parsed === "object" ? parsed : null;
152
- } catch {
153
- return null;
154
- }
155
- }
156
- const SWIFT_CACHE_MIN_REACT_NATIVE = {
157
- major: 0,
158
- minor: 87
159
- };
160
- function reactNativeSupportsSwiftCache(version) {
161
- if (!version) return false;
162
- const min = SWIFT_CACHE_MIN_REACT_NATIVE;
163
- return version.major > min.major || version.major === min.major && version.minor >= min.minor;
164
- }
165
- function parseReactNativeVersion(packageJson) {
166
- if (!packageJson || typeof packageJson !== "object") return null;
167
- const raw = packageJson.version;
168
- const m = typeof raw === "string" ? /^(\d+)\.(\d+)\./.exec(raw) : null;
169
- if (!m || m[1] === void 0 || m[2] === void 0) return null;
170
- return {
171
- major: parseInt(m[1], 10),
172
- minor: parseInt(m[2], 10)
173
- };
174
- }
175
- function detectReactNativeVersion(root) {
176
- const file = resolvePackageJson(root, "react-native");
177
- if (!file) return null;
178
- try {
179
- return parseReactNativeVersion(JSON.parse(readFileSync(file, "utf-8")));
180
- } catch {
181
- return null;
182
- }
183
- }
184
- function reactNativeCompilationCacheSettings({ reactNativeVersion = null, ...options }) {
185
- return compilationCacheSettings({
186
- ...options,
187
- swiftCacheCompatible: reactNativeSupportsSwiftCache(reactNativeVersion)
188
- });
189
- }
190
- function resolveCompilationCacheSettings({ root, iosDir, derivedDataPath, exec = null, casPath = sharedCompilationCache(), optimizations = resolveOptimizations({}, {}).ios, onNote = (line) => console.error(line) }) {
191
- const xcodeMajor = detectXcodeMajor(exec);
192
- const ccache = ccacheEnabled(readPodfileProperties(iosDir));
193
- const probe = xcodeMajor !== null && xcodeMajor >= 26 && !ccache && optimizations.compilationCache && optimizations.swiftCompilationCache !== false;
194
- const swiftVersion = probe ? detectSwiftVersion(exec) : null;
195
- const reactNativeVersion = probe ? detectReactNativeVersion(root) : null;
196
- const settings = reactNativeCompilationCacheSettings({
197
- workspaceRoot: root,
198
- derivedDataPath,
199
- casPath,
200
- xcodeMajor,
201
- swiftVersion,
202
- reactNativeVersion,
203
- ccache,
204
- optimizations
205
- });
206
- if (settings.length > 0 && optimizations.compilationCache) {
207
- register({
208
- dir: casPath,
209
- name: "Xcode compilation cache",
210
- prune: "atomic",
211
- note: "shared Xcode compilation cache"
212
- });
213
- const swift = settings.includes("SWIFT_ENABLE_COMPILE_CACHE=YES") ? settings.includes("SWIFT_ENABLE_PREFIX_MAPPING=YES") ? "Swift on" : "Swift on, unmapped" : swiftVersion && !swiftPrefixMappingSupported(swiftVersion) ? `Swift off, ${swiftVersion.major}.${swiftVersion.minor} < ${SWIFT_PREFIX_MAPPING_MIN_SWIFT.major}.${SWIFT_PREFIX_MAPPING_MIN_SWIFT.minor}` : swiftVersion && reactNativeVersion && !reactNativeSupportsSwiftCache(reactNativeVersion) ? `Swift off, react-native ${reactNativeVersion.major}.${reactNativeVersion.minor} < ${SWIFT_CACHE_MIN_REACT_NATIVE.major}.${SWIFT_CACHE_MIN_REACT_NATIVE.minor}` : "Swift off";
214
- onNote(chalk.dim(phaseLine("cache", `compilation cache on (CAS at ${casPath}, ${swift})`)));
215
- }
216
- return settings;
217
- }
218
- async function buildIos(inputs) {
219
- const { root, iosDir, logWriter, udid, destination, now = () => Date.now() } = inputs;
220
- if (!root || typeof root !== "string") throw new TypeError("buildIos requires {root}");
221
- if (!logWriter || typeof logWriter.write !== "function") throw new TypeError("buildIos requires {logWriter} with a write() method");
222
- if (!udid && !destination) throw new TypeError("buildIos requires {udid} (or an explicit {destination})");
223
- const startedAt = now();
224
- return buildXcode({
225
- ...inputs,
226
- startedAt,
227
- project: inputs.project ?? discoverXcodeProject(root, iosDir),
228
- compilationCache: inputs.compilationCache === void 0 ? ({ derivedDataPath, exec }) => resolveCompilationCacheSettings({
229
- root,
230
- iosDir,
231
- derivedDataPath,
232
- exec,
233
- optimizations: inputs.optimizations,
234
- onNote: inputs.onNote
235
- }) : inputs.compilationCache
236
- });
237
- }
238
- //#endregion
239
- export { discoverXcodeProject as a, readProductFlavors as c, androidPathRoomRemedy as d, ccacheEnabled as i, androidPathRoom as l, buildAndroid as n, gradlewPath as o, buildIos as r, productFlavorRefusal as s, apkOutputsDir as t, androidPathRoomMessage as u };
@@ -1,78 +0,0 @@
1
- import { G as resolveIosProjectDir, U as resolveAndroidLayout } from "./settings-B717odTD.mjs";
2
- import { l as phaseLine } from "./command-output-BTy8hZ0F.mjs";
3
- import { _ as detectIsExpo } from "./project-_phNIJfs.mjs";
4
- import { I as bundlerPin, i as iosToolchainAsync, n as androidToolchain, t as androidRequirements } from "./toolchain-DxSsNssu.mjs";
5
- import { a as repairCxxLauncherState, n as detectLinkedLibraryGitMetadata, r as reactNativeDoctorFindings, t as detectFingerprintParity } from "./doctor-kfMBnUw6.mjs";
6
- import { existsSync } from "node:fs";
7
- //#region src/integrations/react-native-doctor.ts
8
- function reactNativeProjectDoctor(root) {
9
- return {
10
- inspect: reactNativeDoctorFindings,
11
- async inspectAsync({ options: { platform }, settings }) {
12
- const parity = await detectFingerprintParity(root, {
13
- platform,
14
- iosProjectPath: resolveIosProjectDir(settings, root).relative
15
- });
16
- const linkedGit = await detectLinkedLibraryGitMetadata(root, { platform });
17
- return [parity, linkedGit?.code === parity?.code ? null : linkedGit].filter((finding) => finding !== null);
18
- },
19
- offloadTargets({ options: { platform, host = process.platform }, settings, repoRoot }, iosRuntime) {
20
- const checksIos = platform !== "android" && host === "darwin";
21
- const androidDir = resolveAndroidLayout(settings, root, repoRoot ?? root).gradleRoot;
22
- const checksAndroid = platform === "android" || platform === void 0 && (existsSync(androidDir) || detectIsExpo(root));
23
- if (!checksIos && !checksAndroid) return null;
24
- return async () => {
25
- const targets = [];
26
- if (checksIos) {
27
- const [local, runtime] = await Promise.all([iosToolchainAsync(root), iosRuntime()]);
28
- targets.push({
29
- platform: "ios",
30
- local,
31
- runtime,
32
- cocoapodsPinned: bundlerPin(root) !== null
33
- });
34
- }
35
- if (checksAndroid) targets.push({
36
- platform: "android",
37
- local: androidToolchain(),
38
- requires: androidRequirements(root)
39
- });
40
- return targets;
41
- };
42
- },
43
- repair: (platform, settings, repoRoot) => platform === "ios" ? {
44
- removed: [],
45
- refused: []
46
- } : repairCxxLauncherState(root, settings, resolveAndroidLayout(settings, root, repoRoot ?? root)),
47
- successLines: reactNativeDoctorSuccessLines
48
- };
49
- }
50
- function reactNativeDoctorSuccessLines(platform) {
51
- const lines = [
52
- "",
53
- "Project",
54
- phaseLine("project", "source checkout, dependencies, local upstream, nested worktrees Watchman would crawl")
55
- ];
56
- if (platform !== "android") {
57
- lines.push("", "iOS");
58
- lines.push(phaseLine("setup", "CocoaPods, warm state, effective Debug simulator architectures"));
59
- lines.push(phaseLine("caches", "Metro, Xcode compilation, ccache, build provider"));
60
- lines.push(phaseLine("devices", "remote device, SimSlim profile"));
61
- }
62
- if (platform !== "ios") {
63
- lines.push("", "Android");
64
- lines.push(phaseLine("setup", "Android SDK, warm state"));
65
- lines.push(phaseLine("caches", "Metro, Gradle, ccache, build provider"));
66
- lines.push(phaseLine("devices", "remote device"));
67
- }
68
- lines.push("", "Expo and React Native");
69
- lines.push(phaseLine("services", "EAS session"));
70
- lines.push(phaseLine("fingerprint", "parity when dependencies are absent"));
71
- lines.push("", "Handled automatically");
72
- const suppliedCaches = platform === "ios" ? "Metro transform store, Xcode compilation cache" : platform === "android" ? "Metro transform store, Gradle build cache, ccache" : "Metro transform store, Xcode compilation cache, Gradle build cache, ccache";
73
- lines.push(phaseLine("caches", suppliedCaches));
74
- lines.push(phaseLine("meaning", "missing project cache settings are healthy"));
75
- return lines;
76
- }
77
- //#endregion
78
- export { reactNativeProjectDoctor };