peachsim 0.1.2228 → 0.1.2231

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 (100) hide show
  1. package/cli/commands/device.ts +1 -1
  2. package/cli/commands/flow.ts +1 -1
  3. package/dist-lib/agent-daemon-client.cjs +1 -1
  4. package/dist-lib/agent-events.cjs +1 -1
  5. package/dist-lib/attached-projects.cjs +1 -1
  6. package/dist-lib/auth/shared-session.cjs +1 -1
  7. package/dist-lib/backend-origin.cjs +1 -1
  8. package/dist-lib/beta.cjs +1 -1
  9. package/dist-lib/beta.mjs +1 -1
  10. package/dist-lib/bridge-constants.cjs +1 -1
  11. package/dist-lib/bridge-contract-input.cjs +1 -1
  12. package/dist-lib/bridge-contract-input.mjs +1 -1
  13. package/dist-lib/bridge-contract.cjs +1 -1
  14. package/dist-lib/bridge-contract.mjs +1 -1
  15. package/dist-lib/bundle-channel.cjs +35 -9
  16. package/dist-lib/capture-contract.cjs +1 -1
  17. package/dist-lib/capture-contract.mjs +1 -1
  18. package/dist-lib/cloud-contract.cjs +1 -1
  19. package/dist-lib/cloud-contract.mjs +1 -1
  20. package/dist-lib/cloud-test-args.cjs +1 -1
  21. package/dist-lib/cloud-test-args.mjs +1 -1
  22. package/dist-lib/cloud.cjs +1 -1
  23. package/dist-lib/cloud.mjs +1 -1
  24. package/dist-lib/config.cjs +1 -1
  25. package/dist-lib/config.mjs +1 -1
  26. package/dist-lib/detox/index.cjs +5 -2
  27. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  28. package/dist-lib/expo-swift-bundle.cjs +33 -7
  29. package/dist-lib/expo-swift-metadata.cjs +1 -1
  30. package/dist-lib/expo-swift-metadata.mjs +1 -1
  31. package/dist-lib/home-paths.cjs +1 -1
  32. package/dist-lib/host/bridge-host.cjs +76 -11
  33. package/dist-lib/host/fetch-proxy-handler.cjs +4 -4
  34. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  35. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  36. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  37. package/dist-lib/host/websocket-proxy.cjs +1 -1
  38. package/dist-lib/index.cjs +13 -5
  39. package/dist-lib/jump-to-source-babel.cjs +1 -1
  40. package/dist-lib/jump-to-source-native.cjs +1 -1
  41. package/dist-lib/kotlin-host.cjs +1 -1
  42. package/dist-lib/menu.cjs +16 -14
  43. package/dist-lib/menu.mjs +16 -14
  44. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  45. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  46. package/dist-lib/metro-production-bundle.cjs +1 -1
  47. package/dist-lib/metro-production-bundle.mjs +1 -1
  48. package/dist-lib/metro.cjs +7 -5
  49. package/dist-lib/native-app-identity-project.cjs +5 -3
  50. package/dist-lib/native-app-identity-project.mjs +5 -3
  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/pdfium-raster.cjs +1 -1
  56. package/dist-lib/pdfium-raster.mjs +1 -1
  57. package/dist-lib/plist.cjs +1 -1
  58. package/dist-lib/plist.mjs +1 -1
  59. package/dist-lib/profiles.cjs +1 -1
  60. package/dist-lib/public-brand.cjs +1 -1
  61. package/dist-lib/public-origins-lib-esm.json +25 -24
  62. package/dist-lib/public-origins-lib.json +55 -53
  63. package/dist-lib/react-native-host-modules.cjs +1 -1
  64. package/dist-lib/react-native-host-modules.mjs +1 -1
  65. package/dist-lib/reap-browser.cjs +1 -1
  66. package/dist-lib/scripts/dev-server-scanner.cjs +43 -3
  67. package/dist-lib/sdk.cjs +1 -1
  68. package/dist-lib/sdk.mjs +1 -1
  69. package/dist-lib/skills.cjs +77 -12
  70. package/dist-lib/swift-compile.cjs +1 -1
  71. package/dist-lib/swift-compile.mjs +1 -1
  72. package/dist-lib/swift-package.cjs +1 -1
  73. package/dist-lib/swift-package.mjs +1 -1
  74. package/dist-lib/swift-submit.cjs +1 -1
  75. package/dist-lib/swift-submit.mjs +1 -1
  76. package/dist-lib/swift-toolchain.cjs +1 -1
  77. package/dist-lib/swift.cjs +1 -1
  78. package/dist-lib/vite-swift.cjs +32 -6
  79. package/dist-lib/vite.cjs +10 -4
  80. package/dist-lib/worklet-executable.cjs +1 -1
  81. package/dist-lib/worklet-executable.mjs +1 -1
  82. package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +3 -0
  83. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +10 -3
  84. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +1 -1
  85. package/dist-types/packages/peach-engine/src/engine/types.d.ts +2 -1
  86. package/install.sh +12 -2
  87. package/kotlin/sdk.tar.gz +0 -0
  88. package/package.json +1 -1
  89. package/runtime-companion.json +1 -1
  90. package/scripts/dev-server-scanner.ts +64 -3
  91. package/src/appPackageContract.ts +1 -1
  92. package/src/conformance-pixel-comparison.ts +12 -7
  93. package/src/menu.ts +17 -99
  94. package/src/menuContract.ts +102 -0
  95. package/src/react-native-coverage/native-typescript-parser.ts +18 -8
  96. package/src/settingsContract.ts +8 -8
  97. package/src/swift-host.ts +27 -2
  98. package/src/vite-plugin-one.ts +2 -0
  99. package/src/vite-plugin.ts +9 -8
  100. package/src/xcode-project.ts +8 -2
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -39,7 +39,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
39
39
  var define_SWIFT_COVERAGE_SOURCE_DIGESTS_default;
