stim 1.17.2 → 1.18.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 (150) hide show
  1. package/README.md +50 -1
  2. package/dist/{activity-IRvJY_ru.mjs → activity-BxnkDZDi.mjs} +4 -4
  3. package/dist/{agent-device-usage-output-BK41vnzN.mjs → agent-device-usage-output-CZ66YA4T.mjs} +8 -8
  4. package/dist/android-BKA16DTf.mjs +4 -0
  5. package/dist/{android-B9yaNKwa.mjs → android-BvwuMUJ9.mjs} +192 -98
  6. package/dist/{android-DE4v59Mb.mjs → android-CBwCNicO.mjs} +2 -2
  7. package/dist/{android-B_YNZy61.mjs → android-DC3ZLuw0.mjs} +9 -9
  8. package/dist/{android-cas-ZFpjJBL_.mjs → android-cas-BBFyr9CA.mjs} +5 -5
  9. package/dist/android-cas-compiler.mjs +2 -2
  10. package/dist/api-D0VtFhqk.mjs +152 -0
  11. package/dist/api-run.d.mts +1 -0
  12. package/dist/api-run.mjs +145 -0
  13. package/dist/api.d.mts +212 -0
  14. package/dist/api.mjs +2 -0
  15. package/dist/{app-install-VPkI5WEg.mjs → app-install-D-PUENug.mjs} +3 -3
  16. package/dist/{attempt-Bk2ouQVL.mjs → attempt-DW-mQqM7.mjs} +14 -4
  17. package/dist/{budget-DfcgFdQB.mjs → budget-DIhL2BKx.mjs} +1578 -58
  18. package/dist/build-facts-DcLv2HSd.d.mts +111 -0
  19. package/dist/{cache-manifest-DnUHBJaU.mjs → cache-manifest-BI7ozfmH.mjs} +3 -3
  20. package/dist/cache-manifest.mjs +1 -1
  21. package/dist/{chrome-BrcVWQyD.mjs → chrome-DJnmnS5q.mjs} +1 -1
  22. package/dist/cli-DNJMwADx.mjs +68 -0
  23. package/dist/cli.mjs +1 -1
  24. package/dist/{client-SvBdgObD.mjs → client-DzhapoMB.mjs} +139 -32
  25. package/dist/collector-run.mjs +9 -9
  26. package/dist/{command-output-CDAIFD-8.mjs → command-output-CBtzyIgF.mjs} +2 -2
  27. package/dist/{config-D0DbpZtM.mjs → config-CgYMahz7.mjs} +5 -5
  28. package/dist/{created-devices-CpvzBL25.mjs → created-devices-DKbeWsiK.mjs} +2 -2
  29. package/dist/{dependency-state-CLcBHH2M.mjs → dependency-state-xKoOypBm.mjs} +2 -2
  30. package/dist/{detached-entry-CiTEgMR1.mjs → detached-entry-BLfcgc4O.mjs} +1 -1
  31. package/dist/{dev-client-B-XC4uRH.mjs → dev-client-CLnIH02x.mjs} +2 -2
  32. package/dist/{device-C8IOoJPv.mjs → device-D7oCHGWi.mjs} +8 -8
  33. package/dist/{device-capacity-ZC4XSZ4R.mjs → device-capacity-EUOOYr8T.mjs} +13 -13
  34. package/dist/device-host-worker.mjs +19 -19
  35. package/dist/{device-ios-C2Um-XUR.mjs → device-ios-6MewKKnc.mjs} +13 -13
  36. package/dist/{device-lease-DpoS36_u.mjs → device-lease-Co-EwifR.mjs} +9 -9
  37. package/dist/{device-lease-run-B8YltIH_.mjs → device-lease-run-w1xhCqIW.mjs} +4 -4
  38. package/dist/{device-pool-3o7s5lo4.mjs → device-pool-F5WvRPtD.mjs} +3 -3
  39. package/dist/{device-remote-hFSkpfQu.mjs → device-remote-tHbd1fKy.mjs} +15 -15
  40. package/dist/{doctor-CFv1fCrF.mjs → doctor-B9ckYUoU.mjs} +33 -30
  41. package/dist/{error-diagnostics-C-NMnhrk.mjs → error-diagnostics-BRXOqDzG.mjs} +11 -11
  42. package/dist/{exec-CaErVv7t.mjs → exec-DWhCZDGm.mjs} +65 -2
  43. package/dist/{gc-DEmkg3Xh.mjs → gc-Dh6mXOKC.mjs} +23 -469
  44. package/dist/{gradle-dJpre3Yn.mjs → gradle-C6GKnunQ.mjs} +6 -6
  45. package/dist/{guide-status-Du-ZQ3FD.mjs → guide-status-Bhf9SJXc.mjs} +3 -3
  46. package/dist/{guide-CSmhMTf8.mjs → guide-tm6igAaa.mjs} +290 -53
  47. package/dist/{hosted-android-E1Heoqnv.mjs → hosted-android-Bv285t_t.mjs} +3 -3
  48. package/dist/{hosted-client-Bp4knSwu.mjs → hosted-client-C-rMtppF.mjs} +2 -2
  49. package/dist/{hosted-ios-BnbeYOUD.mjs → hosted-ios-D5mNmtj4.mjs} +1 -1
  50. package/dist/{hosted-logs-OcgIBvCT.mjs → hosted-logs-DN8Iz4mJ.mjs} +9 -9
  51. package/dist/{hosted-macos-DcxKjtfH.mjs → hosted-macos-B-wEjlwG.mjs} +5 -5
  52. package/dist/{hosted-native-1Ebbig4w.mjs → hosted-native-DeeOG8xZ.mjs} +6 -6
  53. package/dist/{idle-shutdown-IGyNV8Cr.mjs → idle-shutdown-jjtxAn5C.mjs} +7 -8
  54. package/dist/{ios-DSfnPfse.mjs → ios-B3SbOWdw.mjs} +19 -7
  55. package/dist/{ios-Cr1h5gnO.mjs → ios-Bvbf0SGY.mjs} +1 -1
  56. package/dist/{ios-BJ4XUSe1.mjs → ios-CPdkoKaa.mjs} +181 -95
  57. package/dist/ios-DNpdygiv.mjs +7 -0
  58. package/dist/{ios-device-Ee7sDXfp.mjs → ios-device-Bn7jWDB1.mjs} +1 -1
  59. package/dist/{ios-device-pAN4t54-.mjs → ios-device-vOaByMhw.mjs} +3 -3
  60. package/dist/{ios-state-8L3lgum6.mjs → ios-state-B2pES6Vs.mjs} +1 -1
  61. package/dist/{launch-verify-lTnWZikR.mjs → launch-verify-hskNcWkZ.mjs} +5 -5
  62. package/dist/{logs-BAaS7gS2.mjs → logs-1Ylc1Ri6.mjs} +13 -13
  63. package/dist/macos-Ck7OBMNY.mjs +2 -0
  64. package/dist/{macos-BIRQS90f.mjs → macos-DF6C7wUU.mjs} +118 -34
  65. package/dist/macos-run.mjs +1 -1
  66. package/dist/maintenance-run.mjs +349 -47
  67. package/dist/{metro-g8NqiJp-.mjs → metro-Dh8T4Ytd.mjs} +5 -5
  68. package/dist/{metro-gateway-C-ijGI2F.mjs → metro-gateway-CEUw9RMH.mjs} +4 -4
  69. package/dist/{metro-store-CDDZHtPl.mjs → metro-store-BAHFcJm6.mjs} +16 -2
  70. package/dist/{named-ports-C8m8EQs2.mjs → named-ports-BFIz1Shz.mjs} +61 -6
  71. package/dist/{native-run-D1Q56rAD.mjs → native-run-B06FkmZx.mjs} +4 -4
  72. package/dist/{native-runtime-BEK171xQ.mjs → native-runtime-D_603JiC.mjs} +6 -6
  73. package/dist/{ndjson-PclOIwVY.mjs → ndjson-LGZAMsqa.mjs} +8 -4
  74. package/dist/offload-worker.d.mts +3 -17
  75. package/dist/offload-worker.mjs +10 -11
  76. package/dist/{ownership-DyRQru0q.mjs → ownership-D6Se7gg_.mjs} +3 -3
  77. package/dist/{page-QF_Ke10s.mjs → page-Bv9s2KwY.mjs} +1 -1
  78. package/dist/placement-log-BcPhRwR4.mjs +84 -0
  79. package/dist/{build-plan-BDsSi09V.mjs → plan-placement-CtxkCO54.mjs} +122 -48
  80. package/dist/{ports-4nYqxPWC.mjs → ports-BLTtfBq-.mjs} +3 -3
  81. package/dist/{prebuild-D7RUMkwN.mjs → prebuild-juCyreaR.mjs} +5 -5
  82. package/dist/preview-D5V07Nrl.mjs +987 -0
  83. package/dist/{rolldown-runtime-BsOwBuO_.mjs → process-identity-Biv3arCO.mjs} +11 -1
  84. package/dist/{project-D47Rh0ly.mjs → project-C3ChRLZy.mjs} +4 -68
  85. package/dist/projects-DD7dBTCj.mjs +92 -0
  86. package/dist/{pull-request-pxnDCQzn.mjs → pull-request-u4vp7zmK.mjs} +1 -1
  87. package/dist/pull-requests.mjs +1 -1
  88. package/dist/{recordings-BNgsD1Tr.mjs → recordings-BAWltsVt.mjs} +1 -1
  89. package/dist/{reload-DcRxj3qG.mjs → reload-DvyWzVjJ.mjs} +15 -15
  90. package/dist/{remote-cache-Ci4DQYYj.mjs → remote-cache-BGg7aGIZ.mjs} +5 -5
  91. package/dist/{run-CkE9y0nc.mjs → run-vhtDgpHO.mjs} +5 -5
  92. package/dist/{server-bare-BkrSxSsZ.mjs → server-bare-B9E7S1aR.mjs} +4 -5
  93. package/dist/server-expo-Db9HBUoa.mjs +2 -0
  94. package/dist/{server-expo-CHTyXD0G.mjs → server-expo-DoBHhuzK.mjs} +5 -6
  95. package/dist/{settings-SR9OmW9h.mjs → settings-Byp2AQ_E.mjs} +6 -5
  96. package/dist/{settings-Cfd-0r2d.mjs → settings-CQyMElEP.mjs} +24 -763
  97. package/dist/{settings-BBpMcDbD.mjs → settings-Djl-mpjX.mjs} +1 -1
  98. package/dist/settings.schema.json +126 -3
  99. package/dist/{simslim-BWNrc3M3.mjs → simslim-EHBQ2R4G.mjs} +7 -7
  100. package/dist/{slot-launch-DmjBmpQV.mjs → slot-launch-C1nqh4mu.mjs} +6 -6
  101. package/dist/{spawn-claims-D0XfSe8u.mjs → spawn-claims-Kqiifsk2.mjs} +1 -1
  102. package/dist/{spawn-entry-jw19m8Nl.mjs → spawn-entry-Dcb7sDUz.mjs} +1 -0
  103. package/dist/{stage-CzaiwFsI.mjs → stage-g_WqWeaE.mjs} +14 -3
  104. package/dist/{start-DUz3mYdb.mjs → start-D-IeOyoK.mjs} +19 -19
  105. package/dist/{start-AlfCPRVU.mjs → start-NTc1Ifqs.mjs} +1 -1
  106. package/dist/{state-PeQiJuIu.mjs → state-BG-aAk4k.mjs} +4 -4
  107. package/dist/{state-B4PQFXMW.d.mts → state-lKh8shBp.d.mts} +2 -3
  108. package/dist/{state-DyaNTgfR.mjs → state-xnqpx3AD.mjs} +2 -2
  109. package/dist/{stats-Bq4fJOdB.mjs → stats-DY6ekz8F.mjs} +5 -5
  110. package/dist/{status-DlKvVJBE.mjs → status-BEeL6IKz.mjs} +6 -4
  111. package/dist/{status-BA2pehwf.mjs → status-DCjZeE-K.mjs} +33 -34
  112. package/dist/{status-CzS4bPO9.mjs → status-Dcr0Qexd.mjs} +5 -5
  113. package/dist/{stim-desktop-Cnz8CPnl.mjs → stim-desktop-Behws_fi.mjs} +1 -1
  114. package/dist/{stim-installations-QMEI32v1.mjs → stim-installations-aR_WsNOA.mjs} +1 -1
  115. package/dist/{stop-BIiM49EY.mjs → stop-BGhKMOuH.mjs} +5 -5
  116. package/dist/{stop-DQIasgKp.mjs → stop-BTjs3xbc.mjs} +17 -18
  117. package/dist/{stop-zF1y04f2.mjs → stop-DIJtD2GL.mjs} +2 -2
  118. package/dist/supervisor-run.d.mts +24 -22
  119. package/dist/supervisor-run.mjs +21 -22
  120. package/dist/{support-CsJNVfOc.mjs → support-BaayeYCf.mjs} +7 -7
  121. package/dist/{support-WvD__tSV.mjs → support-Bwvbrq5-.mjs} +5 -5
  122. package/dist/{toolchain-DNyR3NPq.mjs → toolchain-Bnyd_K3A.mjs} +471 -22
  123. package/dist/{trigger-Bemu8ytw.mjs → trigger-CJMhwXe8.mjs} +5 -5
  124. package/dist/trigger-DWAq9hkw.mjs +2 -0
  125. package/dist/{warm-progress-DF4JRvYI.mjs → warm-progress-CjB-MP6H.mjs} +7 -7
  126. package/dist/web-B6_bFDn7.mjs +2 -0
  127. package/dist/{web-Dl0KSRHf.mjs → web-DTU0uiWj.mjs} +22 -22
  128. package/dist/web-run.mjs +10 -10
  129. package/dist/{workspace-state-DqcCbpE7.mjs → workspace-state-C59dqG-Z.mjs} +3 -3
  130. package/dist/{ownership-BMLqyBgJ.mjs → workspaces-xXItD8Dj.mjs} +577 -23
  131. package/dist/{worktree-j3IcFAI5.mjs → worktree-BJfnU6r5.mjs} +1 -1
  132. package/dist/{worktree-Be_7NLKy.mjs → worktree-BSYlofkq.mjs} +234 -35
  133. package/dist/worktree-CsKYexJM.mjs +753 -0
  134. package/package.json +10 -5
  135. package/dist/build-progress-D0WkjCPd.mjs +0 -1036
  136. package/dist/build-slots-41v_d2x9.mjs +0 -142
  137. package/dist/cli-CYXb29oE.mjs +0 -51
  138. package/dist/deps-iKw0eD4P.mjs +0 -438
  139. package/dist/errors-B6W7FkxQ.mjs +0 -15
  140. package/dist/idle-BXG__1BA.mjs +0 -176
  141. package/dist/in-use-CvGOUn-x.mjs +0 -130
  142. package/dist/preview-B-g9d7kV.mjs +0 -318
  143. package/dist/process-identity-BmRm1qV0.mjs +0 -12
  144. package/dist/server-expo-CeakhI8P.mjs +0 -2
  145. package/dist/state-BKa8wNN5.mjs +0 -148
  146. package/dist/stop-cause-rhmGfwvt.mjs +0 -97
  147. package/dist/trigger-CXts6qt1.mjs +0 -2
  148. package/dist/watchman-APYjXSQa.mjs +0 -48
  149. package/dist/workspace-process-lock-2mNzOlaB.mjs +0 -58
  150. package/dist/workspaces-Bcib97-6.mjs +0 -306
