peachsim 0.1.2225 → 0.1.2229

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 (118) hide show
  1. package/cli/bridge-flow-runner.ts +56 -3
  2. package/cli/commands/control.ts +27 -1
  3. package/cli/commands/device.ts +1 -1
  4. package/cli/commands/flow.ts +27 -1
  5. package/cli/commands/package.ts +9 -2
  6. package/cli/drivers/playwright.ts +1 -0
  7. package/cli/drivers/types.ts +3 -0
  8. package/dist-lib/agent-daemon-client.cjs +1 -1
  9. package/dist-lib/agent-events.cjs +1 -1
  10. package/dist-lib/attached-projects.cjs +1 -1
  11. package/dist-lib/auth/shared-session.cjs +1 -1
  12. package/dist-lib/backend-origin.cjs +1 -1
  13. package/dist-lib/beta.cjs +1 -1
  14. package/dist-lib/beta.mjs +1 -1
  15. package/dist-lib/bridge-constants.cjs +1 -1
  16. package/dist-lib/bridge-contract-input.cjs +1 -1
  17. package/dist-lib/bridge-contract-input.mjs +1 -1
  18. package/dist-lib/bridge-contract.cjs +1 -1
  19. package/dist-lib/bridge-contract.mjs +1 -1
  20. package/dist-lib/bundle-channel.cjs +108 -13
  21. package/dist-lib/capture-contract.cjs +1 -1
  22. package/dist-lib/capture-contract.mjs +1 -1
  23. package/dist-lib/cloud-contract.cjs +1 -1
  24. package/dist-lib/cloud-contract.mjs +1 -1
  25. package/dist-lib/cloud-test-args.cjs +1 -1
  26. package/dist-lib/cloud-test-args.mjs +1 -1
  27. package/dist-lib/cloud.cjs +1 -1
  28. package/dist-lib/cloud.mjs +1 -1
  29. package/dist-lib/config.cjs +1 -1
  30. package/dist-lib/config.mjs +1 -1
  31. package/dist-lib/detox/index.cjs +5 -2
  32. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  33. package/dist-lib/expo-swift-bundle.cjs +106 -11
  34. package/dist-lib/expo-swift-metadata.cjs +1 -1
  35. package/dist-lib/expo-swift-metadata.mjs +1 -1
  36. package/dist-lib/home-paths.cjs +1 -1
  37. package/dist-lib/host/bridge-host.cjs +108 -13
  38. package/dist-lib/host/fetch-proxy-handler.cjs +5 -5
  39. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  40. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  41. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  42. package/dist-lib/host/websocket-proxy.cjs +1 -1
  43. package/dist-lib/index.cjs +8 -6
  44. package/dist-lib/jump-to-source-babel.cjs +1 -1
  45. package/dist-lib/jump-to-source-native.cjs +1 -1
  46. package/dist-lib/kotlin-host.cjs +1 -1
  47. package/dist-lib/menu.cjs +16 -14
  48. package/dist-lib/menu.mjs +16 -14
  49. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  50. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  51. package/dist-lib/metro-production-bundle.cjs +11 -4
  52. package/dist-lib/metro-production-bundle.mjs +10 -4
  53. package/dist-lib/metro.cjs +8 -6
  54. package/dist-lib/native-app-identity-project.cjs +6 -4
  55. package/dist-lib/native-app-identity-project.mjs +6 -4
  56. package/dist-lib/native-app-identity.cjs +1 -1
  57. package/dist-lib/native-app-identity.mjs +1 -1
  58. package/dist-lib/native-firebase-metadata.cjs +1 -1
  59. package/dist-lib/native-firebase-metadata.mjs +1 -1
  60. package/dist-lib/pdfium-raster.cjs +1 -1
  61. package/dist-lib/pdfium-raster.mjs +1 -1
  62. package/dist-lib/plist.cjs +1 -1
  63. package/dist-lib/plist.mjs +1 -1
  64. package/dist-lib/profiles.cjs +1 -1
  65. package/dist-lib/public-brand.cjs +1 -1
  66. package/dist-lib/public-origins-lib-esm.json +25 -24
  67. package/dist-lib/public-origins-lib.json +56 -53
  68. package/dist-lib/react-native-host-modules.cjs +1 -1
  69. package/dist-lib/react-native-host-modules.mjs +1 -1
  70. package/dist-lib/reap-browser.cjs +1 -1
  71. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  72. package/dist-lib/sdk.cjs +1 -1
  73. package/dist-lib/sdk.mjs +1 -1
  74. package/dist-lib/skills.cjs +183 -27
  75. package/dist-lib/swift-compile.cjs +68 -4
  76. package/dist-lib/swift-compile.mjs +67 -4
  77. package/dist-lib/swift-package.cjs +1 -1
  78. package/dist-lib/swift-package.mjs +1 -1
  79. package/dist-lib/swift-submit.cjs +1 -1
  80. package/dist-lib/swift-submit.mjs +1 -1
  81. package/dist-lib/swift-toolchain.cjs +1 -1
  82. package/dist-lib/swift.cjs +1 -1
  83. package/dist-lib/vite-swift.cjs +105 -10
  84. package/dist-lib/vite.cjs +5 -5
  85. package/dist-lib/worklet-executable.cjs +1 -1
  86. package/dist-lib/worklet-executable.mjs +1 -1
  87. package/dist-types/packages/peach-engine/src/bundle-parse-receipt.d.ts +17 -0
  88. package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +5 -1
  89. package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +2 -2
  90. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +11 -3
  91. package/dist-types/packages/peach-engine/src/engine/native-paragraph.d.ts +4 -0
  92. package/dist-types/packages/peach-engine/src/engine/node.d.ts +2 -0
  93. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +1 -1
  94. package/dist-types/packages/peach-engine/src/engine/types.d.ts +9 -1
  95. package/dist-types/packages/peach-engine/src/engine/yoga-layout.d.ts +2 -0
  96. package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +3 -2
  97. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1 -0
  98. package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +3 -3
  99. package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +0 -5
  100. package/dist-types/packages/peach-kit/src/capabilities.d.ts +2 -0
  101. package/dist-types/packages/peach-kit/src/internal.d.ts +1 -1
  102. package/dist-types/packages/peach-kit/src/ios-tint.d.ts +2 -0
  103. package/kotlin/sdk.tar.gz +0 -0
  104. package/package.json +1 -1
  105. package/runtime-companion.json +1 -1
  106. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UIControl.h +0 -26
  107. package/sdk/ios/System/Library/Frameworks/UIKitTypes.framework/Headers/UIKitTypes.h +27 -0
  108. package/sdk/ios/usr/include/ObjectiveC.apinotes +380 -7
  109. package/src/appPackageContract.ts +1 -1
  110. package/src/menu.ts +17 -99
  111. package/src/menuContract.ts +102 -0
  112. package/src/metro-production-bundle.ts +15 -2
  113. package/src/settingsContract.ts +8 -8
  114. package/src/swift-compile.ts +77 -2
  115. package/src/swift-host.ts +27 -2
  116. package/src/swift-standin-emit.ts +1 -0
  117. package/src/swift-standins.ts +8 -0
  118. package/src/xcode-project.ts +8 -2
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/cloud-contract.ts
4
4
  var RNX_CLOUD_MAX_ARTIFACT_BYTES = 40761776;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // ../contrast-runtime-delivery/src/version.ts