40
40
  var init_define_SWIFT_COVERAGE_SOURCE_DIGESTS = __esm({
41
41
  "<define:__SWIFT_COVERAGE_SOURCE_DIGESTS__>"() {
42
- define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "d98d6294b359528f7733b26db6f80f554782354faa235605f9562be4ad98b8a3", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "bfde06f157f52d3dd76577b3c6059c95c0393180b054ced773624ea89558992b", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "8deef5a824ed49209458a4b398cd8e88df260a0c8f1894d568279f6211866547", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "40ec039e7a2920e6b4e7610986eb3ba75c5811eed4ea41570c2a7e2424911721", "xcode-target-members.ts": "d49af77a690cff481b38333b5f63f6600123b1bb57f410b0adb298b010d2047b", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
42
+ define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "d98d6294b359528f7733b26db6f80f554782354faa235605f9562be4ad98b8a3", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "bfde06f157f52d3dd76577b3c6059c95c0393180b054ced773624ea89558992b", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "8deef5a824ed49209458a4b398cd8e88df260a0c8f1894d568279f6211866547", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "774c42f06f8d5c1f3f3a09f94379db2046af0016f1fcd6cbe595a9c2da5dcf95", "xcode-target-members.ts": "d49af77a690cff481b38333b5f63f6600123b1bb57f410b0adb298b010d2047b", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
43
43
  }
44
44
  });
45
45
 
@@ -63324,7 +63324,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
63324
63324
  const postBundleScripts = [];