@@ -27,4 +27,14 @@ var __copyProps = (to, from, except, desc) => {
27
27
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
28
28
  var __require = /* #__PURE__ */ (() => createRequire(import.meta.url))();
29
29
  //#endregion
30
- export { __require as i, __exportAll as n, __reExport as r, __commonJSMin as t };
30
+ //#region src/ownership-claim.ts
31
+ var ownership_claim_exports = /* @__PURE__ */ __exportAll({});
32
+ import * as import__stim_cli_core_ownership_claim from "@stim-cli/core/ownership-claim";
33
+ __reExport(ownership_claim_exports, import__stim_cli_core_ownership_claim);
34
+ //#endregion
35
+ //#region src/process-identity.ts
36
+ var process_identity_exports = /* @__PURE__ */ __exportAll({});
37
+ import * as import__stim_cli_core_process_identity from "@stim-cli/core/process-identity";
38
+ __reExport(process_identity_exports, import__stim_cli_core_process_identity);
39
+ //#endregion
40
+ export { __require as i, ownership_claim_exports as n, __commonJSMin as r, process_identity_exports as t };
@@ -1,8 +1,8 @@
1
- import { _ as loadConfig$1, g as isPathPrefix, l as findEnclosingWorktreeRoot, p as getProject } from "./config-D0DbpZtM.mjs";
2
- import { U as webSettings, gt as repoRoot, z as settingValueAt } from "./settings-Cfd-0r2d.mjs";
3
- import { existsSync, readFileSync, readdirSync, realpathSync } from "fs";
1
+ import { _ as loadConfig$1, g as isPathPrefix, l as findEnclosingWorktreeRoot, p as getProject } from "./config-CgYMahz7.mjs";
2
+ import { y as repoRoot } from "./worktree-CsKYexJM.mjs";
4
3
  import { basename, dirname, join, resolve } from "path";
5
4
  import { findProjectRoot, findProjectRoot as findProjectRoot$1 } from "@stim-cli/core/state";
5
+ import { existsSync, readFileSync, realpathSync } from "fs";
6
6
  //#region src/workspace/project.ts
7
7
  /**
8
8
  * The realpath of `name`'s package.json in the nearest `node_modules` at or above `projectRoot`.
@@ -158,70 +158,6 @@ function detectTutorial(appJson) {
158
158
  const version = typeof extra === "object" && extra !== null ? extra.stimTutorial : null;
159
159
  return typeof version === "number" && Number.isInteger(version) && version > 0 ? { version } : void 0;
160
160
  }
161
- function detectPlatforms(root, settings) {
162
- const platforms = /* @__PURE__ */ new Set();
163
- const product = settingValueAt(settings, "macos.product");
164
- const infoPlist = settingValueAt(settings, "macos.infoPlist");
165
- if (existsSync(join(root, "Package.swift")) && product && infoPlist) platforms.add("macos");
166
- if (webSettings(settings).url !== null) platforms.add("web");
167
- const pkg = readPackageJson(root);
168
- const deps = {
169
- ...pkg?.dependencies,
170
- ...pkg?.devDependencies
171
- };
172
- if (detectIsExpo(root)) {
173
- const appJson = readAppJson(root);
174
- const config = appJson?.expo ?? appJson;
175
- const text = readAppConfigText(root);
176
- const explicit = (text ? literalPlatforms(text) : null) ?? config?.platforms;
177
- if (Array.isArray(explicit)) {
178
- for (const platform of explicit) if (platform === "ios" || platform === "android" || platform === "web") platforms.add(platform);
179
- } else {
180
- platforms.add("ios");
181
- platforms.add("android");
182
- if ("react-native-web" in deps || isPackageResolvable(root, "react-native-web")) platforms.add("web");
183
- }
184
- } else if (declaresAppDependency(pkg)) {
185
- let ios = [];
186
- try {
187
- ios = readdirSync(join(root, "ios"));
188
- } catch {}
189
- if (ios.some((name) => name.endsWith(".xcodeproj") || name.endsWith(".xcworkspace"))) platforms.add("ios");
190
- if ([
191
- "build.gradle",
192
- "build.gradle.kts",
193
- "settings.gradle",
194
- "settings.gradle.kts"
195
- ].some((name) => existsSync(join(root, "android", name)))) platforms.add("android");
196
- }
197
- return [
198
- "ios",
199
- "android",
200
- "macos",
201
- "web"
202
- ].filter((platform) => platforms.has(platform));
203
- }
204
- function literalPlatforms(text) {
205
- const tokens = text.match(/\/\*[\s\S]*?\*\/|\/\/[^\n]*|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|`(?:\\.|[^`\\])*`|[A-Za-z_$][\w$]*|[^\s]/g)?.filter((token) => !token.startsWith("//") && !token.startsWith("/*")) ?? [];
206
- let open = 0;
207
- const index = tokens.findIndex((token, i) => {
208
- if (token === "[") open++;
209
- else if (token === "]") open--;
210
- return open === 0 && (token === "platforms" || token === "\"platforms\"" || token === "'platforms'") && tokens[i + 1] === ":";
211
- });
212
- if (index < 0 || tokens[index + 2] !== "[") return null;
213
- const platforms = [];
214
- let i = index + 3;
215
- while (tokens[i] !== "]") {
216
- const value = tokens[i]?.match(/^(['"])([a-z]+)\1$/)?.[2];
217
- if (value === void 0) return null;
218
- platforms.push(value);
219
- i++;
220
- if (tokens[i] === ",") i++;
221
- else if (tokens[i] !== "]") return null;
222
- }
223
- return tokens[i + 1] === "," || tokens[i + 1] === "}" ? platforms : null;
224
- }
225
161
  function looksLikeExpoConfig(appJson) {
226
162
  if (!appJson || typeof appJson !== "object" || Array.isArray(appJson)) return false;
227
163
  if (appJson.expo) return true;
@@ -273,4 +209,4 @@ function readAppConfigText(projectRoot) {
273
209
  return null;
274
210
  }
275
211
  //#endregion
276
- export { detectTutorial as a, findServerWorkspace as c, projectShortcut as d, readAppConfigText as f, detectPlatforms as i, isPackageResolvable as l, resolvePackageJson as m, appProjectProblem as n, findCommandWorkspace as o, readAppJson as p, detectIsExpo as r, findProjectRoot$1 as s, NO_PROJECT_REFUSAL as t, ownedDeviceLabel as u };
212
+ export { detectTutorial as a, findServerWorkspace as c, projectShortcut as d, readAppConfigText as f, resolvePackageJson as h, detectIsExpo as i, isPackageResolvable as l, readPackageJson as m, appProjectProblem as n, findCommandWorkspace as o, readAppJson as p, declaresAppDependency as r, findProjectRoot$1 as s, NO_PROJECT_REFUSAL as t, ownedDeviceLabel as u };
@@ -0,0 +1,92 @@
1
+ import { f as readAppConfigText, i as detectIsExpo, l as isPackageResolvable, m as readPackageJson, p as readAppJson, r as declaresAppDependency } from "./project-C3ChRLZy.mjs";
2
+ import { Ft as MODE_BARE, It as MODE_EXPO } from "./budget-DIhL2BKx.mjs";
3
+ import { B as settingValueAt, W as webSettings } from "./settings-CQyMElEP.mjs";
4
+ import { existsSync, readdirSync } from "node:fs";
5
+ import { join } from "node:path";
6
+ //#region src/integrations/projects.ts
7
+ const expo = {
8
+ mode: MODE_EXPO,
9
+ loadDevServer: async () => (await import("./server-expo-Db9HBUoa.mjs")).startExpoServer,
10
+ platforms(root) {
11
+ const appJson = readAppJson(root);
12
+ const config = appJson?.expo ?? appJson;
13
+ const text = readAppConfigText(root);
14
+ const explicit = (text ? literalPlatforms(text) : null) ?? config?.platforms;
15
+ if (Array.isArray(explicit)) return explicit.filter((platform) => platform === "ios" || platform === "android" || platform === "web");
16
+ const pkg = readPackageJson(root);
17
+ return [
18
+ "ios",
19
+ "android",
20
+ ..."react-native-web" in {
21
+ ...pkg?.dependencies,
22
+ ...pkg?.devDependencies
23
+ } || isPackageResolvable(root, "react-native-web") ? ["web"] : []
24
+ ];
25
+ }
26
+ };
27
+ const reactNative = {
28
+ mode: MODE_BARE,
29
+ loadDevServer: async () => (await import("./server-bare-B9E7S1aR.mjs")).startBareServer,
30
+ platforms(root) {
31
+ if (!declaresAppDependency(readPackageJson(root))) return [];
32
+ const platforms = [];
33
+ let ios = [];
34
+ try {
35
+ ios = readdirSync(join(root, "ios"));
36
+ } catch {}
37
+ if (ios.some((name) => name.endsWith(".xcodeproj") || name.endsWith(".xcworkspace"))) platforms.push("ios");
38
+ if ([
39
+ "build.gradle",
40
+ "build.gradle.kts",
41
+ "settings.gradle",
42
+ "settings.gradle.kts"
43
+ ].some((name) => existsSync(join(root, "android", name)))) platforms.push("android");
44
+ return platforms;
45
+ }
46
+ };
47
+ const swiftPackage = { platforms(root, settings) {
48
+ return existsSync(join(root, "Package.swift")) && settingValueAt(settings, "macos.product") && settingValueAt(settings, "macos.infoPlist") ? ["macos"] : [];
49
+ } };
50
+ const configuredWeb = { platforms(_root, settings) {
51
+ return webSettings(settings).url !== null ? ["web"] : [];
52
+ } };
53
+ function nativeProjectIntegration(root, isExpo = detectIsExpo) {
54
+ return isExpo(root) ? expo : reactNative;
55
+ }
56
+ function detectPlatforms(root, settings) {
57
+ const integrations = [
58
+ nativeProjectIntegration(root),
59
+ swiftPackage,
60
+ configuredWeb
61
+ ];
62
+ const platforms = new Set(integrations.flatMap((integration) => integration.platforms(root, settings)));
63
+ return [
64
+ "ios",
65
+ "android",
66
+ "macos",
67
+ "web"
68
+ ].filter((platform) => platforms.has(platform));
69
+ }
70
+ function literalPlatforms(text) {
71
+ const tokens = text.match(/\/\*[\s\S]*?\*\/|\/\/[^\n]*|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|`(?:\\.|[^`\\])*`|[A-Za-z_$][\w$]*|[^\s]/g)?.filter((token) => !token.startsWith("//") && !token.startsWith("/*")) ?? [];
72
+ let open = 0;
73
+ const index = tokens.findIndex((token, i) => {
74
+ if (token === "[") open++;
75
+ else if (token === "]") open--;
76
+ return open === 0 && (token === "platforms" || token === "\"platforms\"" || token === "'platforms'") && tokens[i + 1] === ":";
77
+ });
78
+ if (index < 0 || tokens[index + 2] !== "[") return null;
79
+ const platforms = [];
80
+ let i = index + 3;
81
+ while (tokens[i] !== "]") {
82
+ const value = tokens[i]?.match(/^(['"])([a-z]+)\1$/)?.[2];
83
+ if (value === void 0) return null;
84
+ platforms.push(value);
85
+ i++;
86
+ if (tokens[i] === ",") i++;
87
+ else if (tokens[i] !== "]") return null;
88
+ }
89
+ return tokens[i + 1] === "," || tokens[i + 1] === "}" ? platforms : null;
90
+ }
91
+ //#endregion
92
+ export { nativeProjectIntegration as n, detectPlatforms as t };
@@ -1,4 +1,4 @@
1
- import { t as getExecutor } from "./exec-CaErVv7t.mjs";
1
+ import { t as getExecutor } from "./exec-DWhCZDGm.mjs";
2
2
  //#region src/workspace/pull-request.ts
3
3
  const GH_TIMEOUT_MS = 2e4;
4
4
  const GH_ENV = {
@@ -1,2 +1,2 @@
1
- import { a as pullRequestLookup, c as worktreePullRequests, i as parseRemoteRepo, n as describePullRequest, o as pullRequestLookups, r as endedPullRequest, s as selectPullRequest, t as checkCounts } from "./pull-request-pxnDCQzn.mjs";
1
+ import { a as pullRequestLookup, c as worktreePullRequests, i as parseRemoteRepo, n as describePullRequest, o as pullRequestLookups, r as endedPullRequest, s as selectPullRequest, t as checkCounts } from "./pull-request-u4vp7zmK.mjs";
2
2
  export { checkCounts, describePullRequest, endedPullRequest, parseRemoteRepo, pullRequestLookup, pullRequestLookups, selectPullRequest, worktreePullRequests };
@@ -1,4 +1,4 @@
1
- import { at as gitCommonDirOnDisk } from "./settings-Cfd-0r2d.mjs";
1
+ import { c as gitCommonDirOnDisk } from "./worktree-CsKYexJM.mjs";
2
2
  import { existsSync, rmSync } from "node:fs";
3
3
  import { loadConfig, recordingEnabled, workspaceRecordingsDir } from "@stim-cli/core/state";
4
4
  //#region src/workspace/recordings.ts
@@ -1,18 +1,18 @@
1
- import { B as parseDeviceSlotKey, p as getProject, z as deviceSlotPlatforms } from "./config-D0DbpZtM.mjs";
2
- import { f as refuseNoProject, l as phaseLine } from "./command-output-CDAIFD-8.mjs";
3
- import { o as findCommandWorkspace } from "./project-D47Rh0ly.mjs";
4
- import { l as resolveProjectMetro } from "./metro-g8NqiJp-.mjs";
5
- import { i as recordWorkspaceUse, r as readWorkspaceState$1 } from "./workspace-state-DqcCbpE7.mjs";
6
- import { o as readWebRecord, r as cdpEndpoint, u as webFacts } from "./state-PeQiJuIu.mjs";
7
- import { f as readWorkspaceLaunches } from "./state-BKa8wNN5.mjs";
8
- import { J as resolveOwnedAvdSerial } from "./android-B_YNZy61.mjs";
9
- import { w as resolveOwnedIosSim } from "./ios-DSfnPfse.mjs";
10
- import { l as probeHostedSession } from "./hosted-client-Bp4knSwu.mjs";
11
- import { p as ensureMetroReverse, s as androidAppProcess, v as iosAppProcess } from "./app-install-VPkI5WEg.mjs";
12
- import { r as readHostedNative } from "./ios-state-8L3lgum6.mjs";
13
- import { r as reopenHostedAndroidMetro } from "./hosted-android-E1Heoqnv.mjs";
14
- import { n as nativeRunCommand } from "./slot-launch-DmjBmpQV.mjs";
15
- import { n as sendToOwnedPage, t as liveWebRecord } from "./page-QF_Ke10s.mjs";
1
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-CBtzyIgF.mjs";
2
+ import { B as parseDeviceSlotKey, p as getProject, z as deviceSlotPlatforms } from "./config-CgYMahz7.mjs";
3
+ import { o as findCommandWorkspace } from "./project-C3ChRLZy.mjs";
4
+ import { l as resolveProjectMetro } from "./metro-Dh8T4Ytd.mjs";
5
+ import { i as recordWorkspaceUse, r as readWorkspaceState$1 } from "./workspace-state-C59dqG-Z.mjs";
6
+ import { o as readWebRecord, r as cdpEndpoint, u as webFacts } from "./state-BG-aAk4k.mjs";
7
+ import { Kt as readWorkspaceLaunches } from "./budget-DIhL2BKx.mjs";
8
+ import { J as resolveOwnedAvdSerial } from "./android-DC3ZLuw0.mjs";
9
+ import { T as resolveOwnedIosSim } from "./ios-B3SbOWdw.mjs";
10
+ import { l as probeHostedSession } from "./hosted-client-C-rMtppF.mjs";
11
+ import { r as readHostedNative } from "./ios-state-B2pES6Vs.mjs";
12
+ import { r as reopenHostedAndroidMetro } from "./hosted-android-Bv285t_t.mjs";
13
+ import { p as ensureMetroReverse, s as androidAppProcess, v as iosAppProcess } from "./app-install-D-PUENug.mjs";
14
+ import { n as nativeRunCommand } from "./slot-launch-C1nqh4mu.mjs";
15
+ import { n as sendToOwnedPage, t as liveWebRecord } from "./page-Bv9s2KwY.mjs";
16
16
  import { hostedAndroidDeviceName, hostedNativeRecords } from "@stim-cli/core/state";
17
17
  import chalk from "chalk";
18
18
  import { WebSocket } from "ws";
@@ -1,9 +1,9 @@
1
- import { t as getExecutor } from "./exec-CaErVv7t.mjs";
1
+ import { t as getExecutor } from "./exec-DWhCZDGm.mjs";
2
2
  import { n as stripAnsi } from "./process-output-Fpl8PYi8.mjs";
3
- import { m as resolvePackageJson } from "./project-D47Rh0ly.mjs";
4
- import { x as workspaceLogsDir } from "./workspace-state-DqcCbpE7.mjs";
5
- import { r as createNdjsonWriter } from "./ndjson-PclOIwVY.mjs";
6
- import { n as expoBinFromPackage, r as expoBinPath, s as findBinUpward } from "./server-expo-CHTyXD0G.mjs";
3
+ import { h as resolvePackageJson } from "./project-C3ChRLZy.mjs";
4
+ import { x as workspaceLogsDir } from "./workspace-state-C59dqG-Z.mjs";
5
+ import { r as createNdjsonWriter } from "./ndjson-LGZAMsqa.mjs";
6
+ import { n as expoBinFromPackage, r as expoBinPath, s as findBinUpward } from "./server-expo-DoBHhuzK.mjs";
7
7
  import { createRequire } from "node:module";
8
8
  import { existsSync, readFileSync } from "node:fs";
9
9
  import { join } from "node:path";
@@ -1,9 +1,9 @@
1
- import { t as getExecutor } from "./exec-CaErVv7t.mjs";
2
- import { n as ownership_claim_exports, t as process_identity_exports } from "./process-identity-BmRm1qV0.mjs";
3
- import { i as macosRuntimeClaim, n as macosLogFile, o as updateMacosRecord, r as macosProcess } from "./state-DyaNTgfR.mjs";
4
- import { r as createNdjsonWriter } from "./ndjson-PclOIwVY.mjs";
5
- import { LOG_ROTATE_BYTES } from "@stim-cli/core";
1
+ import { n as ownership_claim_exports, t as process_identity_exports } from "./process-identity-Biv3arCO.mjs";
2
+ import { t as getExecutor } from "./exec-DWhCZDGm.mjs";
3
+ import { i as macosRuntimeClaim, n as macosLogFile, o as updateMacosRecord, r as macosProcess } from "./state-xnqpx3AD.mjs";
4
+ import { r as createNdjsonWriter } from "./ndjson-LGZAMsqa.mjs";
6
5
  import { readMacosRecord } from "@stim-cli/core/state";
6
+ import { LOG_ROTATE_BYTES } from "@stim-cli/core";
7
7
  import { StringDecoder } from "node:string_decoder";
8
8
  //#region src/macos/run.ts
9
9
  function logLines(stream, write) {
@@ -1,8 +1,7 @@
1
- import { i as __require, t as __commonJSMin } from "./rolldown-runtime-BsOwBuO_.mjs";
2
- import { t as getExecutor } from "./exec-CaErVv7t.mjs";
3
- import { D as projectMetroSharedCache } from "./settings-Cfd-0r2d.mjs";
4
- import { n as supervisorError } from "./errors-B6W7FkxQ.mjs";
5
- import { a as metroStoreRoot, o as registerMetroStore, t as appendCacheStore } from "./metro-store-CDDZHtPl.mjs";
1
+ import { i as __require, r as __commonJSMin } from "./process-identity-Biv3arCO.mjs";
2
+ import { t as getExecutor } from "./exec-DWhCZDGm.mjs";
3
+ import { O as projectMetroSharedCache } from "./settings-CQyMElEP.mjs";
4
+ import { a as metroStoreRoot, c as supervisorError, o as registerMetroStore, t as appendCacheStore } from "./metro-store-BAHFcJm6.mjs";
6
5
  import { createRequire } from "node:module";
7
6
  import { isAbsolute, join, relative, sep } from "node:path";
8
7
  //#endregion
@@ -0,0 +1,2 @@
1
+ import { p as startExpoServer } from "./server-expo-DoBHhuzK.mjs";
2
+ export { startExpoServer };
@@ -1,10 +1,9 @@
1
- import { t as getExecutor } from "./exec-CaErVv7t.mjs";
1
+ import { t as getExecutor } from "./exec-DWhCZDGm.mjs";
2
2
  import { n as stripAnsi, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
3
- import { D as projectMetroSharedCache } from "./settings-Cfd-0r2d.mjs";
4
- import { m as resolvePackageJson } from "./project-D47Rh0ly.mjs";
5
- import { n as supervisorError } from "./errors-B6W7FkxQ.mjs";
6
- import { r as createNdjsonWriter } from "./ndjson-PclOIwVY.mjs";
7
- import { a as metroStoreRoot, i as metroStoreConfirmedRoot, n as expoMetroConfigPath, o as registerMetroStore, r as expoMetroStoreEnv } from "./metro-store-CDDZHtPl.mjs";
3
+ import { h as resolvePackageJson } from "./project-C3ChRLZy.mjs";
4
+ import { O as projectMetroSharedCache } from "./settings-CQyMElEP.mjs";
5
+ import { a as metroStoreRoot, c as supervisorError, i as metroStoreConfirmedRoot, n as expoMetroConfigPath, o as registerMetroStore, r as expoMetroStoreEnv } from "./metro-store-BAHFcJm6.mjs";
6
+ import { r as createNdjsonWriter } from "./ndjson-LGZAMsqa.mjs";
8
7
  import { accessSync, constants, existsSync, readFileSync } from "node:fs";
9
8
  import { dirname, join, parse } from "node:path";
10
9
  import { LOG_ROTATE_BYTES } from "@stim-cli/core";
@@ -1,8 +1,9 @@
1
- import { D as withConfigLock$1, O as writeConfigSetting, _ as loadConfig$1, f as getConfigPath$1, h as getRepoSettings, m as getProjectSettings } from "./config-D0DbpZtM.mjs";
2
- import { A as readCommittedSettings, H as unknownSettingKeys, gt as repoRoot, it as gitCommonDir } from "./settings-Cfd-0r2d.mjs";
3
- import { o as findCommandWorkspace, t as NO_PROJECT_REFUSAL } from "./project-D47Rh0ly.mjs";
4
- import { n as settingDefault, r as stimDesktopInstalled } from "./stim-desktop-Cnz8CPnl.mjs";
5
- import { n as recordingLayers, t as deleteTurnedOffRecordings } from "./recordings-BNgsD1Tr.mjs";
1
+ import { D as withConfigLock$1, O as writeConfigSetting, _ as loadConfig$1, f as getConfigPath$1, h as getRepoSettings, m as getProjectSettings } from "./config-CgYMahz7.mjs";
2
+ import { s as gitCommonDir, y as repoRoot } from "./worktree-CsKYexJM.mjs";
3
+ import { o as findCommandWorkspace, t as NO_PROJECT_REFUSAL } from "./project-C3ChRLZy.mjs";
4
+ import { n as settingDefault, r as stimDesktopInstalled } from "./stim-desktop-Behws_fi.mjs";
5
+ import { U as unknownSettingKeys, j as readCommittedSettings } from "./settings-CQyMElEP.mjs";
6
+ import { n as recordingLayers, t as deleteTurnedOffRecordings } from "./recordings-BAWltsVt.mjs";
6
7
  import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
7
8
  import { join } from "node:path";
8
9
  import { SETTINGS, SETTING_SCOPES, coerceSettingText, isJsonObject, isSensitiveReference, settingDefinition, settingValueError } from "@stim-cli/core/state";