4
4
  function isValidRuntimeVersion(value) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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;
@@ -2515,7 +2515,7 @@ function isValidRuntimeVersion(value) {
2515
2515
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
2516
2516
 
2517
2517
  // runtime-companion.json
2518
- var runtime_companion_default = { abi: 1, sha256: "ef38a3e8be87c77f4035640cf265efa9aff735577a2de14feb63c8a09afabd42", file: "node/cli-ef38a3e8be87c77f4035640cf265efa9aff735577a2de14feb63c8a09afabd42.cjs" };
2518
+ var runtime_companion_default = { abi: 1, sha256: "00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde", file: "node/cli-00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde.cjs" };
2519
2519
 
2520
2520
  // src/answeredNativePackages.ts
2521
2521
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -6433,6 +6433,9 @@ async function awaitStampedExpoSwiftReady(shellUrl, openToken, platform, signal)
6433
6433
 
6434
6434
  // src/menu.ts
6435
6435
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
6436
+
6437
+ // src/menuContract.ts
6438
+ init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
6436
6439
  var SOOTSIM_SHELL_COMMAND_NAME = "sootsim:shell-command";
6437
6440
 
6438
6441
  // src/poll-until.ts
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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
 
@@ -10006,7 +10006,7 @@ function emitSwiftStandin(sourceGraphs, options) {
10006
10006
  "Equatable",
10007
10007
  "CustomStringConvertible",
10008
10008
  "CustomDebugStringConvertible"
10009
- ].includes(name3)) && !(name3 === nsObjectProtocol && externalRoot(id) === nsObject) && !options.unconformed?.get(path74)?.has(name3)
10009
+ ].includes(name3)) && !(name3 === nsObjectProtocol && externalRoot(id) === nsObject) && !options.unconformed?.get(path74)?.has(name3.split(/::|\./).pop()) && !options.unconformed?.get(path74)?.has(name3)
10010
10010
  )
10011
10011
  ].filter((name3, at, all2) => all2.indexOf(name3) === at);
10012
10012
  const parentSymbol = superId.has(id) ? byId.get(superId.get(id)) : void 0;
@@ -19913,6 +19913,20 @@ function swiftModuleInterface(moduleRoot, name3, interfaceRoot) {
19913
19913
  if (declared.size === 0) return null;
19914
19914
  return { declared, header: clangInterfaceHeader((0, import_node_fs50.readFileSync)(built2, "utf8")) };
19915
19915
  }
