peachsim 0.1.933 → 0.1.935

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 (80) hide show
  1. package/cli/commands/debug.ts +24 -18
  2. package/cli/commands/inspect/core.ts +4 -1
  3. package/dist-lib/agent-daemon-client.cjs +1 -1
  4. package/dist-lib/agent-events.cjs +1 -1
  5. package/dist-lib/agent-identity.cjs +1 -1
  6. package/dist-lib/agent-sessions.cjs +1 -1
  7. package/dist-lib/attached-projects.cjs +1 -1
  8. package/dist-lib/auth/shared-session.cjs +1 -1
  9. package/dist-lib/backend-origin.cjs +1 -1
  10. package/dist-lib/beta.cjs +1 -1
  11. package/dist-lib/beta.mjs +1 -1
  12. package/dist-lib/bridge-constants.cjs +1 -1
  13. package/dist-lib/bridge-contract-input.cjs +1 -1
  14. package/dist-lib/bridge-contract-input.mjs +1 -1
  15. package/dist-lib/bridge-contract.cjs +1 -1
  16. package/dist-lib/bridge-contract.mjs +1 -1
  17. package/dist-lib/bundle-channel.cjs +22 -2
  18. package/dist-lib/capture-contract.cjs +1 -1
  19. package/dist-lib/capture-contract.mjs +1 -1
  20. package/dist-lib/cli-constants.cjs +1 -1
  21. package/dist-lib/cloud-contract.cjs +1 -1
  22. package/dist-lib/cloud-contract.mjs +1 -1
  23. package/dist-lib/cloud-test-args.cjs +1 -1
  24. package/dist-lib/cloud-test-args.mjs +1 -1
  25. package/dist-lib/cloud.cjs +1 -1
  26. package/dist-lib/cloud.mjs +1 -1
  27. package/dist-lib/config.cjs +1 -1
  28. package/dist-lib/detox/index.cjs +1 -1
  29. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  30. package/dist-lib/expo-swift-bundle.cjs +22 -2
  31. package/dist-lib/expo-swift-metadata.cjs +1 -1
  32. package/dist-lib/expo-swift-metadata.mjs +1 -1
  33. package/dist-lib/home-paths.cjs +1 -1
  34. package/dist-lib/host/bridge-host.cjs +22 -2
  35. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  36. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  37. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  38. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  39. package/dist-lib/host/websocket-proxy.cjs +1 -1
  40. package/dist-lib/index.cjs +1 -1
  41. package/dist-lib/jump-to-source-babel.cjs +1 -1
  42. package/dist-lib/jump-to-source-native.cjs +1 -1
  43. package/dist-lib/kotlin-host.cjs +1 -1
  44. package/dist-lib/menu.cjs +1 -1
  45. package/dist-lib/menu.mjs +1 -1
  46. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  47. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  48. package/dist-lib/metro-production-bundle.cjs +1 -1
  49. package/dist-lib/metro-production-bundle.mjs +1 -1
  50. package/dist-lib/metro.cjs +1 -1
  51. package/dist-lib/native-app-identity.cjs +1 -1
  52. package/dist-lib/native-app-identity.mjs +1 -1
  53. package/dist-lib/native-firebase-metadata.cjs +1 -1
  54. package/dist-lib/native-firebase-metadata.mjs +1 -1
  55. package/dist-lib/plist.cjs +1 -1
  56. package/dist-lib/plist.mjs +1 -1
  57. package/dist-lib/profiles.cjs +1 -1
  58. package/dist-lib/public-brand.cjs +1 -1
  59. package/dist-lib/react-native-host-modules.cjs +1 -1
  60. package/dist-lib/react-native-host-modules.mjs +1 -1
  61. package/dist-lib/render-mode.cjs +1 -1
  62. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  63. package/dist-lib/sdk.cjs +4 -3
  64. package/dist-lib/sdk.mjs +4 -3
  65. package/dist-lib/skills.cjs +22 -2
  66. package/dist-lib/swift-compile.cjs +1 -1
  67. package/dist-lib/swift-compile.mjs +1 -1
  68. package/dist-lib/swift-package.cjs +1 -1
  69. package/dist-lib/swift-package.mjs +1 -1
  70. package/dist-lib/swift-submit.cjs +1 -1
  71. package/dist-lib/swift-submit.mjs +1 -1
  72. package/dist-lib/swift-toolchain.cjs +1 -1
  73. package/dist-lib/swift.cjs +1 -1
  74. package/dist-lib/vite-swift.cjs +22 -2
  75. package/dist-lib/vite.cjs +1 -1
  76. package/dist-lib/worklet-executable.cjs +1 -1
  77. package/dist-lib/worklet-executable.mjs +1 -1
  78. package/package.json +1 -1
  79. package/src/swift-host.ts +14 -1
  80. package/src/xcode-project.ts +24 -0
