peachsim 0.1.1641 → 0.1.1653

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 (618) hide show
  1. package/README.md +12 -0
  2. package/cli/app-bundle-resources.ts +57 -0
  3. package/cli/app-catalog.ts +1 -1
  4. package/cli/app-fonts.ts +11 -80
  5. package/cli/app-splash.ts +18 -12
  6. package/cli/bridge-flow-runner.ts +11 -7
  7. package/cli/cloud-client.ts +10 -13
  8. package/cli/command-registry.ts +13 -4
  9. package/cli/commands/box.ts +4 -4
  10. package/cli/commands/control.ts +105 -53
  11. package/cli/commands/coverage-parser.ts +67 -0
  12. package/cli/commands/coverage.ts +550 -0
  13. package/cli/commands/debug.ts +9 -18
  14. package/cli/commands/desktop.ts +19 -7
  15. package/cli/commands/device.ts +14 -9
  16. package/cli/commands/guest-host.ts +6 -10
  17. package/cli/commands/inspect/core.ts +81 -17
  18. package/cli/commands/inspect.ts +13 -8
  19. package/cli/commands/kotlin.ts +2 -2
  20. package/cli/commands/maestro-compare.ts +1 -1
  21. package/cli/commands/platform.ts +20 -11
  22. package/cli/commands/preview.ts +16 -18
  23. package/cli/commands/runtime.ts +3 -2
  24. package/cli/commands/screenshot-layers.ts +1 -1
  25. package/cli/commands/screenshot.ts +1 -1
  26. package/cli/commands/serve.ts +5 -1
  27. package/cli/commands/support.ts +4 -4
  28. package/cli/commands/three-mode.ts +22 -15
  29. package/cli/commands/upload.ts +44 -45
  30. package/cli/current-sim.ts +38 -0
  31. package/cli/desktop-companion.ts +36 -8
  32. package/cli/device-option.ts +1 -1
  33. package/cli/drivers/playwright.ts +40 -0
  34. package/cli/drivers/types.ts +4 -0
  35. package/cli/help-core.ts +1 -1
  36. package/cli/internal-child.ts +2 -1
  37. package/cli/main.ts +9 -3
  38. package/cli/outbound-endpoints.ts +15 -5
  39. package/cli/output-redaction.ts +39 -14
  40. package/cli/remote-simulators.ts +4 -1
  41. package/cli/scene-video.ts +5 -2
  42. package/cli/send-to-box.ts +7 -10
  43. package/cli/telemetry.ts +1 -1
  44. package/cli/ws-bridge.ts +8 -1
  45. package/detox/attempt-events.cjs +3 -1
  46. package/detox/attempt-events.d.cts +1 -1
  47. package/detox/expectations.ts +108 -99
  48. package/detox/frame-offset.d.mts +6 -0
  49. package/detox/frame-offset.mjs +35 -0
  50. package/detox/gestures.ts +6 -18
  51. package/detox/index.ts +169 -101
  52. package/detox/jest-preset.cjs +1 -3
  53. package/detox/jest-transform.cjs +4 -0
  54. package/detox/matchers.ts +3 -0
  55. package/detox/motion-change.cjs +52 -118
  56. package/detox/motion-change.d.cts +6 -27
  57. package/detox/motion-leg-starts.cjs +20 -0
  58. package/detox/motion-leg-starts.d.cts +8 -0
  59. package/dist-lib/agent-daemon-client.cjs +1 -1
  60. package/dist-lib/agent-events.cjs +1 -1
  61. package/dist-lib/attached-projects.cjs +1 -1
  62. package/dist-lib/auth/shared-session.cjs +1 -1
  63. package/dist-lib/backend-origin.cjs +3 -3
  64. package/dist-lib/beta.cjs +1 -1
  65. package/dist-lib/beta.mjs +1 -1
  66. package/dist-lib/bridge-constants.cjs +1 -1
  67. package/dist-lib/bridge-contract-input.cjs +65 -1
  68. package/dist-lib/bridge-contract-input.mjs +63 -1
  69. package/dist-lib/bridge-contract.cjs +19 -1
  70. package/dist-lib/bridge-contract.mjs +17 -1
  71. package/dist-lib/bundle-channel.cjs +38332 -14940
  72. package/dist-lib/capture-contract.cjs +1 -1
  73. package/dist-lib/capture-contract.mjs +1 -1
  74. package/dist-lib/cloud-contract.cjs +1 -1
  75. package/dist-lib/cloud-contract.mjs +1 -1
  76. package/dist-lib/cloud-test-args.cjs +1 -1
  77. package/dist-lib/cloud-test-args.mjs +1 -1
  78. package/dist-lib/cloud.cjs +1 -1
  79. package/dist-lib/cloud.mjs +1 -1
  80. package/dist-lib/config.cjs +1 -1
  81. package/dist-lib/config.mjs +5 -3
  82. package/dist-lib/detox/index.cjs +1247 -4511
  83. package/dist-lib/detox/jest-preset.cjs +1 -3
  84. package/dist-lib/detox/jest-transform.cjs +4 -0
  85. package/dist-lib/dev-bundle-resolution.cjs +28 -24
  86. package/dist-lib/expo-swift-bundle.cjs +35243 -13172
  87. package/dist-lib/expo-swift-metadata.cjs +1 -1
  88. package/dist-lib/expo-swift-metadata.mjs +1 -1
  89. package/dist-lib/home-paths.cjs +1 -1
  90. package/dist-lib/host/bridge-host.cjs +45285 -63163
  91. package/dist-lib/host/fetch-proxy-handler.cjs +3544 -11
  92. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  93. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  94. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  95. package/dist-lib/host/websocket-proxy.cjs +1 -1
  96. package/dist-lib/index.cjs +1997 -2069
  97. package/dist-lib/jump-to-source-babel.cjs +1 -1
  98. package/dist-lib/jump-to-source-native.cjs +1 -1
  99. package/dist-lib/kotlin-host.cjs +2 -2
  100. package/dist-lib/menu.cjs +14 -6
  101. package/dist-lib/menu.mjs +14 -6
  102. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  103. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  104. package/dist-lib/metro-production-bundle.cjs +1 -1
  105. package/dist-lib/metro-production-bundle.mjs +1 -1
  106. package/dist-lib/metro.cjs +468 -563
  107. package/dist-lib/native-app-identity-project.cjs +128 -292
  108. package/dist-lib/native-app-identity-project.mjs +1262 -51
  109. package/dist-lib/native-app-identity.cjs +8 -3
  110. package/dist-lib/native-app-identity.mjs +8 -3
  111. package/dist-lib/native-firebase-metadata.cjs +1 -1
  112. package/dist-lib/native-firebase-metadata.mjs +1 -1
  113. package/dist-lib/plist.cjs +2 -244
  114. package/dist-lib/plist.mjs +1 -1
  115. package/dist-lib/profiles.cjs +1 -1
  116. package/dist-lib/public-brand.cjs +1 -1
  117. package/dist-lib/public-origins-lib-esm.json +290 -0
  118. package/dist-lib/public-origins-lib-static.json +1 -0
  119. package/dist-lib/public-origins-lib.json +1852 -0
  120. package/dist-lib/react-native-host-modules.cjs +1 -1
  121. package/dist-lib/react-native-host-modules.mjs +1 -1
  122. package/dist-lib/scripts/dev-server-scanner.cjs +14 -253
  123. package/dist-lib/sdk.cjs +84 -16
  124. package/dist-lib/sdk.mjs +82 -15
  125. package/dist-lib/skills.cjs +51248 -75450
  126. package/dist-lib/swift-compile.cjs +26154 -1245
  127. package/dist-lib/swift-compile.mjs +26151 -1230
  128. package/dist-lib/swift-package.cjs +79 -1
  129. package/dist-lib/swift-package.mjs +75 -1
  130. package/dist-lib/swift-submit.cjs +1 -1
  131. package/dist-lib/swift-submit.mjs +1 -1
  132. package/dist-lib/swift-toolchain.cjs +1 -1
  133. package/dist-lib/swift.cjs +1 -1
  134. package/dist-lib/vite-swift.cjs +34394 -12323
  135. package/dist-lib/vite.cjs +373 -298
  136. package/dist-lib/worklet-executable.cjs +1 -1
  137. package/dist-lib/worklet-executable.mjs +1 -1
  138. package/dist-types/packages/peach-compat/src/engine-config.d.ts +2 -0
  139. package/dist-types/packages/peach-compat/src/stubs/form-sheet-spring.d.ts +9 -0
  140. package/dist-types/packages/peach-compat/src/stubs/native-evaluation-lease.d.ts +47 -0
  141. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +113 -0
  142. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-gesture-handler.d.ts +154 -0
  143. package/dist-types/packages/peach-compat/src/stubs/screen-transition-math.d.ts +756 -0
  144. package/dist-types/packages/peach-compat/src/stubs/transition-scalar.d.ts +25 -0
  145. package/dist-types/packages/peach-engine/src/billing/plans.d.ts +64 -0
  146. package/dist-types/packages/peach-engine/src/browser-page-target.d.ts +2 -0
  147. package/dist-types/packages/peach-engine/src/bundle-platform-url.d.ts +3 -0
  148. package/dist-types/packages/peach-engine/src/capture/browser-accessibility-host.d.ts +3 -0
  149. package/dist-types/packages/peach-engine/src/capture/browser-composite.d.ts +55 -0
  150. package/dist-types/packages/peach-engine/src/capture/browserAccessibilityContract.d.ts +27 -0
  151. package/dist-types/packages/peach-engine/src/capture/nativeScreenCaptureContract.d.ts +22 -0
  152. package/dist-types/packages/peach-engine/src/cli-companion.d.ts +36 -0
  153. package/dist-types/packages/peach-engine/src/components/native-ui/webview-frame-bridge.d.ts +34 -0
  154. package/dist-types/packages/peach-engine/src/config.d.ts +5 -0
  155. package/dist-types/packages/peach-engine/src/engine/android-stretch-effect.d.ts +57 -0
  156. package/dist-types/packages/peach-engine/src/engine/animated-driven-style.d.ts +47 -0
  157. package/dist-types/packages/peach-engine/src/engine/animated-value.d.ts +5 -0
  158. package/dist-types/packages/peach-engine/src/engine/animated.d.ts +195 -0
  159. package/dist-types/packages/peach-engine/src/engine/animation-clockContract.d.ts +15 -0
  160. package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +148 -0
  161. package/dist-types/packages/peach-engine/src/engine/app-catalog-wire.d.ts +10 -0
  162. package/dist-types/packages/peach-engine/src/engine/app-font-registry.d.ts +87 -0
  163. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph-paint.d.ts +7 -0
  164. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph.d.ts +123 -0
  165. package/dist-types/packages/peach-engine/src/engine/audioContract.d.ts +16 -0
  166. package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +93 -0
  167. package/dist-types/packages/peach-engine/src/engine/canvaskit-renderer.d.ts +216 -0
  168. package/dist-types/packages/peach-engine/src/engine/config-plugin-fonts.d.ts +40 -0
  169. package/dist-types/packages/peach-engine/src/engine/config-plugin-splash.d.ts +25 -0
  170. package/dist-types/packages/peach-engine/src/engine/cull-visibility.d.ts +44 -0
  171. package/dist-types/packages/peach-engine/src/engine/damage-rect.d.ts +19 -0
  172. package/dist-types/packages/peach-engine/src/engine/engine-resource.d.ts +6 -0
  173. package/dist-types/packages/peach-engine/src/engine/expo-manifest.d.ts +5 -0
  174. package/dist-types/packages/peach-engine/src/engine/fiber-debug-metadata.d.ts +30 -0
  175. package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +139 -0
  176. package/dist-types/packages/peach-engine/src/engine/generated/sf-pro-font.d.ts +1 -0
  177. package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +31 -0
  178. package/dist-types/packages/peach-engine/src/engine/host-composite.d.ts +100 -0
  179. package/dist-types/packages/peach-engine/src/engine/hosted-semantics.d.ts +49 -0
  180. package/dist-types/packages/peach-engine/src/engine/image-audit.d.ts +70 -0
  181. package/dist-types/packages/peach-engine/src/engine/image-loader.d.ts +350 -0
  182. package/dist-types/packages/peach-engine/src/engine/inspect-info.d.ts +27 -0
  183. package/dist-types/packages/peach-engine/src/engine/inspect-outline.d.ts +14 -0
  184. package/dist-types/packages/peach-engine/src/engine/inspect-visibility.d.ts +33 -0
  185. package/dist-types/packages/peach-engine/src/engine/ios-fast-scroll.d.ts +16 -0
  186. package/dist-types/packages/peach-engine/src/engine/layout-sab.d.ts +43 -0
  187. package/dist-types/packages/peach-engine/src/engine/liquid-glass-rect.d.ts +23 -0
  188. package/dist-types/packages/peach-engine/src/engine/liquid-glass-shaders.d.ts +9 -0
  189. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +283 -0
  190. package/dist-types/packages/peach-engine/src/engine/live-object-counts.d.ts +6 -0
  191. package/dist-types/packages/peach-engine/src/engine/lottie-runtime.d.ts +32 -0
  192. package/dist-types/packages/peach-engine/src/engine/lottie-types.d.ts +138 -0
  193. package/dist-types/packages/peach-engine/src/engine/memory-counts.d.ts +27 -0
  194. package/dist-types/packages/peach-engine/src/engine/metalDirectContract.d.ts +108 -0
  195. package/dist-types/packages/peach-engine/src/engine/metalShaderContract.d.ts +217 -0
  196. package/dist-types/packages/peach-engine/src/engine/native-animation-driver.d.ts +112 -0
  197. package/dist-types/packages/peach-engine/src/engine/native-animation-graph.d.ts +62 -0
  198. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +133 -0
  199. package/dist-types/packages/peach-engine/src/engine/native-resources.d.ts +26 -0
  200. package/dist-types/packages/peach-engine/src/engine/nativeReanimatedContract.d.ts +25 -0
  201. package/dist-types/packages/peach-engine/src/engine/nativeReplayContract.d.ts +64 -0
  202. package/dist-types/packages/peach-engine/src/engine/node.d.ts +589 -0
  203. package/dist-types/packages/peach-engine/src/engine/paint-boundary-types.d.ts +112 -0
  204. package/dist-types/packages/peach-engine/src/engine/paint-boundary.d.ts +57 -0
  205. package/dist-types/packages/peach-engine/src/engine/portalContract.d.ts +21 -0
  206. package/dist-types/packages/peach-engine/src/engine/portals.d.ts +20 -0
  207. package/dist-types/packages/peach-engine/src/engine/render-damage.d.ts +107 -0
  208. package/dist-types/packages/peach-engine/src/engine/riveContract.d.ts +420 -0
  209. package/dist-types/packages/peach-engine/src/engine/rn-spring.d.ts +51 -0
  210. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +379 -0
  211. package/dist-types/packages/peach-engine/src/engine/scroll-momentum-math.d.ts +152 -0
  212. package/dist-types/packages/peach-engine/src/engine/scroll-pan-contacts.d.ts +10 -0
  213. package/dist-types/packages/peach-engine/src/engine/scroll-platform.d.ts +75 -0
  214. package/dist-types/packages/peach-engine/src/engine/scroll-range.d.ts +14 -0
  215. package/dist-types/packages/peach-engine/src/engine/scroll-velocity.d.ts +14 -0
  216. package/dist-types/packages/peach-engine/src/engine/scroll.d.ts +320 -0
  217. package/dist-types/packages/peach-engine/src/engine/signal.d.ts +7 -0
  218. package/dist-types/packages/peach-engine/src/engine/snapshot-cache-policy.d.ts +6 -0
  219. package/dist-types/packages/peach-engine/src/engine/svg-geometry.d.ts +41 -0
  220. package/dist-types/packages/peach-engine/src/engine/text-attachment-paragraphs.d.ts +10 -0
  221. package/dist-types/packages/peach-engine/src/engine/text-decoration.d.ts +11 -0
  222. package/dist-types/packages/peach-engine/src/engine/text-line-break.d.ts +22 -0
  223. package/dist-types/packages/peach-engine/src/engine/text-paint-receipt.d.ts +98 -0
  224. package/dist-types/packages/peach-engine/src/engine/text-paragraph.d.ts +11 -0
  225. package/dist-types/packages/peach-engine/src/engine/text-paragraphContract.d.ts +34 -0
  226. package/dist-types/packages/peach-engine/src/engine/text-transform.d.ts +1 -0
  227. package/dist-types/packages/peach-engine/src/engine/types.d.ts +657 -0
  228. package/dist-types/packages/peach-engine/src/engine/visible-frame.d.ts +54 -0
  229. package/dist-types/packages/peach-engine/src/engine/webrtcContract.d.ts +74 -0
  230. package/dist-types/packages/peach-engine/src/graphite-stats-fields.d.ts +184 -0
  231. package/dist-types/packages/peach-engine/src/guest-import-meta.d.ts +12 -0
  232. package/dist-types/packages/peach-engine/src/guest-module-overrides.d.ts +7 -0
  233. package/dist-types/packages/peach-engine/src/ios/app-card-types.d.ts +7 -0
  234. package/dist-types/packages/peach-engine/src/ios/apps/canvas-map-data.d.ts +177 -0
  235. package/dist-types/packages/peach-engine/src/ios/aux-home-scene.d.ts +54 -0
  236. package/dist-types/packages/peach-engine/src/ios/chrome-metrics.d.ts +47 -0
  237. package/dist-types/packages/peach-engine/src/ios/constants.d.ts +21 -0
  238. package/dist-types/packages/peach-engine/src/ios/duo-housing.d.ts +37 -0
  239. package/dist-types/packages/peach-engine/src/ios/home/types.d.ts +29 -0
  240. package/dist-types/packages/peach-engine/src/ios/home-app-catalog.d.ts +43 -0
  241. package/dist-types/packages/peach-engine/src/ios/photo-store.d.ts +73 -0
  242. package/dist-types/packages/peach-engine/src/ios/photoLibraryContract.d.ts +166 -0
  243. package/dist-types/packages/peach-engine/src/ios/shell-controller-types.d.ts +21 -0
  244. package/dist-types/packages/peach-engine/src/ios/shell-transition-debug.d.ts +18 -0
  245. package/dist-types/packages/peach-engine/src/metro-asset-path.d.ts +21 -0
  246. package/dist-types/packages/peach-engine/src/metro-fingerprint-registry-client.d.ts +11 -0
  247. package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +38 -0
  248. package/dist-types/packages/peach-engine/src/native-preview-bundle.d.ts +44 -0
  249. package/dist-types/packages/peach-engine/src/observability/types.d.ts +74 -0
  250. package/dist-types/packages/peach-engine/src/peach-warm-manifest.d.ts +32 -0
  251. package/dist-types/packages/peach-engine/src/permissions/app-settings-client.d.ts +25 -0
  252. package/dist-types/packages/peach-engine/src/permissions/system-permission-types.d.ts +20 -0
  253. package/dist-types/packages/peach-engine/src/platform/android-back-panel.d.ts +131 -0
  254. package/dist-types/packages/peach-engine/src/platform/android-gesture-exclusion.d.ts +28 -0
  255. package/dist-types/packages/peach-engine/src/platform/android-predictive-back.d.ts +33 -0
  256. package/dist-types/packages/peach-engine/src/platform/system-bars-state.d.ts +14 -0
  257. package/dist-types/packages/peach-engine/src/playwright-sim-host.d.ts +1 -0
  258. package/dist-types/packages/peach-engine/src/preview/bundle-layout.d.ts +8 -0
  259. package/dist-types/packages/peach-engine/src/preview/bundle-variantContract.d.ts +24 -0
  260. package/dist-types/packages/peach-engine/src/preview/capture-bundle.d.ts +26 -0
  261. package/dist-types/packages/peach-engine/src/preview/compress-node.d.ts +2 -0
  262. package/dist-types/packages/peach-engine/src/preview/compress.d.ts +2 -0
  263. package/dist-types/packages/peach-engine/src/preview/presigned-upload.d.ts +60 -0
  264. package/dist-types/packages/peach-engine/src/preview/trace.d.ts +144 -0
  265. package/dist-types/packages/peach-engine/src/preview/upload-protocol.d.ts +152 -0
  266. package/dist-types/packages/peach-engine/src/profiler/animation-recording-loader.d.ts +1 -0
  267. package/dist-types/packages/peach-engine/src/profiler/profile-trace.d.ts +4 -0
  268. package/dist-types/packages/peach-engine/src/react-bridge.d.ts +3 -0
  269. package/dist-types/packages/peach-engine/src/react-native/AppState.d.ts +45 -0
  270. package/dist-types/packages/peach-engine/src/react-native/Appearance.d.ts +34 -0
  271. package/dist-types/packages/peach-engine/src/react-native/framework-colors-data.d.ts +2 -0
  272. package/dist-types/packages/peach-engine/src/react-native/host-services.d.ts +42 -0
  273. package/dist-types/packages/peach-engine/src/react-native/layout-animation.d.ts +22 -0
  274. package/dist-types/packages/peach-engine/src/react-native/platform-colors.d.ts +17 -0
  275. package/dist-types/packages/peach-engine/src/remote-stream/client-config.d.ts +10 -0
  276. package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +58 -0
  277. package/dist-types/packages/peach-engine/src/remote-stream/scene-recording.d.ts +45 -0
  278. package/dist-types/packages/peach-engine/src/render-worker/animated-drive-output.d.ts +35 -0
  279. package/dist-types/packages/peach-engine/src/render-worker/app-load.d.ts +16 -0
  280. package/dist-types/packages/peach-engine/src/render-worker/aux-surface-types.d.ts +2 -0
  281. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-shared.d.ts +42 -0
  282. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +434 -0
  283. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-worker-init.d.ts +12 -0
  284. package/dist-types/packages/peach-engine/src/render-worker/compositor-backend.d.ts +31 -0
  285. package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +202 -0
  286. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1945 -0
  287. package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/scroll-drag-resample.d.ts +44 -0
  288. package/dist-types/packages/peach-engine/src/render-worker/css-keyframes-drive.d.ts +36 -0
  289. package/dist-types/packages/peach-engine/src/render-worker/edit-menu-geometry.d.ts +8 -0
  290. package/dist-types/packages/peach-engine/src/render-worker/engine-resource-relay.d.ts +21 -0
  291. package/dist-types/packages/peach-engine/src/render-worker/expo-widgetContract.d.ts +16 -0
  292. package/dist-types/packages/peach-engine/src/render-worker/gesture-seam-protocol.d.ts +152 -0
  293. package/dist-types/packages/peach-engine/src/render-worker/graph-linked-value.d.ts +29 -0
  294. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler-contract.d.ts +49 -0
  295. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler.d.ts +12 -0
  296. package/dist-types/packages/peach-engine/src/render-worker/host-service-protocol.d.ts +756 -0
  297. package/dist-types/packages/peach-engine/src/render-worker/image-lifecycle-event.d.ts +22 -0
  298. package/dist-types/packages/peach-engine/src/render-worker/image-pixel-contract.d.ts +48 -0
  299. package/dist-types/packages/peach-engine/src/render-worker/live-frame-mirror.d.ts +34 -0
  300. package/dist-types/packages/peach-engine/src/render-worker/map-command-channel.d.ts +189 -0
  301. package/dist-types/packages/peach-engine/src/render-worker/mapNativeContract.d.ts +101 -0
  302. package/dist-types/packages/peach-engine/src/render-worker/native-dynamic-synchronizable.d.ts +22 -0
  303. package/dist-types/packages/peach-engine/src/render-worker/native-menu-gesture.d.ts +9 -0
  304. package/dist-types/packages/peach-engine/src/render-worker/native-ui-commandContract.d.ts +23 -0
  305. package/dist-types/packages/peach-engine/src/render-worker/native-ui-protocol.d.ts +1087 -0
  306. package/dist-types/packages/peach-engine/src/render-worker/native-widgetContract.d.ts +100 -0
  307. package/dist-types/packages/peach-engine/src/render-worker/nativeAnimMirrorContract.d.ts +174 -0
  308. package/dist-types/packages/peach-engine/src/render-worker/nativeSyncReplyContract.d.ts +11 -0
  309. package/dist-types/packages/peach-engine/src/render-worker/one-native-contentContract.d.ts +54 -0
  310. package/dist-types/packages/peach-engine/src/render-worker/pointerSampleContract.d.ts +14 -0
  311. package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +880 -0
  312. package/dist-types/packages/peach-engine/src/render-worker/reanimated-css-contract.d.ts +63 -0
  313. package/dist-types/packages/peach-engine/src/render-worker/reanimated-readiness.d.ts +29 -0
  314. package/dist-types/packages/peach-engine/src/render-worker/resilient-frame-clock.d.ts +22 -0
  315. package/dist-types/packages/peach-engine/src/render-worker/retained-app-load.d.ts +20 -0
  316. package/dist-types/packages/peach-engine/src/render-worker/screen-edge-swipe-commit-protocol.d.ts +1 -0
  317. package/dist-types/packages/peach-engine/src/render-worker/screen-form-sheet-commit-protocol.d.ts +26 -0
  318. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror-tenant.d.ts +37 -0
  319. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror.d.ts +164 -0
  320. package/dist-types/packages/peach-engine/src/render-worker/shell-event-registry.d.ts +119 -0
  321. package/dist-types/packages/peach-engine/src/render-worker/shell-gesture-regions.d.ts +41 -0
  322. package/dist-types/packages/peach-engine/src/render-worker/shell-protocol.d.ts +603 -0
  323. package/dist-types/packages/peach-engine/src/render-worker/shell-scene-schema.d.ts +101 -0
  324. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-inline-sources.d.ts +13 -0
  325. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +87 -0
  326. package/dist-types/packages/peach-engine/src/render-worker/test-bridge-protocol.d.ts +47 -0
  327. package/dist-types/packages/peach-engine/src/render-worker/text-inputContract.d.ts +93 -0
  328. package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +102 -0
  329. package/dist-types/packages/peach-engine/src/render-worker/webgpu-frame-transaction.d.ts +292 -0
  330. package/dist-types/packages/peach-engine/src/render-worker/webgpu-readback-scheduler.d.ts +107 -0
  331. package/dist-types/packages/peach-engine/src/render-worker/webview-capture-protocol.d.ts +16 -0
  332. package/dist-types/packages/peach-engine/src/render-worker/worker-input-runtime.d.ts +211 -0
  333. package/dist-types/packages/peach-engine/src/render-worker/worker-storage.d.ts +33 -0
  334. package/dist-types/packages/peach-engine/src/render-worker/worklet-runtime.d.ts +987 -0
  335. package/dist-types/packages/peach-engine/src/render-worker/worklet-sab.d.ts +24 -0
  336. package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +84 -0
  337. package/dist-types/packages/peach-engine/src/rolldown-production-fingerprint.d.ts +31 -0
  338. package/dist-types/packages/peach-engine/src/screenshots/timeline-assets.d.ts +10 -0
  339. package/dist-types/packages/peach-engine/src/screenshots/tokens.d.ts +9 -0
  340. package/dist-types/packages/peach-engine/src/settings/devices.d.ts +70 -0
  341. package/dist-types/packages/peach-engine/src/settings/duo-fold-bus.d.ts +87 -0
  342. package/dist-types/packages/peach-engine/src/settings/interface-rotation.d.ts +30 -0
  343. package/dist-types/packages/peach-engine/src/settings/react-native-configuration.d.ts +12 -0
  344. package/dist-types/packages/peach-engine/src/settings/scene-geometryContract.d.ts +40 -0
  345. package/dist-types/packages/peach-engine/src/settings/store.d.ts +37 -0
  346. package/dist-types/packages/peach-engine/src/shell-events.d.ts +203 -0
  347. package/dist-types/packages/peach-engine/src/shell-intent.d.ts +68 -0
  348. package/dist-types/packages/peach-engine/src/sootsim-event.d.ts +35 -0
  349. package/dist-types/packages/peach-engine/src/top-overlay-state.d.ts +5 -0
  350. package/dist-types/packages/peach-engine/src/web-authentication-automation-host.d.ts +2 -0
  351. package/dist-types/packages/peach-engine/src/webAuthenticationContract.d.ts +34 -0
  352. package/dist-types/packages/peach-engine/src/webview-automation-host.d.ts +180 -0
  353. package/dist-types/packages/peach-engine/src/wireframe-mode.d.ts +16 -0
  354. package/dist-types/packages/peach-globals/src/frameBreakdownContract.d.ts +16 -0
  355. package/dist-types/packages/peach-globals/src/index.d.ts +3311 -0
  356. package/dist-types/packages/peach-globals/src/nativeSurfaceContract.d.ts +76 -0
  357. package/dist-types/packages/peach-globals/src/pointerSourceEventContract.d.ts +8 -0
  358. package/dist-types/packages/peach-globals/src/profileTrace.d.ts +11 -0
  359. package/dist-types/packages/peach-globals/src/profilerContract.d.ts +223 -0
  360. package/dist-types/packages/peach-kit/src/capabilities.d.ts +721 -0
  361. package/dist-types/packages/peach-kit/src/internal.d.ts +4 -0
  362. package/dist-types/packages/peach-kit/src/materials/types.d.ts +27 -0
  363. package/dist-types/packages/peach-kit/src/materials/uikit-blur-material.d.ts +14 -0
  364. package/dist-types/packages/peach-kit/src/navigation-types.d.ts +11 -0
  365. package/dist-types/packages/peach-kit/src/react-bridge.d.ts +53 -0
  366. package/dist-types/packages/peach-kit/src/runtime.d.ts +26 -0
  367. package/dist-types/packages/peach-kit/src/ui/hosting-safe-area.d.ts +24 -0
  368. package/dist-types/packages/peach-kit/src/ui/popover-placement.d.ts +53 -0
  369. package/dist-types/packages/peach-kit/src/ui/presentationContract.d.ts +17 -0
  370. package/kotlin/ComposeSources/PeachComposeHost.kt +1 -1
  371. package/kotlin/JniSources/com/facebook/jni/HybridData.kt +0 -2
  372. package/kotlin/JniSources/dev/peach/jni/NativeBindings.kt +0 -2
  373. package/kotlin/JniTransportSources/dev/peach/jni/integration/JniTransport.kt +0 -2
  374. package/kotlin/README.md +6 -0
  375. package/package.json +22 -2
  376. package/runtime-companion.json +1 -0
  377. package/skills/contrast/SKILL.md +1 -0
  378. package/src/appBundleResourcesContract.ts +51 -0
  379. package/src/assetCatalogContract.ts +21 -0
  380. package/src/backend-origin.ts +3 -1
  381. package/src/bridge-contract-input.ts +84 -0
  382. package/src/bridge-contract.ts +35 -3
  383. package/src/browser-launch-policy.ts +1 -0
  384. package/src/bundle-channel.mjs +4 -2
  385. package/src/cli-runtime.ts +55 -0
  386. package/src/crash-fingerprint.ts +26 -0
  387. package/src/dev-bundle-resolution.ts +50 -23
  388. package/src/device-catalog.ts +1159 -0
  389. package/src/host/bridge-host.ts +20 -37
  390. package/src/host/browser-pointer.ts +71 -0
  391. package/src/host/dev-server-package-versions.ts +23 -0
  392. package/src/host/fetch-proxy-handler.ts +17 -4
  393. package/src/host/staged-host-files.ts +28 -4
  394. package/src/installed-package-versions.ts +142 -38
  395. package/src/kotlin-host.ts +1 -1
  396. package/src/launchMetadataContract.ts +1 -0
  397. package/src/menu.ts +12 -4
  398. package/src/metro-plugin.ts +4 -4
  399. package/src/metro-project-root.ts +68 -0
  400. package/src/native-app-identity-project.ts +47 -38
  401. package/src/nitro-adapter.lock.json +26 -0
  402. package/src/nitro-adapter.ts +103 -0
  403. package/src/nitro-bundle.ts +24 -10
  404. package/src/nitro-compile.ts +33 -51
  405. package/src/nitro-source.ts +177 -96
  406. package/src/nitroAdapterContract.ts +217 -0
  407. package/src/nitroContract.ts +24 -11
  408. package/src/process-group.ts +41 -34
  409. package/src/react-bridge-importers.ts +28 -0
  410. package/src/reactNativeConfigurationContract.ts +36 -0
  411. package/src/runtime-assets.ts +7 -2
  412. package/src/runtime-delivery.ts +8 -7
  413. package/src/runtimePlatformContract.ts +70 -0
  414. package/src/screenshots/frame-compose.ts +42 -43
  415. package/src/screenshots/org-deck.ts +9 -4
  416. package/src/screenshots/preset-names.ts +29 -0
  417. package/src/screenshots/registry.ts +5 -5
  418. package/src/screenshots/schema.ts +1 -1
  419. package/src/screenshots/screenshotContract.ts +971 -0
  420. package/src/settings-flags.ts +107 -0
  421. package/src/settingsContract.ts +609 -0
  422. package/src/storageSnapshotContract.ts +344 -0
  423. package/src/stub-pattern-matcher.ts +550 -0
  424. package/src/swift-compile.ts +926 -47
  425. package/src/swift-compiler-digest.ts +17 -3
  426. package/src/swift-distribution.lock.json +49 -22
  427. package/src/swift-host.ts +167 -52
  428. package/src/swift-objc-compile.ts +86 -26
  429. package/src/swift-objc-export.ts +532 -0
  430. package/src/swift-objc-import.ts +769 -0
  431. package/src/swift-objc-metadata.ts +285 -10
  432. package/src/swift-objc-sdk.ts +13970 -158
  433. package/src/swift-objc-standin.ts +137 -1
  434. package/src/swift-package.ts +94 -0
  435. package/src/swift-packages.ts +5 -5
  436. package/src/swift-root-lock.ts +241 -92
  437. package/src/swift-submit.ts +6 -0
  438. package/src/swiftContract.ts +99 -0
  439. package/src/target-matcher.ts +6 -1
  440. package/src/vite-plugin.ts +14 -40
  441. package/src/worker-system-chunks.ts +1 -1
  442. package/src/workerChunkContract.ts +5 -0
  443. package/src/worklets-babel.ts +24 -5
  444. package/src/xcode-project.ts +103 -11
  445. package/src/xcode-target-members.ts +10 -3
  446. package/cli/drivers/playwright-sim-host.ts +0 -825
  447. package/kotlin/fixtures/counter/Counter.d.kt.ts +0 -17
  448. package/kotlin/fixtures/counter/Counter.kt +0 -51
  449. package/kotlin/fixtures/counter/CounterApp.native.tsx +0 -61
  450. package/kotlin/fixtures/counter/CounterApp.tsx +0 -3
  451. package/kotlin/fixtures/counter/CounterScreen.d.kt.ts +0 -8
  452. package/kotlin/fixtures/counter/CounterScreen.kt +0 -56
  453. package/kotlin/fixtures/counter/app/_layout.tsx +0 -4
  454. package/kotlin/fixtures/counter/app/index+spa.tsx +0 -1
  455. package/kotlin/fixtures/counter/app/routes.d.ts +0 -18
  456. package/kotlin/fixtures/counter/package.json +0 -20
  457. package/kotlin/fixtures/counter/tsconfig.json +0 -19
  458. package/kotlin/fixtures/counter/vite.config.ts +0 -20
  459. package/kotlin/fixtures/headless-counter/Headless.kt +0 -234
  460. package/kotlin/fixtures/import-animation/Animation.d.kt.ts +0 -7
  461. package/kotlin/fixtures/import-animation/Animation.kt +0 -80
  462. package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +0 -13
  463. package/kotlin/fixtures/import-animation/README.md +0 -24
  464. package/kotlin/fixtures/import-animation/app/_layout.tsx +0 -4
  465. package/kotlin/fixtures/import-animation/app/index+spa.tsx +0 -1
  466. package/kotlin/fixtures/import-animation/app/routes.d.ts +0 -18
  467. package/kotlin/fixtures/import-animation/package.json +0 -23
  468. package/kotlin/fixtures/import-animation/tsconfig.json +0 -20
  469. package/kotlin/fixtures/import-animation/vite.config.ts +0 -20
  470. package/kotlin/fixtures/import-drawing/Drawing.d.kt.ts +0 -7
  471. package/kotlin/fixtures/import-drawing/Drawing.kt +0 -101
  472. package/kotlin/fixtures/import-drawing/ImportDrawing.native.tsx +0 -18
  473. package/kotlin/fixtures/import-drawing/README.md +0 -34
  474. package/kotlin/fixtures/import-drawing/app/_layout.tsx +0 -4
  475. package/kotlin/fixtures/import-drawing/app/index+spa.tsx +0 -1
  476. package/kotlin/fixtures/import-drawing/package.json +0 -23
  477. package/kotlin/fixtures/import-drawing/tsconfig.json +0 -20
  478. package/kotlin/fixtures/import-drawing/vite.config.ts +0 -20
  479. package/kotlin/fixtures/import-editor/Editor.d.kt.ts +0 -7
  480. package/kotlin/fixtures/import-editor/Editor.kt +0 -59
  481. package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +0 -23
  482. package/kotlin/fixtures/import-editor/README.md +0 -27
  483. package/kotlin/fixtures/import-editor/app/_layout.tsx +0 -4
  484. package/kotlin/fixtures/import-editor/app/index+spa.tsx +0 -1
  485. package/kotlin/fixtures/import-editor/package.json +0 -23
  486. package/kotlin/fixtures/import-editor/tsconfig.json +0 -20
  487. package/kotlin/fixtures/import-editor/vite.config.ts +0 -20
  488. package/kotlin/fixtures/import-effects/Effects.d.kt.ts +0 -7
  489. package/kotlin/fixtures/import-effects/Effects.kt +0 -87
  490. package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +0 -13
  491. package/kotlin/fixtures/import-effects/README.md +0 -19
  492. package/kotlin/fixtures/import-effects/app/_layout.tsx +0 -4
  493. package/kotlin/fixtures/import-effects/app/index+spa.tsx +0 -1
  494. package/kotlin/fixtures/import-effects/package.json +0 -23
  495. package/kotlin/fixtures/import-effects/tsconfig.json +0 -20
  496. package/kotlin/fixtures/import-effects/vite.config.ts +0 -20
  497. package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +0 -13
  498. package/kotlin/fixtures/import-layout/Layout.d.kt.ts +0 -7
  499. package/kotlin/fixtures/import-layout/Layout.kt +0 -72
  500. package/kotlin/fixtures/import-layout/README.md +0 -24
  501. package/kotlin/fixtures/import-layout/app/_layout.tsx +0 -4
  502. package/kotlin/fixtures/import-layout/app/index+spa.tsx +0 -1
  503. package/kotlin/fixtures/import-layout/package.json +0 -23
  504. package/kotlin/fixtures/import-layout/tsconfig.json +0 -20
  505. package/kotlin/fixtures/import-layout/vite.config.ts +0 -20
  506. package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +0 -18
  507. package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +0 -7
  508. package/kotlin/fixtures/import-navigation/Navigation.kt +0 -104
  509. package/kotlin/fixtures/import-navigation/README.md +0 -31
  510. package/kotlin/fixtures/import-navigation/app/_layout.tsx +0 -4
  511. package/kotlin/fixtures/import-navigation/app/index+spa.tsx +0 -1
  512. package/kotlin/fixtures/import-navigation/package.json +0 -23
  513. package/kotlin/fixtures/import-navigation/tsconfig.json +0 -20
  514. package/kotlin/fixtures/import-navigation/vite.config.ts +0 -20
  515. package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +0 -29
  516. package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +0 -7
  517. package/kotlin/fixtures/import-overlays/Overlays.kt +0 -93
  518. package/kotlin/fixtures/import-overlays/README.md +0 -34
  519. package/kotlin/fixtures/import-overlays/app/_layout.tsx +0 -4
  520. package/kotlin/fixtures/import-overlays/app/index+spa.tsx +0 -1
  521. package/kotlin/fixtures/import-overlays/package.json +0 -23
  522. package/kotlin/fixtures/import-overlays/tsconfig.json +0 -20
  523. package/kotlin/fixtures/import-overlays/vite.config.ts +0 -20
  524. package/kotlin/fixtures/import-resources/ImportResources.native.tsx +0 -18
  525. package/kotlin/fixtures/import-resources/README.md +0 -26
  526. package/kotlin/fixtures/import-resources/Resources.d.kt.ts +0 -6
  527. package/kotlin/fixtures/import-resources/Resources.kt +0 -72
  528. package/kotlin/fixtures/import-resources/app/_layout.tsx +0 -4
  529. package/kotlin/fixtures/import-resources/app/index+spa.tsx +0 -1
  530. package/kotlin/fixtures/import-resources/package.json +0 -23
  531. package/kotlin/fixtures/import-resources/tsconfig.json +0 -20
  532. package/kotlin/fixtures/import-resources/vite.config.ts +0 -20
  533. package/kotlin/fixtures/import-scroll/ImportNested.native.tsx +0 -10
  534. package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +0 -13
  535. package/kotlin/fixtures/import-scroll/Nested.d.kt.ts +0 -4
  536. package/kotlin/fixtures/import-scroll/Nested.kt +0 -64
  537. package/kotlin/fixtures/import-scroll/README.md +0 -38
  538. package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +0 -7
  539. package/kotlin/fixtures/import-scroll/Scroll.kt +0 -91
  540. package/kotlin/fixtures/import-scroll/app/_layout.tsx +0 -4
  541. package/kotlin/fixtures/import-scroll/app/index+spa.tsx +0 -1
  542. package/kotlin/fixtures/import-scroll/app/nested+spa.tsx +0 -1
  543. package/kotlin/fixtures/import-scroll/package.json +0 -23
  544. package/kotlin/fixtures/import-scroll/tsconfig.json +0 -20
  545. package/kotlin/fixtures/import-scroll/vite.config.ts +0 -20
  546. package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +0 -44
  547. package/kotlin/fixtures/import-selection/README.md +0 -32
  548. package/kotlin/fixtures/import-selection/Selection.d.kt.ts +0 -8
  549. package/kotlin/fixtures/import-selection/Selection.kt +0 -78
  550. package/kotlin/fixtures/import-selection/app/_layout.tsx +0 -4
  551. package/kotlin/fixtures/import-selection/app/index+spa.tsx +0 -1
  552. package/kotlin/fixtures/import-selection/package.json +0 -23
  553. package/kotlin/fixtures/import-selection/tsconfig.json +0 -20
  554. package/kotlin/fixtures/import-selection/vite.config.ts +0 -20
  555. package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +0 -13
  556. package/kotlin/fixtures/import-surfaces/README.md +0 -22
  557. package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +0 -7
  558. package/kotlin/fixtures/import-surfaces/Surfaces.kt +0 -64
  559. package/kotlin/fixtures/import-surfaces/app/_layout.tsx +0 -4
  560. package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +0 -1
  561. package/kotlin/fixtures/import-surfaces/package.json +0 -23
  562. package/kotlin/fixtures/import-surfaces/tsconfig.json +0 -20
  563. package/kotlin/fixtures/import-surfaces/vite.config.ts +0 -20
  564. package/kotlin/fixtures/import-values/ImportValues.native.tsx +0 -61
  565. package/kotlin/fixtures/import-values/README.md +0 -28
  566. package/kotlin/fixtures/import-values/Values.d.kt.ts +0 -15
  567. package/kotlin/fixtures/import-values/Values.kt +0 -84
  568. package/kotlin/fixtures/import-values/app/_layout.tsx +0 -4
  569. package/kotlin/fixtures/import-values/app/index+spa.tsx +0 -1
  570. package/kotlin/fixtures/import-values/package.json +0 -23
  571. package/kotlin/fixtures/import-values/tsconfig.json +0 -20
  572. package/kotlin/fixtures/import-values/vite.config.ts +0 -20
  573. package/kotlin/fixtures/kotlin-app/app/build.gradle.kts +0 -30
  574. package/kotlin/fixtures/kotlin-app/app/src/main/AndroidManifest.xml +0 -13
  575. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/MainActivity.kt +0 -60
  576. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/ProbeApplication.kt +0 -18
  577. package/kotlin/fixtures/kotlin-app/build.gradle.kts +0 -5
  578. package/kotlin/fixtures/kotlin-app/gradle.properties +0 -4
  579. package/kotlin/fixtures/kotlin-app/settings.gradle.kts +0 -4
  580. package/kotlin/fixtures/kotlin-app-variants/Anim.kt +0 -62
  581. package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +0 -38
  582. package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +0 -36
  583. package/kotlin/fixtures/kotlin-app-variants/Bitmaps.kt +0 -50
  584. package/kotlin/fixtures/kotlin-app-variants/Browse.kt +0 -73
  585. package/kotlin/fixtures/kotlin-app-variants/Colors.kt +0 -41
  586. package/kotlin/fixtures/kotlin-app-variants/Controls.kt +0 -62
  587. package/kotlin/fixtures/kotlin-app-variants/Drag.kt +0 -56
  588. package/kotlin/fixtures/kotlin-app-variants/Draw.kt +0 -74
  589. package/kotlin/fixtures/kotlin-app-variants/Drawables.kt +0 -53
  590. package/kotlin/fixtures/kotlin-app-variants/Focus.kt +0 -62
  591. package/kotlin/fixtures/kotlin-app-variants/Form.kt +0 -47
  592. package/kotlin/fixtures/kotlin-app-variants/Icons.kt +0 -59
  593. package/kotlin/fixtures/kotlin-app-variants/Ime.kt +0 -53
  594. package/kotlin/fixtures/kotlin-app-variants/Lists.kt +0 -57
  595. package/kotlin/fixtures/kotlin-app-variants/Nav.kt +0 -47
  596. package/kotlin/fixtures/kotlin-app-variants/Note.kt +0 -40
  597. package/kotlin/fixtures/kotlin-app-variants/Overlays.kt +0 -56
  598. package/kotlin/fixtures/kotlin-app-variants/Pan.kt +0 -38
  599. package/kotlin/fixtures/kotlin-app-variants/Pickers.kt +0 -44
  600. package/kotlin/fixtures/kotlin-app-variants/Press.kt +0 -43
  601. package/kotlin/fixtures/kotlin-app-variants/Scroll.kt +0 -63
  602. package/kotlin/fixtures/kotlin-app-variants/Sheet.kt +0 -43
  603. package/kotlin/fixtures/kotlin-app-variants/Strings.kt +0 -49
  604. package/kotlin/fixtures/kotlin-app-variants/Tabs.kt +0 -47
  605. package/kotlin/fixtures/kotlin-app-variants/TextWidth.kt +0 -45
  606. package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +0 -50
  607. package/kotlin/fixtures/kotlin-app-variants/Transition.kt +0 -69
  608. package/kotlin/fixtures/kotlin-app-variants/ViewConfig.kt +0 -22
  609. package/kotlin/fixtures/kotlin-app-variants/Widgets.kt +0 -67
  610. package/kotlin/fixtures/runtime-state/RuntimeState.kt +0 -200
  611. package/kotlin/fork/README.md +0 -97
  612. package/kotlin/fork/build.sh +0 -176
  613. package/kotlin/fork/compose-worker-globals.patch +0 -1247
  614. package/kotlin/fork/fork.json +0 -46
  615. package/kotlin/fork/publish.ts +0 -99
  616. package/kotlin/fork/skia-android-shaping.patch +0 -189
  617. package/kotlin/fork/skiko-local.init.gradle +0 -10
  618. package/kotlin/fork/skiko-worker-clock.patch +0 -122
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -645,245 +645,6 @@ var init_replacement_module_handler = __esm({
645
645
  }
646
646
  });