19916
+ function swiftHeaderWithSuperclassImports(header, interfaceFor) {
19917
+ const superclasses = new Set(
19918
+ [...header.matchAll(/@interface\s+\w+\s*:\s*(\w+)/g)].map((match) => match[1])
19919
+ );
19920
+ return header.replace(/^@import (\w+);$/gm, (statement, name3) => {
19921
+ const dependency = interfaceFor(name3);
19922
+ if (!dependency || ![...swiftInterfaceDeclarations(dependency.header)].some(
19923
+ (name4) => superclasses.has(name4)
19924
+ ))
19925
+ return statement;
19926
+ return `${statement}
19927
+ #import ${JSON.stringify(dependency.file)}`;
19928
+ });
19929
+ }
19916
19930
  function withoutSwiftDeclarations(text6, declared, interfaceImport) {
19917
19931
  const out = [];
19918
19932
  let skipping;
@@ -24273,6 +24287,51 @@ function compileSwiftProjectOnce(input, options) {
24273
24287
  if ((0, import_node_fs50.existsSync)(linked) && (0, import_node_fs50.statSync)(linked).size <= 8)
24274
24288
  (0, import_node_fs50.rmSync)(linked, { force: true });
24275
24289
  report("compiling and linking Swift modules");
24290
+ const frameworkInterfaces = /* @__PURE__ */ new Map();
24291
+ const frameworkInterface = (name3) => {
24292
+ if (frameworkInterfaces.has(name3)) return frameworkInterfaces.get(name3);
24293
+ const source = distribution ? import_node_path47.default.join(frameworkRoot, "modules", `${name3}-Swift.h`) : import_node_path47.default.join(
24294
+ prebuilt.modules,
24295
+ "..",
24296
+ `${name3}.build/include/${name3}-Swift.h`
24297
+ );
24298
+ if (!(0, import_node_fs50.existsSync)(source)) {
24299
+ frameworkInterfaces.set(name3, null);
24300
+ return null;
24301
+ }
24302
+ const headers = import_node_path47.default.join(
24303
+ swiftSdkPaths(frameworkRoot, options.toolchainBin).darwin,
24304
+ `System/Library/Frameworks/${name3}.framework/Headers`
24305
+ );
24306
+ const declared = /* @__PURE__ */ new Set();
24307
+ if ((0, import_node_fs50.existsSync)(headers)) {
24308
+ for (const file of (0, import_node_fs50.readdirSync)(headers, {
24309
+ recursive: true,
24310
+ encoding: "utf8"
24311
+ }))
24312
+ if (file.endsWith(".h"))
24313
+ for (const name4 of swiftInterfaceDeclarations(
24314
+ (0, import_node_fs50.readFileSync)(import_node_path47.default.join(headers, file), "utf8")
24315
+ ))
24316
+ declared.add(name4);
24317
+ }
24318
+ const header = withoutSwiftDeclarations(
24319
+ clangInterfaceHeader((0, import_node_fs50.readFileSync)(source, "utf8")),
24320
+ declared,
24321
+ `#import <${name3}/${name3}.h>`
24322
+ );
24323
+ const value = {
24324
+ file: import_node_path47.default.join(root, ".build/peach-framework-objc", `${name3}-Swift.h`),
24325
+ header
24326
+ };
24327
+ frameworkInterfaces.set(name3, value);
24328
+ writeBuildFile(
24329
+ value.file,
24330
+ ((0, import_node_fs50.existsSync)(import_node_path47.default.join(headers, `${name3}.h`)) ? `#import <${name3}/${name3}.h>
24331
+ ` : "") + swiftHeaderWithSuperclassImports(header, frameworkInterface)
24332
+ );
24333
+ return value;
24334
+ };
24276
24335
  try {
24277
24336
  const headerBuilds = preparation.headerProductTarget ? [
24278
24337
  ...Object.keys(preparation.nativeHeaderDeclarations),
@@ -24300,7 +24359,10 @@ function compileSwiftProjectOnce(input, options) {
24300
24359
  writeBuildFile(
24301
24360
  emitted,
24302
24361
  withoutSwiftDeclarations(
24303
- clangInterfaceHeader((0, import_node_fs50.readFileSync)(original, "utf8")),
24362
+ swiftHeaderWithSuperclassImports(
24363
+ clangInterfaceHeader((0, import_node_fs50.readFileSync)(original, "utf8")),
24364
+ frameworkInterface
24365
+ ),
24304
24366
  new Set(preparation.nativeHeaderDeclarations[producer]),
24305
24367
  `#import <${producer}/${producer}.h>`
24306
24368
  )
@@ -24575,7 +24637,7 @@ var init_swift_compile = __esm({
24575
24637
  ExpoModulesCore: []
24576
24638
  };
24577
24639
  OPTIONAL_FRAMEWORKS = new Set(Object.keys(OPTIONAL_FRAMEWORK_DEPENDENCIES));
24578
- SWIFT_IMPORT = /^\s*(?:@\w+(?:\([^)]*\))?\s+)*import\s+(?:(?:typealias|struct|class|enum|protocol|let|var|func)\s+)?([A-Za-z_][A-Za-z0-9_]*)/;
24640
+ SWIFT_IMPORT = /^\s*(?:@\w+(?:\([^)]*\))?\s+|(?:public|package|internal|fileprivate|private)\s+)*import\s+(?:(?:typealias|struct|class|enum|protocol|let|var|func)\s+)?([A-Za-z_][A-Za-z0-9_]*)/;
24579
24641
  kleeneNot = (value) => value === void 0 ? void 0 : !value;
24580
24642
  kleeneAnd = (left, right) => left === false || right === false ? false : left === true && right === true ? true : void 0;
24581
24643
  kleeneOr = (left, right) => left === true || right === true ? true : left === false && right === false ? false : void 0;
@@ -24672,7 +24734,7 @@ int EXUpdatesApplyBSDiffPatch(const char * _Nonnull oldFilePath,
24672
24734
  REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
24673
24735
  MULTI_MANIFEST_VERSION = 68;
24674
24736
  SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
24675
- compilerSourceDigest = true ? "645b0e6bc4e374f7c82da4d402e0ec9ddedfc49d6e5a74b73284852f1fbd4efc" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
24737
+ compilerSourceDigest = true ? "280e858b01b1c1393d3765c8d6ff1b3ce4a1a93d7fb7e3dd2d4d3e5f1d5f1ac2" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
24676
24738
  nativeCxxCompilerFlags = ["-fno-cxx-modules"];
24677
24739
  cFlagArray = (flags) => JSON.stringify(withoutGlogModuleMap(flags));
24678
24740
  cxxFlagArray = (flags) => JSON.stringify([...nativeCxxCompilerFlags, ...withoutGlogModuleMap(flags)]);
@@ -28320,7 +28382,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
28320
28382
  const postBundleScripts = [];
28321
28383
  for (const id of [...list(app.target.buildPhases)].reverse()) {
28322
28384
  const phase = app.project.object(id);
28323
- if (phase?.isa !== "PBXShellScriptBuildPhase" || list(phase.inputPaths).length || list(phase.inputFileListPaths).length || list(phase.outputPaths).length || list(phase.outputFileListPaths).length)
28385
+ if (phase?.isa !== "PBXShellScriptBuildPhase" || list(phase.outputPaths).length || list(phase.outputFileListPaths).length)
28324
28386
  break;
28325
28387
  postBundleScripts.unshift({
28326
28388
  name: str(phase.name) ?? id,
@@ -28329,6 +28391,8 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
28329
28391
  str(phase.shellScript) ?? ""
28330
28392
  ),
28331
28393
  directory: app.project.projectDir,
28394
+ inputPaths: list(phase.inputPaths),
28395
+ inputFileListPaths: list(phase.inputFileListPaths),
28332
28396
  environment: Object.fromEntries(
28333
28397
  [...settingKeys].filter((key2) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(key2)).map((key2) => [key2, settings(key2)])
28334
28398
  )
@@ -28809,7 +28873,7 @@ var init_swift_standin_digest = __esm({
28809
28873
  STANDIN_DIGEST_ENTRYPOINTS = ["swift-standins.ts", "swift-objc-compile.ts"];
28810
28874
  SPECIFIER = /from\s*['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
28811
28875
  standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
28812
- STANDIN_SOURCE_DIGEST = true ? "7ad2d908aa8d716181e88c4bc1a8e1fb721aa69e8090d0d7ad5851f9b8de0944" : standinSourceDigest();
28876
+ STANDIN_SOURCE_DIGEST = true ? "f8700690d0cd621b5d9417ea570f1f45c7ec1ad54492b23aa9792102938e9e82" : standinSourceDigest();
28813
28877
  }
28814
28878
  });
28815
28879
 
@@ -32185,6 +32249,13 @@ function graphStandin(module2, graphs, values, wasm, binary2, toolchain, work, r
32185
32249
  unconformed.set(owner, /* @__PURE__ */ new Set([...unconformed.get(owner) ?? [], conformance]));
32186
32250
  continue;
32187
32251
  }
32252
+ const redundant = /^redundant conformance of '\w+' to protocol '(\w+)'$/.exec(
32253
+ match[3]
32254
+ )?.[1];
32255
+ if (owner && redundant) {
32256
+ unconformed.set(owner, /* @__PURE__ */ new Set([...unconformed.get(owner) ?? [], redundant]));
32257
+ continue;
32258
+ }
32188
32259
  if (owner && swiftPaths.has(owner))
32189
32260
  throw new Error(
32190
32261
  `Swift declaration ${module2}.${owner} does not typecheck: ${match[3]}`
@@ -38415,11 +38486,35 @@ function buildSwiftBundleFiles(packagePath, hosted, inputs, resourceBundles) {
38415
38486
  CONTENTS_FOLDER_PATH: wrapper,
38416
38487
  UNLOCALIZED_RESOURCES_FOLDER_PATH: wrapper,
38417
38488
  INFOPLIST_PATH: `${wrapper}/Info.plist`,
38418
- SCRIPT_INPUT_FILE_COUNT: "0",
38419
- SCRIPT_INPUT_FILE_LIST_COUNT: "0",
38489
+ SCRIPT_INPUT_FILE_COUNT: String(phase.inputPaths.length),
38490
+ SCRIPT_INPUT_FILE_LIST_COUNT: String(phase.inputFileListPaths.length),
38420
38491
  SCRIPT_OUTPUT_FILE_COUNT: "0",
38421
38492
  SCRIPT_OUTPUT_FILE_LIST_COUNT: "0"
38422
38493
  };
38494
+ const inputPath = (raw2) => {
38495
+ const file = import_node_path77.default.resolve(
38496
+ phase.directory,
38497
+ expand(raw2, (key2) => env[key2] ?? "")
38498
+ );
38499
+ if (!import_node_fs80.default.existsSync(file))
38500
+ throw new Error(
38501
+ `${xcode.app.name}: Run Script "${phase.name}" missing input ${file}`
38502
+ );
38503
+ if (!file.startsWith(`${dir}${import_node_path77.default.sep}`))
38504
+ watched.push(import_node_path77.default.relative(packagePath, file).split(import_node_path77.default.sep).join("/"));
38505
+ return file;
38506
+ };
38507
+ phase.inputPaths.forEach((raw2, index) => {
38508
+ env[`SCRIPT_INPUT_FILE_${index}`] = inputPath(raw2);
38509
+ });
38510
+ phase.inputFileListPaths.forEach((raw2, index) => {
38511
+ const source = inputPath(raw2);
38512
+ const entries = fileListEntries(source, inputPath);
38513
+ const expanded = import_node_path77.default.join(dir, `Input-${index}.xcfilelist`);
38514
+ import_node_fs80.default.writeFileSync(expanded, `${entries.join("\n")}
38515
+ `);
38516
+ env[`SCRIPT_INPUT_FILE_LIST_${index}`] = expanded;
38517
+ });
38423
38518
  try {
38424
38519
  const [shell, ...args] = phase.command;
38425
38520
  (0, import_node_child_process42.execFileSync)(shell, args, {
@@ -49372,7 +49467,7 @@ init_swift_native_pin();
49372
49467
  init_xcode_project();
49373
49468
  var EXPO_NATIVE_ENTRY_NAME = "ios";
49374
49469
  function expoNativeCompilerDigestValue() {
49375
- return true ? "5c577dbcb88d6c91ec20e51d76fe0d737f81c200e21973536cf1f8e51d076cbc" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
49470
+ return true ? "aab5589ba02cd96332e686f60153187e7357cc46c8a6ec5369f1400cea6f6da0" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
49376
49471
  }
49377
49472
  var IDENTITY_SOURCE_SKIPS = 1 | 4 | 8 | 16 | 32 | 64 | 128 | 4096;
49378
49473
  function readSources(value) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // ../peach-globals/src/bundle-global-footer.ts
4
4
  function findBundleFooter(source, prefix) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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
 
@@ -19101,7 +19101,7 @@ function emitSwiftStandin(sourceGraphs, options) {
19101
19101
  "Equatable",
19102
19102
  "CustomStringConvertible",
19103
19103
  "CustomDebugStringConvertible"
19104
- ].includes(name3)) && !(name3 === nsObjectProtocol && externalRoot(id) === nsObject) && !options.unconformed?.get(path112)?.has(name3)
19104
+ ].includes(name3)) && !(name3 === nsObjectProtocol && externalRoot(id) === nsObject) && !options.unconformed?.get(path112)?.has(name3.split(/::|\./).pop()) && !options.unconformed?.get(path112)?.has(name3)
19105
19105
  )
19106
19106
  ].filter((name3, at, all2) => all2.indexOf(name3) === at);
19107
19107
  const parentSymbol = superId.has(id) ? byId.get(superId.get(id)) : void 0;
@@ -29033,6 +29033,20 @@ function swiftModuleInterface(moduleRoot, name3, interfaceRoot) {
29033
29033
  if (declared.size === 0) return null;
29034
29034
  return { declared, header: clangInterfaceHeader((0, import_node_fs53.readFileSync)(built2, "utf8")) };
29035
29035
  }
29036
+ function swiftHeaderWithSuperclassImports(header, interfaceFor) {
29037
+ const superclasses = new Set(
29038
+ [...header.matchAll(/@interface\s+\w+\s*:\s*(\w+)/g)].map((match) => match[1])
29039
+ );
29040
+ return header.replace(/^@import (\w+);$/gm, (statement, name3) => {
29041
+ const dependency = interfaceFor(name3);
29042
+ if (!dependency || ![...swiftInterfaceDeclarations(dependency.header)].some(
29043
+ (name4) => superclasses.has(name4)
29044
+ ))
29045
+ return statement;
29046
+ return `${statement}
29047
+ #import ${JSON.stringify(dependency.file)}`;
29048
+ });
29049
+ }
29036
29050
  function withoutSwiftDeclarations(text6, declared, interfaceImport) {
29037
29051
  const out = [];
29038
29052
  let skipping;
@@ -33393,6 +33407,51 @@ function compileSwiftProjectOnce(input, options) {
33393
33407
  if ((0, import_node_fs53.existsSync)(linked) && (0, import_node_fs53.statSync)(linked).size <= 8)
33394
33408
  (0, import_node_fs53.rmSync)(linked, { force: true });
33395
33409
  report("compiling and linking Swift modules");
33410
+ const frameworkInterfaces = /* @__PURE__ */ new Map();
33411
+ const frameworkInterface = (name3) => {
33412
+ if (frameworkInterfaces.has(name3)) return frameworkInterfaces.get(name3);
33413
+ const source = distribution ? import_node_path51.default.join(frameworkRoot, "modules", `${name3}-Swift.h`) : import_node_path51.default.join(
33414
+ prebuilt.modules,
33415
+ "..",
33416
+ `${name3}.build/include/${name3}-Swift.h`
33417
+ );
33418
+ if (!(0, import_node_fs53.existsSync)(source)) {
33419
+ frameworkInterfaces.set(name3, null);
33420
+ return null;
33421
+ }
33422
+ const headers = import_node_path51.default.join(
33423
+ swiftSdkPaths(frameworkRoot, options.toolchainBin).darwin,
33424
+ `System/Library/Frameworks/${name3}.framework/Headers`
33425
+ );
33426
+ const declared = /* @__PURE__ */ new Set();
33427
+ if ((0, import_node_fs53.existsSync)(headers)) {
33428
+ for (const file of (0, import_node_fs53.readdirSync)(headers, {
33429
+ recursive: true,
33430
+ encoding: "utf8"
33431
+ }))
33432
+ if (file.endsWith(".h"))
33433
+ for (const name4 of swiftInterfaceDeclarations(
33434
+ (0, import_node_fs53.readFileSync)(import_node_path51.default.join(headers, file), "utf8")
33435
+ ))
33436
+ declared.add(name4);
33437
+ }
33438
+ const header = withoutSwiftDeclarations(
33439
+ clangInterfaceHeader((0, import_node_fs53.readFileSync)(source, "utf8")),
33440
+ declared,
33441
+ `#import <${name3}/${name3}.h>`
33442
+ );
33443
+ const value = {
33444
+ file: import_node_path51.default.join(root, ".build/peach-framework-objc", `${name3}-Swift.h`),
33445
+ header
33446
+ };
33447
+ frameworkInterfaces.set(name3, value);
33448
+ writeBuildFile(
33449
+ value.file,
33450
+ ((0, import_node_fs53.existsSync)(import_node_path51.default.join(headers, `${name3}.h`)) ? `#import <${name3}/${name3}.h>
33451
+ ` : "") + swiftHeaderWithSuperclassImports(header, frameworkInterface)
33452
+ );
33453
+ return value;
33454
+ };
33396
33455
  try {
33397
33456
  const headerBuilds = preparation.headerProductTarget ? [
33398
33457
  ...Object.keys(preparation.nativeHeaderDeclarations),
@@ -33420,7 +33479,10 @@ function compileSwiftProjectOnce(input, options) {
33420
33479
  writeBuildFile(
33421
33480
  emitted,
33422
33481
  withoutSwiftDeclarations(
33423
- clangInterfaceHeader((0, import_node_fs53.readFileSync)(original, "utf8")),
33482
+ swiftHeaderWithSuperclassImports(
33483
+ clangInterfaceHeader((0, import_node_fs53.readFileSync)(original, "utf8")),
33484
+ frameworkInterface
33485
+ ),
33424
33486
  new Set(preparation.nativeHeaderDeclarations[producer]),
33425
33487
  `#import <${producer}/${producer}.h>`
33426
33488
  )
@@ -33695,7 +33757,7 @@ var init_swift_compile = __esm({
33695
33757
  ExpoModulesCore: []
33696
33758
  };
33697
33759
  OPTIONAL_FRAMEWORKS = new Set(Object.keys(OPTIONAL_FRAMEWORK_DEPENDENCIES));
33698
- SWIFT_IMPORT = /^\s*(?:@\w+(?:\([^)]*\))?\s+)*import\s+(?:(?:typealias|struct|class|enum|protocol|let|var|func)\s+)?([A-Za-z_][A-Za-z0-9_]*)/;
33760
+ SWIFT_IMPORT = /^\s*(?:@\w+(?:\([^)]*\))?\s+|(?:public|package|internal|fileprivate|private)\s+)*import\s+(?:(?:typealias|struct|class|enum|protocol|let|var|func)\s+)?([A-Za-z_][A-Za-z0-9_]*)/;
33699
33761
  kleeneNot = (value) => value === void 0 ? void 0 : !value;
33700
33762
  kleeneAnd = (left, right) => left === false || right === false ? false : left === true && right === true ? true : void 0;
33701
33763
  kleeneOr = (left, right) => left === true || right === true ? true : left === false && right === false ? false : void 0;
@@ -33792,7 +33854,7 @@ int EXUpdatesApplyBSDiffPatch(const char * _Nonnull oldFilePath,
33792
33854
  REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
33793
33855
  MULTI_MANIFEST_VERSION = 68;
33794
33856
  SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
33795
- compilerSourceDigest = true ? "645b0e6bc4e374f7c82da4d402e0ec9ddedfc49d6e5a74b73284852f1fbd4efc" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
33857
+ compilerSourceDigest = true ? "280e858b01b1c1393d3765c8d6ff1b3ce4a1a93d7fb7e3dd2d4d3e5f1d5f1ac2" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
33796
33858
  nativeCxxCompilerFlags = ["-fno-cxx-modules"];
33797
33859
  cFlagArray = (flags) => JSON.stringify(withoutGlogModuleMap(flags));
33798
33860
  cxxFlagArray = (flags) => JSON.stringify([...nativeCxxCompilerFlags, ...withoutGlogModuleMap(flags)]);
@@ -37782,7 +37844,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
37782
37844
  const postBundleScripts = [];
37783
37845
  for (const id of [...list(app.target.buildPhases)].reverse()) {
37784
37846
  const phase = app.project.object(id);
37785
- if (phase?.isa !== "PBXShellScriptBuildPhase" || list(phase.inputPaths).length || list(phase.inputFileListPaths).length || list(phase.outputPaths).length || list(phase.outputFileListPaths).length)
37847
+ if (phase?.isa !== "PBXShellScriptBuildPhase" || list(phase.outputPaths).length || list(phase.outputFileListPaths).length)
37786
37848
  break;
37787
37849
  postBundleScripts.unshift({
37788
37850
  name: str(phase.name) ?? id,
@@ -37791,6 +37853,8 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
37791
37853
  str(phase.shellScript) ?? ""
37792
37854
  ),
37793
37855
  directory: app.project.projectDir,
37856
+ inputPaths: list(phase.inputPaths),
37857
+ inputFileListPaths: list(phase.inputFileListPaths),
37794
37858
  environment: Object.fromEntries(
37795
37859
  [...settingKeys].filter((key2) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(key2)).map((key2) => [key2, settings(key2)])
37796
37860
  )
@@ -38273,7 +38337,7 @@ var init_swift_standin_digest = __esm({
38273
38337
  STANDIN_DIGEST_ENTRYPOINTS = ["swift-standins.ts", "swift-objc-compile.ts"];
38274
38338
  SPECIFIER = /from\s*['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
38275
38339
  standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
38276
- STANDIN_SOURCE_DIGEST = true ? "7ad2d908aa8d716181e88c4bc1a8e1fb721aa69e8090d0d7ad5851f9b8de0944" : standinSourceDigest();
38340
+ STANDIN_SOURCE_DIGEST = true ? "f8700690d0cd621b5d9417ea570f1f45c7ec1ad54492b23aa9792102938e9e82" : standinSourceDigest();
38277
38341
  }
38278
38342
  });
38279
38343
 
@@ -41711,6 +41775,13 @@ function graphStandin(module2, graphs, values, wasm, binary2, toolchain, work, r
41711
41775
  unconformed.set(owner, /* @__PURE__ */ new Set([...unconformed.get(owner) ?? [], conformance]));
41712
41776
  continue;
41713
41777
  }
41778
+ const redundant = /^redundant conformance of '\w+' to protocol '(\w+)'$/.exec(
41779
+ match[3]
41780
+ )?.[1];
41781
+ if (owner && redundant) {
41782
+ unconformed.set(owner, /* @__PURE__ */ new Set([...unconformed.get(owner) ?? [], redundant]));
41783
+ continue;
41784
+ }
41714
41785
  if (owner && swiftPaths.has(owner))
41715
41786
  throw new Error(
41716
41787
  `Swift declaration ${module2}.${owner} does not typecheck: ${match[3]}`
@@ -48055,11 +48126,35 @@ function buildSwiftBundleFiles(packagePath, hosted, inputs, resourceBundles) {
48055
48126
  CONTENTS_FOLDER_PATH: wrapper,
48056
48127
  UNLOCALIZED_RESOURCES_FOLDER_PATH: wrapper,
48057
48128
  INFOPLIST_PATH: `${wrapper}/Info.plist`,
48058
- SCRIPT_INPUT_FILE_COUNT: "0",
48059
- SCRIPT_INPUT_FILE_LIST_COUNT: "0",
48129
+ SCRIPT_INPUT_FILE_COUNT: String(phase.inputPaths.length),
48130
+ SCRIPT_INPUT_FILE_LIST_COUNT: String(phase.inputFileListPaths.length),
48060
48131
  SCRIPT_OUTPUT_FILE_COUNT: "0",
48061
48132
  SCRIPT_OUTPUT_FILE_LIST_COUNT: "0"
48062
48133
  };
48134
+ const inputPath = (raw2) => {
48135
+ const file = import_node_path83.default.resolve(
48136
+ phase.directory,
48137
+ expand(raw2, (key2) => env[key2] ?? "")
48138
+ );
48139
+ if (!import_node_fs85.default.existsSync(file))
48140
+ throw new Error(
48141
+ `${xcode.app.name}: Run Script "${phase.name}" missing input ${file}`
48142
+ );
48143
+ if (!file.startsWith(`${dir}${import_node_path83.default.sep}`))
48144
+ watched.push(import_node_path83.default.relative(packagePath, file).split(import_node_path83.default.sep).join("/"));
48145
+ return file;
48146
+ };
48147
+ phase.inputPaths.forEach((raw2, index) => {
48148
+ env[`SCRIPT_INPUT_FILE_${index}`] = inputPath(raw2);
48149
+ });
48150
+ phase.inputFileListPaths.forEach((raw2, index) => {
48151
+ const source = inputPath(raw2);
48152
+ const entries = fileListEntries(source, inputPath);
48153
+ const expanded = import_node_path83.default.join(dir, `Input-${index}.xcfilelist`);
48154
+ import_node_fs85.default.writeFileSync(expanded, `${entries.join("\n")}
48155
+ `);
48156
+ env[`SCRIPT_INPUT_FILE_LIST_${index}`] = expanded;
48157
+ });
48063
48158
  try {
48064
48159
  const [shell, ...args] = phase.command;
48065
48160
  (0, import_node_child_process44.execFileSync)(shell, args, {
@@ -54523,7 +54618,7 @@ var init_nitro_superset = __esm({
54523
54618
  init_nitroContract();
54524
54619
  init_swift_standin_digest();
54525
54620
  NITRO_SUPERSET_ENTRY_NAME = "superset";
54526
- NITRO_COMPILER_DIGEST = true ? "322b637557bb18964a5466d2011e5e601f78b1eb19934e43f24e9bde93405f49" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
54621
+ NITRO_COMPILER_DIGEST = true ? "b3ae355413a190ba1006db08b3fa373b79f99034163c936bd1ec2c89b9bce038" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
54527
54622
  nitroSupersetLock = parseLock(nitro_superset_lock_default);
54528
54623
  nitroSupersetKey = (inputs) => nativeEntryKey({ ...inputs, compiler: NITRO_COMPILER_DIGEST });
54529
54624
  published2 = /* @__PURE__ */ new Map();
@@ -54544,7 +54639,7 @@ var init_nitro_superset = __esm({
54544
54639
  var runtime_companion_default;
54545
54640
  var init_runtime_companion = __esm({
54546
54641
  "runtime-companion.json"() {
54547
- runtime_companion_default = { abi: 1, sha256: "ef38a3e8be87c77f4035640cf265efa9aff735577a2de14feb63c8a09afabd42", file: "node/cli-ef38a3e8be87c77f4035640cf265efa9aff735577a2de14feb63c8a09afabd42.cjs" };
54642
+ runtime_companion_default = { abi: 1, sha256: "00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde", file: "node/cli-00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde.cjs" };
54548
54643
  }
54549
54644
  });
54550
54645
 
@@ -64170,7 +64265,7 @@ init_swift_native_pin();
64170
64265
  init_xcode_project();
64171
64266
  var EXPO_NATIVE_ENTRY_NAME = "ios";
64172
64267
  function expoNativeCompilerDigestValue() {
64173
- return true ? "5c577dbcb88d6c91ec20e51d76fe0d737f81c200e21973536cf1f8e51d076cbc" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
64268
+ return true ? "aab5589ba02cd96332e686f60153187e7357cc46c8a6ec5369f1400cea6f6da0" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
64174
64269
  }
64175
64270
  var IDENTITY_SOURCE_SKIPS = 1 | 4 | 8 | 16 | 32 | 64 | 128 | 4096;
64176
64271
  function readSources(value) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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
 
@@ -1501,7 +1501,7 @@ function readIosSdkTree(root) {
1501
1501
 
1502
1502
  // src/swift-standin-digest.ts
1503
1503
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
1504
- var STANDIN_SOURCE_DIGEST = true ? "7ad2d908aa8d716181e88c4bc1a8e1fb721aa69e8090d0d7ad5851f9b8de0944" : standinSourceDigest();
1504
+ var STANDIN_SOURCE_DIGEST = true ? "f8700690d0cd621b5d9417ea570f1f45c7ec1ad54492b23aa9792102938e9e82" : standinSourceDigest();
1505
1505
 
1506
1506
  // src/expo-native-workspace.ts
1507
1507
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -5037,7 +5037,7 @@ var FOUNDATION_IMPLICIT_MODULES = [
5037
5037
  var FOUNDATION_IMPLICIT_FLAGS = FOUNDATION_IMPLICIT_MODULES.map(
5038
5038
  (module2) => `, "-Xfrontend", "-import-module", "-Xfrontend", "${module2}"`
5039
5039
  ).join("");
5040
- var compilerSourceDigest = true ? "645b0e6bc4e374f7c82da4d402e0ec9ddedfc49d6e5a74b73284852f1fbd4efc" : swiftCompilerSourceDigest2(__sootsim_import_meta_dirname);
5040
+ var compilerSourceDigest = true ? "280e858b01b1c1393d3765c8d6ff1b3ce4a1a93d7fb7e3dd2d4d3e5f1d5f1ac2" : swiftCompilerSourceDigest2(__sootsim_import_meta_dirname);
5041
5041
  var CORE_FOUNDATION_HANDLE_IMPORTS = [
5042
5042
  "CFAllocator",
5043
5043
  "CFArray",
@@ -9543,7 +9543,7 @@ var import_node_module = require("node:module");
9543
9543
  var import_node_path11 = require("node:path");
9544
9544
 
9545
9545
  // runtime-companion.json
9546
- var runtime_companion_default = { abi: 1, sha256: "ef38a3e8be87c77f4035640cf265efa9aff735577a2de14feb63c8a09afabd42", file: "node/cli-ef38a3e8be87c77f4035640cf265efa9aff735577a2de14feb63c8a09afabd42.cjs" };
9546
+ var runtime_companion_default = { abi: 1, sha256: "00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde", file: "node/cli-00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde.cjs" };
9547
9547
 
9548
9548
  // src/cli-runtime.ts
9549
9549
  var CLI_COMPANION_ABI = 1;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (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;