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
@@ -0,0 +1,103 @@
1
+ // the private Nitro adapter archive an installed peach links into every Nitro
2
+ // compile: downloaded from PEACH_SWIFT_ENDPOINT, verified against the lock this
3
+ // build carries, then checked against the app's own original headers and the
4
+ // compiler, SDK and framework the module root compiles with
5
+ // (docs/swift-distribution.md). the adapter source never reaches this machine.
6
+ import fs from 'node:fs'
7
+ import path from 'node:path'
8
+ import { installVerifiedTarball } from '@contrast/runtime-delivery'
9
+ import { rnxHomeDir } from './home-paths'
10
+ import lockJson from './nitro-adapter.lock.json' with { type: 'json' }
11
+ import {
12
+ headerDigests,
13
+ NITRO_ADAPTER_MANIFEST,
14
+ nitroAdapterArchiveKey,
15
+ parseNitroAdapterLock,
16
+ verifyInstalledNitroAdapter,
17
+ type NitroAdapterLock,
18
+ type NitroAdapterManifest,
19
+ } from './nitroAdapterContract'
20
+ import { NITRO_GUEST_PLATFORM } from './nitroContract'
21
+ import { swiftDistributionAt, swiftModuleSdk, WASM_TRIPLE } from './swift-compile'
22
+ import { SWIFT_ENDPOINT_ENV } from './swift-distribution'
23
+ import type { NitroSourceCollection } from './nitro-source'
24
+
25
+ /** the verified adapter this build ships, the only lock normal compiles use. */
26
+ export const committedNitroAdapterLock = parseNitroAdapterLock(lockJson)
27
+
28
+ export interface NitroAdapterArchive {
29
+ manifest: NitroAdapterManifest
30
+ /** the static archive, base64, as SwiftCompileInput.libraries carries it. */
31
+ base64: string
32
+ }
33
+
34
+ /** rejects a lock built for other guest platform, target, headers, compiler,
35
+ * SDK or framework than this app's original headers and the module root
36
+ * compiling it. the committed lock is the trust root and pins the whole
37
+ * manifest. its wire ABI digest is producer provenance the reviewed lock
38
+ * fixes; the consumer cannot recompute it and the framework distribution id
39
+ * does not independently bind it. */
40
+ function verifyIdentity(
41
+ lock: NitroAdapterLock,
42
+ collection: NitroSourceCollection,
43
+ moduleRoot: string,
44
+ ) {
45
+ const { nitro, reactNative } = collection
46
+ const distribution = swiftDistributionAt(moduleRoot)
47
+ if (!distribution) throw new Error(`${moduleRoot} holds no Swift distribution`)
48
+ const sdk = swiftModuleSdk(moduleRoot)
49
+ const headers = headerDigests({
50
+ nitroModules: nitro.root,
51
+ reactNative: reactNative.root,
52
+ })
53
+ const mismatched = [
54
+ lock.platform !== NITRO_GUEST_PLATFORM && 'guest platform',
55
+ lock.target !== WASM_TRIPLE && 'target',
56
+ lock.headers.reactNativeJsi !== headers.reactNativeJsi && 'React Native JSI headers',
57
+ lock.headers.nitroModules !== headers.nitroModules && 'Nitro Modules headers',
58
+ lock.compiler !== distribution.release && 'compiler',
59
+ (lock.sdk.id !== sdk.wasmSdkId || lock.sdk.checksum !== sdk.wasmSdkChecksum) &&
60
+ 'Swift SDK',
61
+ lock.framework.distribution !== distribution.id && 'Swift distribution',
62
+ ].filter((name) => name !== false)
63
+ if (mismatched.length > 0)
64
+ throw new Error(
65
+ `Nitro adapter archive does not match this app and toolchain: ${mismatched.join(', ')}`,
66
+ )
67
+ }
68
+
69
+ /** the verified adapter archive for a collection: identity first, then the
70
+ * download, whose tarball and unpacked bytes the lock pins. */
71
+ export async function resolveNitroAdapter(
72
+ collection: NitroSourceCollection,
73
+ moduleRoot: string,
74
+ lock: NitroAdapterLock,
75
+ signal?: AbortSignal,
76
+ ): Promise<NitroAdapterArchive> {
77
+ verifyIdentity(lock, collection, moduleRoot)
78
+ const endpoint = process.env[SWIFT_ENDPOINT_ENV]?.trim().replace(/\/+$/, '')
79
+ if (!endpoint)
80
+ throw new Error(
81
+ `Nitro compilation needs ${SWIFT_ENDPOINT_ENV} for its adapter archive`,
82
+ )
83
+ const dir = path.join(rnxHomeDir(), 'swift', `nitro-adapter-${lock.archive.sha256}`)
84
+ if (!fs.existsSync(path.join(dir, NITRO_ADAPTER_MANIFEST))) {
85
+ process.stderr.write(`peach: downloading Nitro adapter ${lock.archive.sha256}…\n`)
86
+ await installVerifiedTarball({
87
+ signal,
88
+ url: `${endpoint}/${nitroAdapterArchiveKey(lock)}`,
89
+ digest: { algorithm: 'sha256', encoding: 'hex', value: lock.archive.sha256 },
90
+ destDir: dir,
91
+ installedMarker: NITRO_ADAPTER_MANIFEST,
92
+ label: 'Nitro adapter archive',
93
+ verify: (installed) => {
94
+ verifyInstalledNitroAdapter(installed, lock)
95
+ },
96
+ })
97
+ }
98
+ const manifest = verifyInstalledNitroAdapter(dir, lock)
99
+ return {
100
+ manifest,
101
+ base64: fs.readFileSync(path.join(dir, manifest.archive.path)).toString('base64'),
102
+ }
103
+ }
@@ -1,6 +1,7 @@
1
1
  import { compileNitroModule } from './nitro-compile'