@@ -69,6 +69,7 @@ usage:
69
69
  peach debug <subcommand> [args]
70
70
 
71
71
  record, recent, and clear-events target the tenant; --host selects the page buffer.
72
+ snapshot, snapshots, diff, and clear-snapshots also target the tenant by default.
72
73
  enable/disable/toggle also update the tenant unless --host is passed.
73
74
  shell event buffers are separate; shell console logs are forwarded to the host.
74
75
 
@@ -486,27 +487,28 @@ export async function runDebug(args: string[], opts: DebugOptions) {
486
487
 
487
488
  case 'snapshot': {
488
489
  const label = rest[0]
489
- const code = label
490
- ? `window.__sootsimDebug.snapshot(${JSON.stringify(label)})`
491
- : 'window.__sootsimDebug.snapshot()'
490
+ const expression = label ? `snapshot(${JSON.stringify(label)})` : 'snapshot()'
492
491
  // the tree snapshot contains a Map, which doesn't serialize cleanly.
493
492
  // project to the same shape the diff command will accept: label +
494
493
  // size. to inspect contents, use `find sheets` / `find portals` or
495
494
  // take a diff.
496
- const result = await call<{
497
- label: string
498
- at: number
499
- nodes: unknown
500
- }>(
495
+ const result = await callDebugBridge(
501
496
  bridge,
502
- `(() => { const s = ${code}; if (!s) return null; return { label: s.label, at: s.at, size: s.nodes.size }; })()`,
497
+ expression,
498
+ args.includes('--host'),
499
+ (code) =>
500
+ `(() => { const s = ${code}; if (!s) return null; return { label: s.label, at: s.at, size: s.nodes.size }; })()`,
503
501
  )
504
502
  console.log(fmt(result, pretty))
505
503
  break
506
504
  }
507
505
 
508
506
  case 'snapshots': {
509
- const result = await call(bridge, 'window.__sootsimDebug.snapshots()')
507
+ const result = await callDebugBridge(
508
+ bridge,
509
+ 'snapshots()',
510
+ args.includes('--host'),
511
+ )
510
512
  console.log(fmt(result, pretty))
511
513
  break
512
514
  }
@@ -519,8 +521,12 @@ export async function runDebug(args: string[], opts: DebugOptions) {
519
521
  rnxExit(1)
520
522
  }
521
523
  // Maps don't serialize — project added/removed/changed arrays only
522
- const code = `(() => {
523
- const d = window.__sootsimDebug.diff(${JSON.stringify(a)}, ${JSON.stringify(b)});
524
+ const result = await callDebugBridge(
525
+ bridge,
526
+ `diff(${JSON.stringify(a)}, ${JSON.stringify(b)})`,
527
+ args.includes('--host'),
528
+ (code) => `(() => {
529
+ const d = ${code};
524
530
  if (!d) return null;
525
531
  return {
526
532
  a: d.a,
@@ -530,18 +536,18 @@ export async function runDebug(args: string[], opts: DebugOptions) {
530
536
  removed: d.removed,
531
537
  changed: d.changed,
532
538
  };
533
- })()`
534
- const result = await call(bridge, code)
539
+ })()`,
540
+ )
535
541
  console.log(fmt(result, pretty))
536
542
  break
537
543
  }
538
544
 
539
545
  case 'clear-snapshots': {
540
546
  const label = rest[0]
541
- const code = label
542
- ? `window.__sootsimDebug.clearSnapshots(${JSON.stringify(label)})`
543
- : 'window.__sootsimDebug.clearSnapshots()'
544
- await call(bridge, code)
547
+ const expression = label
548
+ ? `clearSnapshots(${JSON.stringify(label)})`
549
+ : 'clearSnapshots()'
550
+ await callDebugBridge(bridge, expression, args.includes('--host'))
545
551
  console.log(fmt({ cleared: label || 'all' }, pretty))
546
552
  break
547
553
  }
@@ -1959,12 +1959,15 @@ export async function inspectDebugFind(
1959
1959
 
1960
1960
  // debug buffers belong to their execution context. tenant calls use the
1961
1961
  // existing test bridge; host calls keep shell/compositor flag forwarding intact.
1962
+ // project maps before the selected context serializes the result.
1962
1963
  export async function callDebugBridge(
1963
1964
  bridge: InspectBridge,
1964
1965
  expression: string,
1965
1966
  host = false,
1967
+ project?: (expression: string) => string,
1966
1968
  ): Promise<unknown> {
1967
- const code = `globalThis.__sootsimDebug.${expression}`
1969
+ const call = `globalThis.__sootsimDebug.${expression}`
1970
+ const code = project ? project(call) : call
1968
1971
  if (host) return bridge.send({ type: 'evaluate', code })
1969
1972
  return bridge.send({
1970
1973
  type: 'evaluate',
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_MAX_MS = 5e3;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var REFUSED_PERFORM_STEP_TYPES = [
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -7296,6 +7296,21 @@ function workspaceReferences(workspace) {
7296
7296
  }
7297
7297
  return references;
7298
7298
  }
7299
+ function enclosingXcodeWorkspace(xcodeproj) {
7300
+ const project = import_node_fs13.default.realpathSync(xcodeproj);
7301
+ for (let dir = import_node_path14.default.dirname(project); ; dir = import_node_path14.default.dirname(dir)) {
7302
+ for (const name2 of import_node_fs13.default.readdirSync(dir)) {
7303
+ if (!name2.endsWith(".xcworkspace")) continue;
7304
+ const workspace = import_node_path14.default.join(dir, name2);
7305
+ if (!import_node_fs13.default.existsSync(import_node_path14.default.join(workspace, "contents.xcworkspacedata"))) continue;
7306
+ if (workspaceReferences(workspace).some(
7307
+ (reference) => import_node_fs13.default.existsSync(reference) && import_node_fs13.default.realpathSync(reference) === project
7308
+ ))
7309
+ return workspace;
7310
+ }
7311
+ if (import_node_fs13.default.existsSync(import_node_path14.default.join(dir, ".git")) || import_node_path14.default.dirname(dir) === dir) return null;
7312
+ }
7313
+ }
7299
7314
  function xcodeProjectFile(xcodeproj) {
7300
7315
  for (const name2 of ["project.pbxproj", "project.xcproj"]) {
7301
7316
  const file = import_node_path14.default.join(xcodeproj, name2);
@@ -8354,12 +8369,17 @@ async function missingModulesMessage(packagePath, missing) {
8354
8369
  })
8355
8370
  );
8356
8371
  const width = Math.max(...[...missing.keys()].map((name2) => name2.length));
8372
+ const opened = xcodeProjects.get(packagePath)?.xcodeproj;
8373
+ const workspace = opened?.endsWith(".xcodeproj") ? enclosingXcodeWorkspace(opened) : null;
8357
8374
  return [
8358
8375
  `Peach does not provide ${missing.size} module${missing.size === 1 ? "" : "s"} this app imports:`,
8359
8376
  ...[...missing].map(([name2, files2]) => {
8360
8377
  const gap = gaps.get(name2);
8361
8378
  return ` ${name2.padEnd(width)} ${files2.length} file${files2.length === 1 ? "" : "s"}${gap ? `, ${gap.source.includes("://") ? `package ${gap.source}` : gap.source.startsWith("/") ? `package ${import_node_path15.default.relative(packagePath, gap.source) || "."}` : gap.source} (${gap.reason})` : ""}`;
8362
- })
8379
+ }),
8380
+ ...workspace ? [
8381
+ `${import_node_path15.default.basename(opened)} is part of ${import_node_path15.default.relative(process.cwd(), workspace)}, which holds its local packages and Package.resolved pins; pass the workspace to build what Xcode builds there.`
8382
+ ] : []
8363
8383
  ].join("\n");
8364
8384
  }
8365
8385
  async function compileRemote(packagePath, snapshot, hosted) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/capture-contract.ts
4
4
  var RNX_SCREEN_CAPTURE_VERSION = 1;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/cloud-contract.ts
4
4
  var RNX_CLOUD_MAX_ARTIFACT_BYTES = 20 * 1024 * 1024;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/cloud-test-args.ts
4
4
  var CLOUD_TEST_ARGS_MAX_COUNT = 32;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -7151,6 +7151,21 @@ function workspaceReferences(workspace) {
7151
7151
  }
7152
7152
  return references;
7153
7153
  }
7154
+ function enclosingXcodeWorkspace(xcodeproj) {
7155
+ const project = import_node_fs13.default.realpathSync(xcodeproj);
7156
+ for (let dir = import_node_path14.default.dirname(project); ; dir = import_node_path14.default.dirname(dir)) {
7157
+ for (const name2 of import_node_fs13.default.readdirSync(dir)) {
7158
+ if (!name2.endsWith(".xcworkspace")) continue;
7159
+ const workspace = import_node_path14.default.join(dir, name2);
7160
+ if (!import_node_fs13.default.existsSync(import_node_path14.default.join(workspace, "contents.xcworkspacedata"))) continue;
7161
+ if (workspaceReferences(workspace).some(
7162
+ (reference) => import_node_fs13.default.existsSync(reference) && import_node_fs13.default.realpathSync(reference) === project
7163
+ ))
7164
+ return workspace;
7165
+ }
7166
+ if (import_node_fs13.default.existsSync(import_node_path14.default.join(dir, ".git")) || import_node_path14.default.dirname(dir) === dir) return null;
7167
+ }
7168
+ }
7154
7169
  var loaded = /* @__PURE__ */ new Map();
7155
7170
  function xcodeProjectFile(xcodeproj) {
7156
7171
  for (const name2 of ["project.pbxproj", "project.xcproj"]) {
@@ -8248,12 +8263,17 @@ async function missingModulesMessage(packagePath, missing) {
8248
8263
  })
8249
8264
  );
8250
8265
  const width = Math.max(...[...missing.keys()].map((name2) => name2.length));
8266
+ const opened = xcodeProjects.get(packagePath)?.xcodeproj;
8267
+ const workspace = opened?.endsWith(".xcodeproj") ? enclosingXcodeWorkspace(opened) : null;
8251
8268
  return [
8252
8269
  `Peach does not provide ${missing.size} module${missing.size === 1 ? "" : "s"} this app imports:`,
8253
8270
  ...[...missing].map(([name2, files2]) => {
8254
8271
  const gap = gaps.get(name2);
8255
8272
  return ` ${name2.padEnd(width)} ${files2.length} file${files2.length === 1 ? "" : "s"}${gap ? `, ${gap.source.includes("://") ? `package ${gap.source}` : gap.source.startsWith("/") ? `package ${import_node_path15.default.relative(packagePath, gap.source) || "."}` : gap.source} (${gap.reason})` : ""}`;
8256
- })
8273
+ }),
8274
+ ...workspace ? [
8275
+ `${import_node_path15.default.basename(opened)} is part of ${import_node_path15.default.relative(process.cwd(), workspace)}, which holds its local packages and Package.resolved pins; pass the workspace to build what Xcode builds there.`
8276
+ ] : []
8257
8277
  ].join("\n");
