stim 1.13.0 → 1.15.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 (133) hide show
  1. package/README.md +2 -0
  2. package/dist/{activity-DfVKZTEB.mjs → activity-B2-kb7k0.mjs} +281 -41
  3. package/dist/{android-BHfAu2mf.mjs → android-CYmq0jNi.mjs} +2 -2
  4. package/dist/{android-CD8pr8Q2.mjs → android-Cu_L4RpL.mjs} +524 -412
  5. package/dist/{android-qx_31wJo.mjs → android-Db2eEMaf.mjs} +152 -65
  6. package/dist/android-cas-PnKfAdB2.mjs +167 -0
  7. package/dist/android-cas-compiler.mjs +2 -2
  8. package/dist/{app-install-CDFY2nUL.mjs → app-install-CAAplXAt.mjs} +162 -173
  9. package/dist/{budget-E5o91NR1.mjs → budget-CMiqghig.mjs} +1048 -77
  10. package/dist/{build-plan-BTa93o_r.mjs → build-plan-aeGMFX7e.mjs} +193 -650
  11. package/dist/build-progress-C2Jv1AtA.mjs +872 -0
  12. package/dist/build-slots-Df1ApSuH.mjs +127 -0
  13. package/dist/{cache-manifest-DWPF4RKJ.mjs → cache-manifest-DnUHBJaU.mjs} +2 -2
  14. package/dist/cache-manifest.mjs +1 -1
  15. package/dist/{chrome-B5hWgQJS.mjs → chrome-BrcVWQyD.mjs} +4 -4
  16. package/dist/cli-0cX5s4NM.mjs +45 -0
  17. package/dist/cli.mjs +6 -42
  18. package/dist/client-C2IS36Qf.mjs +1333 -0
  19. package/dist/collector-run.mjs +8 -7
  20. package/dist/{command-output-BIL7rlX7.mjs → command-output-CliHHn7a.mjs} +1 -1
  21. package/dist/{config-0jCcMM0E.mjs → config-D0DbpZtM.mjs} +29 -29
  22. package/dist/{created-devices-Cd558h31.mjs → created-devices-BwVb3liH.mjs} +2 -2
  23. package/dist/{dependency-state-DNN0yfx6.mjs → dependency-state-BmsjKZ2H.mjs} +2 -2
  24. package/dist/{deps-2Wo81np9.mjs → deps-BFlKbOIp.mjs} +3 -3
  25. package/dist/{detached-entry-DJHoca49.mjs → detached-entry-CiTEgMR1.mjs} +1 -1
  26. package/dist/dev-client-CjzLoNs0.mjs +80 -0
  27. package/dist/{device-Cf7vl-so.mjs → device-BZ1IyS5A.mjs} +7 -7
  28. package/dist/device-capacity-DMuKC7nx.mjs +136 -0
  29. package/dist/device-host-worker.d.mts +1 -0
  30. package/dist/device-host-worker.mjs +769 -0
  31. package/dist/device-ios-DMQBUPus.mjs +381 -0
  32. package/dist/{device-lease-CL9dZf73.mjs → device-lease-W5Pi1q38.mjs} +43 -36
  33. package/dist/{device-pool-MuoiyRcu.mjs → device-pool-B2r38YjS.mjs} +4 -4
  34. package/dist/{device-remote-DT9ngZiD.mjs → device-remote-9ulPsdhY.mjs} +68 -162
  35. package/dist/{doctor-D2iysNNH.mjs → doctor-BcE5xsBn.mjs} +191 -99
  36. package/dist/{error-diagnostics-BoiOhck8.mjs → error-diagnostics-Cb0P1WLS.mjs} +12 -11
  37. package/dist/{exec-DK8KaVHK.mjs → exec-CaErVv7t.mjs} +5 -1
  38. package/dist/{gc-eA-PRBX8.mjs → gc-BuL1Genr.mjs} +430 -102
  39. package/dist/{android-cas-B9Kv9aIy.mjs → gradle-CmdOBq1d.mjs} +8 -294
  40. package/dist/{guide-BfZ0OmiP.mjs → guide-cCSGRFd3.mjs} +2052 -240
  41. package/dist/{guide-status-BaMYu55M.mjs → guide-status-CIoWK6mG.mjs} +3 -3
  42. package/dist/hosted-macos-DwowNU7W.mjs +447 -0
  43. package/dist/idle-shutdown-B5LPaNyY.mjs +122 -0
  44. package/dist/in-use-CndPMilN.mjs +110 -0
  45. package/dist/{ios-CmEzZiOj.mjs → ios-3CtCRhwr.mjs} +201 -10
  46. package/dist/{ios-CcfCeZ19.mjs → ios-Chob8ny7.mjs} +560 -259
  47. package/dist/{ios-device-BW-t_Lkv.mjs → ios-device-DERmMmk-.mjs} +12 -7
  48. package/dist/{ios-device-BiOsSVzd.mjs → ios-device-Ee7sDXfp.mjs} +1 -1
  49. package/dist/{launch-verify-CuJaBpEa.mjs → launch-verify-CLlofxRt.mjs} +42 -11
  50. package/dist/{logs-DcSRbC2t.mjs → logs-h9h6MUvE.mjs} +95 -13
  51. package/dist/machine-usage-D_YYMzfR.mjs +283 -0
  52. package/dist/machines-CYtOCqcj.mjs +259 -0
  53. package/dist/macos-BwtbUtTN.mjs +468 -0
  54. package/dist/macos-run.d.mts +5 -0
  55. package/dist/macos-run.mjs +2 -0
  56. package/dist/{merge-state-ytFQCeh4.mjs → merge-state-BnxLNQiM.mjs} +22 -12
  57. package/dist/{metro-BPeY1YMh.mjs → metro-Di8EN2Tb.mjs} +20 -120
  58. package/dist/{named-ports-n7tnJsI8.mjs → named-ports-Dj_XBNaL.mjs} +8 -64
  59. package/dist/native-run-DFDoIRbY.mjs +147 -0
  60. package/dist/{native-runtime-CiiFHt0e.mjs → native-runtime-i6OkVg-w.mjs} +11 -6
  61. package/dist/offload-worker.d.mts +121 -0
  62. package/dist/offload-worker.mjs +601 -0
  63. package/dist/{ownership-Bz2kETAS.mjs → ownership-BkYxUtuj.mjs} +3 -2
  64. package/dist/{page-BTu7I60K.mjs → page-QF_Ke10s.mjs} +7 -2
  65. package/dist/{ports-C5UutqpJ.mjs → ports-DddwttKM.mjs} +3 -3
  66. package/dist/prebuild-BvxDlD6C.mjs +213 -0
  67. package/dist/process-identity-BmRm1qV0.mjs +12 -0
  68. package/dist/{project-DGeclhvO.mjs → project-CV3tDFHl.mjs} +9 -18
  69. package/dist/pull-request-pxnDCQzn.mjs +322 -0
  70. package/dist/pull-requests.d.mts +120 -0
  71. package/dist/pull-requests.mjs +2 -0
  72. package/dist/recordings-GEXp4iBT.mjs +37 -0
  73. package/dist/{reload-C-cV5yy_.mjs → reload-ChPiwvot.mjs} +70 -22
  74. package/dist/{remote-cache--aehr4Pr.mjs → remote-cache-CO2elm_b.mjs} +4 -4
  75. package/dist/run-B-xqRrsg.mjs +119 -0
  76. package/dist/{server-bare-Bq8BpSIo.mjs → server-bare-X7PUgizL.mjs} +60 -13
  77. package/dist/{server-expo-DUCg52-K.mjs → server-expo-DhtX6bom.mjs} +6 -10
  78. package/dist/server-expo-KJeD109I.mjs +2 -0
  79. package/dist/{settings-xB0Frkg6.mjs → settings-CduVcoxj.mjs} +77 -26
  80. package/dist/{settings-ssVBToDR.mjs → settings-DbL6uhH8.mjs} +16 -10
  81. package/dist/settings.schema.json +357 -2
  82. package/dist/{simslim-Bbg9UWrt.mjs → simslim-Ciluxlq4.mjs} +8 -132
  83. package/dist/slot-launch-BY0BrOLh.mjs +65 -0
  84. package/dist/{spawn-claims-PT8aQpCa.mjs → spawn-claims-D0XfSe8u.mjs} +1 -1
  85. package/dist/spawn-entry-DncpJvWL.mjs +16 -0
  86. package/dist/stage-CzaiwFsI.mjs +143 -0
  87. package/dist/start-CPO4wRg7.mjs +2 -0
  88. package/dist/{start-BZhItkiL.mjs → start-CUD9nasA.mjs} +108 -61
  89. package/dist/state-B4PQFXMW.d.mts +12 -0
  90. package/dist/state-BxCgeTQu.mjs +41 -0
  91. package/dist/{state-DwAU2_-D.mjs → state-CaeaHbDA.mjs} +7 -4
  92. package/dist/{state-l1pYwOre.mjs → state-DFm77wRn.mjs} +67 -5
  93. package/dist/stats-DBLLFmKd.mjs +66 -0
  94. package/dist/{status-TJlL0HWo.mjs → status-DYXxNOT0.mjs} +425 -260
  95. package/dist/{status-sszP4XKU.mjs → status-l84Gbvp2.mjs} +122 -20
  96. package/dist/stdout-reader-C8yjre1x.mjs +23 -0
  97. package/dist/stim-desktop-Cnz8CPnl.mjs +63 -0
  98. package/dist/stim-footprint.swift +32 -0
  99. package/dist/{stim-installations-CINXy_su.mjs → stim-installations-QMEI32v1.mjs} +1 -1
  100. package/dist/{stop-BZ2qMiBP.mjs → stop-Bad61z_2.mjs} +128 -19
  101. package/dist/stop-Bvf1MflS.mjs +48 -0
  102. package/dist/{stop-DskDKNTU.mjs → stop-CceYh1yG.mjs} +2 -2
  103. package/dist/stop-cause-CZ_Mr-v9.mjs +665 -0
  104. package/dist/supervisor-run.d.mts +44 -12
  105. package/dist/supervisor-run.mjs +276 -33
  106. package/dist/support-CDQbDkL5.mjs +315 -0
  107. package/dist/support-WLOzVKUv.mjs +176 -0
  108. package/dist/teardown-BYuQafiA.mjs +718 -0
  109. package/dist/{xcode-LM6A8cNZ.mjs → toolchain-DmeYjXD9.mjs} +363 -13
  110. package/dist/warm-progress-DVHLN4uC.mjs +463 -0
  111. package/dist/{idle-DxLi5OkN.mjs → watchman-Bx0wceoF.mjs} +55 -8
  112. package/dist/{web-sWXd5iek.mjs → web-k6w8-HnE.mjs} +39 -22
  113. package/dist/web-run.mjs +326 -13
  114. package/dist/workspace-process-lock-BL7Q0HCO.mjs +57 -0
  115. package/dist/workspace-state-CL2V2Ons.mjs +371 -0
  116. package/dist/worktree-BT_uULFx.mjs +2 -0
  117. package/dist/{worktree-DeBQSVtR.mjs → worktree-C0c5Udwa.mjs} +55 -54
  118. package/dist/{worktree-D4Do_XiQ.mjs → worktree-qXKzADSC.mjs} +161 -255
  119. package/package.json +10 -5
  120. package/shim/bundle-response.cjs +55 -10
  121. package/shim/bundle-response.d.cts +1 -0
  122. package/shim/expo-metro-config.cjs +10 -2
  123. package/dist/build-progress-l7d-X-ZP.mjs +0 -247
  124. package/dist/in-use-wYEaKQM9.mjs +0 -249
  125. package/dist/ownership-PUP4Dwai.mjs +0 -1138
  126. package/dist/server-expo-BeYwP_Xy.mjs +0 -2
  127. package/dist/slot-launch-BIWEW-wI.mjs +0 -19
  128. package/dist/start-Rw2GD3nV.mjs +0 -2
  129. package/dist/stats-CaSwmsSZ.mjs +0 -62
  130. package/dist/stats-D8rUTPHd.mjs +0 -368
  131. package/dist/stim-desktop-CXt8-Z3J.mjs +0 -40
  132. package/dist/worktree-3cBa-bQt.mjs +0 -2
  133. package/dist/{metro-store-DzeWkfqW.mjs → metro-store-CDDZHtPl.mjs} +1 -1