2
+ import { discoverNitroProviders } from './nitro-source'
3
+ import { SWIFT_ENDPOINT_ENV, swiftDistributionRoot } from './swift-distribution'
2
4
  import { icuUrl } from './swift-host'
3
- import type { NitroSourceOptions } from './nitro-source'
4
5
  import type { NitroCompiledModule } from './nitroContract'
5
6
 
6
7
  export interface NitroBundle {
@@ -8,14 +9,28 @@ export interface NitroBundle {
8
9
  assets: { path: string; bytes: Buffer; contentType: string }[]
9
10
  }
10
11
 
11
- // the selected installed package uses the same compiler and asset addresses
12
- // as local native loads. package javascript is carried verbatim by its bundler.
12
+ // every installed iOS Nitro provider the app declares compiles into one
13
+ // executable with the same compiler and asset addresses as local native loads.
14
+ // package javascript is carried verbatim by its bundler.
13
15
  export async function buildNitroBundle(
14
- options: NitroSourceOptions & { moduleRoot: string },
15
- ): Promise<NitroBundle> {
16
- const { artifact, collection } = await compileNitroModule(options)
17
- const implementation = collection.packages[0]
18
- if (!implementation) throw new Error('Nitro compilation has no installed package')
16
+ appRoot: string,
17
+ moduleRoot?: string,
18
+ ): Promise<NitroBundle | null> {
19
+ const packageRoots = discoverNitroProviders(appRoot)
20
+ if (packageRoots.length === 0) return null
21
+ // the adapter archive is built against the published distribution, so Nitro
22
+ // compiles against it even in a source checkout; the checkout framework has
23
+ // no manifest for the adapter identity check to bind.
24
+ const module = moduleRoot ?? (await swiftDistributionRoot())
25
+ if (!module)
26
+ throw new Error(
27
+ `Nitro compilation needs ${SWIFT_ENDPOINT_ENV} for the Swift distribution`,
28
+ )
29
+ const { artifact, collection } = await compileNitroModule({
30
+ appRoot,
31
+ packageRoots,
32
+ moduleRoot: module,
33
+ })
19
34
  const assets: NitroBundle['assets'] = [
20
35
  {
21
36
  path: `__peach/swift/${artifact.hash}.wasm`,
@@ -32,8 +47,7 @@ export async function buildNitroBundle(
32
47
  return {
33
48
  metadata: {
34
49
  platform: 'ios',
35
- packageName: implementation.name,
36
- packageVersion: implementation.version,
50
+ packages: collection.providers.map(({ name, version }) => ({ name, version })),
37
51
  url: `/__peach/swift/${artifact.hash}.wasm`,
38
52
  hash: artifact.hash,
39
53
  icuUrl: icuUrl('', artifact),
@@ -2,6 +2,11 @@ import { createHash } from 'node:crypto'
2
2
  import fs from 'node:fs'
3
3
  import os from 'node:os'
4
4
  import path from 'node:path'
5
+ import {
6
+ committedNitroAdapterLock,
7
+ resolveNitroAdapter,
8
+ type NitroAdapterArchive,
9
+ } from './nitro-adapter'
5
10
  import {
6
11
  collectNitroSources,
7
12
  type NitroSourceCollection,
@@ -9,59 +14,31 @@ import {
9
14
  } from './nitro-source'
10
15
  import { syncSwiftTree } from './swift-compile'
11
16
  import { artifactFor, projectFor, type SwiftArtifact } from './swift-host'
12
- import { readPackageFile } from './swift-source-file'
13
- import { MAX_SWIFT_COMPILE_SOURCE_BYTES } from './swift-submit'
14
17
  import type { SwiftCompileInput } from './swift-compile'
15
18
 
16
- // installed implementations, generated registration and the real runtime form
17
- // one executable. the common Swift compiler owns linking and artifact reuse.
19
+ // every selected installed implementation, its generated registration and the
20
+ // verified adapter archive form one executable. the archive carries the private
21
+ // adapter objects and links into NitroCore; the common Swift compiler owns
22
+ // linking and reuse.
18
23
  export function collectNitroCompileInput(
19
- options: NitroSourceOptions & { moduleRoot: string },
20
- ): { input: SwiftCompileInput; collection: NitroSourceCollection } {
21
- const collection = collectNitroSources(options)
24
+ collection: NitroSourceCollection,
25
+ adapter: NitroAdapterArchive,
26
+ ): SwiftCompileInput {
22
27
  const files = { ...collection.files }
23
- const platform = path.join(options.moduleRoot, 'platform/react-native-nitro-modules')
24
- const read = (file: string) =>
25
- readPackageFile(
26
- platform,
27
- path.join(platform, file),
28
- MAX_SWIFT_COMPILE_SOURCE_BYTES,
29
- ).toString('utf8')
30
- for (const file of [
31
- 'platform/ThreadUtils.cpp',
32
- 'platform/NitroLogger.cpp',
33
- 'threading/UIThreadDispatcher.cpp',
34
- 'threading/UIThreadDispatcher.hpp',
35
- ]) {
36
- files[`Sources/NitroCore/peach/${file}`] = read(file)
37
- }
38
- files['Sources/NitroCore/include/UIThreadDispatcher.hpp'] =
39
- '#include "../peach/threading/UIThreadDispatcher.hpp"\n'
40
-
41
- const runtime = 'PeachNitroRuntime'
42
- for (const file of [
43
- 'ProxyRuntime.cpp',
44
- 'RuntimeEntry.cpp',
45
- 'HostImports.hpp',
46
- 'ProxyRuntime.hpp',
47
- 'RuntimeEntry.hpp',
48
- ]) {
49
- const relative = file.endsWith('.hpp') ? `include/${file}` : file
50
- files[`Sources/${runtime}/${relative}`] = read(`jsi/${file}`)
51
- }
52
- files[`Sources/${runtime}/include/PeachNitroEntry.hpp`] =
28
+ // the archive has no module, so NitroCore's module map declares its entry.
29
+ files['Sources/NitroCore/include/PeachNitroEntry.hpp'] =
53
30
  '#pragma once\nextern "C" void peachNitroInitialize();\n'
54
- files[`Sources/${runtime}/include/module.modulemap`] =
55
- `module ${runtime} { header "PeachNitroEntry.hpp" export * }\n`
31
+ const core = files['Sources/NitroCore/include/module.modulemap']
32
+ if (!core?.endsWith(' export * }\n'))
33
+ throw new Error('Nitro collection has no NitroCore module map')
34
+ files['Sources/NitroCore/include/module.modulemap'] =
35
+ `${core.slice(0, -' export * }\n'.length)} header "PeachNitroEntry.hpp" export * }\n`
56
36
 
57
- const implementation = collection.targets.find((target) =>
58
- collection.registration.header.startsWith(`${target.path}/`),
59
- )
60
- if (!implementation) throw new Error('Nitro registration has no package target')
61
37
  const entry = 'Sources/PeachNitroApp/main.swift'
38
+ // every provider registers before the one runtime serves guest evaluation.
62
39
  files[entry] =
63
- `import ${runtime}\nimport ${implementation.name}\n` +
64
- `peachNitroInitialize()\n${collection.registration.symbol}()\n`
40
+ `import NitroCore\n${collection.registrations.map(({ target }) => `import ${target}\n`).join('')}` +
41
+ `peachNitroInitialize()\n${collection.registrations.map(({ symbol }) => `${symbol}()\n`).join('')}`
65
42
  files['Package.swift'] = [
66
43
  '// swift-tools-version: 6.2',
67
44
  'import PackageDescription',
@@ -70,20 +47,23 @@ export function collectNitroCompileInput(
70
47
  (target) =>
71
48
  `.target(name: ${JSON.stringify(target.name)}, dependencies: ${JSON.stringify(target.dependencies?.map((dependency) => dependency.name) ?? [])}, path: ${JSON.stringify(target.path)}, ${target.cxxInterop ? 'swiftSettings: [.interoperabilityMode(.Cxx)]' : 'cxxSettings: [.define("DEBUG")]'}),`,
72
49
  ),
73
- `.target(name: "${runtime}", dependencies: ["JsiBridge", "NitroCore"], cxxSettings: [.define("DEBUG")]),`,
74
- `.executableTarget(name: "PeachNitroApp", dependencies: ["${runtime}", "${implementation.name}"], swiftSettings: [.interoperabilityMode(.Cxx)]),`,
50
+ `.executableTarget(name: "PeachNitroApp", dependencies: ${JSON.stringify(collection.registrations.map(({ target }) => target))}, swiftSettings: [.interoperabilityMode(.Cxx)]),`,
75
51
  '], cxxLanguageStandard: .cxx20)',
76
52
  '',
77
53
  ].join('\n')
78
- return { input: { files, entry }, collection }
54
+ return { files, entry, libraries: { NitroCore: adapter.base64 } }
79
55
  }
80
56
 
81
57
  export async function compileNitroModule(
82
58
  options: NitroSourceOptions & { moduleRoot: string },
83
59
  ): Promise<{ artifact: SwiftArtifact; collection: NitroSourceCollection }> {
84
- const { input, collection } = collectNitroCompileInput(options)
60
+ const collection = collectNitroSources(options)
61
+ const input = collectNitroCompileInput(
62
+ collection,
63
+ await resolveNitroAdapter(collection, options.moduleRoot, committedNitroAdapterLock),
64
+ )
85
65
  const key = createHash('sha256')
86
- .update(fs.realpathSync(options.packageRoot))
66
+ .update(collection.providers.map(({ root }) => root).join('\0'))
87
67
  .update('\0')
88
68
  .update(fs.realpathSync(options.moduleRoot))
89
69
  .digest('hex')
@@ -97,8 +77,10 @@ export async function compileNitroModule(
97
77
  ]),
98
78
  ),
99
79
  )
80
+ const project = projectFor(packagePath)
81
+ project.libraries = input.libraries
100
82
  return {
101
- artifact: await artifactFor(projectFor(packagePath), input.entry, options.moduleRoot),
83
+ artifact: await artifactFor(project, input.entry, options.moduleRoot),
102
84
  collection,
103
85
  }
104
86
  }
@@ -7,7 +7,7 @@ import { MAX_SWIFT_COMPILE_SOURCE_BYTES } from './swift-submit'
7
7
  import type { SwiftCompileInput } from './swift-compile'
8
8
  import type { SwiftPackageTarget } from './swift-package'
9
9
 
10
- export type NitroSourceOptions = { packageRoot: string } & (
10
+ export type NitroSourceOptions = { packageRoots: string[] } & (
11
11
  | { appRoot: string; dependencyRoots?: never }
12
12
  | {
13
13
  appRoot?: never
@@ -15,13 +15,19 @@ export type NitroSourceOptions = { packageRoot: string } & (
15
15
  }
16
16
  )
17
17
 
18
+ type NitroPackage = { name: string; version: string; root: string }
19
+
18
20
  /** source fragments for the common Swift host; its caller owns the executable,
19
- * platform bindings and invocation of the generated registration function. */
21
+ * platform bindings and invocation of each generated registration function.
22
+ * every provider shares one Nitro core and one JSI. */
20
23
  export interface NitroSourceCollection {
21
24
  files: SwiftCompileInput['files']
22
25
  targets: SwiftPackageTarget[]
23
- registration: { symbol: string; header: string }
24
- packages: { name: string; version: string; root: string }[]
26
+ /** one per provider, sorted by package name; `target` holds its header. */
27
+ registrations: { symbol: string; header: string; target: string }[]
28
+ providers: NitroPackage[]
29
+ nitro: NitroPackage
30
+ reactNative: NitroPackage
25
31
  sources: { file: string; source: string; sha256: string }[]
26
32
  /** generated include paths pointing at one unchanged original input. */
27
33
  aliases: Record<string, string>
@@ -41,7 +47,7 @@ function readJson(root: string, relative: string): unknown {
41
47
  )
42
48
  }
43
49
 
44
- function packageInfo(root: string): NitroSourceCollection['packages'][number] {
50
+ function packageInfo(root: string): NitroPackage {
45
51
  root = fs.realpathSync(root)
46
52
  const value = readJson(root, 'package.json')
47
53
  if (
@@ -119,11 +125,69 @@ function registrations(root: string) {
119
125
  return { namespace, swiftModule, classes }
120
126
  }
121
127
 
128
+ /** the installed packages react native's iOS autolinking would link into the
129
+ * app that ship a generated Nitro iOS initializer: the app's own declared
130
+ * dependencies, resolved from its directory. Android-only packages ship none. */
131
+ export function discoverNitroProviders(appRoot: string): string[] {
132
+ appRoot = fs.realpathSync(appRoot)
133
+ const manifest = readJson(appRoot, 'package.json')
134
+ if (!object(manifest)) throw new Error(`${appRoot}: package.json is not an object`)
135
+ const declared = new Set<string>()
136
+ for (const field of ['dependencies', 'devDependencies']) {
137
+ const value = manifest[field]
138
+ if (object(value)) for (const name of Object.keys(value)) declared.add(name)
139
+ }
140
+ const roots: string[] = []
141
+ for (const name of [...declared].sort()) {
142
+ for (let directory = appRoot; ; directory = path.dirname(directory)) {
143
+ const root = path.join(directory, 'node_modules', name)
144
+ if (fs.existsSync(path.join(root, 'package.json'))) {
145
+ const generated = path.join(root, 'nitrogen/generated/ios')
146
+ if (
147
+ fs.existsSync(generated) &&
148
+ fs.readdirSync(generated).some((file) => file.endsWith('Autolinking.mm'))
149
+ )
150
+ roots.push(root)
151
+ break
152
+ }
153
+ if (path.dirname(directory) === directory) break
154
+ }
155
+ }
156
+ return roots
157
+ }
158
+
122
159
  /** collect installed native bodies, generated bridges, Nitro core and RN's
123
160
  * JSI without reading or rewriting package JavaScript. */
124
161
  export function collectNitroSources(options: NitroSourceOptions): NitroSourceCollection {
125
- const module = packageInfo(options.packageRoot)
126
- const config = registrations(module.root)
162
+ if (options.packageRoots.length === 0)
163
+ throw new Error('Nitro compilation needs at least one installed provider')
164
+ const providers = options.packageRoots
165
+ .map(packageInfo)
166
+ .sort((a, b) => a.name.localeCompare(b.name))
167
+ for (const [index, provider] of providers.entries())
168
+ if (providers.findIndex(({ name }) => name === provider.name) !== index)
169
+ throw new Error(`duplicate Nitro provider package ${provider.name}`)
170
+ const configs = providers.map((provider) => registrations(provider.root))
171
+ const names = new Map<string, string>()
172
+ for (const [index, config] of configs.entries())
173
+ for (const { name } of config.classes) {
174
+ const owner = names.get(name)
175
+ if (owner !== undefined)
176
+ throw new Error(
177
+ `Nitro HybridObject ${name} is registered by ${owner} and ${providers[index]!.name}`,
178
+ )
179
+ names.set(name, providers[index]!.name)
180
+ }
181
+ const swiftModules = new Map<string, string>()
182
+ for (const [index, config] of configs.entries()) {
183
+ if (config.swiftModule === null) continue
184
+ const owner = swiftModules.get(config.swiftModule)
185
+ if (owner !== undefined)
186
+ throw new Error(
187
+ `Nitro Swift module ${config.swiftModule} is declared by ${owner} and ${providers[index]!.name}`,
188
+ )
189
+ swiftModules.set(config.swiftModule, providers[index]!.name)
190
+ }
127
191
  let roots: NonNullable<NitroSourceOptions['dependencyRoots']>
128
192
  if (options.dependencyRoots !== undefined) {
129
193
  roots = options.dependencyRoots
@@ -143,7 +207,8 @@ export function collectNitroSources(options: NitroSourceOptions): NitroSourceCol
143
207
  if (nitro.name !== 'react-native-nitro-modules' || reactNative.name !== 'react-native')
144
208
  throw new Error('Nitro source dependency roots must identify Nitro Modules and RN')
145
209
 
146
- const targetName = `NitroPackage_${createHash('sha256').update(module.name).digest('hex').slice(0, 16)}`
210
+ const providerTarget = (provider: NitroPackage) =>
211
+ `NitroPackage_${createHash('sha256').update(provider.name).digest('hex').slice(0, 16)}`
147
212
  const coreTarget = 'NitroCore'
148
213
  const jsiTarget = 'JsiBridge'
149
214
  const targetPath = (name: string) => `Sources/${name}`
@@ -164,13 +229,18 @@ export function collectNitroSources(options: NitroSourceOptions): NitroSourceCol
164
229
  targets: [
165
230
  target(jsiTarget, []),
166
231
  target(coreTarget, [jsiTarget]),
167
- target(targetName, [coreTarget, jsiTarget]),
232
+ ...providers.map((provider) =>
233
+ target(providerTarget(provider), [coreTarget, jsiTarget]),
234
+ ),
168
235
  ],
169
- registration: {
170
- symbol: `peach_register_${targetName}`,
171
- header: `${targetPath(targetName)}/include/PeachNitroRegistration.hpp`,
172
- },
173
- packages: [module, nitro, reactNative],
236
+ registrations: providers.map((provider) => ({
237
+ symbol: `peach_register_${providerTarget(provider)}`,
238
+ header: `${targetPath(providerTarget(provider))}/include/PeachNitroRegistration.hpp`,
239
+ target: providerTarget(provider),
240
+ })),
241
+ providers,
242
+ nitro,
243
+ reactNative,
174
244
  sources: [],
175
245
  aliases: {},
176
246
  }
@@ -271,20 +341,8 @@ export function collectNitroSources(options: NitroSourceOptions): NitroSourceCol
271
341
  (file) => (file.endsWith('.h') && file !== 'JSIDynamic.h') || file === 'jsi.cpp',
272
342
  )
273
343
  collect(nitro.root, 'cpp', coreTarget, 'NitroModules', new Set(['views']))
274
- const implementationHeaders = fs.existsSync(path.join(module.root, 'cpp'))
275
- ? collect(module.root, 'cpp', targetName, null)
276
- : new Map<string, string>()
277
- collect(module.root, 'nitrogen/generated/shared/c++', targetName, null)
278
- for (const entry of config.classes)
279
- if (
280
- entry.language === 'c++' &&
281
- !implementationHeaders.has(`${entry.implementation}.hpp`)
282
- )
283
- throw new Error(
284
- `${module.root}: missing C++ implementation header ${entry.implementation}.hpp`,
285
- )
286
344
 
287
- if (config.swiftModule) {
345
+ if (swiftModules.size > 0) {
288
346
  for (const directory of ['ios/core', 'ios/utils'])
289
347
  collect(
290
348
  nitro.root,
@@ -296,9 +354,7 @@ export function collectNitroSources(options: NitroSourceOptions): NitroSourceCol
296
354
  )
297
355
  const nitroSwift = target('NitroModules', [coreTarget, jsiTarget])
298
356
  nitroSwift.cxxInterop = true
299
- const packageSwift = target(config.swiftModule, [targetName, 'NitroModules'])
300
- packageSwift.cxxInterop = true
301
- result.targets.push(nitroSwift, packageSwift)
357
+ result.targets.push(nitroSwift)
302
358
  for (const directory of ['ios/core', 'ios/utils', 'ios/views'])
303
359
  collect(
304
360
  nitro.root,
@@ -313,29 +369,52 @@ export function collectNitroSources(options: NitroSourceOptions): NitroSourceCol
313
369
  `${targetPath('NitroModules')}/PeachNitroExports.swift`,
314
370
  `@_exported import ${coreTarget}\n`,
315
371
  )
316
- collect(
317
- module.root,
318
- 'ios',
319
- config.swiftModule,
320
- null,
321
- new Set(['Tests']),
322
- () => true,
323
- /\.swift$/,
324
- )
325
- collect(
326
- module.root,
327
- 'nitrogen/generated/ios',
328
- config.swiftModule,
329
- null,
330
- new Set(),
331
- () => true,
332
- /\.swift$/,
333
- )
334
- collect(module.root, 'nitrogen/generated/ios', targetName, null)
335
- add(
336
- `${targetPath(config.swiftModule)}/PeachNitroExports.swift`,
337
- `@_exported import ${targetName}\n`,
338
- )
372
+ }
373
+
374
+ for (const [index, module] of providers.entries()) {
375
+ const config = configs[index]!
376
+ const targetName = providerTarget(module)
377
+ const implementationHeaders = fs.existsSync(path.join(module.root, 'cpp'))
378
+ ? collect(module.root, 'cpp', targetName, null)
379
+ : new Map<string, string>()
380
+ collect(module.root, 'nitrogen/generated/shared/c++', targetName, null)
381
+ for (const entry of config.classes)
382
+ if (
383
+ entry.language === 'c++' &&
384
+ !implementationHeaders.has(`${entry.implementation}.hpp`)
385
+ )
386
+ throw new Error(
387
+ `${module.root}: missing C++ implementation header ${entry.implementation}.hpp`,
388
+ )
389
+
390
+ if (config.swiftModule) {
391
+ const packageSwift = target(config.swiftModule, [targetName, 'NitroModules'])
392
+ packageSwift.cxxInterop = true
393
+ result.targets.push(packageSwift)
394
+ collect(
395
+ module.root,
396
+ 'ios',
397
+ config.swiftModule,
398
+ null,
399
+ new Set(['Tests']),
400
+ () => true,
401
+ /\.swift$/,
402
+ )
403
+ collect(
404
+ module.root,
405
+ 'nitrogen/generated/ios',
406
+ config.swiftModule,
407
+ null,
408
+ new Set(),
409
+ () => true,
410
+ /\.swift$/,
411
+ )
412
+ collect(module.root, 'nitrogen/generated/ios', targetName, null)
413
+ add(
414
+ `${targetPath(config.swiftModule)}/PeachNitroExports.swift`,
415
+ `@_exported import ${targetName}\n`,
416
+ )
417
+ }
339
418
  }
340
419
 
341
420
  // explicit module maps avoid importing every RN view or private JSI header.
@@ -345,50 +424,52 @@ export function collectNitroSources(options: NitroSourceOptions): NitroSourceCol
345
424
  )
346
425
  add(
347
426
  `${targetPath(coreTarget)}/include/module.modulemap`,
348
- `module ${coreTarget} { header "NitroModules/InstallNitro.hpp"${config.swiftModule ? ['ArrayBufferHolder.hpp', 'AnyMapUtils.hpp', 'PromiseHolder.hpp', 'Result.hpp', 'RuntimeError.hpp', 'DateToChronoDate.hpp'].map((header) => ` header "NitroModules/${header}"`).join('') : ''} export * }\n`,
349
- )
350
- add(
351
- result.registration.header,
352
- `#pragma once\nextern "C" void ${result.registration.symbol}();\n`,
427
+ `module ${coreTarget} { header "NitroModules/InstallNitro.hpp"${swiftModules.size > 0 ? ['ArrayBufferHolder.hpp', 'AnyMapUtils.hpp', 'PromiseHolder.hpp', 'Result.hpp', 'RuntimeError.hpp', 'DateToChronoDate.hpp'].map((header) => ` header "NitroModules/${header}"`).join('') : ''} export * }\n`,
353
428
  )
354
- add(
355
- `${targetPath(targetName)}/include/module.modulemap`,
356
- `module ${targetName} { header "PeachNitroRegistration.hpp"${config.swiftModule ? ` header "${config.swiftModule}-Swift-Cxx-Bridge.hpp"` : ''} export * }\n`,
357
- )
358
- add(
359
- `${targetPath(targetName)}/PeachNitroRegistration.cpp`,
360
- [
361
- '#include "PeachNitroRegistration.hpp"',
362
- '#include <NitroModules/HybridObjectRegistry.hpp>',
363
- '#include <memory>',
364
- '#include <type_traits>',
365
- ...(config.swiftModule
366
- ? [`#include "${config.swiftModule}-Swift-Cxx-Umbrella.hpp"`]
367
- : []),
368
- ...[
369
- ...new Set(
370
- config.classes
371
- .filter((entry) => entry.language === 'c++')
372
- .map(({ implementation }) => implementation),
373
- ),
374
- ].map((implementation) => `#include "${implementation}.hpp"`),
375
- `extern "C" void ${result.registration.symbol}() {`,
376
- ...config.classes.flatMap((entry) => [
377
- ...(entry.language === 'c++'
378
- ? [
379
- ` static_assert(std::is_default_constructible_v<${config.namespace}::${entry.implementation}>);`,
380
- ]
429
+ for (const [index, module] of providers.entries()) {
430
+ const config = configs[index]!
431
+ const targetName = providerTarget(module)
432
+ const registration = result.registrations[index]!
433
+ add(registration.header, `#pragma once\nextern "C" void ${registration.symbol}();\n`)
434
+ add(
435
+ `${targetPath(targetName)}/include/module.modulemap`,
436
+ `module ${targetName} { header "PeachNitroRegistration.hpp"${config.swiftModule ? ` header "${config.swiftModule}-Swift-Cxx-Bridge.hpp"` : ''} export * }\n`,
437
+ )
438
+ add(
439
+ `${targetPath(targetName)}/PeachNitroRegistration.cpp`,
440
+ [
441
+ '#include "PeachNitroRegistration.hpp"',
442
+ '#include <NitroModules/HybridObjectRegistry.hpp>',
443
+ '#include <memory>',
444
+ '#include <type_traits>',
445
+ ...(config.swiftModule
446
+ ? [`#include "${config.swiftModule}-Swift-Cxx-Umbrella.hpp"`]
381
447
  : []),
382
- ' margelo::nitro::HybridObjectRegistry::registerHybridObjectConstructor(',
383
- ` ${JSON.stringify(entry.name)}, []() -> std::shared_ptr<margelo::nitro::HybridObject> {`,
384
- entry.language === 'swift'
385
- ? ` return ${config.swiftModule}::${config.swiftModule}Autolinking::create${entry.name}();`
386
- : ` return std::make_shared<${config.namespace}::${entry.implementation}>();`,
387
- ' });',
388
- ]),
389
- '}',
390
- '',
391
- ].join('\n'),
392
- )
448
+ ...[
449
+ ...new Set(
450
+ config.classes
451
+ .filter((entry) => entry.language === 'c++')
452
+ .map(({ implementation }) => implementation),
453
+ ),
454
+ ].map((implementation) => `#include "${implementation}.hpp"`),
455
+ `extern "C" void ${registration.symbol}() {`,
456
+ ...config.classes.flatMap((entry) => [
457
+ ...(entry.language === 'c++'
458
+ ? [
459
+ ` static_assert(std::is_default_constructible_v<${config.namespace}::${entry.implementation}>);`,
460
+ ]
461
+ : []),
462
+ ' margelo::nitro::HybridObjectRegistry::registerHybridObjectConstructor(',
463
+ ` ${JSON.stringify(entry.name)}, []() -> std::shared_ptr<margelo::nitro::HybridObject> {`,
464
+ entry.language === 'swift'
465
+ ? ` return ${config.swiftModule}::${config.swiftModule}Autolinking::create${entry.name}();`
466
+ : ` return std::make_shared<${config.namespace}::${entry.implementation}>();`,
467
+ ' });',
468
+ ]),
469
+ '}',
470
+ '',
471
+ ].join('\n'),
472
+ )
473
+ }
393
474
  return result
394
475
  }