8258
8278
  }
8259
8279
  async function compileRemote(packagePath, snapshot, hosted) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/expoSwiftContract.ts
4
4
  function record(value) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -16400,6 +16400,21 @@ function workspaceReferences(workspace) {
16400
16400
  }
16401
16401
  return references;
16402
16402
  }
16403
+ function enclosingXcodeWorkspace(xcodeproj) {
16404
+ const project = import_node_fs18.default.realpathSync(xcodeproj);
16405
+ for (let dir = import_node_path19.default.dirname(project); ; dir = import_node_path19.default.dirname(dir)) {
16406
+ for (const name2 of import_node_fs18.default.readdirSync(dir)) {
16407
+ if (!name2.endsWith(".xcworkspace")) continue;
16408
+ const workspace = import_node_path19.default.join(dir, name2);
16409
+ if (!import_node_fs18.default.existsSync(import_node_path19.default.join(workspace, "contents.xcworkspacedata"))) continue;
16410
+ if (workspaceReferences(workspace).some(
16411
+ (reference) => import_node_fs18.default.existsSync(reference) && import_node_fs18.default.realpathSync(reference) === project
16412
+ ))
16413
+ return workspace;
16414
+ }
16415
+ if (import_node_fs18.default.existsSync(import_node_path19.default.join(dir, ".git")) || import_node_path19.default.dirname(dir) === dir) return null;
16416
+ }
16417
+ }
16403
16418
  var loaded = /* @__PURE__ */ new Map();