@@ -1,23 +1,23 @@
1
- import { _ as loadConfig, d as getConfigDir } from "./config-0jCcMM0E.mjs";
2
- import { t as getExecutor } from "./exec-DK8KaVHK.mjs";
1
+ import { t as getExecutor } from "./exec-CaErVv7t.mjs";
2
+ import { _ as loadConfig, d as getConfigDir } from "./config-D0DbpZtM.mjs";
3
3
  import { accessSync, chmodSync, constants, lstatSync, mkdirSync, mkdtempSync, readdirSync, realpathSync, rmSync, statSync } from "node:fs";
4
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
4
5
  import { chmodSync as chmodSync$1, existsSync as existsSync$1, lstatSync as lstatSync$1, mkdirSync as mkdirSync$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1, realpathSync as realpathSync$1, statSync as statSync$1, utimesSync } from "fs";
5
- import { dirname, isAbsolute, join, relative, resolve, sep } from "path";
6
+ import { dirname as dirname$1, isAbsolute as isAbsolute$1, join as join$1, relative as relative$1, resolve as resolve$1, sep as sep$1 } from "path";
6
7
  import { buildCacheRoot } from "@stim-cli/core";
7
- import { basename as basename$1, dirname as dirname$1, isAbsolute as isAbsolute$1, join as join$1, relative as relative$1, resolve as resolve$1, sep as sep$1 } from "node:path";
8
8
  import { tmpdir } from "node:os";