647
647
 
648
- // ../../node_modules/plist/lib/parse.js
649
- var require_parse = __commonJS({
650
- "../../node_modules/plist/lib/parse.js"(exports2) {
651
- var { DOMParser } = require("@xmldom/xmldom");
652
- exports2.parse = parse4;
653
- var TEXT_NODE = 3;
654
- var CDATA_NODE = 4;
655
- var COMMENT_NODE = 8;
656
- function shouldIgnoreNode(node) {
657
- return node.nodeType === TEXT_NODE || node.nodeType === COMMENT_NODE || node.nodeType === CDATA_NODE;
658
- }
659
- function isEmptyNode(node) {
660
- if (!node.childNodes || node.childNodes.length === 0) {
661
- return true;
662
- } else {
663
- return false;
664
- }
665
- }
666
- function invariant(test, message) {
667
- if (!test) {
668
- throw new Error(message);
669
- }
670
- }
671
- function parse4(xml) {
672
- var doc = new DOMParser().parseFromString(xml, "text/xml");
673
- invariant(
674
- doc.documentElement.nodeName === "plist",
675
- "malformed document. First element should be <plist>"
676
- );
677
- var plist3 = parsePlistXML(doc.documentElement);
678
- if (plist3.length == 1) plist3 = plist3[0];
679
- return plist3;
680
- }
681
- function parsePlistXML(node) {
682
- var i, new_obj, key, val, new_arr, res, counter, type;
683
- if (!node) return null;
684
- if (node.nodeName === "plist") {
685
- new_arr = [];
686
- if (isEmptyNode(node)) {
687
- return new_arr;
688
- }
689
- for (i = 0; i < node.childNodes.length; i++) {
690
- if (!shouldIgnoreNode(node.childNodes[i])) {
691
- new_arr.push(parsePlistXML(node.childNodes[i]));
692
- }
693
- }
694
- return new_arr;
695
- } else if (node.nodeName === "dict") {
696
- new_obj = {};
697
- key = null;
698
- counter = 0;
699
- if (isEmptyNode(node)) {
700
- return new_obj;
701
- }
702
- for (i = 0; i < node.childNodes.length; i++) {
703
- if (shouldIgnoreNode(node.childNodes[i])) continue;
704
- if (counter % 2 === 0) {
705
- invariant(
706
- node.childNodes[i].nodeName === "key",
707
- "Missing key while parsing <dict/>."
708
- );
709
- key = parsePlistXML(node.childNodes[i]);
710
- } else {
711
- invariant(
712
- node.childNodes[i].nodeName !== "key",
713
- 'Unexpected key "' + parsePlistXML(node.childNodes[i]) + '" while parsing <dict/>.'
714
- );
715
- new_obj[key] = parsePlistXML(node.childNodes[i]);
716
- }
717
- counter += 1;
718
- }
719
- if (counter % 2 === 1) {
720
- new_obj[key] = "";
721
- }
722
- return new_obj;
723
- } else if (node.nodeName === "array") {
724
- new_arr = [];
725
- if (isEmptyNode(node)) {
726
- return new_arr;
727
- }
728
- for (i = 0; i < node.childNodes.length; i++) {
729
- if (!shouldIgnoreNode(node.childNodes[i])) {
730
- res = parsePlistXML(node.childNodes[i]);
731
- if (null != res) new_arr.push(res);
732
- }
733
- }
734
- return new_arr;
735
- } else if (node.nodeName === "#text") {
736
- } else if (node.nodeName === "key") {
737
- if (isEmptyNode(node)) {
738
- return "";
739
- }
740
- invariant(
741
- node.childNodes[0].nodeValue !== "__proto__",
742
- "__proto__ keys can lead to prototype pollution. More details on CVE-2022-22912"
743
- );
744
- return node.childNodes[0].nodeValue;
745
- } else if (node.nodeName === "string") {
746
- res = "";
747
- if (isEmptyNode(node)) {
748
- return res;
749
- }
750
- for (i = 0; i < node.childNodes.length; i++) {
751
- var type = node.childNodes[i].nodeType;
752
- if (type === TEXT_NODE || type === CDATA_NODE) {
753
- res += node.childNodes[i].nodeValue;
754
- }
755
- }
756
- return res;
757
- } else if (node.nodeName === "integer") {
758
- invariant(!isEmptyNode(node), 'Cannot parse "" as integer.');
759
- return parseInt(node.childNodes[0].nodeValue, 10);
760
- } else if (node.nodeName === "real") {
761
- invariant(!isEmptyNode(node), 'Cannot parse "" as real.');
762
- res = "";
763
- for (i = 0; i < node.childNodes.length; i++) {
764
- if (node.childNodes[i].nodeType === TEXT_NODE) {
765
- res += node.childNodes[i].nodeValue;
766
- }
767
- }
768
- return parseFloat(res);
769
- } else if (node.nodeName === "data") {
770
- res = "";
771
- if (isEmptyNode(node)) {
772
- return Buffer.from(res, "base64");
773
- }
774
- for (i = 0; i < node.childNodes.length; i++) {
775
- if (node.childNodes[i].nodeType === TEXT_NODE) {
776
- res += node.childNodes[i].nodeValue.replace(/\s+/g, "");
777
- }
778
- }
779
- return Buffer.from(res, "base64");
780
- } else if (node.nodeName === "date") {
781
- invariant(!isEmptyNode(node), 'Cannot parse "" as Date.');
782
- return new Date(node.childNodes[0].nodeValue);
783
- } else if (node.nodeName === "null") {
784
- return null;
785
- } else if (node.nodeName === "true") {
786
- return true;
787
- } else if (node.nodeName === "false") {
788
- return false;
789
- } else {
790
- throw new Error("Invalid PLIST tag " + node.nodeName);
791
- }
792
- }
793
- }
794
- });
795
-
796
- // ../../node_modules/plist/lib/build.js
797
- var require_build = __commonJS({
798
- "../../node_modules/plist/lib/build.js"(exports2) {
799
- var base64 = require("base64-js");
800
- var xmlbuilder = require("xmlbuilder");
801
- exports2.build = build;
802
- function ISODateString(d) {
803
- function pad(n) {
804
- return n < 10 ? "0" + n : n;
805
- }
806
- return d.getUTCFullYear() + "-" + pad(d.getUTCMonth() + 1) + "-" + pad(d.getUTCDate()) + "T" + pad(d.getUTCHours()) + ":" + pad(d.getUTCMinutes()) + ":" + pad(d.getUTCSeconds()) + "Z";
807
- }
808
- var toString = Object.prototype.toString;
809
- function type(obj) {
810
- var m = toString.call(obj).match(/\[object (.*)\]/);
811
- return m ? m[1] : m;
812
- }
813
- function build(obj, opts) {
814
- var XMLHDR = {
815
- version: "1.0",
816
- encoding: "UTF-8"
817
- };
818
- var XMLDTD = {
819
- pubid: "-//Apple//DTD PLIST 1.0//EN",
820
- sysid: "http://www.apple.com/DTDs/PropertyList-1.0.dtd"
821
- };
822
- var doc = xmlbuilder.create("plist");
823
- doc.dec(XMLHDR.version, XMLHDR.encoding, XMLHDR.standalone);
824
- doc.dtd(XMLDTD.pubid, XMLDTD.sysid);
825
- doc.att("version", "1.0");
826
- walk_obj(obj, doc);
827
- if (!opts) opts = {};
828
- opts.pretty = opts.pretty !== false;
829
- return doc.end(opts);
830
- }
831
- function walk_obj(next, next_child) {
832
- var tag_type, i, prop;
833
- var name2 = type(next);
834
- if ("Undefined" == name2) {
835
- return;
836
- } else if (Array.isArray(next)) {
837
- next_child = next_child.ele("array");
838
- for (i = 0; i < next.length; i++) {
839
- walk_obj(next[i], next_child);
840
- }
841
- } else if (Buffer.isBuffer(next)) {
842
- next_child.ele("data").raw(next.toString("base64"));
843
- } else if ("Object" == name2) {
844
- next_child = next_child.ele("dict");
845
- for (prop in next) {
846
- if (next.hasOwnProperty(prop)) {
847
- next_child.ele("key").txt(prop);
848
- walk_obj(next[prop], next_child);
849
- }
850
- }
851
- } else if ("Number" == name2) {
852
- tag_type = next % 1 === 0 ? "integer" : "real";
853
- next_child.ele(tag_type).txt(next.toString());
854
- } else if ("BigInt" == name2) {
855
- next_child.ele("integer").txt(next);
856
- } else if ("Date" == name2) {
857
- next_child.ele("date").txt(ISODateString(new Date(next)));
858
- } else if ("Boolean" == name2) {
859
- next_child.ele(next ? "true" : "false");
860
- } else if ("String" == name2) {
861
- next_child.ele("string").txt(next);
862
- } else if ("ArrayBuffer" == name2) {
863
- next_child.ele("data").raw(base64.fromByteArray(next));
864
- } else if (next && next.buffer && "ArrayBuffer" == type(next.buffer)) {
865
- next_child.ele("data").raw(base64.fromByteArray(new Uint8Array(next.buffer), next_child));
866
- } else if ("Null" === name2) {
867
- next_child.ele("null").txt("");
868
- }
869
- }
870
- }
871
- });
872
-
873
- // ../../node_modules/plist/index.js
874
- var require_plist = __commonJS({
875
- "../../node_modules/plist/index.js"(exports2) {
876
- var parserFunctions = require_parse();
877
- Object.keys(parserFunctions).forEach(function(k) {
878
- exports2[k] = parserFunctions[k];
879
- });
880
- var builderFunctions = require_build();
881
- Object.keys(builderFunctions).forEach(function(k) {
882
- exports2[k] = builderFunctions[k];
883
- });
884
- }
885
- });
886
-
887
648
  // ../../node_modules/json5/lib/unicode.js