16404
16419
  function xcodeProjectFile(xcodeproj) {
16405
16420
  for (const name2 of ["project.pbxproj", "project.xcproj"]) {
@@ -17501,12 +17516,17 @@ async function missingModulesMessage(packagePath, missing) {
17501
17516
  })
17502
17517
  );
17503
17518
  const width = Math.max(...[...missing.keys()].map((name2) => name2.length));
17519
+ const opened = xcodeProjects.get(packagePath)?.xcodeproj;
17520
+ const workspace = opened?.endsWith(".xcodeproj") ? enclosingXcodeWorkspace(opened) : null;
17504
17521
  return [
17505
17522
  `Peach does not provide ${missing.size} module${missing.size === 1 ? "" : "s"} this app imports:`,
17506
17523
  ...[...missing].map(([name2, files2]) => {
17507
17524
  const gap = gaps.get(name2);
17508
17525
  return ` ${name2.padEnd(width)} ${files2.length} file${files2.length === 1 ? "" : "s"}${gap ? `, ${gap.source.includes("://") ? `package ${gap.source}` : gap.source.startsWith("/") ? `package ${import_node_path20.default.relative(packagePath, gap.source) || "."}` : gap.source} (${gap.reason})` : ""}`;
17509
- })
17526
+ }),
17527
+ ...workspace ? [
17528
+ `${import_node_path20.default.basename(opened)} is part of ${import_node_path20.default.relative(process.cwd(), workspace)}, which holds its local packages and Package.resolved pins; pass the workspace to build what Xcode builds there.`
17529
+ ] : []
17510
17530
  ].join("\n");