9
9
  //#region src/temporary.ts
10
10
  function existingPath(path) {
11
11
  const missing = [];
12
- let current = resolve$1(path);
12
+ let current = resolve(path);
13
13
  while (!lstatSync(current, { throwIfNoEntry: false })) {
14
- missing.unshift(basename$1(current));
15
- current = dirname$1(current);
14
+ missing.unshift(basename(current));
15
+ current = dirname(current);
16
16
  }
17
17
  const existing = realpathSync(current);
18
18
  return {
19
19
  existing,
20
- resolved: join$1(existing, ...missing)
20
+ resolved: join(existing, ...missing)
21
21
  };
22
22
  }
23
23
  function filesystemDevice(path) {
@@ -26,22 +26,22 @@ function filesystemDevice(path) {
26
26
  function outsideWorkingTree(path) {
27
27
  let current = path;
28
28
  while (true) {
29
- if (lstatSync(join$1(current, ".git"), { throwIfNoEntry: false })) return false;
30
- const parent = dirname$1(current);
29
+ if (lstatSync(join(current, ".git"), { throwIfNoEntry: false })) return false;
30
+ const parent = dirname(current);
31
31
  if (parent === current) return true;
32
32
  current = parent;
33
33
  }
34
34
  }
35
35
  function inside(parent, path) {
36
- const rel = relative$1(parent, path);
37
- return rel === "" || rel !== ".." && !rel.startsWith(`..${sep$1}`) && !isAbsolute$1(rel);
36
+ const rel = relative(parent, path);
37
+ return rel === "" || rel !== ".." && !rel.startsWith(`..${sep}`) && !isAbsolute(rel);
38
38
  }
39
39
  function temporaryRoot(near) {
40
40
  const reference = existingPath(near);
41
41
  const insideReference = (path) => inside(reference.resolved, path);
42
42
  const override = process.env.STIM_TMPDIR ?? loadConfig()?.tempDir;
43
43
  if (override !== void 0) {
44
- if (typeof override !== "string" || !isAbsolute$1(override)) throw new Error("STIM_TMPDIR / tempDir must be an absolute directory path.");
44
+ if (typeof override !== "string" || !isAbsolute(override)) throw new Error("STIM_TMPDIR / tempDir must be an absolute directory path.");
45
45
  const { existing, resolved } = existingPath(override);
46
46
  if (!statSync(existing).isDirectory() || !outsideWorkingTree(existing)) throw new Error(`Temporary directory ${override} must be outside Git working trees.`);
47
47
  if (insideReference(resolved)) throw new Error(`Temporary directory ${override} must not be inside ${near}.`);
@@ -52,10 +52,10 @@ function temporaryRoot(near) {
52
52
  const cache = existingPath(buildCacheRoot()).resolved;
53
53
  const device = statSync(existing).dev;
54
54
  const candidates = [tmpdir()];
55
- let current = existing === reference.resolved || !statSync(existing).isDirectory() ? dirname$1(existing) : existing;
55
+ let current = existing === reference.resolved || !statSync(existing).isDirectory() ? dirname(existing) : existing;
56
56
  while (statSync(current).dev === device) {
57
57
  candidates.push(current);
58
- const parent = dirname$1(current);
58
+ const parent = dirname(current);
59
59
  if (parent === current) break;
60
60
  current = parent;
61
61
  }
@@ -65,7 +65,7 @@ function temporaryRoot(near) {
65
65
  accessSync(path, constants.W_OK);
66
66
  return path;
67
67
  } catch {}
68
- throw new Error(`No writable temporary directory on the filesystem containing ${near}. Set STIM_TMPDIR or tempDir in ${join$1(getConfigDir(), "config.json")} to a directory outside Git working trees.`);
68
+ throw new Error(`No writable temporary directory on the filesystem containing ${near}. Set STIM_TMPDIR or tempDir in ${join(getConfigDir(), "config.json")} to a directory outside Git working trees.`);
69
69
  }
70
70
  function makeTemporaryDirectory(near, prefix) {
71
71
  const root = temporaryRoot(near);
@@ -73,13 +73,13 @@ function makeTemporaryDirectory(near, prefix) {
73
73
  recursive: true,
74
74
  mode: 448
75
75
  });
76
- return mkdtempSync(join$1(root, prefix));
76
+ return mkdtempSync(join(root, prefix));
77
77
  }
78
78
  function removeTemporaryEntry(path) {
79
79
  const stat = lstatSync(path, { throwIfNoEntry: false });
80
80
  if (stat?.isDirectory()) {
81
81
  chmodSync(path, stat.mode | 448);
82
- for (const entry of readdirSync(path, { withFileTypes: true })) if (entry.isDirectory()) removeTemporaryEntry(join$1(path, entry.name));
82
+ for (const entry of readdirSync(path, { withFileTypes: true })) if (entry.isDirectory()) removeTemporaryEntry(join(path, entry.name));
83
83
  }
84
84
  rmSync(path, {
85
85
  recursive: true,
@@ -91,13 +91,14 @@ function removeTemporaryEntry(path) {
91
91
  const CARRY_SKIP_BASENAMES = /* @__PURE__ */ new Set([
92
92
  ".DerivedData",
93
93
  ".DS_Store",
94
- ".idea"
94
+ ".idea",
95
+ ".jj"
95
96
  ]);
96
97
  function isCarrySkipped(rel) {
97
98
  return /(^|\/)android\/build\/generated\/autolinking(\/|$)/.test(rel) || String(rel).split("/").some((seg) => CARRY_SKIP_BASENAMES.has(seg));
98
99
  }
99
100
  function nativePath(path) {
100
- return sep === "/" ? path : path.replaceAll("/", sep);
101
+ return sep$1 === "/" ? path : path.replaceAll("/", sep$1);
101
102
  }
102
103
  function gitCommonDir(cwd) {
103
104
  const out = getExecutor().runFileQuiet("git", [
@@ -176,7 +177,7 @@ function matchesInclude(path, patterns) {
176
177
  return false;
177
178
  }
178
179
  function readWorktreeExclude(root) {
179
- return readPatternFile(join(root, ".worktreeexclude"));
180
+ return readPatternFile(join$1(root, ".worktreeexclude"));
180
181
  }
181
182
  function readPatternFile(p) {
182
183
  if (!existsSync$1(p)) return null;
@@ -186,7 +187,7 @@ function canonicalPath(path) {
186
187
  try {
187
188
  return realpathSync$1(path);
188
189
  } catch {
189
- return resolve(path);
190
+ return resolve$1(path);
190
191
  }
191
192
  }
192
193
  function nestedWorktreePaths(root) {
@@ -201,9 +202,9 @@ function nestedWorktreePaths(root) {
201
202
  ]);
202
203
  if (out === null) throw new Error("Could not list Git worktrees. Refusing to carry ignored files.");
203
204
  for (const entry of parseWorktrees(out)) {
204
- const rel = relative(source, canonicalPath(entry.path));
205
- if (!rel || rel === ".." || rel.startsWith(`..${sep}`) || isAbsolute(rel)) continue;
206
- paths.add(rel.split(sep).join("/"));
205
+ const rel = relative$1(source, canonicalPath(entry.path));
206
+ if (!rel || rel === ".." || rel.startsWith(`..${sep$1}`) || isAbsolute$1(rel)) continue;
207
+ paths.add(rel.split(sep$1).join("/"));
207
208
  }
208
209
  return [...paths];
209
210
  }
@@ -263,11 +264,11 @@ function missingDestinationReason(target, rel) {
263
264
  const parts = rel.split("/");
264
265
  for (let i = 1; i < parts.length; i++) {
265
266
  const parent = parts.slice(0, i).join("/");
266
- const stat = lstatSync$1(join(target, parent), { throwIfNoEntry: false });
267
+ const stat = lstatSync$1(join$1(target, parent), { throwIfNoEntry: false });
267
268
  if (stat?.isSymbolicLink()) return `symlink ancestor: ${parent}`;
268
269
  if (stat && !stat.isDirectory()) return `non-directory ancestor: ${parent}`;
269
270
  }
270
- return lstatSync$1(join(target, rel), { throwIfNoEntry: false }) ? "exists" : null;
271
+ return lstatSync$1(join$1(target, rel), { throwIfNoEntry: false }) ? "exists" : null;
271
272
  }
272
273
  function removeCopiedExclusions(path, rel) {
273
274
  const entries = readdirSync$1(path, { withFileTypes: true });
@@ -276,7 +277,7 @@ function removeCopiedExclusions(path, rel) {
276
277
  const stat = lstatSync$1(path);
277
278
  chmodSync$1(path, stat.mode | 448);
278
279
  try {
279
- for (const entry of excluded) removeTemporaryEntry(join(path, entry.name));
280
+ for (const entry of excluded) removeTemporaryEntry(join$1(path, entry.name));
280
281
  } finally {
281
282
  utimesSync(path, stat.atime, stat.mtime);
282
283
  chmodSync$1(path, stat.mode);
@@ -284,7 +285,7 @@ function removeCopiedExclusions(path, rel) {
284
285
  }
285
286
  for (const entry of entries) {
286
287
  const child = `${rel}/${entry.name}`;
287
- if (entry.isDirectory() && !isCarrySkipped(child)) removeCopiedExclusions(join(path, entry.name), child);
288
+ if (entry.isDirectory() && !isCarrySkipped(child)) removeCopiedExclusions(join$1(path, entry.name), child);
288
289
  }
289
290
  }
290
291
  function cloneIgnoredEntries({ root, target, patterns }) {
@@ -296,8 +297,8 @@ function cloneIgnoredEntries({ root, target, patterns }) {
296
297
  if (!guard.known) throw new Error("Could not list the destination's tracked files.");
297
298
  const nested = nestedWorktreePaths(target);
298
299
  for (const rel of listCarryableIgnoredEntries(root, patterns)) {
299
- const from = join(root, rel);
300
- const to = join(target, rel);
300
+ const from = join$1(root, rel);
301
+ const to = join$1(target, rel);
301
302
  try {
302
303
  const reason = guard.covers(rel) ? "tracked" : overlapsNestedWorktree(rel, nested) ? "nested worktree" : missingDestinationReason(target, rel);
303
304
  if (reason) {
@@ -307,7 +308,7 @@ function cloneIgnoredEntries({ root, target, patterns }) {
307
308
  });
308
309
  continue;
309
310
  }
310
- mkdirSync$1(dirname(to), { recursive: true });
311
+ mkdirSync$1(dirname$1(to), { recursive: true });
311
312
  try {
312
313
  getExecutor().runFile("cp", [
313
314
  "-Rc",
@@ -344,8 +345,8 @@ function podsOutOfSync(target, copiedEntries, { read = readFileSync$1 } = {}) {
344
345
  for (const rel of copiedEntries || []) {
345
346
  if (rel !== "Pods" && !rel.endsWith("/Pods")) continue;
346
347
  const iosDir = rel === "Pods" ? "" : rel.slice(0, -5);
347
- const manifest = join(target, rel, "Manifest.lock");
348
- const podfileLock = join(target, iosDir, "Podfile.lock");
348
+ const manifest = join$1(target, rel, "Manifest.lock");
349
+ const podfileLock = join$1(target, iosDir, "Podfile.lock");
349
350
  if (!existsSync$1(manifest)) continue;
350
351
  if (!existsSync$1(podfileLock)) {
351
352
  problems.push({
@@ -405,7 +406,7 @@ function yarnBerryInstallMatches(lockfile, state) {
405
406
  function installedMatchesLockfile(dir, lockfile, { read = readFileSync$1 } = {}) {
406
407
  const text = (rel) => {
407
408
  try {
408
- return read(join(dir, rel), "utf-8").replaceAll("\r\n", "\n");
409
+ return read(join$1(dir, rel), "utf-8").replaceAll("\r\n", "\n");
409
410
  } catch {
410
411
  return null;
411
412
  }
@@ -437,9 +438,9 @@ function depsOutOfSync(root, target, copiedEntries, { read = readFileSync$1 } =
437
438
  for (const rel of copiedEntries || []) {
438
439
  if (rel !== "node_modules" && !rel.endsWith("/node_modules")) continue;
439
440
  const dir = rel === "node_modules" ? "" : rel.slice(0, -13);
440
- const name = LOCKFILE_NAMES.find((candidate) => existsSync$1(join(target, dir, candidate)));
441
+ const name = LOCKFILE_NAMES.find((candidate) => existsSync$1(join$1(target, dir, candidate)));
441
442
  if (!name) continue;
442
- const installed = installedMatchesLockfile(join(target, dir), name, { read });
443
+ const installed = installedMatchesLockfile(join$1(target, dir), name, { read });
443
444
  if (installed === false) {
444
445
  problems.push({
445
446
  dir: dir || ".",
@@ -448,10 +449,10 @@ function depsOutOfSync(root, target, copiedEntries, { read = readFileSync$1 } =
448
449
  });
449
450
  continue;
450
451
  }
451
- const source = join(root, dir, name);
452
+ const source = join$1(root, dir, name);
452
453
  if (installed === true || !existsSync$1(source)) continue;
453
454
  try {
454
- if (read(source, "utf-8") !== read(join(target, dir, name), "utf-8")) problems.push({
455
+ if (read(source, "utf-8") !== read(join$1(target, dir, name), "utf-8")) problems.push({
455
456
  dir: dir || ".",
456
457
  lockfile: name,
457
458
  reason: "lockfile"
@@ -634,14 +635,14 @@ function hasPopulatedSubmodules(worktree) {
634
635
  "--git-path",
635
636
  "modules"
636
637
  ]);
637
- if (modules && existsSync$1(resolve(worktree, nativePath(modules)))) return true;
638
+ if (modules && existsSync$1(resolve$1(worktree, nativePath(modules)))) return true;
638
639
  return (getExecutor().runFileQuiet("git", [
639
640
  "-C",
640
641
  worktree,
641
642
  "ls-files",
642
643
  "--stage",
643
644
  "-z"
644
- ]) ?? "").split("\0").some((line) => line.startsWith("160000 ") && existsSync$1(join(worktree, line.slice(line.indexOf(" ") + 1), ".git")));
645
+ ]) ?? "").split("\0").some((line) => line.startsWith("160000 ") && existsSync$1(join$1(worktree, line.slice(line.indexOf(" ") + 1), ".git")));
645
646
  }
646
647
  function listWorktrees(cwd) {
647
648
  const out = getExecutor().runFileQuiet("git", [
@@ -662,21 +663,21 @@ function branchOf(head) {
662
663
  * names (the main checkout's branch, or a bare repository's source checkout) is left out.
663
664
  */
664
665
  function linkedWorktreesOnDisk(commonDir) {
665
- const admin = join(commonDir, "worktrees");
666
+ const admin = join$1(commonDir, "worktrees");
666
667
  let ids;
667
668
  let sourceBranch;
668
669
  try {
669
670
  ids = readdirSync$1(admin);
670
- sourceBranch = branchOf(readFileSync$1(join(commonDir, "HEAD"), "utf-8").trim());
671
+ sourceBranch = branchOf(readFileSync$1(join$1(commonDir, "HEAD"), "utf-8").trim());
671
672
  } catch {
672
673
  return [];
673
674
  }
674
675
  return ids.flatMap((id) => {
675
676
  try {
676
- const gitdir = readFileSync$1(join(admin, id, "gitdir"), "utf-8").trim();
677
- const branch = branchOf(readFileSync$1(join(admin, id, "HEAD"), "utf-8").trim());
677
+ const gitdir = readFileSync$1(join$1(admin, id, "gitdir"), "utf-8").trim();
678
+ const branch = branchOf(readFileSync$1(join$1(admin, id, "HEAD"), "utf-8").trim());
678
679
  if (branch && branch === sourceBranch) return [];
679
- const path = dirname(resolve(admin, id, nativePath(gitdir)));
680
+ const path = dirname$1(resolve$1(admin, id, nativePath(gitdir)));
680
681
  return [branch ? {
681
682
  path,
682
683
  branch
@@ -692,17 +693,17 @@ function linkedWorktreesOnDisk(commonDir) {
692
693
  */
693
694
  function gitCommonDirOnDisk(start) {
694
695
  try {
695
- for (let dir = realpathSync$1.native(start);; dir = dirname(dir)) {
696
- const dotGit = join(dir, ".git");
696
+ for (let dir = realpathSync$1.native(start);; dir = dirname$1(dir)) {
697
+ const dotGit = join$1(dir, ".git");
697
698
  if (existsSync$1(dotGit)) {
698
699
  if (statSync$1(dotGit).isDirectory()) return realpathSync$1.native(dotGit);
699
700
  const gitdir = /^gitdir: (.+)$/m.exec(readFileSync$1(dotGit, "utf-8"))?.[1]?.trim();
700
701
  if (!gitdir) return null;
701
- const linked = resolve(dir, gitdir);
702
- const commondir = join(linked, "commondir");
703
- return realpathSync$1.native(existsSync$1(commondir) ? resolve(linked, readFileSync$1(commondir, "utf-8").trim()) : linked);
702
+ const linked = resolve$1(dir, gitdir);
703
+ const commondir = join$1(linked, "commondir");
704
+ return realpathSync$1.native(existsSync$1(commondir) ? resolve$1(linked, readFileSync$1(commondir, "utf-8").trim()) : linked);
704
705
  }
705
- if (dirname(dir) === dir) return null;
706
+ if (dirname$1(dir) === dir) return null;
706
707
  }
707
708
  } catch {
708
709
  return null;
@@ -722,8 +723,8 @@ function selectSourceCheckout(entries, bareHead) {
722
723
  if (only && matches.length === 1) return { path: only.path };
723
724
  if (!only) {
724
725
  const stale = entries.find((entry) => entry.prunable && entry.branch === bareHead);
725
- const beside = checkouts[0] ? dirname(checkouts[0].path) : bare;
726
- return { refusal: `The bare repository at ${bare} points HEAD at ${bareHead}, but no worktree has ${bareHead} checked out, so Stim has no source checkout to copy from. ${stale ? `Its worktree at ${stale.path} is missing. Recreate it, then retry:\n git -C ${bare} worktree prune\n git -C ${bare} worktree add ${stale.path} ${bareHead}\n` : `Create one, then retry:\n git -C ${bare} worktree add ${join(beside, bareHead)} ${bareHead}\n`}Or point HEAD at a branch that is checked out (${listed}):\n${pointHead}` };
726
+ const beside = checkouts[0] ? dirname$1(checkouts[0].path) : bare;
727
+ return { refusal: `The bare repository at ${bare} points HEAD at ${bareHead}, but no worktree has ${bareHead} checked out, so Stim has no source checkout to copy from. ${stale ? `Its worktree at ${stale.path} is missing. Recreate it, then retry:\n git -C ${bare} worktree prune\n git -C ${bare} worktree add ${stale.path} ${bareHead}\n` : `Create one, then retry:\n git -C ${bare} worktree add ${join$1(beside, bareHead)} ${bareHead}\n`}Or point HEAD at a branch that is checked out (${listed}):\n${pointHead}` };
727
728
  }
728
729
  return { refusal: `The bare repository at ${bare} points HEAD at ${bareHead}, which is checked out in more than one worktree: ${matches.map((entry) => entry.path).join(", ")}. Remove the extra worktrees, or point HEAD at a branch checked out once, then retry:\n${pointHead}` };
729
730
  }