63325
63325
  for (const id of [...list(app.target.buildPhases)].reverse()) {
63326
63326
  const phase = app.project.object(id);
63327
- if (phase?.isa !== "PBXShellScriptBuildPhase" || list(phase.inputPaths).length || list(phase.inputFileListPaths).length || list(phase.outputPaths).length || list(phase.outputFileListPaths).length)
63327
+ if (phase?.isa !== "PBXShellScriptBuildPhase" || list(phase.outputPaths).length || list(phase.outputFileListPaths).length)
63328
63328
  break;
63329
63329
  postBundleScripts.unshift({
63330
63330
  name: str(phase.name) ?? id,
@@ -63333,6 +63333,8 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
63333
63333
  str(phase.shellScript) ?? ""
63334
63334
  ),
63335
63335
  directory: app.project.projectDir,
63336
+ inputPaths: list(phase.inputPaths),
63337
+ inputFileListPaths: list(phase.inputFileListPaths),
63336
63338
  environment: Object.fromEntries(
63337
63339
  [...settingKeys].filter((key2) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(key2)).map((key2) => [key2, settings(key2)])
63338
63340
  )
@@ -65818,7 +65820,7 @@ var init_swift_standin_digest = __esm({
65818
65820
  STANDIN_DIGEST_ENTRYPOINTS = ["swift-standins.ts", "swift-objc-compile.ts"];
65819
65821
  SPECIFIER = /from\s*['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
65820
65822
  standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
65821
- STANDIN_SOURCE_DIGEST = true ? "c157dea0314bab3ba5af4145cc3ba5b8a4d824fa6677166162e49713afe384bb" : standinSourceDigest();
65823
+ STANDIN_SOURCE_DIGEST = true ? "f8700690d0cd621b5d9417ea570f1f45c7ec1ad54492b23aa9792102938e9e82" : standinSourceDigest();
65822
65824
  }
65823
65825
  });
65824
65826
 
@@ -66279,7 +66281,7 @@ var init_package_tree_digest = __esm({
66279
66281
 
66280
66282
  // src/expo-native-prebuilt.ts
66281
66283
  function expoNativeCompilerDigestValue() {
66282
- return true ? "52d8ecb0a37f0f7a5504161cecd2a17d59f6cff85fdc5cac0ae8f4353362ad1a" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
66284
+ return true ? "aab5589ba02cd96332e686f60153187e7357cc46c8a6ec5369f1400cea6f6da0" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
66283
66285
  }
66284
66286
  function readSources(value) {
66285
66287
  const sources = isRecord(value) ? value.sources : null;
@@ -76744,11 +76746,35 @@ function buildSwiftBundleFiles(packagePath, hosted, inputs, resourceBundles) {
76744
76746
  CONTENTS_FOLDER_PATH: wrapper,
76745
76747
  UNLOCALIZED_RESOURCES_FOLDER_PATH: wrapper,
76746
76748
  INFOPLIST_PATH: `${wrapper}/Info.plist`,
76747
- SCRIPT_INPUT_FILE_COUNT: "0",
76748
- SCRIPT_INPUT_FILE_LIST_COUNT: "0",
76749
+ SCRIPT_INPUT_FILE_COUNT: String(phase.inputPaths.length),
76750
+ SCRIPT_INPUT_FILE_LIST_COUNT: String(phase.inputFileListPaths.length),
76749
76751
  SCRIPT_OUTPUT_FILE_COUNT: "0",
76750
76752
  SCRIPT_OUTPUT_FILE_LIST_COUNT: "0"
76751
76753
  };
76754
+ const inputPath = (raw2) => {
76755
+ const file = import_node_path83.default.resolve(
76756
+ phase.directory,
76757
+ expand(raw2, (key2) => env[key2] ?? "")
76758
+ );
76759
+ if (!import_node_fs86.default.existsSync(file))
76760
+ throw new Error(
76761
+ `${xcode.app.name}: Run Script "${phase.name}" missing input ${file}`
76762
+ );
76763
+ if (!file.startsWith(`${dir}${import_node_path83.default.sep}`))
76764
+ watched.push(import_node_path83.default.relative(packagePath, file).split(import_node_path83.default.sep).join("/"));
76765
+ return file;
76766
+ };
76767
+ phase.inputPaths.forEach((raw2, index) => {
76768
+ env[`SCRIPT_INPUT_FILE_${index}`] = inputPath(raw2);
76769
+ });
76770
+ phase.inputFileListPaths.forEach((raw2, index) => {
76771
+ const source = inputPath(raw2);
76772
+ const entries = fileListEntries(source, inputPath);
76773
+ const expanded = import_node_path83.default.join(dir, `Input-${index}.xcfilelist`);
76774
+ import_node_fs86.default.writeFileSync(expanded, `${entries.join("\n")}
76775
+ `);
76776
+ env[`SCRIPT_INPUT_FILE_LIST_${index}`] = expanded;
76777
+ });
76752
76778
  try {
76753
76779
  const [shell, ...args] = phase.command;
76754
76780
  (0, import_node_child_process47.execFileSync)(shell, args, {
@@ -86990,7 +87016,7 @@ var init_nitro_superset = __esm({
86990
87016
  init_nitroContract();
86991
87017
  init_swift_standin_digest();
86992
87018
  NITRO_SUPERSET_ENTRY_NAME = "superset";
86993
- NITRO_COMPILER_DIGEST = true ? "02840899304cd9c2c7928baa6f7a13405d0142f29940e8d6fdbf2569fb60b262" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
87019
+ NITRO_COMPILER_DIGEST = true ? "b3ae355413a190ba1006db08b3fa373b79f99034163c936bd1ec2c89b9bce038" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
86994
87020
  nitroSupersetLock = parseLock(nitro_superset_lock_default);
86995
87021
  nitroSupersetKey = (inputs) => nativeEntryKey({ ...inputs, compiler: NITRO_COMPILER_DIGEST });
86996
87022
  published2 = /* @__PURE__ */ new Map();
@@ -87702,7 +87728,7 @@ var init_one_sdk_bundle = __esm({
87702
87728
  var runtime_companion_default;
87703
87729
  var init_runtime_companion = __esm({
87704
87730
  "runtime-companion.json"() {
87705
- runtime_companion_default = { abi: 1, sha256: "286145bc3b2ca79a64228c88d8c2e088a592754d61b5855d0388974ee88863fa", file: "node/cli-286145bc3b2ca79a64228c88d8c2e088a592754d61b5855d0388974ee88863fa.cjs" };
87731
+ runtime_companion_default = { abi: 1, sha256: "00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde", file: "node/cli-00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde.cjs" };
87706
87732
  }
87707
87733
  });
87708
87734
 
@@ -89809,6 +89835,29 @@ async function fetchManifestEnrichment(result, buildIconProxyUrl) {
89809
89835
  });
89810
89836
  invalidatePortCache(result.port);
89811
89837
  }
89838
+ function oneNativeWidgetFromScan(scan2, result, identity2) {
89839
+ if (!Array.isArray(scan2)) return null;
89840
+ for (const entry of scan2) {
89841
+ if (!entry || typeof entry !== "object" || entry.port !== result.port) continue;
89842
+ if (typeof entry.bundleUrl !== "string") continue;
89843
+ let advertised;
89844
+ try {
89845
+ advertised = new URL(entry.bundleUrl);
89846
+ } catch {
89847
+ continue;
89848
+ }
89849
+ if (!isLoopbackHost(advertised.hostname) || advertised.port !== String(result.port))
89850
+ continue;
89851
+ const widget = configuredWidgetFromScan(scan2, advertised.href);
89852
+ if (widget?.projectRoot === identity2.root && widget.metadata.bundleId === identity2.bundleId)
89853
+ return {
89854
+ ...widget,
89855
+ bundleUrl: result.bundleUrl,
89856
+ packageUrl: new URL("/__peach/swift-package/OneWidgets", result.bundleUrl).href
89857
+ };
89858
+ }
89859
+ return null;
89860
+ }
89812
89861
  async function probePort(port, buildIconProxyUrl, listeningProcess, verdict) {
89813
89862
  const demoApps = await loadOptionalDemoApps();
89814
89863
  const probeHostname = await tcpPing(port);
@@ -89835,6 +89884,15 @@ async function probePort(port, buildIconProxyUrl, listeningProcess, verdict) {
89835
89884
  ]);
89836
89885
  const manifestParsed = manifestRes ? safeParseManifest(manifestRes.body) : null;
89837
89886
  const { launchUrl: manifestLaunchUrl, client: manifestClient } = readExpoManifestFields(manifestParsed);
89887
+ const metadata = manifestParsed?.metadata;
89888
+ const extra = manifestParsed?.extra;
89889
+ const expoGo = extra && typeof extra === "object" ? Reflect.get(extra, "expoGo") : null;
89890
+ const developer = expoGo && typeof expoGo === "object" ? Reflect.get(expoGo, "developer") : null;
89891
+ const projectRoot = developer && typeof developer === "object" ? Reflect.get(developer, "projectRoot") : null;
89892
+ const bundleId = manifestClient.ios?.bundleIdentifier;
89893
+ if (metadata && typeof metadata === "object" && Reflect.get(metadata, "oneNativeApp") === true && typeof projectRoot === "string" && typeof bundleId === "string")
89894
+ oneNativeApps.set(port, { root: projectRoot, bundleId });
89895
+ else if (manifestRes) oneNativeApps.delete(port);
89838
89896
  const manifestState = !manifestRes ? "no-answer" : manifestParsed && (manifestLaunchUrl || typeof manifestClient.name === "string") ? "resolved" : "no-manifest";
89839
89897
  const metroPackager = !!statusRes?.body.includes("packager-status:running") && !(manifestState === "resolved" && manifestLaunchUrl?.includes("/one/metro-entry.bundle"));
89840
89898
  const [sootsimRes, swiftRes, kotlinRes, oneScanRes] = metroPackager ? [null, null, null, null] : await Promise.all([
@@ -90055,6 +90113,9 @@ async function scanDevServers(opts = {}) {
90055
90113
  for (const p of [...knownOne]) {
90056
90114
  if (!currentPorts.has(p)) knownOne.delete(p);
90057
90115
  }
90116
+ for (const p of [...oneNativeApps.keys()]) {
90117
+ if (!currentPorts.has(p)) oneNativeApps.delete(p);
90118
+ }
90058
90119
  for (const p of [...enrichmentCache.keys()]) {
90059
90120
  if (!currentPorts.has(p)) enrichmentCache.delete(p);
90060
90121
  }
@@ -90079,6 +90140,7 @@ async function scanDevServers(opts = {}) {
90079
90140
  if (cached4 && cached4.pid !== pid) {
90080
90141
  knownNonPatched.delete(port);
90081
90142
  knownOne.delete(port);
90143
+ oneNativeApps.delete(port);
90082
90144
  enrichmentCache.delete(port);
90083
90145
  localIconPathCache.delete(port);
90084
90146
  }
@@ -90106,7 +90168,8 @@ async function scanDevServers(opts = {}) {
90106
90168
  }
90107
90169
  await Promise.all(
90108
90170
  results.map(async (result) => {
90109
- if (result.framework !== "one" && result.framework !== "vxrn") {
90171
+ const nativeIdentity = oneNativeApps.get(result.port);
90172
+ if (result.framework !== "one" && result.framework !== "vxrn" && !nativeIdentity) {
90110
90173
  result.widget = null;
90111
90174
  return;
90112
90175
  }
@@ -90121,7 +90184,8 @@ async function scanDevServers(opts = {}) {
90121
90184
  result.widget ??= null;
90122
90185
  return;
90123
90186
  }
90124
- result.widget = scanRes.statusCode === 200 && scanRes.contentType?.includes("json") ? configuredWidgetFromScan(safeParseManifest(scanRes.body), result.bundleUrl) : null;
90187
+ const scan3 = scanRes.statusCode === 200 && scanRes.contentType?.includes("json") ? safeParseManifest(scanRes.body) : null;
90188
+ result.widget = nativeIdentity ? oneNativeWidgetFromScan(scan3, result, nativeIdentity) : configuredWidgetFromScan(scan3, result.bundleUrl);
90125
90189
  })
90126
90190
  );
90127
90191
  const pidByPort = /* @__PURE__ */ new Map();
@@ -90145,7 +90209,7 @@ async function scanDevServers(opts = {}) {
90145
90209
  }
90146
90210
  return results.filter((r) => !isSootSimSelfServer(r)).sort((a, b) => a.port - b.port);
90147
90211
  }
90148
- var import_child_process, import_promises11, import_http, import_net, import_node_fs107, import_node_os22, import_node_path108, LISTENER_LOCK_PATH, LISTENER_RESULT_PATH, LISTENER_LOCK_STALE_MS, LISTENER_LOCK_WAIT_MS, TIMEOUT_MS, MANIFEST_TIMEOUT_MS, SERVER_SCAN_PROBE_HEADER, TCP_GATE_MS, BODY_TIMEOUT_MS, FALLBACK_PORTS, SELF_PORT_RANGE_START, SELF_PORT_RANGE_END, DevServerScanUnavailableError, LISTING_TIMEOUT_MS, LISTENER_CACHE_MS, listenerCache, inflightListing, listenerHolds, cwdByPid, cwdQueue, cwdFlushing, localIconPathCache, localIconProbeInFlight, ENRICH_TIMEOUT_MS, enrichmentCache, enrichmentInFlight, knownNonPatched, knownOne, portCache, portCacheInvalidatedAt, NEGATIVE_CACHE_TTL_MS, WEAK_RESULT_CACHE_TTL_MS;
90212
+ var import_child_process, import_promises11, import_http, import_net, import_node_fs107, import_node_os22, import_node_path108, LISTENER_LOCK_PATH, LISTENER_RESULT_PATH, LISTENER_LOCK_STALE_MS, LISTENER_LOCK_WAIT_MS, TIMEOUT_MS, MANIFEST_TIMEOUT_MS, SERVER_SCAN_PROBE_HEADER, TCP_GATE_MS, BODY_TIMEOUT_MS, FALLBACK_PORTS, SELF_PORT_RANGE_START, SELF_PORT_RANGE_END, DevServerScanUnavailableError, LISTING_TIMEOUT_MS, LISTENER_CACHE_MS, listenerCache, inflightListing, listenerHolds, cwdByPid, cwdQueue, cwdFlushing, localIconPathCache, localIconProbeInFlight, ENRICH_TIMEOUT_MS, enrichmentCache, enrichmentInFlight, knownNonPatched, knownOne, oneNativeApps, portCache, portCacheInvalidatedAt, NEGATIVE_CACHE_TTL_MS, WEAK_RESULT_CACHE_TTL_MS;
90149
90213
  var init_dev_server_scanner = __esm({
90150
90214
  "scripts/dev-server-scanner.ts"() {
90151
90215
  "use strict";
@@ -90210,6 +90274,7 @@ var init_dev_server_scanner = __esm({
90210
90274
  enrichmentInFlight = /* @__PURE__ */ new Set();
90211
90275
  knownNonPatched = /* @__PURE__ */ new Set();
90212
90276
  knownOne = /* @__PURE__ */ new Set();
90277
+ oneNativeApps = /* @__PURE__ */ new Map();
90213
90278
  portCache = /* @__PURE__ */ new Map();
90214
90279
  portCacheInvalidatedAt = /* @__PURE__ */ new Map();
90215
90280
  NEGATIVE_CACHE_TTL_MS = 3e4;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/swift-compile.ts
4
4
  import {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/swift-package.ts
4
4
  function swiftManifestSettings(target) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (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
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -39,7 +39,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
39
39
  var define_SWIFT_COVERAGE_SOURCE_DIGESTS_default;
40
40
  var init_define_SWIFT_COVERAGE_SOURCE_DIGESTS = __esm({
41
41
  "<define:__SWIFT_COVERAGE_SOURCE_DIGESTS__>"() {
42
- define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "d98d6294b359528f7733b26db6f80f554782354faa235605f9562be4ad98b8a3", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "bfde06f157f52d3dd76577b3c6059c95c0393180b054ced773624ea89558992b", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "8deef5a824ed49209458a4b398cd8e88df260a0c8f1894d568279f6211866547", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "40ec039e7a2920e6b4e7610986eb3ba75c5811eed4ea41570c2a7e2424911721", "xcode-target-members.ts": "d49af77a690cff481b38333b5f63f6600123b1bb57f410b0adb298b010d2047b", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
42
+ define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "d98d6294b359528f7733b26db6f80f554782354faa235605f9562be4ad98b8a3", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "bfde06f157f52d3dd76577b3c6059c95c0393180b054ced773624ea89558992b", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "8deef5a824ed49209458a4b398cd8e88df260a0c8f1894d568279f6211866547", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "774c42f06f8d5c1f3f3a09f94379db2046af0016f1fcd6cbe595a9c2da5dcf95", "xcode-target-members.ts": "d49af77a690cff481b38333b5f63f6600123b1bb57f410b0adb298b010d2047b", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
43
43
  }
44
44
  });
45
45
 
@@ -29976,7 +29976,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
29976
29976
  const postBundleScripts = [];
29977
29977
  for (const id of [...list(app.target.buildPhases)].reverse()) {
29978
29978
  const phase = app.project.object(id);
29979
- if (phase?.isa !== "PBXShellScriptBuildPhase" || list(phase.inputPaths).length || list(phase.inputFileListPaths).length || list(phase.outputPaths).length || list(phase.outputFileListPaths).length)
29979
+ if (phase?.isa !== "PBXShellScriptBuildPhase" || list(phase.outputPaths).length || list(phase.outputFileListPaths).length)
29980
29980
  break;
29981
29981
  postBundleScripts.unshift({
29982
29982
  name: str(phase.name) ?? id,
@@ -29985,6 +29985,8 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
29985
29985
  str(phase.shellScript) ?? ""
29986
29986
  ),
29987
29987
  directory: app.project.projectDir,
29988
+ inputPaths: list(phase.inputPaths),
29989
+ inputFileListPaths: list(phase.inputFileListPaths),
29988
29990
  environment: Object.fromEntries(
29989
29991
  [...settingKeys].filter((key2) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(key2)).map((key2) => [key2, settings(key2)])
29990
29992
  )
@@ -31440,7 +31442,7 @@ function sourceClosureDigest(srcDir, entrypoints) {
31440
31442
  return hash.digest("hex");
31441
31443
  }
31442
31444
  var standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
31443
- var STANDIN_SOURCE_DIGEST = true ? "c157dea0314bab3ba5af4145cc3ba5b8a4d824fa6677166162e49713afe384bb" : standinSourceDigest();
31445
+ var STANDIN_SOURCE_DIGEST = true ? "f8700690d0cd621b5d9417ea570f1f45c7ec1ad54492b23aa9792102938e9e82" : standinSourceDigest();
31444
31446
 
31445
31447
  // src/swift-standins.ts
31446
31448
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -38020,11 +38022,35 @@ function buildSwiftBundleFiles(packagePath, hosted, inputs, resourceBundles) {
38020
38022
  CONTENTS_FOLDER_PATH: wrapper,
38021
38023
  UNLOCALIZED_RESOURCES_FOLDER_PATH: wrapper,
38022
38024
  INFOPLIST_PATH: `${wrapper}/Info.plist`,
38023
- SCRIPT_INPUT_FILE_COUNT: "0",
38024
- SCRIPT_INPUT_FILE_LIST_COUNT: "0",
38025
+ SCRIPT_INPUT_FILE_COUNT: String(phase.inputPaths.length),
38026
+ SCRIPT_INPUT_FILE_LIST_COUNT: String(phase.inputFileListPaths.length),
38025
38027
  SCRIPT_OUTPUT_FILE_COUNT: "0",
38026
38028
  SCRIPT_OUTPUT_FILE_LIST_COUNT: "0"
38027
38029
  };
38030
+ const inputPath = (raw2) => {
38031
+ const file = import_node_path55.default.resolve(
38032
+ phase.directory,
38033
+ expand(raw2, (key2) => env[key2] ?? "")
38034
+ );
38035
+ if (!import_node_fs54.default.existsSync(file))
38036
+ throw new Error(
38037
+ `${xcode.app.name}: Run Script "${phase.name}" missing input ${file}`
38038
+ );
38039
+ if (!file.startsWith(`${dir}${import_node_path55.default.sep}`))
38040
+ watched.push(import_node_path55.default.relative(packagePath, file).split(import_node_path55.default.sep).join("/"));
38041
+ return file;
38042
+ };
38043
+ phase.inputPaths.forEach((raw2, index) => {
38044
+ env[`SCRIPT_INPUT_FILE_${index}`] = inputPath(raw2);
38045
+ });
38046
+ phase.inputFileListPaths.forEach((raw2, index) => {
38047
+ const source = inputPath(raw2);
38048
+ const entries = fileListEntries(source, inputPath);
38049
+ const expanded = import_node_path55.default.join(dir, `Input-${index}.xcfilelist`);
38050
+ import_node_fs54.default.writeFileSync(expanded, `${entries.join("\n")}
38051
+ `);
38052
+ env[`SCRIPT_INPUT_FILE_LIST_${index}`] = expanded;
38053
+ });
38028
38054
  try {
38029
38055
  const [shell, ...args] = phase.command;
38030
38056
  (0, import_node_child_process34.execFileSync)(shell, args, {
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -39,7 +39,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
39
39
  var define_SWIFT_COVERAGE_SOURCE_DIGESTS_default;
40
40
  var init_define_SWIFT_COVERAGE_SOURCE_DIGESTS = __esm({
41
41
  "<define:__SWIFT_COVERAGE_SOURCE_DIGESTS__>"() {
42
- define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "d98d6294b359528f7733b26db6f80f554782354faa235605f9562be4ad98b8a3", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "bfde06f157f52d3dd76577b3c6059c95c0393180b054ced773624ea89558992b", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "8deef5a824ed49209458a4b398cd8e88df260a0c8f1894d568279f6211866547", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "40ec039e7a2920e6b4e7610986eb3ba75c5811eed4ea41570c2a7e2424911721", "xcode-target-members.ts": "d49af77a690cff481b38333b5f63f6600123b1bb57f410b0adb298b010d2047b", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
42
+ define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "d98d6294b359528f7733b26db6f80f554782354faa235605f9562be4ad98b8a3", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "bfde06f157f52d3dd76577b3c6059c95c0393180b054ced773624ea89558992b", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "8deef5a824ed49209458a4b398cd8e88df260a0c8f1894d568279f6211866547", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "774c42f06f8d5c1f3f3a09f94379db2046af0016f1fcd6cbe595a9c2da5dcf95", "xcode-target-members.ts": "d49af77a690cff481b38333b5f63f6600123b1bb57f410b0adb298b010d2047b", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
43
43
  }
44
44
  });
45
45
 
@@ -1072,7 +1072,7 @@ var init_src = __esm({
1072
1072
  var runtime_companion_default;
1073
1073
  var init_runtime_companion = __esm({
1074
1074
  "runtime-companion.json"() {
1075
- runtime_companion_default = { abi: 1, sha256: "286145bc3b2ca79a64228c88d8c2e088a592754d61b5855d0388974ee88863fa", file: "node/cli-286145bc3b2ca79a64228c88d8c2e088a592754d61b5855d0388974ee88863fa.cjs" };
1075
+ runtime_companion_default = { abi: 1, sha256: "00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde", file: "node/cli-00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde.cjs" };
1076
1076
  }
1077
1077
  });
1078
1078
 
@@ -3228,7 +3228,7 @@ function readIosSdkTree(root) {
3228
3228
 
3229
3229
  // src/swift-standin-digest.ts
3230
3230
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
3231
- var STANDIN_SOURCE_DIGEST = true ? "c157dea0314bab3ba5af4145cc3ba5b8a4d824fa6677166162e49713afe384bb" : standinSourceDigest();
3231
+ var STANDIN_SOURCE_DIGEST = true ? "f8700690d0cd621b5d9417ea570f1f45c7ec1ad54492b23aa9792102938e9e82" : standinSourceDigest();
3232
3232
 
3233
3233
  // src/expo-native-workspace.ts
3234
3234
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -6355,6 +6355,11 @@ var compilerArchives = {
6355
6355
  }
6356
6356
  }
6357
6357
  };
6358
+ var SWIFT_PRIVATE_DISTRIBUTION_ENV = "PEACH_SWIFT_PRIVATE_DISTRIBUTION";
6359
+ function privateSwiftDistributionRoot() {
6360
+ const root = process.env[SWIFT_PRIVATE_DISTRIBUTION_ENV]?.trim();
6361
+ return root ? import_node_path10.default.resolve(root) : null;
6362
+ }
6358
6363
 
6359
6364
  // src/swift-objc-runtime.ts
6360
6365
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -12664,6 +12669,7 @@ function peachPlugin(options = {}) {
12664
12669
  let swiftPackages;
12665
12670
  let swiftModuleRoot;
12666
12671
  const moduleRootFor = () => {
12672
+ if (privateSwiftDistributionRoot()) return void 0;
12667
12673
  if (swiftModuleRoot === void 0) {
12668
12674
  const moduleRoot = import_path4.default.resolve(
12669
12675
  import_path4.default.dirname((0, import_node_url2.fileURLToPath)(__sootsim_import_meta_url)),
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2228 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2231 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/worklet-executable.ts
4
4
  import { parse } from "acorn";
@@ -50,6 +50,9 @@ export interface CanvasKitGifApi {
50
50
  _peachSkottieGifDemand(json: string, assets?: Record<string, ArrayBuffer | Uint8Array>): number;
51
51
  }
52
52
  export interface CanvasKitTextDataApi {
53
+ _peachRetainLayoutParagraph(slot: number, paragraph: Paragraph): void;
54
+ _peachLayoutParagraph(slot: number, width: number): Paragraph | null;
55
+ _peachReleaseLayoutParagraph(slot: number): void;
53
56
  _peachMakeParagraph(collection: FontCollection, pointer: number, length: number): Paragraph | null;
54
57
  HEAPU8: Uint8Array;
55
58
  _malloc(length: number): number;
@@ -11,7 +11,6 @@ export interface NativeLayoutExports {
11
11
  _peach_layout_values(): number;
12
12
  _peach_layout_units(): number;
13
13
  _peach_layout_enums(): number;
14
- _peach_layout_scratch(): number;
15
14
  _peach_layout_node_new(slot: number, pointScaleFactor: number, measured: number): void;
16
15
  _peach_layout_node_free(slot: number): void;
17
16
  _peach_layout_subtree_free(root: number): number;
@@ -31,6 +30,8 @@ export interface NativeLayoutExports {
31
30
  _peach_layout_owner(slot: number): number;
32
31
  _peach_layout_child_count(slot: number): number;
33
32
  _peach_layout_mark_dirty(slot: number): void;
33
+ _peach_layout_text_policy(slot: number, policy: number, scale: number): void;
34
+ _peach_layout_measure_result(width: number, height: number, cacheable: number): void;
34
35
  _peach_layout_force(slot: number): void;
35
36
  _peach_layout_force_subtree(slot: number): void;
36
37
  _peach_layout_seen(slot: number): void;
@@ -45,6 +46,7 @@ export interface NativeLayoutExports {
45
46
  readonly HEAP32: Int32Array;
46
47
  readonly HEAPF32: Float32Array;
47
48
  peachLayoutMeasure?: MeasureHook;
49
+ peachLayoutTextLines?: (slot: number) => void;
48
50
  peachLayoutExit?: (slot: number) => void;
49
51
  }
50
52
  export type MeasureHook = (slot: number, width: number, widthMode: number, height: number, heightMode: number) => void;
@@ -136,6 +138,12 @@ export declare const OVERFLOW_SCROLL = 2;
136
138
  export declare const DISPLAY_FLEX = 0;
137
139
  export declare const DISPLAY_NONE = 1;
138
140
  export declare const DISPLAY_CONTENTS = 2;
141
+ export declare const TEXT_MEASURE = 1;
142
+ export declare const TEXT_MEASURE_PAPER = 2;
143
+ export declare const TEXT_MEASURE_ZERO_PROPOSAL = 4;
144
+ export declare const TEXT_MEASURE_STRETCH = 8;
145
+ export declare const TEXT_MEASURE_LINE_EVENTS = 16;
146
+ export declare const TEXT_MEASURE_HEIGHT_PROPOSAL = 32;
139
147
  export declare const MEASURE_MODE_UNDEFINED = 0;
140
148
  export declare const MEASURE_MODE_EXACTLY = 1;
141
149
  export declare const MEASURE_MODE_AT_MOST = 2;
@@ -144,6 +152,5 @@ export interface NativeLayout {
144
152
  readonly values: number;
145
153
  readonly units: number;
146
154
  readonly enums: number;
147
- readonly scratch: number;
148
155
  }
149
- export declare function bindNativeLayout(ck: CanvasKit, measure: MeasureHook, exit: (slot: number) => void): NativeLayout;
156
+ export declare function bindNativeLayout(ck: CanvasKit, measure: MeasureHook, textLines: (slot: number) => void, exit: (slot: number) => void): NativeLayout;
@@ -177,7 +177,7 @@ export interface SceneNativeBinding {
177
177
  _peach_numeric_text_parameters(handle: number): number;
178
178
  _peach_numeric_text_draw(canvas: number, handle: number, x: number, y: number, elapsed: number): void;
179
179
  _peach_numeric_text_drop(handle: number): void;
180
- _peach_scene_set_image(slot: number, image: number, padLeft: number, padTop: number, padRight: number, padBottom: number, srcLeft: number, srcTop: number, srcRight: number, srcBottom: number, offsetX: number, adjustX: number, offsetY: number, adjustY: number, width: number, height: number, repeat: number, mipmaps: number, tintR: number, tintG: number, tintB: number, tintA: number, alpha: number, shape: number, sampling: number): void;
180
+ _peach_scene_set_image(slot: number, image: number, padLeft: number, padTop: number, padRight: number, padBottom: number, srcLeft: number, srcTop: number, srcRight: number, srcBottom: number, offsetX: number, adjustX: number, offsetY: number, adjustY: number, width: number, height: number, repeat: number, mipmaps: number, tintR: number, tintG: number, tintB: number, tintA: number, alpha: number, shape: number, sampling: number, swiftPixelOrigin: number): void;
181
181
  _peach_scene_set_picture(slot: number, picture: number, fontGeneration: number, drawnNodes: number): void;
182
182
  _peach_scene_set_ink(slot: number, glass: number, id: number, label: number): void;
183
183
  _peach_ink_draw_picture(canvas: number, picture: number, shader: number, text: number, left: number, top: number, right: number, bottom: number): void;
@@ -429,7 +429,7 @@ export interface SootSimStyle {
429
429
  _boxShadowOpacity?: SootSimAnimatedNumber;
430
430
  filter?: SootSimAnimatedFilter;
431
431
  _filter?: ParsedFilterOp[];
432
- mixBlendMode?: 'normal' | 'plus-lighter' | 'multiply' | 'screen' | 'overlay' | 'darken' | 'lighten' | 'color-dodge' | 'color-burn' | 'hard-light' | 'soft-light' | 'difference' | 'exclusion' | 'hue' | 'saturation' | 'color' | 'luminosity' | 'destination-out';
432
+ mixBlendMode?: 'normal' | 'plus-lighter' | 'plus-darker' | 'multiply' | 'screen' | 'overlay' | 'darken' | 'lighten' | 'color-dodge' | 'color-burn' | 'hard-light' | 'soft-light' | 'difference' | 'exclusion' | 'hue' | 'saturation' | 'color' | 'luminosity' | 'destination-out';
433
433
  isolation?: 'auto' | 'isolate';
434
434
  outlineWidth?: number;
435
435
  outlineStyle?: 'solid' | 'dashed' | 'dotted';
@@ -465,6 +465,7 @@ export interface SootSimStyle {
465
465
  _hyphenationLocale?: string;
466
466
  _hyphenationFactor?: number;
467
467
  _swiftUIText?: true;
468
+ _swiftUIPickerValue?: true;
468
469
  _composeText?: true;
469
470
  _androidTextView?: true;
470
471
  _androidTextSize?: 'dimension' | 'sp';
package/install.sh CHANGED
@@ -38,6 +38,16 @@ command_exists() {
38
38
  command -v "$1" >/dev/null 2>&1
39
39
  }
40
40
 
41
+ # curl's --retry skips a connection reset mid-transfer, so retry the request.
42
+ fetch() {
43
+ attempt=1
44
+ until curl -fsSL "$@"; do
45
+ [ "$attempt" -ge 3 ] && return 1
46
+ attempt=$((attempt + 1))
47
+ sleep 2
48
+ done
49
+ }
50
+
41
51
  command_exists curl || fail "curl is required to install peach"
42
52
 
43
53
  case "$(uname -s)" in
@@ -92,8 +102,8 @@ say " version: $PEACH_VERSION"
92
102
  say " command: $CLI"
93
103
  say ""
94
104
  say "Downloading the standalone peach executable..."
95
- curl -fsSL "$ARTIFACT_URL" -o "$TMP_BIN" || fail "could not download peach"
96
- curl -fsSL "$ARTIFACT_URL.sha256" -o "$TMP_SHA" ||
105
+ fetch "$ARTIFACT_URL" -o "$TMP_BIN" || fail "could not download peach"
106
+ fetch "$ARTIFACT_URL.sha256" -o "$TMP_SHA" ||
97
107
  fail "could not download the peach checksum"
98
108
 
99
109
  EXPECTED_SHA="$(tr -d '[:space:]' <"$TMP_SHA")"
package/kotlin/sdk.tar.gz CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peachsim",
3
- "version": "0.1.2228",
3
+ "version": "0.1.2231",
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",
@@ -1 +1 @@
1
- {"abi":1,"sha256":"286145bc3b2ca79a64228c88d8c2e088a592754d61b5855d0388974ee88863fa","file":"node/cli-286145bc3b2ca79a64228c88d8c2e088a592754d61b5855d0388974ee88863fa.cjs"}
1
+ {"abi":1,"sha256":"00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde","file":"node/cli-00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde.cjs"}