17511
17531
  }
17512
17532
  async function compileRemote(packagePath, snapshot, hosted) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/host/fetch-proxy-overrides.ts
4
4
  var FETCH_PROXY_NATIVE_USER_AGENT_HEADER = "x-sootsim-native-user-agent";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/public-brand.ts
4
4
  var name = "Peach";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/is-record.ts
4
4
  function isRecord(value) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-production-bundle.ts
4
4
  var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/native-app-identity.ts
4
4
  var NATIVE_APP_IDENTITY_PREFIX = "globalThis.__sootsimNativeAppIdentity=";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/native-firebase-metadata.ts
4
4
  var PREFIX = "globalThis.__peachNativeFirebaseConfig=";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/plist.ts
4
4
  import plist from "plist";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/react-native-host-modules.ts
4
4
  var REACT_NATIVE_PASSTHROUGH_SPECIFIERS = [
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1272,8 +1272,9 @@ async function inspectDebugFind(bridge, target) {
1272
1272
  code: `window.__sootsimTest.debugFind(${JSON.stringify(target)})`
1273
1273
  });
1274
1274
  }
1275
- async function callDebugBridge(bridge, expression, host = false) {
1276
- const code = `globalThis.__sootsimDebug.${expression}`;
1275
+ async function callDebugBridge(bridge, expression, host = false, project) {
1276
+ const call = `globalThis.__sootsimDebug.${expression}`;
1277
+ const code = project ? project(call) : call;
1277
1278
  if (host) return bridge.send({ type: "evaluate", code });
1278
1279
  return bridge.send({
1279
1280
  type: "evaluate",
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1168,8 +1168,9 @@ async function inspectDebugFind(bridge, target) {
1168
1168
  code: `window.__sootsimTest.debugFind(${JSON.stringify(target)})`
1169
1169
  });
1170
1170
  }
1171
- async function callDebugBridge(bridge, expression, host = false) {
1172
- const code = `globalThis.__sootsimDebug.${expression}`;
1171
+ async function callDebugBridge(bridge, expression, host = false, project) {
1172
+ const call = `globalThis.__sootsimDebug.${expression}`;
1173
+ const code = project ? project(call) : call;
1173
1174
  if (host) return bridge.send({ type: "evaluate", code });
1174
1175
  return bridge.send({
1175
1176
  type: "evaluate",
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -36372,6 +36372,21 @@ function workspaceReferences(workspace) {
36372
36372
  }
36373
36373
  return references;
36374
36374
  }
36375
+ function enclosingXcodeWorkspace(xcodeproj) {
36376
+ const project = import_node_fs18.default.realpathSync(xcodeproj);
36377
+ for (let dir = import_node_path19.default.dirname(project); ; dir = import_node_path19.default.dirname(dir)) {
36378
+ for (const name2 of import_node_fs18.default.readdirSync(dir)) {
36379
+ if (!name2.endsWith(".xcworkspace")) continue;
36380
+ const workspace = import_node_path19.default.join(dir, name2);
36381
+ if (!import_node_fs18.default.existsSync(import_node_path19.default.join(workspace, "contents.xcworkspacedata"))) continue;
36382
+ if (workspaceReferences(workspace).some(
36383
+ (reference) => import_node_fs18.default.existsSync(reference) && import_node_fs18.default.realpathSync(reference) === project
36384
+ ))
36385
+ return workspace;
36386
+ }
36387
+ if (import_node_fs18.default.existsSync(import_node_path19.default.join(dir, ".git")) || import_node_path19.default.dirname(dir) === dir) return null;
36388
+ }
36389
+ }
36375
36390
  function xcodeProjectFile(xcodeproj) {
36376
36391
  for (const name2 of ["project.pbxproj", "project.xcproj"]) {
36377
36392
  const file = import_node_path19.default.join(xcodeproj, name2);
@@ -37436,12 +37451,17 @@ async function missingModulesMessage(packagePath, missing) {
37436
37451
  })
37437
37452
  );
37438
37453
  const width = Math.max(...[...missing.keys()].map((name2) => name2.length));
37454
+ const opened = xcodeProjects.get(packagePath)?.xcodeproj;
37455
+ const workspace = opened?.endsWith(".xcodeproj") ? enclosingXcodeWorkspace(opened) : null;
37439
37456
  return [
37440
37457
  `Peach does not provide ${missing.size} module${missing.size === 1 ? "" : "s"} this app imports:`,
37441
37458
  ...[...missing].map(([name2, files2]) => {
37442
37459
  const gap = gaps.get(name2);
37443
37460
  return ` ${name2.padEnd(width)} ${files2.length} file${files2.length === 1 ? "" : "s"}${gap ? `, ${gap.source.includes("://") ? `package ${gap.source}` : gap.source.startsWith("/") ? `package ${import_node_path20.default.relative(packagePath, gap.source) || "."}` : gap.source} (${gap.reason})` : ""}`;
37444
- })
37461
+ }),
37462
+ ...workspace ? [
37463
+ `${import_node_path20.default.basename(opened)} is part of ${import_node_path20.default.relative(process.cwd(), workspace)}, which holds its local packages and Package.resolved pins; pass the workspace to build what Xcode builds there.`
37464
+ ] : []
37445
37465
  ].join("\n");
37446
37466
  }
37447
37467
  async function compileRemote(packagePath, snapshot, hosted) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/swift-compile.ts
4
4
  import { execFile as execFile2, execFileSync } from "node:child_process";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/swift-package.ts
4
4
  function isSwiftManifestFile(file) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/swift-submit.ts
4
4
  var SWIFT_COMPILE_PATH = "/api/swift-compile";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -7144,6 +7144,21 @@ function workspaceReferences(workspace) {
7144
7144
  }
7145
7145
  return references;
7146
7146
  }
7147
+ function enclosingXcodeWorkspace(xcodeproj) {
7148
+ const project = import_node_fs13.default.realpathSync(xcodeproj);
7149
+ for (let dir = import_node_path14.default.dirname(project); ; dir = import_node_path14.default.dirname(dir)) {
7150
+ for (const name2 of import_node_fs13.default.readdirSync(dir)) {
7151
+ if (!name2.endsWith(".xcworkspace")) continue;
7152
+ const workspace = import_node_path14.default.join(dir, name2);
7153
+ if (!import_node_fs13.default.existsSync(import_node_path14.default.join(workspace, "contents.xcworkspacedata"))) continue;
7154
+ if (workspaceReferences(workspace).some(
7155
+ (reference) => import_node_fs13.default.existsSync(reference) && import_node_fs13.default.realpathSync(reference) === project
7156
+ ))
7157
+ return workspace;
7158
+ }
7159
+ if (import_node_fs13.default.existsSync(import_node_path14.default.join(dir, ".git")) || import_node_path14.default.dirname(dir) === dir) return null;
7160
+ }
7161
+ }
7147
7162
  var loaded = /* @__PURE__ */ new Map();
7148
7163
  function xcodeProjectFile(xcodeproj) {
7149
7164
  for (const name2 of ["project.pbxproj", "project.xcproj"]) {
@@ -8256,12 +8271,17 @@ async function missingModulesMessage(packagePath, missing) {
8256
8271
  })
8257
8272
  );
8258
8273
  const width = Math.max(...[...missing.keys()].map((name2) => name2.length));
8274
+ const opened = xcodeProjects.get(packagePath)?.xcodeproj;
8275
+ const workspace = opened?.endsWith(".xcodeproj") ? enclosingXcodeWorkspace(opened) : null;
8259
8276
  return [
8260
8277
  `Peach does not provide ${missing.size} module${missing.size === 1 ? "" : "s"} this app imports:`,
8261
8278
  ...[...missing].map(([name2, files2]) => {
8262
8279
  const gap = gaps.get(name2);
8263
8280
  return ` ${name2.padEnd(width)} ${files2.length} file${files2.length === 1 ? "" : "s"}${gap ? `, ${gap.source.includes("://") ? `package ${gap.source}` : gap.source.startsWith("/") ? `package ${import_node_path15.default.relative(packagePath, gap.source) || "."}` : gap.source} (${gap.reason})` : ""}`;
8264
- })
8281
+ }),
8282
+ ...workspace ? [
8283
+ `${import_node_path15.default.basename(opened)} is part of ${import_node_path15.default.relative(process.cwd(), workspace)}, which holds its local packages and Package.resolved pins; pass the workspace to build what Xcode builds there.`
8284
+ ] : []
8265
8285
  ].join("\n");
