peachsim 0.1.1644 → 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 (608) hide show
  1. package/README.md +12 -0
  2. package/cli/app-catalog.ts +1 -1
  3. package/cli/app-fonts.ts +11 -80
  4. package/cli/app-splash.ts +18 -12
  5. package/cli/bridge-flow-runner.ts +11 -7
  6. package/cli/cloud-client.ts +10 -13
  7. package/cli/command-registry.ts +13 -4
  8. package/cli/commands/box.ts +4 -4
  9. package/cli/commands/control.ts +93 -53
  10. package/cli/commands/coverage-parser.ts +67 -0
  11. package/cli/commands/coverage.ts +550 -0
  12. package/cli/commands/debug.ts +9 -18
  13. package/cli/commands/desktop.ts +19 -7
  14. package/cli/commands/device.ts +14 -9
  15. package/cli/commands/guest-host.ts +6 -10
  16. package/cli/commands/inspect/core.ts +81 -17
  17. package/cli/commands/inspect.ts +13 -8
  18. package/cli/commands/kotlin.ts +2 -2
  19. package/cli/commands/maestro-compare.ts +1 -1
  20. package/cli/commands/platform.ts +20 -11
  21. package/cli/commands/preview.ts +16 -18
  22. package/cli/commands/runtime.ts +3 -2
  23. package/cli/commands/screenshot-layers.ts +1 -1
  24. package/cli/commands/screenshot.ts +1 -1
  25. package/cli/commands/serve.ts +5 -1
  26. package/cli/commands/support.ts +4 -4
  27. package/cli/commands/three-mode.ts +22 -15
  28. package/cli/commands/upload.ts +44 -45
  29. package/cli/current-sim.ts +38 -0
  30. package/cli/desktop-companion.ts +36 -8
  31. package/cli/device-option.ts +1 -1
  32. package/cli/drivers/playwright.ts +1 -0
  33. package/cli/drivers/types.ts +4 -0
  34. package/cli/help-core.ts +1 -1
  35. package/cli/internal-child.ts +2 -1
  36. package/cli/main.ts +9 -3
  37. package/cli/outbound-endpoints.ts +11 -3
  38. package/cli/output-redaction.ts +39 -14
  39. package/cli/remote-simulators.ts +4 -1
  40. package/cli/scene-video.ts +5 -2
  41. package/cli/send-to-box.ts +7 -10
  42. package/cli/telemetry.ts +1 -1
  43. package/cli/ws-bridge.ts +8 -1
  44. package/detox/attempt-events.cjs +3 -1
  45. package/detox/attempt-events.d.cts +1 -1
  46. package/detox/expectations.ts +108 -99
  47. package/detox/frame-offset.d.mts +6 -0
  48. package/detox/frame-offset.mjs +35 -0
  49. package/detox/gestures.ts +6 -18
  50. package/detox/index.ts +169 -101
  51. package/detox/jest-preset.cjs +1 -3
  52. package/detox/jest-transform.cjs +4 -0
  53. package/detox/matchers.ts +3 -0
  54. package/detox/motion-change.cjs +46 -114
  55. package/detox/motion-change.d.cts +5 -27
  56. package/dist-lib/agent-daemon-client.cjs +1 -1
  57. package/dist-lib/agent-events.cjs +1 -1
  58. package/dist-lib/attached-projects.cjs +1 -1
  59. package/dist-lib/auth/shared-session.cjs +1 -1
  60. package/dist-lib/backend-origin.cjs +1 -1
  61. package/dist-lib/beta.cjs +1 -1
  62. package/dist-lib/beta.mjs +1 -1
  63. package/dist-lib/bridge-constants.cjs +1 -1
  64. package/dist-lib/bridge-contract-input.cjs +65 -1
  65. package/dist-lib/bridge-contract-input.mjs +63 -1
  66. package/dist-lib/bridge-contract.cjs +19 -1
  67. package/dist-lib/bridge-contract.mjs +17 -1
  68. package/dist-lib/bundle-channel.cjs +38091 -14846
  69. package/dist-lib/capture-contract.cjs +1 -1
  70. package/dist-lib/capture-contract.mjs +1 -1
  71. package/dist-lib/cloud-contract.cjs +1 -1
  72. package/dist-lib/cloud-contract.mjs +1 -1
  73. package/dist-lib/cloud-test-args.cjs +1 -1
  74. package/dist-lib/cloud-test-args.mjs +1 -1
  75. package/dist-lib/cloud.cjs +1 -1
  76. package/dist-lib/cloud.mjs +1 -1
  77. package/dist-lib/config.cjs +1 -1
  78. package/dist-lib/config.mjs +5 -3
  79. package/dist-lib/detox/index.cjs +1244 -4509
  80. package/dist-lib/detox/jest-preset.cjs +1 -3
  81. package/dist-lib/detox/jest-transform.cjs +4 -0
  82. package/dist-lib/dev-bundle-resolution.cjs +28 -24
  83. package/dist-lib/expo-swift-bundle.cjs +35049 -13125
  84. package/dist-lib/expo-swift-metadata.cjs +1 -1
  85. package/dist-lib/expo-swift-metadata.mjs +1 -1
  86. package/dist-lib/home-paths.cjs +1 -1
  87. package/dist-lib/host/bridge-host.cjs +45112 -63143
  88. package/dist-lib/host/fetch-proxy-handler.cjs +3544 -11
  89. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  90. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  91. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  92. package/dist-lib/host/websocket-proxy.cjs +1 -1
  93. package/dist-lib/index.cjs +1909 -2029
  94. package/dist-lib/jump-to-source-babel.cjs +1 -1
  95. package/dist-lib/jump-to-source-native.cjs +1 -1
  96. package/dist-lib/kotlin-host.cjs +2 -2
  97. package/dist-lib/menu.cjs +1 -1
  98. package/dist-lib/menu.mjs +1 -1
  99. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  100. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  101. package/dist-lib/metro-production-bundle.cjs +1 -1
  102. package/dist-lib/metro-production-bundle.mjs +1 -1
  103. package/dist-lib/metro.cjs +380 -522
  104. package/dist-lib/native-app-identity-project.cjs +39 -252
  105. package/dist-lib/native-app-identity-project.mjs +1174 -11
  106. package/dist-lib/native-app-identity.cjs +8 -3
  107. package/dist-lib/native-app-identity.mjs +8 -3
  108. package/dist-lib/native-firebase-metadata.cjs +1 -1
  109. package/dist-lib/native-firebase-metadata.mjs +1 -1
  110. package/dist-lib/plist.cjs +2 -244
  111. package/dist-lib/plist.mjs +1 -1
  112. package/dist-lib/profiles.cjs +1 -1
  113. package/dist-lib/public-brand.cjs +1 -1
  114. package/dist-lib/public-origins-lib-esm.json +290 -0
  115. package/dist-lib/public-origins-lib-static.json +1 -0
  116. package/dist-lib/public-origins-lib.json +1852 -0
  117. package/dist-lib/react-native-host-modules.cjs +1 -1
  118. package/dist-lib/react-native-host-modules.mjs +1 -1
  119. package/dist-lib/scripts/dev-server-scanner.cjs +14 -253
  120. package/dist-lib/sdk.cjs +83 -16
  121. package/dist-lib/sdk.mjs +81 -15
  122. package/dist-lib/skills.cjs +50546 -75098
  123. package/dist-lib/swift-compile.cjs +25897 -1070
  124. package/dist-lib/swift-compile.mjs +25866 -1033
  125. package/dist-lib/swift-package.cjs +79 -1
  126. package/dist-lib/swift-package.mjs +75 -1
  127. package/dist-lib/swift-submit.cjs +1 -1
  128. package/dist-lib/swift-submit.mjs +1 -1
  129. package/dist-lib/swift-toolchain.cjs +1 -1
  130. package/dist-lib/swift.cjs +1 -1
  131. package/dist-lib/vite-swift.cjs +34273 -12349
  132. package/dist-lib/vite.cjs +373 -298
  133. package/dist-lib/worklet-executable.cjs +1 -1
  134. package/dist-lib/worklet-executable.mjs +1 -1
  135. package/dist-types/packages/peach-compat/src/engine-config.d.ts +2 -0
  136. package/dist-types/packages/peach-compat/src/stubs/form-sheet-spring.d.ts +9 -0
  137. package/dist-types/packages/peach-compat/src/stubs/native-evaluation-lease.d.ts +47 -0
  138. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +113 -0
  139. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-gesture-handler.d.ts +154 -0
  140. package/dist-types/packages/peach-compat/src/stubs/screen-transition-math.d.ts +756 -0
  141. package/dist-types/packages/peach-compat/src/stubs/transition-scalar.d.ts +25 -0
  142. package/dist-types/packages/peach-engine/src/billing/plans.d.ts +64 -0
  143. package/dist-types/packages/peach-engine/src/browser-page-target.d.ts +2 -0
  144. package/dist-types/packages/peach-engine/src/bundle-platform-url.d.ts +3 -0
  145. package/dist-types/packages/peach-engine/src/capture/browser-accessibility-host.d.ts +3 -0
  146. package/dist-types/packages/peach-engine/src/capture/browser-composite.d.ts +55 -0
  147. package/dist-types/packages/peach-engine/src/capture/browserAccessibilityContract.d.ts +27 -0
  148. package/dist-types/packages/peach-engine/src/capture/nativeScreenCaptureContract.d.ts +22 -0
  149. package/dist-types/packages/peach-engine/src/cli-companion.d.ts +36 -0
  150. package/dist-types/packages/peach-engine/src/components/native-ui/webview-frame-bridge.d.ts +34 -0
  151. package/dist-types/packages/peach-engine/src/config.d.ts +5 -0
  152. package/dist-types/packages/peach-engine/src/engine/android-stretch-effect.d.ts +57 -0
  153. package/dist-types/packages/peach-engine/src/engine/animated-driven-style.d.ts +47 -0
  154. package/dist-types/packages/peach-engine/src/engine/animated-value.d.ts +5 -0
  155. package/dist-types/packages/peach-engine/src/engine/animated.d.ts +195 -0
  156. package/dist-types/packages/peach-engine/src/engine/animation-clockContract.d.ts +15 -0
  157. package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +148 -0
  158. package/dist-types/packages/peach-engine/src/engine/app-catalog-wire.d.ts +10 -0
  159. package/dist-types/packages/peach-engine/src/engine/app-font-registry.d.ts +87 -0
  160. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph-paint.d.ts +7 -0
  161. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph.d.ts +123 -0
  162. package/dist-types/packages/peach-engine/src/engine/audioContract.d.ts +16 -0
  163. package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +93 -0
  164. package/dist-types/packages/peach-engine/src/engine/canvaskit-renderer.d.ts +216 -0
  165. package/dist-types/packages/peach-engine/src/engine/config-plugin-fonts.d.ts +40 -0
  166. package/dist-types/packages/peach-engine/src/engine/config-plugin-splash.d.ts +25 -0
  167. package/dist-types/packages/peach-engine/src/engine/cull-visibility.d.ts +44 -0
  168. package/dist-types/packages/peach-engine/src/engine/damage-rect.d.ts +19 -0
  169. package/dist-types/packages/peach-engine/src/engine/engine-resource.d.ts +6 -0
  170. package/dist-types/packages/peach-engine/src/engine/expo-manifest.d.ts +5 -0
  171. package/dist-types/packages/peach-engine/src/engine/fiber-debug-metadata.d.ts +30 -0
  172. package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +139 -0
  173. package/dist-types/packages/peach-engine/src/engine/generated/sf-pro-font.d.ts +1 -0
  174. package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +31 -0
  175. package/dist-types/packages/peach-engine/src/engine/host-composite.d.ts +100 -0
  176. package/dist-types/packages/peach-engine/src/engine/hosted-semantics.d.ts +49 -0
  177. package/dist-types/packages/peach-engine/src/engine/image-audit.d.ts +70 -0
  178. package/dist-types/packages/peach-engine/src/engine/image-loader.d.ts +350 -0
  179. package/dist-types/packages/peach-engine/src/engine/inspect-info.d.ts +27 -0
  180. package/dist-types/packages/peach-engine/src/engine/inspect-outline.d.ts +14 -0
  181. package/dist-types/packages/peach-engine/src/engine/inspect-visibility.d.ts +33 -0
  182. package/dist-types/packages/peach-engine/src/engine/ios-fast-scroll.d.ts +16 -0
  183. package/dist-types/packages/peach-engine/src/engine/layout-sab.d.ts +43 -0
  184. package/dist-types/packages/peach-engine/src/engine/liquid-glass-rect.d.ts +23 -0
  185. package/dist-types/packages/peach-engine/src/engine/liquid-glass-shaders.d.ts +9 -0
  186. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +283 -0
  187. package/dist-types/packages/peach-engine/src/engine/live-object-counts.d.ts +6 -0
  188. package/dist-types/packages/peach-engine/src/engine/lottie-runtime.d.ts +32 -0
  189. package/dist-types/packages/peach-engine/src/engine/lottie-types.d.ts +138 -0
  190. package/dist-types/packages/peach-engine/src/engine/memory-counts.d.ts +27 -0
  191. package/dist-types/packages/peach-engine/src/engine/metalDirectContract.d.ts +108 -0
  192. package/dist-types/packages/peach-engine/src/engine/metalShaderContract.d.ts +217 -0
  193. package/dist-types/packages/peach-engine/src/engine/native-animation-driver.d.ts +112 -0
  194. package/dist-types/packages/peach-engine/src/engine/native-animation-graph.d.ts +62 -0
  195. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +133 -0
  196. package/dist-types/packages/peach-engine/src/engine/native-resources.d.ts +26 -0
  197. package/dist-types/packages/peach-engine/src/engine/nativeReanimatedContract.d.ts +25 -0
  198. package/dist-types/packages/peach-engine/src/engine/nativeReplayContract.d.ts +64 -0
  199. package/dist-types/packages/peach-engine/src/engine/node.d.ts +589 -0
  200. package/dist-types/packages/peach-engine/src/engine/paint-boundary-types.d.ts +112 -0
  201. package/dist-types/packages/peach-engine/src/engine/paint-boundary.d.ts +57 -0
  202. package/dist-types/packages/peach-engine/src/engine/portalContract.d.ts +21 -0
  203. package/dist-types/packages/peach-engine/src/engine/portals.d.ts +20 -0
  204. package/dist-types/packages/peach-engine/src/engine/render-damage.d.ts +107 -0
  205. package/dist-types/packages/peach-engine/src/engine/riveContract.d.ts +420 -0
  206. package/dist-types/packages/peach-engine/src/engine/rn-spring.d.ts +51 -0
  207. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +379 -0
  208. package/dist-types/packages/peach-engine/src/engine/scroll-momentum-math.d.ts +152 -0
  209. package/dist-types/packages/peach-engine/src/engine/scroll-pan-contacts.d.ts +10 -0
  210. package/dist-types/packages/peach-engine/src/engine/scroll-platform.d.ts +75 -0
  211. package/dist-types/packages/peach-engine/src/engine/scroll-range.d.ts +14 -0
  212. package/dist-types/packages/peach-engine/src/engine/scroll-velocity.d.ts +14 -0
  213. package/dist-types/packages/peach-engine/src/engine/scroll.d.ts +320 -0
  214. package/dist-types/packages/peach-engine/src/engine/signal.d.ts +7 -0
  215. package/dist-types/packages/peach-engine/src/engine/snapshot-cache-policy.d.ts +6 -0
  216. package/dist-types/packages/peach-engine/src/engine/svg-geometry.d.ts +41 -0
  217. package/dist-types/packages/peach-engine/src/engine/text-attachment-paragraphs.d.ts +10 -0
  218. package/dist-types/packages/peach-engine/src/engine/text-decoration.d.ts +11 -0
  219. package/dist-types/packages/peach-engine/src/engine/text-line-break.d.ts +22 -0
  220. package/dist-types/packages/peach-engine/src/engine/text-paint-receipt.d.ts +98 -0
  221. package/dist-types/packages/peach-engine/src/engine/text-paragraph.d.ts +11 -0
  222. package/dist-types/packages/peach-engine/src/engine/text-paragraphContract.d.ts +34 -0
  223. package/dist-types/packages/peach-engine/src/engine/text-transform.d.ts +1 -0
  224. package/dist-types/packages/peach-engine/src/engine/types.d.ts +657 -0
  225. package/dist-types/packages/peach-engine/src/engine/visible-frame.d.ts +54 -0
  226. package/dist-types/packages/peach-engine/src/engine/webrtcContract.d.ts +74 -0
  227. package/dist-types/packages/peach-engine/src/graphite-stats-fields.d.ts +184 -0
  228. package/dist-types/packages/peach-engine/src/guest-import-meta.d.ts +12 -0
  229. package/dist-types/packages/peach-engine/src/guest-module-overrides.d.ts +7 -0
  230. package/dist-types/packages/peach-engine/src/ios/app-card-types.d.ts +7 -0
  231. package/dist-types/packages/peach-engine/src/ios/apps/canvas-map-data.d.ts +177 -0
  232. package/dist-types/packages/peach-engine/src/ios/aux-home-scene.d.ts +54 -0
  233. package/dist-types/packages/peach-engine/src/ios/chrome-metrics.d.ts +47 -0
  234. package/dist-types/packages/peach-engine/src/ios/constants.d.ts +21 -0
  235. package/dist-types/packages/peach-engine/src/ios/duo-housing.d.ts +37 -0
  236. package/dist-types/packages/peach-engine/src/ios/home/types.d.ts +29 -0
  237. package/dist-types/packages/peach-engine/src/ios/home-app-catalog.d.ts +43 -0
  238. package/dist-types/packages/peach-engine/src/ios/photo-store.d.ts +73 -0
  239. package/dist-types/packages/peach-engine/src/ios/photoLibraryContract.d.ts +166 -0
  240. package/dist-types/packages/peach-engine/src/ios/shell-controller-types.d.ts +21 -0
  241. package/dist-types/packages/peach-engine/src/ios/shell-transition-debug.d.ts +18 -0
  242. package/dist-types/packages/peach-engine/src/metro-asset-path.d.ts +21 -0
  243. package/dist-types/packages/peach-engine/src/metro-fingerprint-registry-client.d.ts +11 -0
  244. package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +38 -0
  245. package/dist-types/packages/peach-engine/src/native-preview-bundle.d.ts +44 -0
  246. package/dist-types/packages/peach-engine/src/observability/types.d.ts +74 -0
  247. package/dist-types/packages/peach-engine/src/peach-warm-manifest.d.ts +32 -0
  248. package/dist-types/packages/peach-engine/src/permissions/app-settings-client.d.ts +25 -0
  249. package/dist-types/packages/peach-engine/src/permissions/system-permission-types.d.ts +20 -0
  250. package/dist-types/packages/peach-engine/src/platform/android-back-panel.d.ts +131 -0
  251. package/dist-types/packages/peach-engine/src/platform/android-gesture-exclusion.d.ts +28 -0
  252. package/dist-types/packages/peach-engine/src/platform/android-predictive-back.d.ts +33 -0
  253. package/dist-types/packages/peach-engine/src/platform/system-bars-state.d.ts +14 -0
  254. package/dist-types/packages/peach-engine/src/playwright-sim-host.d.ts +1 -0
  255. package/dist-types/packages/peach-engine/src/preview/bundle-layout.d.ts +8 -0
  256. package/dist-types/packages/peach-engine/src/preview/bundle-variantContract.d.ts +24 -0
  257. package/dist-types/packages/peach-engine/src/preview/capture-bundle.d.ts +26 -0
  258. package/dist-types/packages/peach-engine/src/preview/compress-node.d.ts +2 -0
  259. package/dist-types/packages/peach-engine/src/preview/compress.d.ts +2 -0
  260. package/dist-types/packages/peach-engine/src/preview/presigned-upload.d.ts +60 -0
  261. package/dist-types/packages/peach-engine/src/preview/trace.d.ts +144 -0
  262. package/dist-types/packages/peach-engine/src/preview/upload-protocol.d.ts +152 -0
  263. package/dist-types/packages/peach-engine/src/profiler/animation-recording-loader.d.ts +1 -0
  264. package/dist-types/packages/peach-engine/src/profiler/profile-trace.d.ts +4 -0
  265. package/dist-types/packages/peach-engine/src/react-bridge.d.ts +3 -0
  266. package/dist-types/packages/peach-engine/src/react-native/AppState.d.ts +45 -0
  267. package/dist-types/packages/peach-engine/src/react-native/Appearance.d.ts +34 -0
  268. package/dist-types/packages/peach-engine/src/react-native/framework-colors-data.d.ts +2 -0
  269. package/dist-types/packages/peach-engine/src/react-native/host-services.d.ts +42 -0
  270. package/dist-types/packages/peach-engine/src/react-native/layout-animation.d.ts +22 -0
  271. package/dist-types/packages/peach-engine/src/react-native/platform-colors.d.ts +17 -0
  272. package/dist-types/packages/peach-engine/src/remote-stream/client-config.d.ts +10 -0
  273. package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +58 -0
  274. package/dist-types/packages/peach-engine/src/remote-stream/scene-recording.d.ts +45 -0
  275. package/dist-types/packages/peach-engine/src/render-worker/animated-drive-output.d.ts +35 -0
  276. package/dist-types/packages/peach-engine/src/render-worker/app-load.d.ts +16 -0
  277. package/dist-types/packages/peach-engine/src/render-worker/aux-surface-types.d.ts +2 -0
  278. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-shared.d.ts +42 -0
  279. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +434 -0
  280. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-worker-init.d.ts +12 -0
  281. package/dist-types/packages/peach-engine/src/render-worker/compositor-backend.d.ts +31 -0
  282. package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +202 -0
  283. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1945 -0
  284. package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/scroll-drag-resample.d.ts +44 -0
  285. package/dist-types/packages/peach-engine/src/render-worker/css-keyframes-drive.d.ts +36 -0
  286. package/dist-types/packages/peach-engine/src/render-worker/edit-menu-geometry.d.ts +8 -0
  287. package/dist-types/packages/peach-engine/src/render-worker/engine-resource-relay.d.ts +21 -0
  288. package/dist-types/packages/peach-engine/src/render-worker/expo-widgetContract.d.ts +16 -0
  289. package/dist-types/packages/peach-engine/src/render-worker/gesture-seam-protocol.d.ts +152 -0
  290. package/dist-types/packages/peach-engine/src/render-worker/graph-linked-value.d.ts +29 -0
  291. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler-contract.d.ts +49 -0
  292. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler.d.ts +12 -0
  293. package/dist-types/packages/peach-engine/src/render-worker/host-service-protocol.d.ts +756 -0
  294. package/dist-types/packages/peach-engine/src/render-worker/image-lifecycle-event.d.ts +22 -0
  295. package/dist-types/packages/peach-engine/src/render-worker/image-pixel-contract.d.ts +48 -0
  296. package/dist-types/packages/peach-engine/src/render-worker/live-frame-mirror.d.ts +34 -0
  297. package/dist-types/packages/peach-engine/src/render-worker/map-command-channel.d.ts +189 -0
  298. package/dist-types/packages/peach-engine/src/render-worker/mapNativeContract.d.ts +101 -0
  299. package/dist-types/packages/peach-engine/src/render-worker/native-dynamic-synchronizable.d.ts +22 -0
  300. package/dist-types/packages/peach-engine/src/render-worker/native-menu-gesture.d.ts +9 -0
  301. package/dist-types/packages/peach-engine/src/render-worker/native-ui-commandContract.d.ts +23 -0
  302. package/dist-types/packages/peach-engine/src/render-worker/native-ui-protocol.d.ts +1087 -0
  303. package/dist-types/packages/peach-engine/src/render-worker/native-widgetContract.d.ts +100 -0
  304. package/dist-types/packages/peach-engine/src/render-worker/nativeAnimMirrorContract.d.ts +174 -0
  305. package/dist-types/packages/peach-engine/src/render-worker/nativeSyncReplyContract.d.ts +11 -0
  306. package/dist-types/packages/peach-engine/src/render-worker/one-native-contentContract.d.ts +54 -0
  307. package/dist-types/packages/peach-engine/src/render-worker/pointerSampleContract.d.ts +14 -0
  308. package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +880 -0
  309. package/dist-types/packages/peach-engine/src/render-worker/reanimated-css-contract.d.ts +63 -0
  310. package/dist-types/packages/peach-engine/src/render-worker/reanimated-readiness.d.ts +29 -0
  311. package/dist-types/packages/peach-engine/src/render-worker/resilient-frame-clock.d.ts +22 -0
  312. package/dist-types/packages/peach-engine/src/render-worker/retained-app-load.d.ts +20 -0
  313. package/dist-types/packages/peach-engine/src/render-worker/screen-edge-swipe-commit-protocol.d.ts +1 -0
  314. package/dist-types/packages/peach-engine/src/render-worker/screen-form-sheet-commit-protocol.d.ts +26 -0
  315. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror-tenant.d.ts +37 -0
  316. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror.d.ts +164 -0
  317. package/dist-types/packages/peach-engine/src/render-worker/shell-event-registry.d.ts +119 -0
  318. package/dist-types/packages/peach-engine/src/render-worker/shell-gesture-regions.d.ts +41 -0
  319. package/dist-types/packages/peach-engine/src/render-worker/shell-protocol.d.ts +603 -0
  320. package/dist-types/packages/peach-engine/src/render-worker/shell-scene-schema.d.ts +101 -0
  321. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-inline-sources.d.ts +13 -0
  322. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +87 -0
  323. package/dist-types/packages/peach-engine/src/render-worker/test-bridge-protocol.d.ts +47 -0
  324. package/dist-types/packages/peach-engine/src/render-worker/text-inputContract.d.ts +93 -0
  325. package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +102 -0
  326. package/dist-types/packages/peach-engine/src/render-worker/webgpu-frame-transaction.d.ts +292 -0
  327. package/dist-types/packages/peach-engine/src/render-worker/webgpu-readback-scheduler.d.ts +107 -0
  328. package/dist-types/packages/peach-engine/src/render-worker/webview-capture-protocol.d.ts +16 -0
  329. package/dist-types/packages/peach-engine/src/render-worker/worker-input-runtime.d.ts +211 -0
  330. package/dist-types/packages/peach-engine/src/render-worker/worker-storage.d.ts +33 -0
  331. package/dist-types/packages/peach-engine/src/render-worker/worklet-runtime.d.ts +987 -0
  332. package/dist-types/packages/peach-engine/src/render-worker/worklet-sab.d.ts +24 -0
  333. package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +84 -0
  334. package/dist-types/packages/peach-engine/src/rolldown-production-fingerprint.d.ts +31 -0
  335. package/dist-types/packages/peach-engine/src/screenshots/timeline-assets.d.ts +10 -0
  336. package/dist-types/packages/peach-engine/src/screenshots/tokens.d.ts +9 -0
  337. package/dist-types/packages/peach-engine/src/settings/devices.d.ts +70 -0
  338. package/dist-types/packages/peach-engine/src/settings/duo-fold-bus.d.ts +87 -0
  339. package/dist-types/packages/peach-engine/src/settings/interface-rotation.d.ts +30 -0
  340. package/dist-types/packages/peach-engine/src/settings/react-native-configuration.d.ts +12 -0
  341. package/dist-types/packages/peach-engine/src/settings/scene-geometryContract.d.ts +40 -0
  342. package/dist-types/packages/peach-engine/src/settings/store.d.ts +37 -0
  343. package/dist-types/packages/peach-engine/src/shell-events.d.ts +203 -0
  344. package/dist-types/packages/peach-engine/src/shell-intent.d.ts +68 -0
  345. package/dist-types/packages/peach-engine/src/sootsim-event.d.ts +35 -0
  346. package/dist-types/packages/peach-engine/src/top-overlay-state.d.ts +5 -0
  347. package/dist-types/packages/peach-engine/src/web-authentication-automation-host.d.ts +2 -0
  348. package/dist-types/packages/peach-engine/src/webAuthenticationContract.d.ts +34 -0
  349. package/dist-types/packages/peach-engine/src/webview-automation-host.d.ts +180 -0
  350. package/dist-types/packages/peach-engine/src/wireframe-mode.d.ts +16 -0
  351. package/dist-types/packages/peach-globals/src/frameBreakdownContract.d.ts +16 -0
  352. package/dist-types/packages/peach-globals/src/index.d.ts +3311 -0
  353. package/dist-types/packages/peach-globals/src/nativeSurfaceContract.d.ts +76 -0
  354. package/dist-types/packages/peach-globals/src/pointerSourceEventContract.d.ts +8 -0
  355. package/dist-types/packages/peach-globals/src/profileTrace.d.ts +11 -0
  356. package/dist-types/packages/peach-globals/src/profilerContract.d.ts +223 -0
  357. package/dist-types/packages/peach-kit/src/capabilities.d.ts +721 -0
  358. package/dist-types/packages/peach-kit/src/internal.d.ts +4 -0
  359. package/dist-types/packages/peach-kit/src/materials/types.d.ts +27 -0
  360. package/dist-types/packages/peach-kit/src/materials/uikit-blur-material.d.ts +14 -0
  361. package/dist-types/packages/peach-kit/src/navigation-types.d.ts +11 -0
  362. package/dist-types/packages/peach-kit/src/react-bridge.d.ts +53 -0
  363. package/dist-types/packages/peach-kit/src/runtime.d.ts +26 -0
  364. package/dist-types/packages/peach-kit/src/ui/hosting-safe-area.d.ts +24 -0
  365. package/dist-types/packages/peach-kit/src/ui/popover-placement.d.ts +53 -0
  366. package/dist-types/packages/peach-kit/src/ui/presentationContract.d.ts +17 -0
  367. package/kotlin/ComposeSources/PeachComposeHost.kt +1 -1
  368. package/kotlin/JniSources/com/facebook/jni/HybridData.kt +0 -2
  369. package/kotlin/JniSources/dev/peach/jni/NativeBindings.kt +0 -2
  370. package/kotlin/JniTransportSources/dev/peach/jni/integration/JniTransport.kt +0 -2
  371. package/kotlin/README.md +6 -0
  372. package/package.json +22 -2
  373. package/runtime-companion.json +1 -0
  374. package/skills/contrast/SKILL.md +1 -0
  375. package/src/assetCatalogContract.ts +21 -0
  376. package/src/bridge-contract-input.ts +84 -0
  377. package/src/bridge-contract.ts +35 -3
  378. package/src/browser-launch-policy.ts +1 -0
  379. package/src/bundle-channel.mjs +4 -2
  380. package/src/cli-runtime.ts +55 -0
  381. package/src/crash-fingerprint.ts +26 -0
  382. package/src/dev-bundle-resolution.ts +50 -23
  383. package/src/device-catalog.ts +1159 -0
  384. package/src/host/bridge-host.ts +3 -26
  385. package/src/host/browser-pointer.ts +71 -0
  386. package/src/host/dev-server-package-versions.ts +23 -0
  387. package/src/host/fetch-proxy-handler.ts +17 -4
  388. package/src/installed-package-versions.ts +142 -38
  389. package/src/kotlin-host.ts +1 -1
  390. package/src/metro-plugin.ts +4 -4
  391. package/src/metro-project-root.ts +68 -0
  392. package/src/nitro-adapter.lock.json +26 -0
  393. package/src/nitro-adapter.ts +103 -0
  394. package/src/nitro-bundle.ts +24 -10
  395. package/src/nitro-compile.ts +33 -51
  396. package/src/nitro-source.ts +177 -96
  397. package/src/nitroAdapterContract.ts +217 -0
  398. package/src/nitroContract.ts +24 -11
  399. package/src/process-group.ts +41 -34
  400. package/src/react-bridge-importers.ts +28 -0
  401. package/src/reactNativeConfigurationContract.ts +36 -0
  402. package/src/runtime-assets.ts +7 -2
  403. package/src/runtime-delivery.ts +2 -0
  404. package/src/runtimePlatformContract.ts +70 -0
  405. package/src/screenshots/frame-compose.ts +42 -43
  406. package/src/screenshots/org-deck.ts +9 -4
  407. package/src/screenshots/preset-names.ts +29 -0
  408. package/src/screenshots/registry.ts +5 -5
  409. package/src/screenshots/schema.ts +1 -1
  410. package/src/screenshots/screenshotContract.ts +971 -0
  411. package/src/settings-flags.ts +107 -0
  412. package/src/settingsContract.ts +609 -0
  413. package/src/storageSnapshotContract.ts +344 -0
  414. package/src/stub-pattern-matcher.ts +550 -0
  415. package/src/swift-compile.ts +908 -40
  416. package/src/swift-compiler-digest.ts +13 -1
  417. package/src/swift-distribution.lock.json +49 -22
  418. package/src/swift-host.ts +167 -52
  419. package/src/swift-objc-compile.ts +54 -24
  420. package/src/swift-objc-export.ts +532 -0
  421. package/src/swift-objc-import.ts +769 -0
  422. package/src/swift-objc-metadata.ts +285 -10
  423. package/src/swift-objc-sdk.ts +13970 -158
  424. package/src/swift-objc-standin.ts +137 -1
  425. package/src/swift-package.ts +94 -0
  426. package/src/swift-packages.ts +5 -5
  427. package/src/swift-submit.ts +6 -0
  428. package/src/swiftContract.ts +99 -0
  429. package/src/target-matcher.ts +6 -1
  430. package/src/vite-plugin.ts +14 -40
  431. package/src/worker-system-chunks.ts +1 -1
  432. package/src/workerChunkContract.ts +5 -0
  433. package/src/worklets-babel.ts +24 -5
  434. package/src/xcode-project.ts +36 -7
  435. package/src/xcode-target-members.ts +10 -3
  436. package/cli/drivers/playwright-sim-host.ts +0 -825
  437. package/kotlin/fixtures/counter/Counter.d.kt.ts +0 -17
  438. package/kotlin/fixtures/counter/Counter.kt +0 -51
  439. package/kotlin/fixtures/counter/CounterApp.native.tsx +0 -61
  440. package/kotlin/fixtures/counter/CounterApp.tsx +0 -3
  441. package/kotlin/fixtures/counter/CounterScreen.d.kt.ts +0 -8
  442. package/kotlin/fixtures/counter/CounterScreen.kt +0 -56
  443. package/kotlin/fixtures/counter/app/_layout.tsx +0 -4
  444. package/kotlin/fixtures/counter/app/index+spa.tsx +0 -1
  445. package/kotlin/fixtures/counter/app/routes.d.ts +0 -18
  446. package/kotlin/fixtures/counter/package.json +0 -20
  447. package/kotlin/fixtures/counter/tsconfig.json +0 -19
  448. package/kotlin/fixtures/counter/vite.config.ts +0 -20
  449. package/kotlin/fixtures/headless-counter/Headless.kt +0 -234
  450. package/kotlin/fixtures/import-animation/Animation.d.kt.ts +0 -7
  451. package/kotlin/fixtures/import-animation/Animation.kt +0 -80
  452. package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +0 -13
  453. package/kotlin/fixtures/import-animation/README.md +0 -24
  454. package/kotlin/fixtures/import-animation/app/_layout.tsx +0 -4
  455. package/kotlin/fixtures/import-animation/app/index+spa.tsx +0 -1
  456. package/kotlin/fixtures/import-animation/app/routes.d.ts +0 -18
  457. package/kotlin/fixtures/import-animation/package.json +0 -23
  458. package/kotlin/fixtures/import-animation/tsconfig.json +0 -20
  459. package/kotlin/fixtures/import-animation/vite.config.ts +0 -20
  460. package/kotlin/fixtures/import-drawing/Drawing.d.kt.ts +0 -7
  461. package/kotlin/fixtures/import-drawing/Drawing.kt +0 -101
  462. package/kotlin/fixtures/import-drawing/ImportDrawing.native.tsx +0 -18
  463. package/kotlin/fixtures/import-drawing/README.md +0 -34
  464. package/kotlin/fixtures/import-drawing/app/_layout.tsx +0 -4
  465. package/kotlin/fixtures/import-drawing/app/index+spa.tsx +0 -1
  466. package/kotlin/fixtures/import-drawing/package.json +0 -23
  467. package/kotlin/fixtures/import-drawing/tsconfig.json +0 -20
  468. package/kotlin/fixtures/import-drawing/vite.config.ts +0 -20
  469. package/kotlin/fixtures/import-editor/Editor.d.kt.ts +0 -7
  470. package/kotlin/fixtures/import-editor/Editor.kt +0 -59
  471. package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +0 -23
  472. package/kotlin/fixtures/import-editor/README.md +0 -27
  473. package/kotlin/fixtures/import-editor/app/_layout.tsx +0 -4
  474. package/kotlin/fixtures/import-editor/app/index+spa.tsx +0 -1
  475. package/kotlin/fixtures/import-editor/package.json +0 -23
  476. package/kotlin/fixtures/import-editor/tsconfig.json +0 -20
  477. package/kotlin/fixtures/import-editor/vite.config.ts +0 -20
  478. package/kotlin/fixtures/import-effects/Effects.d.kt.ts +0 -7
  479. package/kotlin/fixtures/import-effects/Effects.kt +0 -87
  480. package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +0 -13
  481. package/kotlin/fixtures/import-effects/README.md +0 -19
  482. package/kotlin/fixtures/import-effects/app/_layout.tsx +0 -4
  483. package/kotlin/fixtures/import-effects/app/index+spa.tsx +0 -1
  484. package/kotlin/fixtures/import-effects/package.json +0 -23
  485. package/kotlin/fixtures/import-effects/tsconfig.json +0 -20
  486. package/kotlin/fixtures/import-effects/vite.config.ts +0 -20
  487. package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +0 -13
  488. package/kotlin/fixtures/import-layout/Layout.d.kt.ts +0 -7
  489. package/kotlin/fixtures/import-layout/Layout.kt +0 -72
  490. package/kotlin/fixtures/import-layout/README.md +0 -24
  491. package/kotlin/fixtures/import-layout/app/_layout.tsx +0 -4
  492. package/kotlin/fixtures/import-layout/app/index+spa.tsx +0 -1
  493. package/kotlin/fixtures/import-layout/package.json +0 -23
  494. package/kotlin/fixtures/import-layout/tsconfig.json +0 -20
  495. package/kotlin/fixtures/import-layout/vite.config.ts +0 -20
  496. package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +0 -18
  497. package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +0 -7
  498. package/kotlin/fixtures/import-navigation/Navigation.kt +0 -104
  499. package/kotlin/fixtures/import-navigation/README.md +0 -31
  500. package/kotlin/fixtures/import-navigation/app/_layout.tsx +0 -4
  501. package/kotlin/fixtures/import-navigation/app/index+spa.tsx +0 -1
  502. package/kotlin/fixtures/import-navigation/package.json +0 -23
  503. package/kotlin/fixtures/import-navigation/tsconfig.json +0 -20
  504. package/kotlin/fixtures/import-navigation/vite.config.ts +0 -20
  505. package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +0 -29
  506. package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +0 -7
  507. package/kotlin/fixtures/import-overlays/Overlays.kt +0 -93
  508. package/kotlin/fixtures/import-overlays/README.md +0 -34
  509. package/kotlin/fixtures/import-overlays/app/_layout.tsx +0 -4
  510. package/kotlin/fixtures/import-overlays/app/index+spa.tsx +0 -1
  511. package/kotlin/fixtures/import-overlays/package.json +0 -23
  512. package/kotlin/fixtures/import-overlays/tsconfig.json +0 -20
  513. package/kotlin/fixtures/import-overlays/vite.config.ts +0 -20
  514. package/kotlin/fixtures/import-resources/ImportResources.native.tsx +0 -18
  515. package/kotlin/fixtures/import-resources/README.md +0 -26
  516. package/kotlin/fixtures/import-resources/Resources.d.kt.ts +0 -6
  517. package/kotlin/fixtures/import-resources/Resources.kt +0 -72
  518. package/kotlin/fixtures/import-resources/app/_layout.tsx +0 -4
  519. package/kotlin/fixtures/import-resources/app/index+spa.tsx +0 -1
  520. package/kotlin/fixtures/import-resources/package.json +0 -23
  521. package/kotlin/fixtures/import-resources/tsconfig.json +0 -20
  522. package/kotlin/fixtures/import-resources/vite.config.ts +0 -20
  523. package/kotlin/fixtures/import-scroll/ImportNested.native.tsx +0 -10
  524. package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +0 -13
  525. package/kotlin/fixtures/import-scroll/Nested.d.kt.ts +0 -4
  526. package/kotlin/fixtures/import-scroll/Nested.kt +0 -64
  527. package/kotlin/fixtures/import-scroll/README.md +0 -38
  528. package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +0 -7
  529. package/kotlin/fixtures/import-scroll/Scroll.kt +0 -91
  530. package/kotlin/fixtures/import-scroll/app/_layout.tsx +0 -4
  531. package/kotlin/fixtures/import-scroll/app/index+spa.tsx +0 -1
  532. package/kotlin/fixtures/import-scroll/app/nested+spa.tsx +0 -1
  533. package/kotlin/fixtures/import-scroll/package.json +0 -23
  534. package/kotlin/fixtures/import-scroll/tsconfig.json +0 -20
  535. package/kotlin/fixtures/import-scroll/vite.config.ts +0 -20
  536. package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +0 -44
  537. package/kotlin/fixtures/import-selection/README.md +0 -32
  538. package/kotlin/fixtures/import-selection/Selection.d.kt.ts +0 -8
  539. package/kotlin/fixtures/import-selection/Selection.kt +0 -78
  540. package/kotlin/fixtures/import-selection/app/_layout.tsx +0 -4
  541. package/kotlin/fixtures/import-selection/app/index+spa.tsx +0 -1
  542. package/kotlin/fixtures/import-selection/package.json +0 -23
  543. package/kotlin/fixtures/import-selection/tsconfig.json +0 -20
  544. package/kotlin/fixtures/import-selection/vite.config.ts +0 -20
  545. package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +0 -13
  546. package/kotlin/fixtures/import-surfaces/README.md +0 -22
  547. package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +0 -7
  548. package/kotlin/fixtures/import-surfaces/Surfaces.kt +0 -64
  549. package/kotlin/fixtures/import-surfaces/app/_layout.tsx +0 -4
  550. package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +0 -1
  551. package/kotlin/fixtures/import-surfaces/package.json +0 -23
  552. package/kotlin/fixtures/import-surfaces/tsconfig.json +0 -20
  553. package/kotlin/fixtures/import-surfaces/vite.config.ts +0 -20
  554. package/kotlin/fixtures/import-values/ImportValues.native.tsx +0 -61
  555. package/kotlin/fixtures/import-values/README.md +0 -28
  556. package/kotlin/fixtures/import-values/Values.d.kt.ts +0 -15
  557. package/kotlin/fixtures/import-values/Values.kt +0 -84
  558. package/kotlin/fixtures/import-values/app/_layout.tsx +0 -4
  559. package/kotlin/fixtures/import-values/app/index+spa.tsx +0 -1
  560. package/kotlin/fixtures/import-values/package.json +0 -23
  561. package/kotlin/fixtures/import-values/tsconfig.json +0 -20
  562. package/kotlin/fixtures/import-values/vite.config.ts +0 -20
  563. package/kotlin/fixtures/kotlin-app/app/build.gradle.kts +0 -30
  564. package/kotlin/fixtures/kotlin-app/app/src/main/AndroidManifest.xml +0 -13
  565. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/MainActivity.kt +0 -60
  566. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/ProbeApplication.kt +0 -18
  567. package/kotlin/fixtures/kotlin-app/build.gradle.kts +0 -5
  568. package/kotlin/fixtures/kotlin-app/gradle.properties +0 -4
  569. package/kotlin/fixtures/kotlin-app/settings.gradle.kts +0 -4
  570. package/kotlin/fixtures/kotlin-app-variants/Anim.kt +0 -62
  571. package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +0 -38
  572. package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +0 -36
  573. package/kotlin/fixtures/kotlin-app-variants/Bitmaps.kt +0 -50
  574. package/kotlin/fixtures/kotlin-app-variants/Browse.kt +0 -73
  575. package/kotlin/fixtures/kotlin-app-variants/Colors.kt +0 -41
  576. package/kotlin/fixtures/kotlin-app-variants/Controls.kt +0 -62
  577. package/kotlin/fixtures/kotlin-app-variants/Drag.kt +0 -56
  578. package/kotlin/fixtures/kotlin-app-variants/Draw.kt +0 -74
  579. package/kotlin/fixtures/kotlin-app-variants/Drawables.kt +0 -53
  580. package/kotlin/fixtures/kotlin-app-variants/Focus.kt +0 -62
  581. package/kotlin/fixtures/kotlin-app-variants/Form.kt +0 -47
  582. package/kotlin/fixtures/kotlin-app-variants/Icons.kt +0 -59
  583. package/kotlin/fixtures/kotlin-app-variants/Ime.kt +0 -53
  584. package/kotlin/fixtures/kotlin-app-variants/Lists.kt +0 -57
  585. package/kotlin/fixtures/kotlin-app-variants/Nav.kt +0 -47
  586. package/kotlin/fixtures/kotlin-app-variants/Note.kt +0 -40
  587. package/kotlin/fixtures/kotlin-app-variants/Overlays.kt +0 -56
  588. package/kotlin/fixtures/kotlin-app-variants/Pan.kt +0 -38
  589. package/kotlin/fixtures/kotlin-app-variants/Pickers.kt +0 -44
  590. package/kotlin/fixtures/kotlin-app-variants/Press.kt +0 -43
  591. package/kotlin/fixtures/kotlin-app-variants/Scroll.kt +0 -63
  592. package/kotlin/fixtures/kotlin-app-variants/Sheet.kt +0 -43
  593. package/kotlin/fixtures/kotlin-app-variants/Strings.kt +0 -49
  594. package/kotlin/fixtures/kotlin-app-variants/Tabs.kt +0 -47
  595. package/kotlin/fixtures/kotlin-app-variants/TextWidth.kt +0 -45
  596. package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +0 -50
  597. package/kotlin/fixtures/kotlin-app-variants/Transition.kt +0 -69
  598. package/kotlin/fixtures/kotlin-app-variants/ViewConfig.kt +0 -22
  599. package/kotlin/fixtures/kotlin-app-variants/Widgets.kt +0 -67
  600. package/kotlin/fixtures/runtime-state/RuntimeState.kt +0 -200
  601. package/kotlin/fork/README.md +0 -97
  602. package/kotlin/fork/build.sh +0 -176
  603. package/kotlin/fork/compose-worker-globals.patch +0 -1247
  604. package/kotlin/fork/fork.json +0 -46
  605. package/kotlin/fork/publish.ts +0 -99
  606. package/kotlin/fork/skia-android-shaping.patch +0 -189
  607. package/kotlin/fork/skiko-local.init.gradle +0 -10
  608. package/kotlin/fork/skiko-worker-clock.patch +0 -122