888
649
  var require_unicode = __commonJS({
889
650
  "../../node_modules/json5/lib/unicode.js"(exports2, module2) {
@@ -918,7 +679,7 @@ var require_util = __commonJS({
918
679
  });
919
680
 
920
681
  // ../../node_modules/json5/lib/parse.js
921
- var require_parse2 = __commonJS({
682
+ var require_parse = __commonJS({
922
683
  "../../node_modules/json5/lib/parse.js"(exports2, module2) {
923
684
  var util = require_util();
924
685
  var source;
@@ -1986,7 +1747,7 @@ var require_stringify = __commonJS({
1986
1747
  // ../../node_modules/json5/lib/index.js
1987
1748
  var require_lib = __commonJS({
1988
1749
  "../../node_modules/json5/lib/index.js"(exports2, module2) {
1989
- var parse4 = require_parse2();
1750
+ var parse4 = require_parse();
1990
1751
  var stringify4 = require_stringify();
1991
1752
  var JSON53 = {
1992
1753
  parse: parse4,
@@ -2013,6 +1774,258 @@ var init_version = __esm({
2013
1774
  }
2014
1775
  });
2015
1776
 
1777
+ // ../contrast-runtime-delivery/src/product.ts
1778
+ var init_product = __esm({
1779
+ "../contrast-runtime-delivery/src/product.ts"() {
1780
+ "use strict";
1781
+ init_version();
1782
+ }
1783
+ });
1784
+
1785
+ // ../contrast-runtime-delivery/src/index.ts
1786
+ var init_src = __esm({
1787
+ "../contrast-runtime-delivery/src/index.ts"() {
1788
+ "use strict";
1789
+ init_process_group();
1790
+ init_product();
1791
+ init_product();
1792
+ }
1793
+ });
1794
+
1795
+ // src/home-paths.ts
1796
+ function rnxHomeDir() {
1797
+ const override = process.env[PEACH_HOME_ENV];
1798
+ if (override && override.length > 0) return import_node_path8.default.resolve(override);
1799
+ return import_node_path8.default.join((0, import_node_os2.homedir)(), ".peach");
1800
+ }
1801
+ function runtimesDir() {
1802
+ return import_node_path8.default.join(rnxHomeDir(), "runtimes");
1803
+ }
1804
+ function runtimeDir(version) {
1805
+ return import_node_path8.default.join(runtimesDir(), version);
1806
+ }
1807
+ function activeRuntimeFile() {
1808
+ return import_node_path8.default.join(runtimesDir(), ACTIVE_RUNTIME_FILE);
1809
+ }
1810
+ function readActiveRuntime() {
1811
+ try {
1812
+ const value = import_node_fs8.default.readFileSync(activeRuntimeFile(), "utf8").trim();
1813
+ return value.length > 0 ? value : null;
1814
+ } catch {
1815
+ return null;
1816
+ }
1817
+ }
1818
+ var import_node_fs8, import_node_os2, import_node_path8, PEACH_HOME_ENV, ACTIVE_RUNTIME_FILE, DAEMON_LOCKFILE_MAX_BYTES;
1819
+ var init_home_paths = __esm({
1820
+ "src/home-paths.ts"() {
1821
+ "use strict";
1822
+ import_node_fs8 = __toESM(require("node:fs"), 1);
1823
+ import_node_os2 = require("node:os");
1824
+ import_node_path8 = __toESM(require("node:path"), 1);
1825
+ PEACH_HOME_ENV = "PEACH_HOME";
1826
+ ACTIVE_RUNTIME_FILE = "active";
1827
+ DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
1828
+ }
1829
+ });
1830
+
1831
+ // src/runtime-assets.ts
1832
+ function findMonorepoRoot() {
1833
+ if (_monorepoRootCache !== void 0) return _monorepoRootCache;
1834
+ let dir = import_path2.default.dirname((0, import_url.fileURLToPath)(__sootsim_import_meta_url));
1835
+ for (let i = 0; i < 12 && dir !== import_path2.default.dirname(dir); i++) {
1836
+ if (import_fs2.default.existsSync(import_path2.default.join(dir, "packages/peach-engine/package.json")) && import_fs2.default.existsSync(import_path2.default.join(dir, "public/sootsim"))) {
1837
+ _monorepoRootCache = dir;
1838
+ return dir;
1839
+ }
1840
+ dir = import_path2.default.dirname(dir);
1841
+ }
1842
+ _monorepoRootCache = null;
1843
+ return null;
1844
+ }
1845
+ function resolveDevCheckoutRuntimeAssetRoot() {
1846
+ if (process.env.PEACH_HOME && readActiveRuntime()) return null;
1847
+ const root = findMonorepoRoot();
1848
+ if (!root) return null;
1849
+ return import_path2.default.join(root, "public/sootsim");
1850
+ }
1851
+ function resolveDevCheckoutRuntimeRoot() {
1852
+ const devBuild = resolveDevCheckoutRuntimeAssetRoot();
1853
+ if (!devBuild) return null;
1854
+ if (import_fs2.default.existsSync(import_path2.default.join(devBuild, "index.html")) && import_fs2.default.existsSync(import_path2.default.join(devBuild, "engine/index.html")) && import_fs2.default.existsSync(import_path2.default.join(devBuild, "engine-tenant/worker.js")) && import_fs2.default.existsSync(import_path2.default.join(devBuild, "engine-tenant/worker.prod.js"))) {
1855
+ return devBuild;
1856
+ }
1857
+ return null;
1858
+ }
1859
+ function resolveActiveRuntimeRoot() {
1860
+ const devRoot = resolveDevCheckoutRuntimeRoot();
1861
+ if (devRoot) return devRoot;
1862
+ const active = readActiveRuntime();
1863
+ if (!active) return null;
1864
+ const dir = runtimeDir(active);
1865
+ if (!import_fs2.default.existsSync(import_path2.default.join(dir, "index.html"))) return null;
1866
+ return dir;
1867
+ }
1868
+ function isRuntimeVersionHostname(hostname) {
1869
+ return hostname.toLowerCase().endsWith(RUNTIME_VERSION_HOSTNAME_SUFFIX);
1870
+ }
1871
+ function runtimeVersionFromHostname(hostname) {
1872
+ if (!isRuntimeVersionHostname(hostname)) return null;
1873
+ const labels = hostname.slice(0, -RUNTIME_VERSION_HOSTNAME_SUFFIX.length).split(".");
1874
+ if (labels.length === 0 || labels.some((label) => !/^[0-9a-f]{1,60}$/i.test(label))) {
1875
+ return null;
1876
+ }
1877
+ const encoded = labels.join("");
1878
+ if (encoded.length % 2 !== 0) return null;
1879
+ try {
1880
+ const version = Buffer.from(encoded, "hex").toString("utf8");
1881
+ return isValidRuntimeVersion(version) ? version : null;
1882
+ } catch {
1883
+ return null;
1884
+ }
1885
+ }
1886
+ function resolveInstalledRuntimeRoot(version) {
1887
+ const dir = runtimeDir(version);
1888
+ if (!import_fs2.default.existsSync(import_path2.default.join(dir, "index.html"))) return null;
1889
+ return dir;
1890
+ }
1891
+ function resolveRuntimeRootForHostname(hostname) {
1892
+ if (!isRuntimeVersionHostname(hostname)) return resolveActiveRuntimeRoot();
1893
+ const version = runtimeVersionFromHostname(hostname);
1894
+ return version ? resolveInstalledRuntimeRoot(version) : null;
1895
+ }
1896
+ function resolveRuntimeRootForRequestHost(host) {
1897
+ if (!host) return resolveActiveRuntimeRoot();
1898
+ try {
1899
+ return resolveRuntimeRootForHostname(new URL(`http://${host}`).hostname);
1900
+ } catch {
1901
+ return null;
1902
+ }
1903
+ }
1904
+ function isRootRuntimeAssetPath(pathname) {
1905
+ return ROOT_RUNTIME_PATHS.some((p) => pathname === p || pathname.startsWith(p));
1906
+ }
1907
+ function resolveRuntimeFilePath(runtimeRoot, pathname) {
1908
+ if (!pathname.startsWith("/")) return null;
1909
+ if (pathname.includes("\0") || pathname.includes("\\")) return null;
1910
+ for (const segment of pathname.split("/")) {
1911
+ if (segment === "..") return null;
1912
+ }
1913
+ const normalized = pathname.startsWith("/sootsim/") ? pathname.slice("/sootsim".length) : pathname;
1914
+ const fullPath = import_path2.default.resolve(runtimeRoot, normalized.replace(/^\/+/, ""));
1915
+ const rootWithSep = runtimeRoot.endsWith(import_path2.default.sep) ? runtimeRoot : runtimeRoot + import_path2.default.sep;
1916
+ if (!fullPath.startsWith(rootWithSep) && fullPath !== runtimeRoot) return null;
1917
+ if (!import_fs2.default.existsSync(fullPath) || !import_fs2.default.statSync(fullPath).isFile()) return null;
1918
+ return fullPath;
1919
+ }
1920
+ function serveRuntimeFile(req, res, fullPath) {
1921
+ const ext = import_path2.default.extname(fullPath);
1922
+ const stat = import_fs2.default.statSync(fullPath);
1923
+ const lastModified = stat.mtime.toUTCString();
1924
+ res.setHeader("content-type", MIME_TYPES[ext] || "application/octet-stream");
1925
+ if (/^canvaskit-graphite-pipelines-[0-9a-f]{8}\.bin$/.test(import_path2.default.basename(fullPath))) {
1926
+ res.setHeader("cache-control", "public, max-age=31536000, immutable");
1927
+ import_fs2.default.createReadStream(fullPath).pipe(res);
1928
+ return;
1929
+ }
1930
+ res.setHeader("cache-control", "no-cache");
1931
+ res.setHeader("last-modified", lastModified);
1932
+ if (req?.headers?.["if-modified-since"] === lastModified) {
1933
+ res.statusCode = 304;
1934
+ res.end();
1935
+ return;
1936
+ }
1937
+ sendFileWithRanges(req, res, fullPath, stat.size, {});
1938
+ }
1939
+ function sendFileWithRanges(req, res, filePath, total, headers) {
1940
+ const head = (req?.method || "GET").toUpperCase() === "HEAD";
1941
+ const range = /^bytes=(\d*)-(\d*)$/.exec(req?.headers?.range || "");
1942
+ const invalid = range && range[1] && range[2] && Number(range[2]) < Number(range[1]);
1943
+ if (range && (range[1] || range[2]) && !invalid) {
1944
+ const [, startRaw, endRaw] = range;
1945
+ const start = startRaw ? Number(startRaw) : Math.max(0, total - Number(endRaw));
1946
+ const end = startRaw && endRaw ? Math.min(Number(endRaw), total - 1) : total - 1;
1947
+ if (start > end || start >= total) {
1948
+ res.writeHead(416, { ...headers, "Content-Range": `bytes */${total}` });
1949
+ res.end();
1950
+ return;
1951
+ }
1952
+ res.writeHead(206, {
1953
+ ...headers,
1954
+ "Content-Range": `bytes ${start}-${end}/${total}`,
1955
+ "Accept-Ranges": "bytes",
1956
+ "Content-Length": String(end - start + 1)
1957
+ });
1958
+ if (head) res.end();
1959
+ else streamFile(res, import_fs2.default.createReadStream(filePath, { start, end }));
1960
+ return;
1961
+ }
1962
+ res.writeHead(200, {
1963
+ ...headers,
1964
+ "Accept-Ranges": "bytes",
1965
+ "Content-Length": String(total)
1966
+ });
1967
+ if (head || total === 0) res.end();
1968
+ else streamFile(res, import_fs2.default.createReadStream(filePath, { start: 0, end: total - 1 }));
1969
+ }
1970
+ function streamFile(res, stream) {
1971
+ stream.on("error", (error) => res.destroy(error));
1972
+ stream.pipe(res);
1973
+ }
1974
+ var import_fs2, import_path2, import_url, SOOTSIM_RUNTIME_MISSING_MESSAGE, _monorepoRootCache, MIME_TYPES, ROOT_RUNTIME_PATHS, RUNTIME_VERSION_HOSTNAME_SUFFIX;
1975
+ var init_runtime_assets = __esm({
1976
+ "src/runtime-assets.ts"() {
1977
+ "use strict";
1978
+ import_fs2 = __toESM(require("fs"), 1);
1979
+ import_path2 = __toESM(require("path"), 1);
1980
+ import_url = require("url");
1981
+ init_src();
1982
+ init_home_paths();
1983
+ SOOTSIM_RUNTIME_MISSING_MESSAGE = "[peach] no engine runtime installed. run `peach runtime install`";
1984
+ MIME_TYPES = {
1985
+ ".js": "application/javascript",
1986
+ ".mjs": "application/javascript",
1987
+ ".css": "text/css",
1988
+ ".html": "text/html",
1989
+ ".wasm": "application/wasm",
1990
+ ".json": "application/json",
1991
+ ".jpg": "image/jpeg",
1992
+ ".jpeg": "image/jpeg",
1993
+ ".png": "image/png",
1994
+ ".svg": "image/svg+xml",
1995
+ ".webp": "image/webp",
1996
+ ".glb": "model/gltf-binary",
1997
+ ".ttf": "font/ttf",
1998
+ ".otf": "font/otf",
1999
+ ".woff": "font/woff",
2000
+ ".woff2": "font/woff2",
2001
+ ".mp3": "audio/mpeg",
2002
+ ".wav": "audio/wav",
2003
+ ".mp4": "video/mp4",
2004
+ ".m4v": "video/mp4",
2005
+ ".mov": "video/quicktime",
2006
+ ".webm": "video/webm"
2007
+ };
2008
+ ROOT_RUNTIME_PATHS = [
2009
+ "/assets/",
2010
+ "/engine/",
2011
+ "/engine-tenant/",
2012
+ "/photos/",
2013
+ "/three-mode/",
2014
+ "/fonts/",
2015
+ "/icons/",
2016
+ "/sounds/",
2017
+ "/spike/",
2018
+ "/test-wallpaper.jpg",
2019
+ "/preview-sw.js",
2020
+ "/peach.svg",
2021
+ "/bedrock-sqlite.wasm",
2022
+ "/bedrock-sqlite.js",
2023
+ "/sootsim/"
2024
+ ];
2025
+ RUNTIME_VERSION_HOSTNAME_SUFFIX = ".runtime.localhost";
2026
+ }
2027
+ });
2028
+
2016
2029
  // src/nativeViewSourceContract.ts
2017
2030
  function isNativeViewSource(value) {
2018
2031
  if (!isRecord(value)) return false;
@@ -6027,35 +6040,7 @@ var import_fs3 = __toESM(require("fs"), 1);
6027
6040
  var import_module = require("module");
6028
6041
  var import_node_crypto3 = require("node:crypto");
6029
6042
  var import_path3 = __toESM(require("path"), 1);
6030
-
6031
- // ../peach-engine/src/platform/adapter.ts
6032
- var IOS_ADAPTER = Object.freeze({
6033
- id: "ios",
6034
- displayName: "iOS",
6035
- isIOS: true,
6036
- isAndroid: false,
6037
- select: (registry) => registry.ios
6038
- });
6039
- var ANDROID_ADAPTER = Object.freeze({
6040
- id: "android",
6041
- displayName: "Android",
6042
- isIOS: false,
6043
- isAndroid: true,
6044
- select: (registry) => registry.android
6045
- });
6046
- var RUNTIME_PLATFORM_ADAPTERS = Object.freeze({
6047
- ios: IOS_ADAPTER,
6048
- android: ANDROID_ADAPTER
6049
- });
6050
- function isRuntimePlatform(value) {
6051
- return value === "ios" || value === "android";
6052
- }
6053
- function getRuntimePlatformAdapter(platform) {
6054
- return RUNTIME_PLATFORM_ADAPTERS[platform];
6055
- }
6056
-
6057
- // src/metro-plugin.ts
6058
- init_app_project();
6043
+ init_app_project();
6059
6044
 
6060
6045
  // src/android-autolinking.ts
6061
6046
  var import_node_child_process = require("node:child_process");
@@ -8403,7 +8388,7 @@ var PEACH_UPSTREAM_MODULES = {
8403
8388
  ...PEACH_REACT_NATIVE_UPSTREAM_MODULES
8404
8389
  };
8405
8390
 
8406
- // ../peach-engine/src/stub-pattern-matcher.ts
8391
+ // src/stub-pattern-matcher.ts
8407
8392
  function extractPackageFromPath(modulePath) {
8408
8393
  let nodeModulesIndex = modulePath.lastIndexOf("/node_modules/");
8409
8394
  let prefixLength = "/node_modules/".length;
@@ -8425,25 +8410,74 @@ function packageNameAt(modulePath, start) {
8425
8410
  }
8426
8411
 
8427
8412
  // src/installed-package-versions.ts
8428
- function readInstalledPackage(projectRoot, name2) {
8429
- let dir = projectRoot;
8430
- for (; ; ) {
8431
- let manifest;
8432
- try {
8433
- manifest = JSON.parse(
8434
- import_fs.default.readFileSync(import_path.default.join(dir, "node_modules", name2, "package.json"), "utf8")
8435
- );
8436
- } catch (error) {
8437
- if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
8438
- throw error;
8413
+ function* exists(target) {
8414
+ return (yield { op: "exists", path: target }) === true;
8415
+ }
8416
+ function* readManifest(target) {
8417
+ const manifest = yield { op: "manifest", path: target };
8418
+ return typeof manifest === "object" ? manifest : null;
8419
+ }
8420
+ function parseManifest(source) {
8421
+ const manifest = JSON.parse(source);
8422
+ return typeof manifest === "object" && manifest !== null ? manifest : null;
8423
+ }
8424
+ function isMissing(error) {
8425
+ return error instanceof Error && "code" in error && error.code === "ENOENT";
8426
+ }
8427
+ function answerSync(step) {
8428
+ if (step.op === "exists") return import_fs.default.existsSync(step.path);
8429
+ if (step.op === "realpath") return import_fs.default.realpathSync(step.path);
8430
+ try {
8431
+ return parseManifest(import_fs.default.readFileSync(step.path, "utf8"));
8432
+ } catch (error) {
8433
+ if (isMissing(error)) return null;
8434
+ throw error;
8435
+ }
8436
+ }
8437
+ function runSync(walk) {
8438
+ for (let step = walk.next(); ; ) {
8439
+ if (step.done) return step.value;
8440
+ step = walk.next(answerSync(step.value));
8441
+ }
8442
+ }
8443
+ function createInstalledPackageReader() {
8444
+ const hasModules = /* @__PURE__ */ new Map();
8445
+ const manifests = /* @__PURE__ */ new Map();
8446
+ return function* readInstalledPackage(fromDir, name2) {
8447
+ for (let dir = fromDir; ; ) {
8448
+ if (import_path.default.basename(dir) !== "node_modules") {
8449
+ const modules = import_path.default.join(dir, "node_modules");
8450
+ let present = hasModules.get(dir);
8451
+ if (present === void 0) {
8452
+ present = yield* exists(modules);
8453
+ hasModules.set(dir, present);
8454
+ }
8455
+ if (present) {
8456
+ const root = import_path.default.join(modules, name2);
8457
+ let installed = manifests.get(root);
8458
+ if (installed === void 0) {
8459
+ const manifest = yield* readManifest(import_path.default.join(root, "package.json"));
8460
+ installed = manifest ? { root, manifest } : null;
8461
+ manifests.set(root, installed);
8462
+ }
8463
+ if (installed) return installed;
8464
+ }
8439
8465
  }
8440
8466
  const parent = import_path.default.dirname(dir);
8441
8467
  if (parent === dir) return null;
8442
8468
  dir = parent;
8443
- continue;
8444
8469
  }
8445
- return typeof manifest === "object" && manifest !== null ? { root: import_path.default.join(dir, "node_modules", name2), manifest } : null;
8470
+ };
8471
+ }
8472
+ function* installedVersionsWalk(projectRoot, names) {
8473
+ const readInstalledPackage = createInstalledPackageReader();
8474
+ const versions = {};
8475
+ for (const name2 of [...names].sort()) {
8476
+ const installed = yield* readInstalledPackage(projectRoot, name2);
8477
+ const version = installed && Reflect.get(installed.manifest, "version");
8478
+ if (typeof version === "string" && version.length > 0) versions[name2] = version;
8446
8479
  }
8480
+ return versions;
8447
8481
  }
8448
8482
  function readInstalledPackageVersions(projectRoot, modulePaths) {
8449
8483
  const names = /* @__PURE__ */ new Set();
@@ -8451,13 +8485,7 @@ function readInstalledPackageVersions(projectRoot, modulePaths) {
8451
8485
  const name2 = extractPackageFromPath(modulePath.replaceAll(import_path.default.sep, "/"));
8452
8486
  if (name2) names.add(name2);
8453
8487
  }
8454
- const versions = {};
8455
- for (const name2 of [...names].sort()) {
8456
- const installed = readInstalledPackage(projectRoot, name2);
8457
- const version = installed && Reflect.get(installed.manifest, "version");
8458
- if (typeof version === "string" && version.length > 0) versions[name2] = version;
8459
- }
8460
- return versions;
8488
+ return runSync(installedVersionsWalk(projectRoot, names));
8461
8489
  }
8462
8490
 
8463
8491
  // src/metro-production-bundle.ts
@@ -8935,8 +8963,13 @@ function visitXcodeTargetMembers(objects, targetId, resolvePath, filesUnder, joi
8935
8963
  if (file.endsWith(".swift")) {
8936
8964
  if (!relative3.split("/").some((segment) => BUNDLE_DIR.test(segment)))
8937
8965
  visit3(file, "source");
8938
- } else if (/\.(h|m|mm|c|cpp|metal)$/.test(file)) {
8939
- if (!file.endsWith(".h")) visit3(file, "source");
8966
+ } else if (/\.(h|hh|hpp|hxx|pch)$/.test(file)) {
8967
+ visit3(
8968
+ file,
8969
+ relative3.split("/").some((segment) => BUNDLE_DIR.test(segment)) ? "resource" : "header"
8970
+ );
8971
+ } else if (/\.(m|mm|c|cc|cpp|cxx|metal)$/.test(file)) {
8972
+ visit3(file, "source");
8940
8973
  } else visit3(file, "resource");
8941
8974
  }
8942
8975
  }
@@ -9445,7 +9478,7 @@ var import_node_path6 = __toESM(require("node:path"), 1);
9445
9478
  init_is_record();
9446
9479
 
9447
9480
  // src/plist.ts
9448
- var import_plist = __toESM(require_plist(), 1);
9481
+ var import_plist = __toESM(require("plist"), 1);
9449
9482
  function parsePlistSource(source) {
9450
9483
  return import_plist.default.parse(source);
9451
9484
  }
@@ -9455,7 +9488,7 @@ var import_node_child_process2 = require("node:child_process");
9455
9488
  var import_node_crypto2 = require("node:crypto");
9456
9489
  var import_node_fs5 = __toESM(require("node:fs"), 1);
9457
9490
  var import_node_path5 = __toESM(require("node:path"), 1);
9458
- var import_plist2 = __toESM(require_plist(), 1);
9491
+ var import_plist2 = __toESM(require("plist"), 1);
9459
9492
 
9460
9493
  // src/xcode-json-project.ts
9461
9494
  var import_node_path4 = __toESM(require("node:path"), 1);
@@ -10019,6 +10052,9 @@ function targetSettings(ref, configuration, builtins, options = {}) {
10019
10052
  return applyOperator(get("PRODUCT_NAME"), "c99extidentifier");
10020
10053
  case "EXECUTABLE_NAME":
10021
10054
  return get("PRODUCT_NAME");
10055
+ // the native default of CoreBuildSystem.xcspec
10056
+ case "EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES":
10057
+ return "*.nib *.lproj *.framework *.gch *.xcode* *.xcassets *.icon (*) .DS_Store CVS .svn .git .hg *.pbproj *.pbxproj";
10022
10058
  case "AppIdentifierPrefix":
10023
10059
  case "TeamIdentifierPrefix": {
10024
10060
  const team = get("DEVELOPMENT_TEAM");
@@ -10041,6 +10077,45 @@ function settingList(value) {
10041
10077
  items2.push((quoted ?? plain).replace(/\\(.)/g, "$1"));
10042
10078
  return items2;
10043
10079
  }
10080
+ function expandSearchPath(directory, rules) {
10081
+ if (import_node_path5.default.basename(directory) !== "**") return [directory];
10082
+ const expanded = [];
10083
+ const seen = /* @__PURE__ */ new Set();
10084
+ const queue = [import_node_path5.default.dirname(directory)];
10085
+ for (let at = 0; at < queue.length; at++) {
10086
+ const current = queue[at];
10087
+ let real;
10088
+ try {
10089
+ real = import_node_fs5.default.realpathSync(current);
10090
+ } catch {
10091
+ continue;
10092
+ }
10093
+ if (!import_node_fs5.default.statSync(real).isDirectory() || seen.has(real)) continue;
10094
+ seen.add(real);
10095
+ expanded.push(current);
10096
+ for (const entry of import_node_fs5.default.readdirSync(real, { withFileTypes: true }).sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0)) {
10097
+ if (entry.isSymbolicLink() ? !rules.followLinks : !entry.isDirectory()) continue;
10098
+ if (rules.excluded.some((pattern) => pattern.test(entry.name)) && !rules.included.some((pattern) => pattern.test(entry.name)))
10099
+ continue;
10100
+ queue.push(import_node_path5.default.join(current, entry.name));
10101
+ }
10102
+ }
10103
+ return expanded;
10104
+ }
10105
+ function recursiveSearchRules(settings) {
10106
+ const glob = (pattern) => new RegExp(
10107
+ `^${pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replaceAll("*", ".*").replaceAll("?", ".")}$`
10108
+ );
10109
+ return {
10110
+ excluded: settingList(settings("EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES")).map(
10111
+ glob
10112
+ ),
10113
+ included: settingList(settings("INCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES")).map(
10114
+ glob
10115
+ ),
10116
+ followLinks: settings("RECURSIVE_SEARCH_PATHS_FOLLOW_SYMLINKS") !== "NO"
10117
+ };
10118
+ }
10044
10119
  function compilationConditions(settings) {
10045
10120
  const flags = settingList(settings("OTHER_SWIFT_FLAGS"));
10046
10121
  const defined = flags.flatMap(
@@ -10069,6 +10144,7 @@ function targetMembers(ref, settings, options, settingKeys, projectInputs) {
10069
10144
  const targetName = str(target.name) ?? targetId;
10070
10145
  const sources = /* @__PURE__ */ new Set();
10071
10146
  const allSources = /* @__PURE__ */ new Set();
10147
+ const headers = /* @__PURE__ */ new Set();
10072
10148
  const resources = /* @__PURE__ */ new Set();
10073
10149
  const scriptForOutput = /* @__PURE__ */ new Map();
10074
10150
  for (const phaseId of list(target.buildPhases)) {
@@ -10197,6 +10273,10 @@ ${output}`
10197
10273
  (file) => isDirectory(file) ? walkFiles(file) : import_node_fs5.default.existsSync(file) ? [file] : [],
10198
10274
  import_node_path5.default.join,
10199
10275
  (file, kind) => {
10276
+ if (kind === "header") {
10277
+ headers.add(file);
10278
+ return;
10279
+ }
10200
10280
  if (kind === "resource") {
10201
10281
  resources.add(file);
10202
10282
  return;
@@ -10226,7 +10306,8 @@ ${output}`
10226
10306
  return {
10227
10307
  sources: [...sources].sort(),
10228
10308
  resources: [...resources].sort(),
10229
- allSources: [...allSources].sort()
10309
+ allSources: [...allSources].sort(),
10310
+ headers: [...headers].sort()
10230
10311
  };
10231
10312
  }
10232
10313
  function commonAncestor(dirs) {
@@ -10402,7 +10483,8 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
10402
10483
  );
10403
10484
  for (const file of read) xcconfigs.add(file);
10404
10485
  const swiftVersion = Number.parseFloat(settings2("SWIFT_VERSION") || "5");
10405
- const members = targetMembers(ref, settings2, options, keys, xcconfigs);
10486
+ const { headers, ...members } = targetMembers(ref, settings2, options, keys, xcconfigs);
10487
+ const searchRules = recursiveSearchRules(settings2);
10406
10488
  const implementations = members.allSources.filter(
10407
10489
  (file) => /\.(c|cc|cpp|cxx|m|mm)$/.test(file)
10408
10490
  );
@@ -10436,21 +10518,36 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
10436
10518
  iosDeploymentTarget: settings2("IPHONEOS_DEPLOYMENT_TARGET") || null,
10437
10519
  ...implementations.some((file) => /\.mm?$/.test(file)) ? {
10438
10520
  objc: {
10439
- headers: Object.keys(ref.project.objects).flatMap((id) => {
10440
- const file = ref.project.resolvePath(id);
10441
- return file && /\.(h|hh|hpp|hxx|pch)$/.test(file) && import_node_fs5.default.existsSync(file) ? [file] : [];
10521
+ publicHeaders: list(ref.target.buildPhases).flatMap((phaseId) => {
10522
+ const phase = ref.project.object(phaseId);
10523
+ if (phase?.isa !== "PBXHeadersBuildPhase") return [];
10524
+ return list(phase.files).flatMap((id) => {
10525
+ const file = ref.project.object(id);
10526
+ const attributes = isDict(file?.settings) ? list(file.settings.ATTRIBUTES) : [];
10527
+ const resolved = ref.project.resolvePath(str(file?.fileRef) ?? "");
10528
+ return attributes.includes("Public") && resolved ? [resolved] : [];
10529
+ });
10442
10530
  }),
10531
+ headers: [
10532
+ .../* @__PURE__ */ new Set([
10533
+ ...headers,
10534
+ ...Object.keys(ref.project.objects).flatMap((id) => {
10535
+ const file = ref.project.resolvePath(id);
10536
+ return file && /\.(h|hh|hpp|hxx|pch)$/.test(file) && import_node_fs5.default.existsSync(file) ? [file] : [];
10537
+ })
10538
+ ])
10539
+ ],
10443
10540
  prefixHeader: settings2("GCC_PREFIX_HEADER") ? absolute(settings2("GCC_PREFIX_HEADER")) : null,
10444
10541
  bridgingHeader: settings2("SWIFT_OBJC_BRIDGING_HEADER") ? absolute(settings2("SWIFT_OBJC_BRIDGING_HEADER")) : null,
10445
10542
  headerSearchPaths: [
10446
10543
  ...settingList(settings2("HEADER_SEARCH_PATHS")),
10447
10544
  ...settingList(settings2("USER_HEADER_SEARCH_PATHS"))
10448
- ].map(absolute),
10449
- frameworkSearchPaths: settingList(settings2("FRAMEWORK_SEARCH_PATHS")).map(
10450
- absolute
10451
- ),
10545
+ ].flatMap((raw) => expandSearchPath(absolute(raw), searchRules)),
10546
+ frameworkSearchPaths: settingList(
10547
+ settings2("FRAMEWORK_SEARCH_PATHS")
10548
+ ).flatMap((raw) => expandSearchPath(absolute(raw), searchRules)),
10452
10549
  flags: [
10453
- ...settings2("CLANG_ENABLE_OBJC_ARC") === "YES" ? ["-fobjc-arc"] : [],
10550
+ settings2("CLANG_ENABLE_OBJC_ARC") === "YES" ? "-fobjc-arc" : "-fno-objc-arc",
10454
10551
  ...settings2("CLANG_ENABLE_OBJC_WEAK") === "YES" ? ["-fobjc-weak"] : [],
10455
10552
  ...settings2("CLANG_ENABLE_MODULES") === "YES" ? ["-fmodules"] : [],
10456
10553
  ...settings2("GCC_C_LANGUAGE_STANDARD") ? [`-std=${settings2("GCC_C_LANGUAGE_STANDARD")}`] : [],
@@ -10821,42 +10918,8 @@ function readAndroidNativeAppIdentity(projectRoot, androidMergedManifest) {
10821
10918
  );
10822
10919
  }
10823
10920
  function readIosNativeAppIdentity(projectRoot, parseInfoPlist, iosTarget) {
10824
- const iosRoot = import_node_path6.default.join(projectRoot, "ios");
10825
- if (!import_node_fs6.default.existsSync(iosRoot)) return null;
10826
- const projects = import_node_fs6.default.readdirSync(iosRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory() && entry.name.endsWith(".xcodeproj"));
10827
- if (projects.length === 0) return null;
10828
- if (projects.length > 1 && !iosTarget) {
10829
- throw new NativeAppTargetSelectionError(
10830
- `native app identity requires a selected Xcode project; set withPeach's iosTarget to an app target in one of: ${projects.map((entry) => entry.name).join(", ")}`
10831
- );
10832
- }
10833
- let project = projects[0];
10834
- if (iosTarget && projects.length > 1) {
10835
- const matches = projects.filter(
10836
- (entry) => listXcodeAppTargets(import_node_path6.default.join(iosRoot, entry.name), {
10837
- requireSources: false
10838
- }).includes(iosTarget)
10839
- );
10840
- if (matches.length === 0) {
10841
- throw new Error(`native app identity has no application target ${iosTarget}`);
10842
- }
10843
- if (matches.length > 1) {
10844
- throw new Error(
10845
- `native app identity target ${iosTarget} is ambiguous across ${matches.map((entry) => entry.name).join(", ")}`
10846
- );
10847
- }
10848
- project = matches[0];
10849
- }
10850
- const xcodeproj = import_node_path6.default.join(iosRoot, project.name);
10851
- const appTargets = listXcodeAppTargets(xcodeproj, { requireSources: false });
10852
- if (!iosTarget && appTargets.length > 1) {
10853
- throw new NativeAppTargetSelectionError(
10854
- `native app identity requires a selected app target; set withPeach's iosTarget to one of: ${appTargets.join(", ")}`
10855
- );
10856
- }
10857
- const app = readXcodeAppTarget(xcodeproj, iosTarget ?? appTargets[0], "Release", {
10858
- requireSources: false
10859
- });
10921
+ const app = readIosAppTarget(projectRoot, iosTarget);
10922
+ if (!app) return null;
10860
10923
  const identity = readNativeAppIdentityFromXcodeTarget(app, parseInfoPlist);
10861
10924
  const projectManifestPath = import_node_path6.default.join(projectRoot, "package.json");
10862
10925
  const projectRequire = (0, import_node_module2.createRequire)(projectManifestPath);
@@ -10909,6 +10972,44 @@ function readIosNativeAppIdentity(projectRoot, parseInfoPlist, iosTarget) {
10909
10972
  }
10910
10973
  return { ...identity, reanimatedStaticFeatureFlags: flags };
10911
10974
  }
10975
+ function readIosAppTarget(projectRoot, iosTarget) {
10976
+ const iosRoot = import_node_path6.default.join(projectRoot, "ios");
10977
+ if (!import_node_fs6.default.existsSync(iosRoot)) return null;
10978
+ const projects = import_node_fs6.default.readdirSync(iosRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory() && entry.name.endsWith(".xcodeproj"));
10979
+ if (projects.length === 0) return null;
10980
+ if (projects.length > 1 && !iosTarget) {
10981
+ throw new NativeAppTargetSelectionError(
10982
+ `native app identity requires a selected Xcode project; set withPeach's iosTarget to an app target in one of: ${projects.map((entry) => entry.name).join(", ")}`
10983
+ );
10984
+ }
10985
+ let project = projects[0];
10986
+ if (iosTarget && projects.length > 1) {
10987
+ const matches = projects.filter(
10988
+ (entry) => listXcodeAppTargets(import_node_path6.default.join(iosRoot, entry.name), {
10989
+ requireSources: false
10990
+ }).includes(iosTarget)
10991
+ );
10992
+ if (matches.length === 0) {
10993
+ throw new Error(`native app identity has no application target ${iosTarget}`);
10994
+ }
10995
+ if (matches.length > 1) {
10996
+ throw new Error(
10997
+ `native app identity target ${iosTarget} is ambiguous across ${matches.map((entry) => entry.name).join(", ")}`
10998
+ );
10999
+ }
11000
+ project = matches[0];
11001
+ }
11002
+ const xcodeproj = import_node_path6.default.join(iosRoot, project.name);
11003
+ const appTargets = listXcodeAppTargets(xcodeproj, { requireSources: false });
11004
+ if (!iosTarget && appTargets.length > 1) {
11005
+ throw new NativeAppTargetSelectionError(
11006
+ `native app identity requires a selected app target; set withPeach's iosTarget to one of: ${appTargets.join(", ")}`
11007
+ );
11008
+ }
11009
+ return readXcodeAppTarget(xcodeproj, iosTarget ?? appTargets[0], "Release", {
11010
+ requireSources: false
11011
+ });
11012
+ }
10912
11013
 
10913
11014
  // src/native-firebase-config.ts
10914
11015
  var import_node_child_process3 = require("node:child_process");
@@ -11366,229 +11467,33 @@ function insertPackageVersionsFooter(source, versions) {
11366
11467
  return insertBundleGlobalFooter(source, FOOTER2, readPackageVersions(versions));
11367
11468
  }
11368
11469
 
11369
- // src/runtime-assets.ts
11370
- var import_fs2 = __toESM(require("fs"), 1);
11371
- var import_path2 = __toESM(require("path"), 1);
11372
- var import_url = require("url");
11373
-
11374
- // ../contrast-runtime-delivery/src/index.ts
11375
- init_process_group();
11376
-
11377
- // ../contrast-runtime-delivery/src/product.ts
11378
- init_version();
11379
-
11380
- // src/home-paths.ts
11381
- var import_node_fs8 = __toESM(require("node:fs"), 1);
11382
- var import_node_os2 = require("node:os");
11383
- var import_node_path8 = __toESM(require("node:path"), 1);
11384
- var PEACH_HOME_ENV = "PEACH_HOME";
11385
- var ACTIVE_RUNTIME_FILE = "active";
11386
- function rnxHomeDir() {
11387
- const override = process.env[PEACH_HOME_ENV];
11388
- if (override && override.length > 0) return import_node_path8.default.resolve(override);
11389
- return import_node_path8.default.join((0, import_node_os2.homedir)(), ".peach");
11390
- }
11391
- function runtimesDir() {
11392
- return import_node_path8.default.join(rnxHomeDir(), "runtimes");
11393
- }
11394
- function runtimeDir(version) {
11395
- return import_node_path8.default.join(runtimesDir(), version);
11396
- }
11397
- function activeRuntimeFile() {
11398
- return import_node_path8.default.join(runtimesDir(), ACTIVE_RUNTIME_FILE);
11399
- }
11400
- function readActiveRuntime() {
11401
- try {
11402
- const value = import_node_fs8.default.readFileSync(activeRuntimeFile(), "utf8").trim();
11403
- return value.length > 0 ? value : null;
11404
- } catch {
11405
- return null;
11406
- }
11407
- }
11408
- var DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
11470
+ // src/metro-plugin.ts
11471
+ init_runtime_assets();
11409
11472
 
11410
- // src/runtime-assets.ts
11411
- var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[peach] no engine runtime installed. run `peach runtime install`";
11412
- var _monorepoRootCache;
11413
- function findMonorepoRoot() {
11414
- if (_monorepoRootCache !== void 0) return _monorepoRootCache;
11415
- let dir = import_path2.default.dirname((0, import_url.fileURLToPath)(__sootsim_import_meta_url));
11416
- for (let i = 0; i < 12 && dir !== import_path2.default.dirname(dir); i++) {
11417
- if (import_fs2.default.existsSync(import_path2.default.join(dir, "packages/peach-engine/package.json")) && import_fs2.default.existsSync(import_path2.default.join(dir, "public/sootsim"))) {
11418
- _monorepoRootCache = dir;
11419
- return dir;
11420
- }
11421
- dir = import_path2.default.dirname(dir);
11422
- }
11423
- _monorepoRootCache = null;
11424
- return null;
11425
- }
11426
- function resolveDevCheckoutRuntimeRoot() {
11427
- if (process.env.PEACH_HOME && readActiveRuntime()) return null;
11428
- const root = findMonorepoRoot();
11429
- if (!root) return null;
11430
- const devBuild = import_path2.default.join(root, "public/sootsim");
11431
- if (import_fs2.default.existsSync(import_path2.default.join(devBuild, "index.html")) && import_fs2.default.existsSync(import_path2.default.join(devBuild, "engine/index.html")) && import_fs2.default.existsSync(import_path2.default.join(devBuild, "engine-tenant/worker.js")) && import_fs2.default.existsSync(import_path2.default.join(devBuild, "engine-tenant/worker.prod.js"))) {
11432
- return devBuild;
11433
- }
11434
- return null;
11435
- }
11436
- var MIME_TYPES = {
11437
- ".js": "application/javascript",
11438
- ".mjs": "application/javascript",
11439
- ".css": "text/css",
11440
- ".html": "text/html",
11441
- ".wasm": "application/wasm",
11442
- ".json": "application/json",
11443
- ".jpg": "image/jpeg",
11444
- ".jpeg": "image/jpeg",
11445
- ".png": "image/png",
11446
- ".svg": "image/svg+xml",
11447
- ".webp": "image/webp",
11448
- ".glb": "model/gltf-binary",
11449
- ".ttf": "font/ttf",
11450
- ".otf": "font/otf",
11451
- ".woff": "font/woff",
11452
- ".woff2": "font/woff2",
11453
- ".mp3": "audio/mpeg",
11454
- ".wav": "audio/wav",
11455
- ".mp4": "video/mp4",
11456
- ".m4v": "video/mp4",
11457
- ".mov": "video/quicktime",
11458
- ".webm": "video/webm"
11459
- };
11460
- var ROOT_RUNTIME_PATHS = [
11461
- "/assets/",
11462
- "/engine/",
11463
- "/engine-tenant/",
11464
- "/photos/",
11465
- "/three-mode/",
11466
- "/fonts/",
11467
- "/icons/",
11468
- "/sounds/",
11469
- "/spike/",
11470
- "/test-wallpaper.jpg",
11471
- "/preview-sw.js",
11472
- "/peach.svg",
11473
- "/bedrock-sqlite.wasm",
11474
- "/bedrock-sqlite.js",
11475
- "/sootsim/"
11476
- ];
11477
- function resolveActiveRuntimeRoot() {
11478
- const devRoot = resolveDevCheckoutRuntimeRoot();
11479
- if (devRoot) return devRoot;
11480
- const active = readActiveRuntime();
11481
- if (!active) return null;
11482
- const dir = runtimeDir(active);
11483
- if (!import_fs2.default.existsSync(import_path2.default.join(dir, "index.html"))) return null;
11484
- return dir;
11485
- }
11486
- var RUNTIME_VERSION_HOSTNAME_SUFFIX = ".runtime.localhost";
11487
- function isRuntimeVersionHostname(hostname) {
11488
- return hostname.toLowerCase().endsWith(RUNTIME_VERSION_HOSTNAME_SUFFIX);
11489
- }
11490
- function runtimeVersionFromHostname(hostname) {
11491
- if (!isRuntimeVersionHostname(hostname)) return null;
11492
- const labels = hostname.slice(0, -RUNTIME_VERSION_HOSTNAME_SUFFIX.length).split(".");
11493
- if (labels.length === 0 || labels.some((label) => !/^[0-9a-f]{1,60}$/i.test(label))) {
11494
- return null;
11495
- }
11496
- const encoded = labels.join("");
11497
- if (encoded.length % 2 !== 0) return null;
11498
- try {
11499
- const version = Buffer.from(encoded, "hex").toString("utf8");
11500
- return isValidRuntimeVersion(version) ? version : null;
11501
- } catch {
11502
- return null;
11503
- }
11504
- }
11505
- function resolveInstalledRuntimeRoot(version) {
11506
- const dir = runtimeDir(version);
11507
- if (!import_fs2.default.existsSync(import_path2.default.join(dir, "index.html"))) return null;
11508
- return dir;
11509
- }
11510
- function resolveRuntimeRootForHostname(hostname) {
11511
- if (!isRuntimeVersionHostname(hostname)) return resolveActiveRuntimeRoot();
11512
- const version = runtimeVersionFromHostname(hostname);
11513
- return version ? resolveInstalledRuntimeRoot(version) : null;
11514
- }
11515
- function resolveRuntimeRootForRequestHost(host) {
11516
- if (!host) return resolveActiveRuntimeRoot();
11517
- try {
11518
- return resolveRuntimeRootForHostname(new URL(`http://${host}`).hostname);
11519
- } catch {
11520
- return null;
11521
- }
11522
- }
11523
- function isRootRuntimeAssetPath(pathname) {
11524
- return ROOT_RUNTIME_PATHS.some((p) => pathname === p || pathname.startsWith(p));
11525
- }
11526
- function resolveRuntimeFilePath(runtimeRoot, pathname) {
11527
- if (!pathname.startsWith("/")) return null;
11528
- if (pathname.includes("\0") || pathname.includes("\\")) return null;
11529
- for (const segment of pathname.split("/")) {
11530
- if (segment === "..") return null;
11531
- }
11532
- const normalized = pathname.startsWith("/sootsim/") ? pathname.slice("/sootsim".length) : pathname;
11533
- const fullPath = import_path2.default.resolve(runtimeRoot, normalized.replace(/^\/+/, ""));
11534
- const rootWithSep = runtimeRoot.endsWith(import_path2.default.sep) ? runtimeRoot : runtimeRoot + import_path2.default.sep;
11535
- if (!fullPath.startsWith(rootWithSep) && fullPath !== runtimeRoot) return null;
11536
- if (!import_fs2.default.existsSync(fullPath) || !import_fs2.default.statSync(fullPath).isFile()) return null;
11537
- return fullPath;
11538
- }
11539
- function serveRuntimeFile(req, res, fullPath) {
11540
- const ext = import_path2.default.extname(fullPath);
11541
- const stat = import_fs2.default.statSync(fullPath);
11542
- const lastModified = stat.mtime.toUTCString();
11543
- res.setHeader("content-type", MIME_TYPES[ext] || "application/octet-stream");
11544
- if (/^canvaskit-graphite-pipelines-[0-9a-f]{8}\.bin$/.test(import_path2.default.basename(fullPath))) {
11545
- res.setHeader("cache-control", "public, max-age=31536000, immutable");
11546
- import_fs2.default.createReadStream(fullPath).pipe(res);
11547
- return;
11548
- }
11549
- res.setHeader("cache-control", "no-cache");
11550
- res.setHeader("last-modified", lastModified);
11551
- if (req?.headers?.["if-modified-since"] === lastModified) {
11552
- res.statusCode = 304;
11553
- res.end();
11554
- return;
11555
- }
11556
- sendFileWithRanges(req, res, fullPath, stat.size, {});
11557
- }
11558
- function sendFileWithRanges(req, res, filePath, total, headers) {
11559
- const head = (req?.method || "GET").toUpperCase() === "HEAD";
11560
- const range = /^bytes=(\d*)-(\d*)$/.exec(req?.headers?.range || "");
11561
- const invalid = range && range[1] && range[2] && Number(range[2]) < Number(range[1]);
11562
- if (range && (range[1] || range[2]) && !invalid) {
11563
- const [, startRaw, endRaw] = range;
11564
- const start = startRaw ? Number(startRaw) : Math.max(0, total - Number(endRaw));
11565
- const end = startRaw && endRaw ? Math.min(Number(endRaw), total - 1) : total - 1;
11566
- if (start > end || start >= total) {
11567
- res.writeHead(416, { ...headers, "Content-Range": `bytes */${total}` });
11568
- res.end();
11569
- return;
11570
- }
11571
- res.writeHead(206, {
11572
- ...headers,
11573
- "Content-Range": `bytes ${start}-${end}/${total}`,
11574
- "Accept-Ranges": "bytes",
11575
- "Content-Length": String(end - start + 1)
11576
- });
11577
- if (head) res.end();
11578
- else streamFile(res, import_fs2.default.createReadStream(filePath, { start, end }));
11579
- return;
11580
- }
11581
- res.writeHead(200, {
11582
- ...headers,
11583
- "Accept-Ranges": "bytes",
11584
- "Content-Length": String(total)
11585
- });
11586
- if (head || total === 0) res.end();
11587
- else streamFile(res, import_fs2.default.createReadStream(filePath, { start: 0, end: total - 1 }));
11473
+ // src/runtimePlatformContract.ts
11474
+ var IOS_ADAPTER = Object.freeze({
11475
+ id: "ios",
11476
+ displayName: "iOS",
11477
+ isIOS: true,
11478
+ isAndroid: false,
11479
+ select: (registry) => registry.ios
11480
+ });
11481
+ var ANDROID_ADAPTER = Object.freeze({
11482
+ id: "android",
11483
+ displayName: "Android",
11484
+ isIOS: false,
11485
+ isAndroid: true,
11486
+ select: (registry) => registry.android
11487
+ });
11488
+ var RUNTIME_PLATFORM_ADAPTERS = Object.freeze({
11489
+ ios: IOS_ADAPTER,
11490
+ android: ANDROID_ADAPTER
11491
+ });
11492
+ function isRuntimePlatform(value) {
11493
+ return value === "ios" || value === "android";
11588
11494
  }
11589
- function streamFile(res, stream) {
11590
- stream.on("error", (error) => res.destroy(error));
11591
- stream.pipe(res);
11495
+ function getRuntimePlatformAdapter(platform) {
11496
+ return RUNTIME_PLATFORM_ADAPTERS[platform];
11592
11497
  }
11593
11498
 
11594
11499
  // src/metro-plugin.ts