8266
8286
  }
8267
8287
  async function compileRemote(packagePath, snapshot, hosted) {
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.933 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.935 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/worklet-executable.ts
4
4
  import { parse } from "acorn";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peachsim",
3
- "version": "0.1.933",
3
+ "version": "0.1.935",
4
4
  "description": "Vite and Metro plugins, testing drivers, and SDK exports for peach.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
package/src/swift-host.ts CHANGED
@@ -54,7 +54,11 @@ import {
54
54
  type SwiftImageUpload,
55
55
  type SwiftNativeModules,
56
56
  } from './swift-submit'
57
- import { readXcodeAppTarget, type XcodeAppTarget } from './xcode-project'
57
+ import {
58
+ enclosingXcodeWorkspace,
59
+ readXcodeAppTarget,
60
+ type XcodeAppTarget,
61
+ } from './xcode-project'
58
62
  import type { SwiftEntryModuleArgs } from '../../sootsim-swift/src/entryModule'
59
63
  import type {
60
64
  AppCatalogColor,
@@ -1097,12 +1101,21 @@ async function missingModulesMessage(
1097
1101
  }),
1098
1102
  )
1099
1103
  const width = Math.max(...[...missing.keys()].map((name) => name.length))
1104
+ const opened = xcodeProjects.get(packagePath)?.xcodeproj
1105
+ const workspace = opened?.endsWith('.xcodeproj')
1106
+ ? enclosingXcodeWorkspace(opened)
1107
+ : null
1100
1108
  return [
1101
1109
  `Peach does not provide ${missing.size} module${missing.size === 1 ? '' : 's'} this app imports:`,
1102
1110
  ...[...missing].map(([name, files]) => {
1103
1111
  const gap = gaps.get(name)
1104
1112
  return ` ${name.padEnd(width)} ${files.length} file${files.length === 1 ? '' : 's'}${gap ? `, ${gap.source.includes('://') ? `package ${gap.source}` : gap.source.startsWith('/') ? `package ${path.relative(packagePath, gap.source) || '.'}` : gap.source} (${gap.reason})` : ''}`
1105
1113
  }),
1114
+ ...(workspace
1115
+ ? [
1116
+ `${path.basename(opened!)} is part of ${path.relative(process.cwd(), workspace)}, which holds its local packages and Package.resolved pins; pass the workspace to build what Xcode builds there.`,
1117
+ ]
1118
+ : []),
1106
1119
  ].join('\n')