@@ -32,6 +32,8 @@ export interface ObjcSurface {
32
32
 
33
33
  export interface ObjcView {
34
34
  graphs: SymbolGraph[]
35
+ /** present for original implementations, read without repairing declarations. */
36
+ clangAST?: unknown
35
37
  /** precise enum case and option ids → their header values. */
36
38
  values: Map<string, string>
37
39
  /** the modules the headers import besides their own. */
@@ -206,6 +208,7 @@ export function objcView(
206
208
  stdlib: string,
207
209
  cacheDir: string,
208
210
  work: string,
211
+ original?: { flags: readonly string[]; target: string },
209
212
  ): ObjcView {
210
213
  if (!fs.existsSync(stdlib))
211
214
  throw new Error(
@@ -220,6 +223,7 @@ export function objcView(
220
223
  const headersDir = framework
221
224
  ? path.join(frameworks, `${surface.module}.framework`, 'Headers')
222
225
  : path.join(include, surface.module)
226
+ fs.mkdirSync(headersDir, { recursive: true })
223
227
  const originals = new Map(
224
228
  headerFiles(surface.headers).map((file) => [
225
229
  path.join(headersDir, file),
@@ -373,8 +377,9 @@ export function objcView(
373
377
  '-module-name',
374
378
  surface.module,
375
379
  '-target',
376
- IOS_SDK_TARGET,
380
+ original?.target ?? IOS_SDK_TARGET,
377
381
  ...search,
382
+ ...(original?.flags.flatMap((flag) => ['-Xcc', flag]) ?? []),
378
383
  '-module-cache-path',
379
384
  path.join(cacheDir, 'ios-module-cache'),
380
385
  '-minimum-access-level',
@@ -391,6 +396,10 @@ export function objcView(
391
396
  ...run.stderr.matchAll(/^(?:(.+?):(\d+):(\d+): )?(?:fatal )?error: (.*)$/gm),
392
397
  ]
393
398
  if (errors.length === 0 && run.status === 0) break
399
+ if (original)
400
+ throw new Error(
401
+ `original Objective-C declarations do not import as Swift: ${run.stderr.trim() || run.stdout.trim()}`,
402
+ )
394
403
  let progress = false
395
404
  const learn = (name: string, kind: 'class' | 'protocol' | 'struct' | 'macro') => {
396
405
  if (missing.has(name)) return
@@ -452,11 +461,138 @@ export function objcView(
452
461
  imports.delete(surface.module)
453
462
  return {
454
463
  graphs,
464
+ ...(original
465
+ ? {
466
+ clangAST: objcDeclarationAST(
467
+ surface,
468
+ framework,
469
+ toolchainBin,
470
+ search,
471
+ work,
472
+ original.flags,
473
+ original.target,
474
+ ),
475
+ }
476
+ : {}),
455
477
  values: enumValues(graphs, surface, framework, toolchainBin, search, work),
456
478
  imports: [...imports].sort(),
457
479
  }
458
480
  }
459
481
 
482
+ function objcDeclarationAST(
483
+ surface: ObjcSurface,
484
+ framework: boolean,
485
+ toolchainBin: string,
486
+ search: string[],
487
+ work: string,
488
+ originalFlags: readonly string[],
489
+ target: string,
490
+ ): unknown {
491
+ const roots = [
492
+ ...fs
493
+ .readFileSync(surface.modulemap, 'utf8')
494
+ .matchAll(/(?:umbrella\s+)?header\s+"([^"]+)"/g),
495
+ ].map((match) => match[1]!)
496
+ const probe = path.join(work, 'declarations.m')
497
+ fs.writeFileSync(
498
+ probe,
499
+ roots
500
+ .map((file) =>
501
+ framework ? `#import <${surface.module}/${file}>\n` : `#import "${file}"\n`,
502
+ )
503
+ .join(''),
504
+ )
505
+ const flags: string[] = []
506
+ for (let index = 0; index < search.length; index += 2) {
507
+ const [flag, value] = [search[index]!, search[index + 1]!]
508
+ // the swift resource directory contains swift overlays, not clang builtins.
509
+ if (flag === '-resource-dir') continue
510
+ flags.push(flag === '-sdk' ? '-isysroot' : flag, value)
511
+ }
512
+ const args = [
513
+ '-x',
514
+ 'objective-c',
515
+ '-fobjc-arc',
516
+ '-fblocks',
517
+ '-fsyntax-only',
518
+ '-target',
519
+ target,
520
+ ...flags,
521
+ ...originalFlags,
522
+ `-fmodule-name=${surface.module}`,
523
+ '-Xclang',
524
+ '-ast-dump-all=json',
525
+ ]
526
+ const dump = (filter?: string) => {
527
+ const run = spawnSync(
528
+ path.join(toolchainBin, 'clang'),
529
+ [
530
+ ...args,
531
+ ...(filter ? ['-Xclang', '-ast-dump-filter', '-Xclang', filter] : []),
532
+ probe,
533
+ ],
534
+ { encoding: 'utf8', env: swiftEnvironment(), maxBuffer: 256 * 1024 * 1024 },
535
+ )
536
+ if (run.error) throw run.error
537
+ if (run.status !== 0)
538
+ throw new Error(`original Objective-C declaration AST failed: ${run.stderr.trim()}`)
539
+ return run.stdout
540
+ }
541
+ const ast: unknown = JSON.parse(dump())
542
+ const children: unknown =
543
+ ast && typeof ast === 'object' ? Reflect.get(ast, 'inner') : undefined
544
+ if (!Array.isArray(children))
545
+ throw new Error('original Objective-C declaration AST has no translation unit')
546
+ const inner: unknown[] = children
547
+ // clang lazily omits module typedefs from a translation unit dump, even with
548
+ // ast-dump-all. named lookup deserializes the original typedef declarations.
549
+ // C function result types lack the desugared type that parameters carry.
550
+ const aliases = new Set<string>()
551
+ const declared = new Set<string>()
552
+ for (const node of inner) {
553
+ if (!node || typeof node !== 'object') continue
554
+ if (Reflect.get(node, 'kind') === 'TypedefDecl')
555
+ declared.add(String(Reflect.get(node, 'name')))
556
+ if (Reflect.get(node, 'kind') !== 'FunctionDecl') continue
557
+ const type: unknown = Reflect.get(node, 'type')
558
+ const written: unknown =
559
+ type && typeof type === 'object' ? Reflect.get(type, 'qualType') : undefined
560
+ const name =
561
+ typeof written === 'string' ? /^([A-Za-z_]\w*)\s*\(/.exec(written)?.[1] : undefined
562
+ if (name) aliases.add(name)
563
+ }
564
+ for (const alias of aliases) {
565
+ if (
566
+ declared.has(alias) ||
567
+ [
568
+ 'void',
569
+ 'bool',
570
+ '_Bool',
571
+ 'char',
572
+ 'short',
573
+ 'int',
574
+ 'long',
575
+ 'float',
576
+ 'double',
577
+ ].includes(alias)
578
+ )
579
+ continue
580
+ const output = dump(alias)
581
+ // filtered clang output is a stream of JSON declaration objects.
582
+ for (const object of output.split(/\n(?=\{\n)/).filter((text) => text.trim())) {
583
+ const declaration: unknown = JSON.parse(object)
584
+ if (
585
+ declaration &&
586
+ typeof declaration === 'object' &&
587
+ Reflect.get(declaration, 'kind') === 'TypedefDecl' &&
588
+ Reflect.get(declaration, 'name') === alias
589
+ )
590
+ inner.push(declaration)
591
+ }
592
+ }
593
+ return ast
594
+ }
595
+
460
596
  // the header values of the graphs' objective-c enum cases and option members
461
597
  // (c:@E@Enum@Constant, c:@EA@Enum@Constant), from clang's AST of the same
462
598
  // headers: an enumerator's value is its initializer's, or one past the one
@@ -174,6 +174,7 @@ export const SWIFT_NATIVE_SOURCE_EXTENSIONS = [
174
174
  '.hh',
175
175
  '.hpp',
176
176
  '.hxx',
177
+ '.pch',
177
178
  '.inc',
178
179
  '.inl',
179
180
  '.modulemap',
@@ -325,6 +326,99 @@ export function swiftResourceBundles(
325
326
  }))
326
327
  }
327
328
 
329
+ /** the generated accessor files of a native Objective-C resource target,
330
+ * written beside its sources: the header is forced into each unit of the
331
+ * target and the body is one more unit of it. */
332
+ export const OBJC_RESOURCE_ACCESSOR_HEADER = 'resource_bundle_accessor.h'
333
+ export const OBJC_RESOURCE_ACCESSOR_BODY = 'resource_bundle_accessor.m'
334
+
335
+ /** the bundle name SwiftPM derives symbols from, for a native Objective-C
336
+ * target. a resource target needs the assignment of its own source path, a
337
+ * target without resources cannot use the macro, and either mismatch is
338
+ * refused here because clang accepts another target's header. */
339
+ export function swiftObjCResourceBundleName(args: {
340
+ target: string
341
+ path: string
342
+ resources: boolean
343
+ usesBundleMacro: boolean
344
+ bundles: readonly SwiftResourceBundle[] | undefined
345
+ }): string | undefined {
346
+ const { target, resources, usesBundleMacro } = args
347
+ if (!resources) {
348
+ if (usesBundleMacro)
349
+ throw new Error(
350
+ `objective-c target ${target} uses SWIFTPM_MODULE_BUNDLE but declares no resources`,
351
+ )
352
+ return undefined
353
+ }
354
+ const bundle = args.bundles?.find((candidate) => candidate.target === target)
355
+ if (
356
+ !bundle ||
357
+ bundle.sourcePath !== args.path ||
358
+ !bundle.path.endsWith(`_${target}.bundle`)
359
+ )
360
+ throw new Error(`swift resource target ${target} has no matching bundle assignment`)
361
+ return bundle.path.slice(0, -'.bundle'.length)
362
+ }
363
+
364
+ /** SwiftPM's Objective-C resource accessor for one bundle name. */
365
+ export function swiftObjCResourceAccessor(bundleName: string): {
366
+ header: string
367
+ body: string
368
+ } {
369
+ if (!/^[A-Za-z_]\w*$/.test(bundleName))
370
+ throw new Error(`Objective-C resource bundle symbol is unqualified: ${bundleName}`)
371
+ const symbol = `${bundleName}_SWIFTPM_MODULE_BUNDLE`
372
+ const finder = `${bundleName}_SWIFTPM_MODULE_BUNDLER_FINDER`
373
+ return {
374
+ header: [
375
+ '#import <Foundation/Foundation.h>',
376
+ '',
377
+ '__BEGIN_DECLS',
378
+ '',
379
+ `NSBundle* ${symbol}(void);`,
380
+ '',
381
+ `#define SWIFTPM_MODULE_BUNDLE ${symbol}()`,
382
+ '',
383
+ '__END_DECLS',
384
+ ].join('\n'),
385
+ body: [
386
+ '#import <Foundation/Foundation.h>',
387
+ '',
388
+ 'NS_ASSUME_NONNULL_BEGIN',
389
+ '',
390
+ `@interface ${finder} : NSObject`,
391
+ '@end',
392
+ '',
393
+ `@implementation ${finder}`,
394
+ '@end',
395
+ '',
396
+ `NSBundle* ${symbol}() {`,
397
+ ` NSString *bundleName = @"${bundleName}";`,
398
+ '',
399
+ ' NSArray<NSURL*> *candidates = @[',
400
+ ' NSBundle.mainBundle.resourceURL,',
401
+ ` [NSBundle bundleForClass:[${finder} class]].resourceURL,`,
402
+ ' NSBundle.mainBundle.bundleURL',
403
+ ' ];',
404
+ '',
405
+ ' for (NSURL* candidate in candidates) {',
406
+ ' NSURL *bundlePath = [candidate URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.bundle", bundleName]];',
407
+ '',
408
+ ' NSBundle *bundle = [NSBundle bundleWithURL:bundlePath];',
409
+ ' if (bundle != nil) {',
410
+ ' return bundle;',
411
+ ' }',
412
+ ' }',
413
+ '',
414
+ ' @throw [[NSException alloc] initWithName:@"SwiftPMResourcesAccessor" reason:[NSString stringWithFormat:@"unable to find bundle named %@", bundleName] userInfo:nil];',
415
+ '}',
416
+ '',
417
+ 'NS_ASSUME_NONNULL_END',
418
+ ].join('\n'),
419
+ }
420
+ }
421
+
328
422
  /** the one resource target owning a canonical compile-input file. */
329
423
  export function swiftResourceBundleForFile(
330
424
  bundles: readonly SwiftResourceBundle[],
@@ -3,8 +3,8 @@
3
3
  // (swift-package-manifest.ts) to the source targets that build it; remote
4
4
  // packages are fetched at the revision the app's Package.resolved pins, into
5
5
  // PEACH_HOME/cache/swift-packages, isolated by the app root. swift and c-family source
6
- // targets use the common compiler backend. objective-c, assembly and binary
7
- // targets the host built no stand-in for stay missing with their reason;
6
+ // targets, including objective-c, use the common compiler backend. assembly
7
+ // and binary targets the host built no stand-in for stay missing with their reason;
8
8
  // the targets beside them still compile.
9
9
 
10
10
  import { execFileSync } from 'node:child_process'
@@ -93,8 +93,8 @@ export function remoteSwiftCheckouts(root: string): string {
93
93
  return path.join(fs.realpathSync(cacheDir()), 'swift-packages', key, 'checkouts')
94
94
  }
95
95
 
96
- // sources requiring an objective-c runtime or assembly lowering.
97
- const UNSUPPORTED_NATIVE = /\.(m|mm|s|S)$/
96
+ // assembly requires its own target lowering; objective-c keeps its original bodies.
97
+ const UNSUPPORTED_NATIVE = /\.(s|S)$/
98
98
 
99
99
  const BINARY = 'is a binary framework'
100
100
  // retain every independent blocker in dependency order. a product can reach
@@ -264,7 +264,7 @@ export function resolveSwiftPackages(options: {
264
264
  : target.type !== 'regular' && target.type !== 'system'
265
265
  ? `${name} is a ${target.type} target`
266
266
  : files.some((file) => UNSUPPORTED_NATIVE.test(file))
267
- ? `${name} is an Objective-C or assembly target${gap ? `; ${gap}` : ''}`
267
+ ? `${name} is an assembly target${gap ? `; ${gap}` : ''}`
268
268
  : null
269
269
  // every dependency resolves, so a failing one never hides the rest
270
270
  // of the closure from the compile or from the report
@@ -25,6 +25,8 @@ import {
25
25
  isSwiftMetalLibrarySources,
26
26
  type SwiftMetalLibrarySource,
27
27
  type SwiftResourceBundle,
28
+ type SwiftNativeTarget,
29
+ type SwiftObjCPeerStartup,
28
30
  } from './swiftContract'
29
31
 
30
32
  export const SWIFT_COMPILE_PATH = '/api/swift-compile'
@@ -234,6 +236,8 @@ export interface SwiftCompileContext {
234
236
 
235
237
  export type SwiftCompileSubmit = (work: {
236
238
  files: Record<string, string>
239
+ nativeTargets?: SwiftNativeTarget[]
240
+ objcPeerStartup?: SwiftObjCPeerStartup
237
241
  metalSources?: Record<string, string>
238
242
  /** the bundle pack; absent means the project packs none. */
239
243
  resources?: Record<string, string>
@@ -399,6 +403,8 @@ export async function compileSwiftProject(
399
403
  submit: SwiftCompileSubmit,
400
404
  work: {
401
405
  files: Record<string, string>
406
+ nativeTargets?: SwiftNativeTarget[]
407
+ objcPeerStartup?: SwiftObjCPeerStartup
402
408
  metalSources?: Record<string, string>
403
409
  resources?: Record<string, string>
404
410
  /** project-relative resource paths used to associate implicit resources with targets. */
@@ -22,6 +22,105 @@ export interface SwiftObjCPeerClass {
22
22
  header: string
23
23
  }
24
24
 
25
+ /** generated registration source whose call must precede the application entry. */
26
+ export interface SwiftObjCPeerStartup {
27
+ registration: string
28
+ }
29
+
30
+ export function isSwiftObjCPeerStartup(value: unknown): value is SwiftObjCPeerStartup {
31
+ return (
32
+ value !== null &&
33
+ typeof value === 'object' &&
34
+ 'registration' in value &&
35
+ isSwiftResourcePath(value.registration) &&
36
+ value.registration.endsWith('.swift') &&
37
+ Object.keys(value).length === 1
38
+ )
39
+ }
40
+
41
+ export const SWIFT_NATIVE_INPUT_ROOT = '$(PEACH_INPUT_ROOT)'
42
+ export const SWIFT_NATIVE_SDK_INCLUDE = '$(PEACH_SDK_INCLUDE)'
43
+
44
+ export interface SwiftObjCImplementationPlan {
45
+ owner: string
46
+ registeredClasses: string[]
47
+ units: string[]
48
+ }
49
+
50
+ export interface SwiftProjectPreparation {
51
+ headerProducers: string[]
52
+ objcImplementations?: SwiftObjCImplementationPlan
53
+ }
54
+
55
+ /** project-relative original clang inputs; no host paths cross the compile boundary. */
56
+ export interface SwiftNativeTarget {
57
+ name: string
58
+ deploymentTarget: string | null
59
+ headers: string[]
60
+ publicHeaders: string[]
61
+ bridgingHeader: string | null
62
+ prefixHeader: string | null
63
+ headerSearchPaths: string[]
64
+ frameworkSearchPaths: string[]
65
+ flags: string[]
66
+ cxxFlags: string[]
67
+ fileFlags: Record<string, string[]>
68
+ sourceDirectories: Record<string, string>
69
+ }
70
+
71
+ export function isSwiftNativeTargets(value: unknown): value is SwiftNativeTarget[] {
72
+ const strings = (value: unknown): value is string[] =>
73
+ Array.isArray(value) &&
74
+ value.every((item: unknown) => typeof item === 'string' && !item.includes('\0'))
75
+ const paths = (value: unknown): value is string[] =>
76
+ strings(value) && value.every(isSwiftResourcePath)
77
+ return (
78
+ Array.isArray(value) &&
79
+ value.length <= 128 &&
80
+ value.every((target: unknown) => {
81
+ if (!target || typeof target !== 'object') return false
82
+ const field = (name: string): unknown => Reflect.get(target, name)
83
+ const nullablePath = (name: string) =>
84
+ field(name) === null || isSwiftResourcePath(field(name))
85
+ const perFile = field('fileFlags')
86
+ const directories = field('sourceDirectories')
87
+ const searches = field('headerSearchPaths')
88
+ const frameworks = field('frameworkSearchPaths')
89
+ const deployment = field('deploymentTarget')
90
+ return (
91
+ typeof field('name') === 'string' &&
92
+ /^[A-Za-z_]\w*$/.test(String(field('name'))) &&
93
+ (deployment === null ||
94
+ (typeof deployment === 'string' && /^\d+(?:\.\d+){0,2}$/.test(deployment))) &&
95
+ paths(field('headers')) &&
96
+ paths(field('publicHeaders')) &&
97
+ nullablePath('bridgingHeader') &&
98
+ nullablePath('prefixHeader') &&
99
+ strings(searches) &&
100
+ searches.every((item) => item === '.' || isSwiftResourcePath(item)) &&
101
+ strings(frameworks) &&
102
+ frameworks.every((item) => item === '.' || isSwiftResourcePath(item)) &&
103
+ strings(field('flags')) &&
104
+ strings(field('cxxFlags')) &&
105
+ !!perFile &&
106
+ typeof perFile === 'object' &&
107
+ !Array.isArray(perFile) &&
108
+ Object.entries(perFile).every(
109
+ ([file, flags]) => isSwiftResourcePath(file) && strings(flags),
110
+ ) &&
111
+ !!directories &&
112
+ typeof directories === 'object' &&
113
+ !Array.isArray(directories) &&
114
+ Object.entries(directories).every(
115
+ ([file, directory]) =>
116
+ isSwiftResourcePath(file) &&
117
+ (directory === '.' || isSwiftResourcePath(directory)),
118
+ )
119
+ )
120
+ })
121
+ )
122
+ }
123
+
25
124
  export interface SwiftObjCImplementationPreparation {
26
125
  receipt: string
27
126
  objects: { target: string; source: string; file: string }[]
@@ -43,7 +43,12 @@ export function filterTargetNodes<
43
43
  )
44
44
  return false
45
45
  if (!regex) return matcher.type !== 'text' || node.text === matcher.value
46
- const matches = (value: unknown) => typeof value === 'string' && regex.test(value)
46
+ // detox iOS compares its first regex match's range with the entire value.
47
+ const matches = (value: unknown) => {
48
+ if (typeof value !== 'string') return false
49
+ const match = regex.exec(value)
50
+ return match !== null && match.index === 0 && match[0].length === value.length
51
+ }
47
52
  if (matcher.type === 'id') return matches(node.testID) || matches(node.id)
48
53
  if (matcher.type === 'text') return matches(node.text)
49
54
  return matches(node.accessibilityLabel || (node.accessible ? node.text : null))
@@ -1,3 +1,4 @@
1
+ import crypto from 'crypto'
1
2
  // peach vite plugin — use in any vite project to get react-native resolution,
2
3
  // native dep stubbing, and external app support.
3
4
  //
@@ -7,8 +8,6 @@
7
8
  //
8
9
  // // with external app:
9
10
  // export default defineConfig({ plugins: [sootsim({ app: '~/my-rn-app' })] })
10
-
11
- import crypto from 'crypto'
12
11
  import fs from 'fs'
13
12
  import { createRequire } from 'module'
14
13
  import { runInNewContext, Script } from 'node:vm'
@@ -19,6 +18,12 @@ import { minifySync, transformSync } from 'rolldown/utils'
19
18
  import { type Plugin, transformWithOxc } from 'vite'
20
19
  import { resolveOneNativeBackend } from '../../contrast-bundler/src/oneFramework.ts'
21
20
  import { transformFlowSource } from '../../peach-compat/src/flow-strip.ts'
21
+ import { getCliRuntime } from './cli-runtime.ts'
22
+ import {
23
+ isEngineReactImporter,
24
+ isWorkerReactBridgeImporter,
25
+ keepsRealReact,
26
+ } from './react-bridge-importers.ts'
22
27
  import { renderWorkerSystemChunk } from './worker-system-chunks.ts'
23
28
 
24
29
  declare module '@babel/core' {
@@ -41,12 +46,6 @@ import {
41
46
  compatStubsForBuildResolver,
42
47
  reactNativeDeepStubsForBuildResolver,
43
48
  } from '../../peach-compat/src/stub-manifest.ts'
44
- import { WEBVIEW_SAME_ORIGIN_BOOTSTRAP_SOURCE } from '../../peach-engine/src/components/native-ui/webview-frame-bridge.ts'
45
- import {
46
- isExpoHostSocketModule,
47
- isReactNativeEnvironmentSetupModule,
48
- } from '../../peach-engine/src/guest-module-overrides.ts'
49
- import { readPeachWarmManifest } from '../../peach-engine/src/peach-warm-manifest.ts'
50
49
  import {
51
50
  assertPeachPortEnvironment,
52
51
  resolveSootsimBridgePort,
@@ -420,9 +419,9 @@ export function sootsim(options: SootSimOptions = {}): Plugin[] {
420
419
  function hostEnvironmentBootstrapRedirect(): Plugin {
421
420
  const target = '\0peach:host-environment-bootstrap'
422
421
  const isHostBootstrap = (id: string) =>
423
- isExpoHostSocketModule(id) ||
422
+ getCliRuntime().guest_module_overrides.isExpoHostSocketModule(id) ||
424
423
  ((id.startsWith('react-native/') || id.includes('/react-native/')) &&
425
- isReactNativeEnvironmentSetupModule(id))
424
+ getCliRuntime().guest_module_overrides.isReactNativeEnvironmentSetupModule(id))
426
425
  return {
427
426
  name: 'peach-host-environment-bootstrap',
428
427
  enforce: 'pre',
@@ -546,7 +545,7 @@ function warmManifestJsonPlugin(): Plugin {
546
545
  const filename = id.slice(marker.length, -3)
547
546
  this.addWatchFile(filename)
548
547
  const value: unknown = JSON.parse(fs.readFileSync(filename, 'utf8'))
549
- const manifest = readPeachWarmManifest(value)
548
+ const manifest = getCliRuntime().peach_warm_manifest.readPeachWarmManifest(value)
550
549
  const entries = [
551
550
  manifest.home,
552
551
  ...Object.values(manifest.launches),
@@ -1805,21 +1804,11 @@ function reactBridgePlugin(): Plugin {
1805
1804
  if ((options as { scan?: boolean })?.scan || options?.ssr) return null
1806
1805
 
1807
1806
  // only redirect imports from peachsim, peach-engine, peach-compat, and react-reconciler
1808
- const shouldRedirect =
1809
- importer.includes('/peachsim/src/') ||
1810
- importer.includes('/peach-engine/src/') ||
1811
- importer.includes('/peach-compat/src/') ||
1812
- importer.includes('/peach-compat/dist-pressability/') ||
1813
- importer.includes('/peach-kit/src/') ||
1814
- importer.includes('react-reconciler')
1807
+ const shouldRedirect = isEngineReactImporter(importer)
1815
1808
 
1816
1809
  if (!shouldRedirect) return null
1817
1810
 
1818
- // don't redirect react-bridge's own import of react (avoid infinite loop)
1819
- if (importer.includes('react-bridge')) return null
1820
-
1821
- // stub-registry needs the real React (with __CLIENT_INTERNALS) for bundle stubs
1822
- if (importer.includes('stub-registry')) return null
1811
+ if (keepsRealReact(importer)) return null
1823
1812
 
1824
1813
  redirectCount++
1825
1814
  if (redirectCount <= 10) {
@@ -1851,28 +1840,13 @@ export function workerReactBridgePlugin(): Plugin {
1851
1840
  // skip during dep scanning / SSR
1852
1841
  if ((options as { scan?: boolean })?.scan || options?.ssr) return null
1853
1842
 
1854
- // don't redirect react-bridge's own import of react (avoid infinite loop)
1855
- if (importer.includes('react-bridge')) return null
1856
-
1857
- // stub-registry needs the real React (with __CLIENT_INTERNALS) for bundle stubs
1858
- if (importer.includes('stub-registry')) return null
1859
-
1860
1843
  // redirect react imports from peachsim, peach-engine, peach-compat, react-reconciler,
1861
1844
  // and any pure-JS RN-ecosystem package the bundle pulls in. without this
1862
1845
  // redirect, packages like react-native-drawer-layout / use-latest-callback
1863
1846
  // call into a separate React instance than the renderer/bridge does, so
1864
1847
  // their useRef/useEffect refs collide with the engine's hooks state and
1865
1848
  // we hit "Maximum update depth exceeded" infinite-loop renders.
1866
- const shouldRedirect =
1867
- importer.includes('/peachsim/src/') ||
1868
- importer.includes('/peach-engine/src/') ||
1869
- importer.includes('/peach-compat/src/') ||
1870
- importer.includes('/peach-compat/dist-pressability/') ||
1871
- importer.includes('/peach-kit/src/') ||
1872
- importer.includes('react-reconciler') ||
1873
- importer.includes('/node_modules/')
1874
-
1875
- if (!shouldRedirect) return null
1849
+ if (!isWorkerReactBridgeImporter(importer)) return null
1876
1850
 
1877
1851
  return { id: reactBridgePath, external: false }
1878
1852
  },
@@ -2719,7 +2693,7 @@ export function expoDomComponentsPlugin(
2719
2693
  window.process.env = window.process.env || {};
2720
2694
  window.process.env.NODE_ENV = window.process.env.NODE_ENV || 'development';
2721
2695
  window.process.env.EXPO_OS = 'web';
2722
- ${WEBVIEW_SAME_ORIGIN_BOOTSTRAP_SOURCE}
2696
+ ${getCliRuntime().components_native_ui_webview_frame_bridge.WEBVIEW_SAME_ORIGIN_BOOTSTRAP_SOURCE}
2723
2697
  (function () {
2724
2698
  // metro-style require shim for expo's dom closure: classic scripts
2725
2699
  // run before module imports evaluate, so this covers eval-time
@@ -1,8 +1,8 @@
1
1
  import fs from 'node:fs'
2
2
  import { createRequire } from 'node:module'
3
3
  import { Worker } from 'node:worker_threads'
4
- import { PAGE_DELIVERED_CHUNKS_NAME_SUFFIX } from '../../peach-engine/src/render-worker/boot-worker-kickoff.ts'
5
4
  import { isRecord } from './is-record'
5
+ import { PAGE_DELIVERED_CHUNKS_NAME_SUFFIX } from './workerChunkContract.ts'
6
6
 
7
7
  const require = createRequire(import.meta.url)
8
8
  const systemRuntime = fs.readFileSync(require.resolve('systemjs/dist/s.min.js'), 'utf8')
@@ -0,0 +1,5 @@
1
+ // the kickoff ends the name of each worker it starts with this suffix. that
2
+ // worker's loader then links each Home chunk from the body the kickoff posts
3
+ // (`peach-chunk-list`, then one `peach-chunk-body` per url) instead of
4
+ // downloading it again (worker-system-chunks.ts).
5
+ export const PAGE_DELIVERED_CHUNKS_NAME_SUFFIX = ':page-chunks'
@@ -69,18 +69,37 @@ const pendingWorkletTransforms = new Map<
69
69
  export function shouldApplyWorkletsPlugin(id: string, code: string): boolean {
70
70
  if (!/\.(tsx?|jsx?|mjs|cjs|mts|cts)$/.test(id)) return false
71
71
  if (REANIMATED_IGNORED_PATHS_REGEX.test(id)) return false
72
+ if (!REANIMATED_WORKLETIZATION_REGEX.test(code)) return false
72
73
  // sootsim engine source has local helpers named like upstream reanimated
73
- // hooks. only transform engine files that actually import upstream
74
- // react-native-reanimated; otherwise the plugin rewrites callbacks for our
75
- // own engine hooks and expects a `this.__closure` binding they never provide.
74
+ // hooks. without an upstream import, require an authored worklet directive
75
+ // before letting the plugin rewrite callbacks. keyboard hooks and shared
76
+ // worklet helpers need no direct reanimated import.
76
77
  if (
77
78
  id.includes(SOOTSIM_ENGINE_SRC_PATH) &&
78
79
  !id.includes(SOOTSIM_ENGINE_TEST_FIXTURE_PATH) &&
79
80
  !REANIMATED_IMPORT_REGEX.test(code)
80
81
  ) {
81
- return false
82
+ if (!/['"]worklet['"]/.test(code)) return false
83
+ const { parseSync, types }: typeof import('@babel/core') =
84
+ sootsimPluginRequire('@babel/core')
85
+ const syntax = parseSync(code, {
86
+ filename: id,
87
+ babelrc: false,
88
+ configFile: false,
89
+ parserOpts: {
90
+ plugins: isTypescriptFile(id) ? ['typescript', 'jsx'] : ['jsx'],
91
+ },
92
+ })
93
+ let hasWorkletDirective = false
94
+ if (syntax) {
95
+ types.traverseFast(syntax, (node) => {
96
+ if (node.type === 'Directive' && node.value.value === 'worklet')
97
+ hasWorkletDirective = true
98
+ })
99
+ }
100
+ return hasWorkletDirective
82
101
  }
83
- return REANIMATED_WORKLETIZATION_REGEX.test(code)
102
+ return true
84
103
  }
85
104
 
86
105
  function isEngineStandIn(id: string): boolean {