1107
1120
  }
1108
1121
 
@@ -313,6 +313,30 @@ function workspaceReferences(workspace: string): string[] {
313
313
  return references
314
314
  }
315
315
 
316
+ /**
317
+ * the workspace in an ancestor directory that lists `xcodeproj`, up to the
318
+ * repository root: opened alone, the project misses the local packages and
319
+ * Package.resolved pins that workspace holds.
320
+ */
321
+ export function enclosingXcodeWorkspace(xcodeproj: string): string | null {
322
+ const project = fs.realpathSync(xcodeproj)
323
+ for (let dir = path.dirname(project); ; dir = path.dirname(dir)) {
324
+ for (const name of fs.readdirSync(dir)) {
325
+ if (!name.endsWith('.xcworkspace')) continue
326
+ const workspace = path.join(dir, name)
327
+ if (!fs.existsSync(path.join(workspace, 'contents.xcworkspacedata'))) continue
328
+ if (
329
+ workspaceReferences(workspace).some(
330
+ (reference) =>
331
+ fs.existsSync(reference) && fs.realpathSync(reference) === project,
332
+ )
333
+ )
334
+ return workspace
335
+ }
336
+ if (fs.existsSync(path.join(dir, '.git')) || path.dirname(dir) === dir) return null
337
+ }
338
+ }
339
+
316
340
  /**
317
341
  * the workspace or project a path names: the bundle itself, or in a
318
342
  * directory its one workspace, else its one project, as xcode opens it.