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
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1644 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -645,245 +645,6 @@ var init_replacement_module_handler = __esm({
645
645
  }
646
646
  });
647
647
 
648
- // ../../node_modules/plist/lib/parse.js
649
- var require_parse = __commonJS({
650
- "../../node_modules/plist/lib/parse.js"(exports2) {
651
- var { DOMParser } = require("@xmldom/xmldom");
652
- exports2.parse = parse4;
653
- var TEXT_NODE = 3;
654
- var CDATA_NODE = 4;
655
- var COMMENT_NODE = 8;
656
- function shouldIgnoreNode(node) {
657
- return node.nodeType === TEXT_NODE || node.nodeType === COMMENT_NODE || node.nodeType === CDATA_NODE;
658
- }
659
- function isEmptyNode(node) {
660
- if (!node.childNodes || node.childNodes.length === 0) {
661
- return true;
662
- } else {
663
- return false;
664
- }
665
- }
666
- function invariant(test, message) {
667
- if (!test) {
668
- throw new Error(message);
669
- }
670
- }
671
- function parse4(xml) {
672
- var doc = new DOMParser().parseFromString(xml, "text/xml");
673
- invariant(
674
- doc.documentElement.nodeName === "plist",
675
- "malformed document. First element should be <plist>"
676
- );
677
- var plist3 = parsePlistXML(doc.documentElement);
678
- if (plist3.length == 1) plist3 = plist3[0];
679
- return plist3;
680
- }
681
- function parsePlistXML(node) {
682
- var i, new_obj, key, val, new_arr, res, counter, type;
683
- if (!node) return null;
684
- if (node.nodeName === "plist") {
685
- new_arr = [];
686
- if (isEmptyNode(node)) {
687
- return new_arr;
688
- }
689
- for (i = 0; i < node.childNodes.length; i++) {
690
- if (!shouldIgnoreNode(node.childNodes[i])) {
691
- new_arr.push(parsePlistXML(node.childNodes[i]));
692
- }
693
- }
694
- return new_arr;
695
- } else if (node.nodeName === "dict") {
696
- new_obj = {};
697
- key = null;
698
- counter = 0;
699
- if (isEmptyNode(node)) {
700
- return new_obj;
701
- }
702
- for (i = 0; i < node.childNodes.length; i++) {
703
- if (shouldIgnoreNode(node.childNodes[i])) continue;
704
- if (counter % 2 === 0) {
705
- invariant(
706
- node.childNodes[i].nodeName === "key",
707
- "Missing key while parsing <dict/>."
708
- );
709
- key = parsePlistXML(node.childNodes[i]);
710
- } else {
711
- invariant(
712
- node.childNodes[i].nodeName !== "key",
713
- 'Unexpected key "' + parsePlistXML(node.childNodes[i]) + '" while parsing <dict/>.'
714
- );
715
- new_obj[key] = parsePlistXML(node.childNodes[i]);
716
- }
717
- counter += 1;
718
- }
719
- if (counter % 2 === 1) {
720
- new_obj[key] = "";
721
- }
722
- return new_obj;
723
- } else if (node.nodeName === "array") {
724
- new_arr = [];
725
- if (isEmptyNode(node)) {
726
- return new_arr;
727
- }
728
- for (i = 0; i < node.childNodes.length; i++) {
729
- if (!shouldIgnoreNode(node.childNodes[i])) {
730
- res = parsePlistXML(node.childNodes[i]);
731
- if (null != res) new_arr.push(res);
732
- }
733
- }
734
- return new_arr;
735
- } else if (node.nodeName === "#text") {
736
- } else if (node.nodeName === "key") {
737
- if (isEmptyNode(node)) {
738
- return "";
739
- }
740
- invariant(
741
- node.childNodes[0].nodeValue !== "__proto__",
742
- "__proto__ keys can lead to prototype pollution. More details on CVE-2022-22912"
743
- );
744
- return node.childNodes[0].nodeValue;
745
- } else if (node.nodeName === "string") {
746
- res = "";
747
- if (isEmptyNode(node)) {
748
- return res;
749
- }
750
- for (i = 0; i < node.childNodes.length; i++) {
751
- var type = node.childNodes[i].nodeType;
752
- if (type === TEXT_NODE || type === CDATA_NODE) {
753
- res += node.childNodes[i].nodeValue;
754
- }
755
- }
756
- return res;
757
- } else if (node.nodeName === "integer") {
758
- invariant(!isEmptyNode(node), 'Cannot parse "" as integer.');
759
- return parseInt(node.childNodes[0].nodeValue, 10);
760
- } else if (node.nodeName === "real") {
761
- invariant(!isEmptyNode(node), 'Cannot parse "" as real.');
762
- res = "";
763
- for (i = 0; i < node.childNodes.length; i++) {
764
- if (node.childNodes[i].nodeType === TEXT_NODE) {
765
- res += node.childNodes[i].nodeValue;
766
- }
767
- }
768
- return parseFloat(res);
769
- } else if (node.nodeName === "data") {
770
- res = "";
771
- if (isEmptyNode(node)) {
772
- return Buffer.from(res, "base64");
773
- }
774
- for (i = 0; i < node.childNodes.length; i++) {
775
- if (node.childNodes[i].nodeType === TEXT_NODE) {
776
- res += node.childNodes[i].nodeValue.replace(/\s+/g, "");
777
- }
778
- }
779
- return Buffer.from(res, "base64");
780
- } else if (node.nodeName === "date") {
781
- invariant(!isEmptyNode(node), 'Cannot parse "" as Date.');
782
- return new Date(node.childNodes[0].nodeValue);
783
- } else if (node.nodeName === "null") {
784
- return null;
785
- } else if (node.nodeName === "true") {
786
- return true;
787
- } else if (node.nodeName === "false") {
788
- return false;
789
- } else {
790
- throw new Error("Invalid PLIST tag " + node.nodeName);
791
- }
792
- }
793
- }
794
- });
795
-
796
- // ../../node_modules/plist/lib/build.js
797
- var require_build = __commonJS({
798
- "../../node_modules/plist/lib/build.js"(exports2) {
799
- var base64 = require("base64-js");
800
- var xmlbuilder = require("xmlbuilder");
801
- exports2.build = build;
802
- function ISODateString(d) {
803
- function pad(n) {
804
- return n < 10 ? "0" + n : n;
805
- }
806
- return d.getUTCFullYear() + "-" + pad(d.getUTCMonth() + 1) + "-" + pad(d.getUTCDate()) + "T" + pad(d.getUTCHours()) + ":" + pad(d.getUTCMinutes()) + ":" + pad(d.getUTCSeconds()) + "Z";
807
- }
808
- var toString = Object.prototype.toString;
809
- function type(obj) {
810
- var m = toString.call(obj).match(/\[object (.*)\]/);
811
- return m ? m[1] : m;
812
- }
813
- function build(obj, opts) {
814
- var XMLHDR = {
815
- version: "1.0",
816
- encoding: "UTF-8"
817
- };
818
- var XMLDTD = {
819
- pubid: "-//Apple//DTD PLIST 1.0//EN",
820
- sysid: "http://www.apple.com/DTDs/PropertyList-1.0.dtd"
821
- };
822
- var doc = xmlbuilder.create("plist");
823
- doc.dec(XMLHDR.version, XMLHDR.encoding, XMLHDR.standalone);
824
- doc.dtd(XMLDTD.pubid, XMLDTD.sysid);
825
- doc.att("version", "1.0");
826
- walk_obj(obj, doc);
827
- if (!opts) opts = {};
828
- opts.pretty = opts.pretty !== false;
829
- return doc.end(opts);
830
- }
831
- function walk_obj(next, next_child) {
832
- var tag_type, i, prop;
833
- var name2 = type(next);
834
- if ("Undefined" == name2) {
835
- return;
836
- } else if (Array.isArray(next)) {
837
- next_child = next_child.ele("array");
838
- for (i = 0; i < next.length; i++) {
839
- walk_obj(next[i], next_child);
840
- }
841
- } else if (Buffer.isBuffer(next)) {
842
- next_child.ele("data").raw(next.toString("base64"));
843
- } else if ("Object" == name2) {
844
- next_child = next_child.ele("dict");
845
- for (prop in next) {
846
- if (next.hasOwnProperty(prop)) {
847
- next_child.ele("key").txt(prop);
848
- walk_obj(next[prop], next_child);
849
- }
850
- }
851
- } else if ("Number" == name2) {
852
- tag_type = next % 1 === 0 ? "integer" : "real";
853
- next_child.ele(tag_type).txt(next.toString());
854
- } else if ("BigInt" == name2) {
855
- next_child.ele("integer").txt(next);
856
- } else if ("Date" == name2) {
857
- next_child.ele("date").txt(ISODateString(new Date(next)));
858
- } else if ("Boolean" == name2) {
859
- next_child.ele(next ? "true" : "false");
860
- } else if ("String" == name2) {
861
- next_child.ele("string").txt(next);
862
- } else if ("ArrayBuffer" == name2) {
863
- next_child.ele("data").raw(base64.fromByteArray(next));
864
- } else if (next && next.buffer && "ArrayBuffer" == type(next.buffer)) {
865
- next_child.ele("data").raw(base64.fromByteArray(new Uint8Array(next.buffer), next_child));
866
- } else if ("Null" === name2) {
867
- next_child.ele("null").txt("");
868
- }
869
- }
870
- }
871
- });
872
-
873
- // ../../node_modules/plist/index.js
874
- var require_plist = __commonJS({
875
- "../../node_modules/plist/index.js"(exports2) {
876
- var parserFunctions = require_parse();
877
- Object.keys(parserFunctions).forEach(function(k) {
878
- exports2[k] = parserFunctions[k];
879
- });
880
- var builderFunctions = require_build();
881
- Object.keys(builderFunctions).forEach(function(k) {
882
- exports2[k] = builderFunctions[k];
883
- });
884
- }
885
- });
886
-
887
648
  // ../../node_modules/json5/lib/unicode.js
888
649
  var require_unicode = __commonJS({
889
650
  "../../node_modules/json5/lib/unicode.js"(exports2, module2) {
@@ -918,7 +679,7 @@ var require_util = __commonJS({
918
679
  });
919
680
 
920
681
  // ../../node_modules/json5/lib/parse.js
921
- var require_parse2 = __commonJS({
682
+ var require_parse = __commonJS({
922
683
  "../../node_modules/json5/lib/parse.js"(exports2, module2) {
923
684
  var util = require_util();
924
685
  var source;
@@ -1986,7 +1747,7 @@ var require_stringify = __commonJS({
1986
1747
  // ../../node_modules/json5/lib/index.js
1987
1748
  var require_lib = __commonJS({
1988
1749
  "../../node_modules/json5/lib/index.js"(exports2, module2) {
1989
- var parse4 = require_parse2();
1750
+ var parse4 = require_parse();
1990
1751
  var stringify4 = require_stringify();
1991
1752
  var JSON53 = {
1992
1753
  parse: parse4,
@@ -2013,6 +1774,258 @@ var init_version = __esm({
2013
1774
  }
2014
1775
  });
2015
1776
 
1777
+ // ../contrast-runtime-delivery/src/product.ts
1778
+ var init_product = __esm({
1779
+ "../contrast-runtime-delivery/src/product.ts"() {
1780
+ "use strict";
1781
+ init_version();
1782
+ }
1783
+ });
1784
+
1785
+ // ../contrast-runtime-delivery/src/index.ts
1786
+ var init_src = __esm({
1787
+ "../contrast-runtime-delivery/src/index.ts"() {
1788
+ "use strict";
1789
+ init_process_group();
1790
+ init_product();
1791
+ init_product();
1792
+ }
1793
+ });
1794
+
1795
+ // src/home-paths.ts
1796
+ function rnxHomeDir() {
1797
+ const override = process.env[PEACH_HOME_ENV];
1798
+ if (override && override.length > 0) return import_node_path8.default.resolve(override);
1799
+ return import_node_path8.default.join((0, import_node_os2.homedir)(), ".peach");
1800
+ }
1801
+ function runtimesDir() {
1802
+ return import_node_path8.default.join(rnxHomeDir(), "runtimes");
1803
+ }
1804
+ function runtimeDir(version) {
1805
+ return import_node_path8.default.join(runtimesDir(), version);
1806
+ }
1807
+ function activeRuntimeFile() {
1808
+ return import_node_path8.default.join(runtimesDir(), ACTIVE_RUNTIME_FILE);
1809
+ }
1810
+ function readActiveRuntime() {
1811
+ try {
1812
+ const value = import_node_fs8.default.readFileSync(activeRuntimeFile(), "utf8").trim();
1813
+ return value.length > 0 ? value : null;
1814
+ } catch {
1815
+ return null;
1816
+ }
1817
+ }
1818
+ var import_node_fs8, import_node_os2, import_node_path8, PEACH_HOME_ENV, ACTIVE_RUNTIME_FILE, DAEMON_LOCKFILE_MAX_BYTES;
1819
+ var init_home_paths = __esm({
1820
+ "src/home-paths.ts"() {
1821
+ "use strict";
1822
+ import_node_fs8 = __toESM(require("node:fs"), 1);
1823
+ import_node_os2 = require("node:os");
1824
+ import_node_path8 = __toESM(require("node:path"), 1);
1825
+ PEACH_HOME_ENV = "PEACH_HOME";
1826
+ ACTIVE_RUNTIME_FILE = "active";
1827
+ DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
1828
+ }
1829
+ });
1830
+
1831
+ // src/runtime-assets.ts
1832
+ function findMonorepoRoot() {
1833
+ if (_monorepoRootCache !== void 0) return _monorepoRootCache;
1834
+ let dir = import_path2.default.dirname((0, import_url.fileURLToPath)(__sootsim_import_meta_url));
1835
+ for (let i = 0; i < 12 && dir !== import_path2.default.dirname(dir); i++) {
1836
+ if (import_fs2.default.existsSync(import_path2.default.join(dir, "packages/peach-engine/package.json")) && import_fs2.default.existsSync(import_path2.default.join(dir, "public/sootsim"))) {
1837
+ _monorepoRootCache = dir;
1838
+ return dir;
1839
+ }
1840
+ dir = import_path2.default.dirname(dir);
1841
+ }
1842
+ _monorepoRootCache = null;
1843
+ return null;
1844
+ }
1845
+ function resolveDevCheckoutRuntimeAssetRoot() {
1846
+ if (process.env.PEACH_HOME && readActiveRuntime()) return null;
1847
+ const root = findMonorepoRoot();
1848
+ if (!root) return null;
1849
+ return import_path2.default.join(root, "public/sootsim");
1850
+ }
1851
+ function resolveDevCheckoutRuntimeRoot() {
1852
+ const devBuild = resolveDevCheckoutRuntimeAssetRoot();
1853
+ if (!devBuild) return null;
1854
+ if (import_fs2.default.existsSync(import_path2.default.join(devBuild, "index.html")) && import_fs2.default.existsSync(import_path2.default.join(devBuild, "engine/index.html")) && import_fs2.default.existsSync(import_path2.default.join(devBuild, "engine-tenant/worker.js")) && import_fs2.default.existsSync(import_path2.default.join(devBuild, "engine-tenant/worker.prod.js"))) {
1855
+ return devBuild;
1856
+ }
1857
+ return null;
1858
+ }
1859
+ function resolveActiveRuntimeRoot() {
1860
+ const devRoot = resolveDevCheckoutRuntimeRoot();
1861
+ if (devRoot) return devRoot;
1862
+ const active = readActiveRuntime();
1863
+ if (!active) return null;
1864
+ const dir = runtimeDir(active);
1865
+ if (!import_fs2.default.existsSync(import_path2.default.join(dir, "index.html"))) return null;
1866
+ return dir;
1867
+ }
1868
+ function isRuntimeVersionHostname(hostname) {
1869
+ return hostname.toLowerCase().endsWith(RUNTIME_VERSION_HOSTNAME_SUFFIX);
1870
+ }
1871
+ function runtimeVersionFromHostname(hostname) {
1872
+ if (!isRuntimeVersionHostname(hostname)) return null;
1873
+ const labels = hostname.slice(0, -RUNTIME_VERSION_HOSTNAME_SUFFIX.length).split(".");
1874
+ if (labels.length === 0 || labels.some((label) => !/^[0-9a-f]{1,60}$/i.test(label))) {
1875
+ return null;
1876
+ }
1877
+ const encoded = labels.join("");
1878
+ if (encoded.length % 2 !== 0) return null;
1879
+ try {
1880
+ const version = Buffer.from(encoded, "hex").toString("utf8");
1881
+ return isValidRuntimeVersion(version) ? version : null;
1882
+ } catch {
1883
+ return null;
1884
+ }
1885
+ }
1886
+ function resolveInstalledRuntimeRoot(version) {
1887
+ const dir = runtimeDir(version);
1888
+ if (!import_fs2.default.existsSync(import_path2.default.join(dir, "index.html"))) return null;
1889
+ return dir;
1890
+ }
1891
+ function resolveRuntimeRootForHostname(hostname) {
1892
+ if (!isRuntimeVersionHostname(hostname)) return resolveActiveRuntimeRoot();
1893
+ const version = runtimeVersionFromHostname(hostname);
1894
+ return version ? resolveInstalledRuntimeRoot(version) : null;
1895
+ }
1896
+ function resolveRuntimeRootForRequestHost(host) {
1897
+ if (!host) return resolveActiveRuntimeRoot();
1898
+ try {
1899
+ return resolveRuntimeRootForHostname(new URL(`http://${host}`).hostname);
1900
+ } catch {
1901
+ return null;
1902
+ }
1903
+ }
1904
+ function isRootRuntimeAssetPath(pathname) {
1905
+ return ROOT_RUNTIME_PATHS.some((p) => pathname === p || pathname.startsWith(p));
1906
+ }
1907
+ function resolveRuntimeFilePath(runtimeRoot, pathname) {
1908
+ if (!pathname.startsWith("/")) return null;
1909
+ if (pathname.includes("\0") || pathname.includes("\\")) return null;
1910
+ for (const segment of pathname.split("/")) {
1911
+ if (segment === "..") return null;
1912
+ }
1913
+ const normalized = pathname.startsWith("/sootsim/") ? pathname.slice("/sootsim".length) : pathname;
1914
+ const fullPath = import_path2.default.resolve(runtimeRoot, normalized.replace(/^\/+/, ""));
1915
+ const rootWithSep = runtimeRoot.endsWith(import_path2.default.sep) ? runtimeRoot : runtimeRoot + import_path2.default.sep;
1916
+ if (!fullPath.startsWith(rootWithSep) && fullPath !== runtimeRoot) return null;
1917
+ if (!import_fs2.default.existsSync(fullPath) || !import_fs2.default.statSync(fullPath).isFile()) return null;
1918
+ return fullPath;
1919
+ }
1920
+ function serveRuntimeFile(req, res, fullPath) {
1921
+ const ext = import_path2.default.extname(fullPath);
1922
+ const stat = import_fs2.default.statSync(fullPath);
1923
+ const lastModified = stat.mtime.toUTCString();
1924
+ res.setHeader("content-type", MIME_TYPES[ext] || "application/octet-stream");
1925
+ if (/^canvaskit-graphite-pipelines-[0-9a-f]{8}\.bin$/.test(import_path2.default.basename(fullPath))) {
1926
+ res.setHeader("cache-control", "public, max-age=31536000, immutable");
1927
+ import_fs2.default.createReadStream(fullPath).pipe(res);
1928
+ return;
1929
+ }
1930
+ res.setHeader("cache-control", "no-cache");
1931
+ res.setHeader("last-modified", lastModified);
1932
+ if (req?.headers?.["if-modified-since"] === lastModified) {
1933
+ res.statusCode = 304;
1934
+ res.end();
1935
+ return;
1936
+ }
1937
+ sendFileWithRanges(req, res, fullPath, stat.size, {});
1938
+ }
1939
+ function sendFileWithRanges(req, res, filePath, total, headers) {
1940
+ const head = (req?.method || "GET").toUpperCase() === "HEAD";
1941
+ const range = /^bytes=(\d*)-(\d*)$/.exec(req?.headers?.range || "");
1942
+ const invalid = range && range[1] && range[2] && Number(range[2]) < Number(range[1]);
1943
+ if (range && (range[1] || range[2]) && !invalid) {
1944
+ const [, startRaw, endRaw] = range;
1945
+ const start = startRaw ? Number(startRaw) : Math.max(0, total - Number(endRaw));
1946
+ const end = startRaw && endRaw ? Math.min(Number(endRaw), total - 1) : total - 1;
1947
+ if (start > end || start >= total) {
1948
+ res.writeHead(416, { ...headers, "Content-Range": `bytes */${total}` });
1949
+ res.end();
1950
+ return;
1951
+ }
1952
+ res.writeHead(206, {
1953
+ ...headers,
1954
+ "Content-Range": `bytes ${start}-${end}/${total}`,
1955
+ "Accept-Ranges": "bytes",
1956
+ "Content-Length": String(end - start + 1)
1957
+ });
1958
+ if (head) res.end();
1959
+ else streamFile(res, import_fs2.default.createReadStream(filePath, { start, end }));
1960
+ return;
1961
+ }
1962
+ res.writeHead(200, {
1963
+ ...headers,
1964
+ "Accept-Ranges": "bytes",
1965
+ "Content-Length": String(total)
1966
+ });
1967
+ if (head || total === 0) res.end();
1968
+ else streamFile(res, import_fs2.default.createReadStream(filePath, { start: 0, end: total - 1 }));
1969
+ }
1970
+ function streamFile(res, stream) {
1971
+ stream.on("error", (error) => res.destroy(error));
1972
+ stream.pipe(res);
1973
+ }
1974
+ var import_fs2, import_path2, import_url, SOOTSIM_RUNTIME_MISSING_MESSAGE, _monorepoRootCache, MIME_TYPES, ROOT_RUNTIME_PATHS, RUNTIME_VERSION_HOSTNAME_SUFFIX;
1975
+ var init_runtime_assets = __esm({
1976
+ "src/runtime-assets.ts"() {
1977
+ "use strict";
1978
+ import_fs2 = __toESM(require("fs"), 1);
1979
+ import_path2 = __toESM(require("path"), 1);
1980
+ import_url = require("url");
1981
+ init_src();
1982
+ init_home_paths();
1983
+ SOOTSIM_RUNTIME_MISSING_MESSAGE = "[peach] no engine runtime installed. run `peach runtime install`";
1984
+ MIME_TYPES = {
1985
+ ".js": "application/javascript",
1986
+ ".mjs": "application/javascript",
1987
+ ".css": "text/css",
1988
+ ".html": "text/html",
1989
+ ".wasm": "application/wasm",
1990
+ ".json": "application/json",
1991
+ ".jpg": "image/jpeg",
1992
+ ".jpeg": "image/jpeg",
1993
+ ".png": "image/png",
1994
+ ".svg": "image/svg+xml",
1995
+ ".webp": "image/webp",
1996
+ ".glb": "model/gltf-binary",
1997
+ ".ttf": "font/ttf",
1998
+ ".otf": "font/otf",
1999
+ ".woff": "font/woff",
2000
+ ".woff2": "font/woff2",
2001
+ ".mp3": "audio/mpeg",
2002
+ ".wav": "audio/wav",
2003
+ ".mp4": "video/mp4",
2004
+ ".m4v": "video/mp4",
2005
+ ".mov": "video/quicktime",
2006
+ ".webm": "video/webm"
2007
+ };
2008
+ ROOT_RUNTIME_PATHS = [
2009
+ "/assets/",
2010
+ "/engine/",
2011
+ "/engine-tenant/",
2012
+ "/photos/",
2013
+ "/three-mode/",
2014
+ "/fonts/",
2015
+ "/icons/",
2016
+ "/sounds/",
2017
+ "/spike/",
2018
+ "/test-wallpaper.jpg",
2019
+ "/preview-sw.js",
2020
+ "/peach.svg",
2021
+ "/bedrock-sqlite.wasm",
2022
+ "/bedrock-sqlite.js",
2023
+ "/sootsim/"
2024
+ ];
2025
+ RUNTIME_VERSION_HOSTNAME_SUFFIX = ".runtime.localhost";
2026
+ }
2027
+ });
2028
+
2016
2029
  // src/nativeViewSourceContract.ts
2017
2030
  function isNativeViewSource(value) {
2018
2031
  if (!isRecord(value)) return false;
@@ -6027,34 +6040,6 @@ var import_fs3 = __toESM(require("fs"), 1);
6027
6040
  var import_module = require("module");
6028
6041
  var import_node_crypto3 = require("node:crypto");
6029
6042
  var import_path3 = __toESM(require("path"), 1);
6030
-
6031
- // ../peach-engine/src/platform/adapter.ts
6032
- var IOS_ADAPTER = Object.freeze({
6033
- id: "ios",
6034
- displayName: "iOS",
6035
- isIOS: true,
6036
- isAndroid: false,
6037
- select: (registry) => registry.ios
6038
- });
6039
- var ANDROID_ADAPTER = Object.freeze({
6040
- id: "android",
6041
- displayName: "Android",
6042
- isIOS: false,
6043
- isAndroid: true,
6044
- select: (registry) => registry.android
6045
- });
6046
- var RUNTIME_PLATFORM_ADAPTERS = Object.freeze({
6047
- ios: IOS_ADAPTER,
6048
- android: ANDROID_ADAPTER
6049
- });
6050
- function isRuntimePlatform(value) {
6051
- return value === "ios" || value === "android";
6052
- }
6053
- function getRuntimePlatformAdapter(platform) {
6054
- return RUNTIME_PLATFORM_ADAPTERS[platform];
6055
- }
6056
-
6057
- // src/metro-plugin.ts
6058
6043
  init_app_project();
6059
6044
 
6060
6045
  // src/android-autolinking.ts
@@ -8403,7 +8388,7 @@ var PEACH_UPSTREAM_MODULES = {
8403
8388
  ...PEACH_REACT_NATIVE_UPSTREAM_MODULES
8404
8389
  };
8405
8390
 
8406
- // ../peach-engine/src/stub-pattern-matcher.ts
8391
+ // src/stub-pattern-matcher.ts
8407
8392
  function extractPackageFromPath(modulePath) {
8408
8393
  let nodeModulesIndex = modulePath.lastIndexOf("/node_modules/");
8409
8394
  let prefixLength = "/node_modules/".length;
@@ -8425,25 +8410,74 @@ function packageNameAt(modulePath, start) {
8425
8410
  }
8426
8411
 
8427
8412
  // src/installed-package-versions.ts
8428
- function readInstalledPackage(projectRoot, name2) {
8429
- let dir = projectRoot;
8430
- for (; ; ) {
8431
- let manifest;
8432
- try {
8433
- manifest = JSON.parse(
8434
- import_fs.default.readFileSync(import_path.default.join(dir, "node_modules", name2, "package.json"), "utf8")
8435
- );
8436
- } catch (error) {
8437
- if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
8438
- throw error;
8413
+ function* exists(target) {
8414
+ return (yield { op: "exists", path: target }) === true;
8415
+ }
8416
+ function* readManifest(target) {
8417
+ const manifest = yield { op: "manifest", path: target };
8418
+ return typeof manifest === "object" ? manifest : null;
8419
+ }
8420
+ function parseManifest(source) {
8421
+ const manifest = JSON.parse(source);
8422
+ return typeof manifest === "object" && manifest !== null ? manifest : null;
8423
+ }
8424
+ function isMissing(error) {
8425
+ return error instanceof Error && "code" in error && error.code === "ENOENT";
8426
+ }
8427
+ function answerSync(step) {
8428
+ if (step.op === "exists") return import_fs.default.existsSync(step.path);
8429
+ if (step.op === "realpath") return import_fs.default.realpathSync(step.path);
8430
+ try {
8431
+ return parseManifest(import_fs.default.readFileSync(step.path, "utf8"));
8432
+ } catch (error) {
8433
+ if (isMissing(error)) return null;
8434
+ throw error;
8435
+ }
8436
+ }
8437
+ function runSync(walk) {
8438
+ for (let step = walk.next(); ; ) {
8439
+ if (step.done) return step.value;
8440
+ step = walk.next(answerSync(step.value));
8441
+ }
8442
+ }
8443
+ function createInstalledPackageReader() {
8444
+ const hasModules = /* @__PURE__ */ new Map();
8445
+ const manifests = /* @__PURE__ */ new Map();
8446
+ return function* readInstalledPackage(fromDir, name2) {
8447
+ for (let dir = fromDir; ; ) {
8448
+ if (import_path.default.basename(dir) !== "node_modules") {
8449
+ const modules = import_path.default.join(dir, "node_modules");
8450
+ let present = hasModules.get(dir);
8451
+ if (present === void 0) {
8452
+ present = yield* exists(modules);
8453
+ hasModules.set(dir, present);
8454
+ }
8455
+ if (present) {
8456
+ const root = import_path.default.join(modules, name2);
8457
+ let installed = manifests.get(root);
8458
+ if (installed === void 0) {
8459
+ const manifest = yield* readManifest(import_path.default.join(root, "package.json"));
8460
+ installed = manifest ? { root, manifest } : null;
8461
+ manifests.set(root, installed);
8462
+ }
8463
+ if (installed) return installed;
8464
+ }
8439
8465
  }
8440
8466
  const parent = import_path.default.dirname(dir);
8441
8467
  if (parent === dir) return null;
8442
8468
  dir = parent;
8443
- continue;
8444
8469
  }
8445
- return typeof manifest === "object" && manifest !== null ? { root: import_path.default.join(dir, "node_modules", name2), manifest } : null;
8470
+ };
8471
+ }
8472
+ function* installedVersionsWalk(projectRoot, names) {
8473
+ const readInstalledPackage = createInstalledPackageReader();
8474
+ const versions = {};
8475
+ for (const name2 of [...names].sort()) {
8476
+ const installed = yield* readInstalledPackage(projectRoot, name2);
8477
+ const version = installed && Reflect.get(installed.manifest, "version");
8478
+ if (typeof version === "string" && version.length > 0) versions[name2] = version;
8446
8479
  }
8480
+ return versions;
8447
8481
  }
8448
8482
  function readInstalledPackageVersions(projectRoot, modulePaths) {
8449
8483
  const names = /* @__PURE__ */ new Set();
@@ -8451,13 +8485,7 @@ function readInstalledPackageVersions(projectRoot, modulePaths) {
8451
8485
  const name2 = extractPackageFromPath(modulePath.replaceAll(import_path.default.sep, "/"));
8452
8486
  if (name2) names.add(name2);
8453
8487
  }
8454
- const versions = {};
8455
- for (const name2 of [...names].sort()) {
8456
- const installed = readInstalledPackage(projectRoot, name2);
8457
- const version = installed && Reflect.get(installed.manifest, "version");
8458
- if (typeof version === "string" && version.length > 0) versions[name2] = version;
8459
- }
8460
- return versions;
8488
+ return runSync(installedVersionsWalk(projectRoot, names));
8461
8489
  }
8462
8490
 
8463
8491
  // src/metro-production-bundle.ts
@@ -8935,8 +8963,13 @@ function visitXcodeTargetMembers(objects, targetId, resolvePath, filesUnder, joi
8935
8963
  if (file.endsWith(".swift")) {
8936
8964
  if (!relative3.split("/").some((segment) => BUNDLE_DIR.test(segment)))
8937
8965
  visit3(file, "source");
8938
- } else if (/\.(h|m|mm|c|cpp|metal)$/.test(file)) {
8939
- if (!file.endsWith(".h")) visit3(file, "source");
8966
+ } else if (/\.(h|hh|hpp|hxx|pch)$/.test(file)) {
8967
+ visit3(
8968
+ file,
8969
+ relative3.split("/").some((segment) => BUNDLE_DIR.test(segment)) ? "resource" : "header"
8970
+ );
8971
+ } else if (/\.(m|mm|c|cc|cpp|cxx|metal)$/.test(file)) {
8972
+ visit3(file, "source");
8940
8973
  } else visit3(file, "resource");
8941
8974
  }
8942
8975
  }
@@ -9445,7 +9478,7 @@ var import_node_path6 = __toESM(require("node:path"), 1);
9445
9478
  init_is_record();
9446
9479
 
9447
9480
  // src/plist.ts
9448
- var import_plist = __toESM(require_plist(), 1);
9481
+ var import_plist = __toESM(require("plist"), 1);
9449
9482
  function parsePlistSource(source) {
9450
9483
  return import_plist.default.parse(source);
9451
9484
  }
@@ -9455,7 +9488,7 @@ var import_node_child_process2 = require("node:child_process");
9455
9488
  var import_node_crypto2 = require("node:crypto");
9456
9489
  var import_node_fs5 = __toESM(require("node:fs"), 1);
9457
9490
  var import_node_path5 = __toESM(require("node:path"), 1);
9458
- var import_plist2 = __toESM(require_plist(), 1);
9491
+ var import_plist2 = __toESM(require("plist"), 1);
9459
9492
 
9460
9493
  // src/xcode-json-project.ts
9461
9494
  var import_node_path4 = __toESM(require("node:path"), 1);
@@ -10111,6 +10144,7 @@ function targetMembers(ref, settings, options, settingKeys, projectInputs) {
10111
10144
  const targetName = str(target.name) ?? targetId;
10112
10145
  const sources = /* @__PURE__ */ new Set();
10113
10146
  const allSources = /* @__PURE__ */ new Set();
10147
+ const headers = /* @__PURE__ */ new Set();
10114
10148
  const resources = /* @__PURE__ */ new Set();
10115
10149
  const scriptForOutput = /* @__PURE__ */ new Map();
10116
10150
  for (const phaseId of list(target.buildPhases)) {
@@ -10239,6 +10273,10 @@ ${output}`
10239
10273
  (file) => isDirectory(file) ? walkFiles(file) : import_node_fs5.default.existsSync(file) ? [file] : [],
10240
10274
  import_node_path5.default.join,
10241
10275
  (file, kind) => {
10276
+ if (kind === "header") {
10277
+ headers.add(file);
10278
+ return;
10279
+ }
10242
10280
  if (kind === "resource") {
10243
10281
  resources.add(file);
10244
10282
  return;
@@ -10268,7 +10306,8 @@ ${output}`
10268
10306
  return {
10269
10307
  sources: [...sources].sort(),
10270
10308
  resources: [...resources].sort(),
10271
- allSources: [...allSources].sort()
10309
+ allSources: [...allSources].sort(),
10310
+ headers: [...headers].sort()
10272
10311
  };
10273
10312
  }
10274
10313
  function commonAncestor(dirs) {
@@ -10444,7 +10483,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
10444
10483
  );
10445
10484
  for (const file of read) xcconfigs.add(file);
10446
10485
  const swiftVersion = Number.parseFloat(settings2("SWIFT_VERSION") || "5");
10447
- const members = targetMembers(ref, settings2, options, keys, xcconfigs);
10486
+ const { headers, ...members } = targetMembers(ref, settings2, options, keys, xcconfigs);
10448
10487
  const searchRules = recursiveSearchRules(settings2);
10449
10488
  const implementations = members.allSources.filter(
10450
10489
  (file) => /\.(c|cc|cpp|cxx|m|mm)$/.test(file)
@@ -10479,10 +10518,25 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
10479
10518
  iosDeploymentTarget: settings2("IPHONEOS_DEPLOYMENT_TARGET") || null,
10480
10519
  ...implementations.some((file) => /\.mm?$/.test(file)) ? {
10481
10520
  objc: {
10482
- headers: Object.keys(ref.project.objects).flatMap((id) => {
10483
- const file = ref.project.resolvePath(id);
10484
- return file && /\.(h|hh|hpp|hxx|pch)$/.test(file) && import_node_fs5.default.existsSync(file) ? [file] : [];
10521
+ publicHeaders: list(ref.target.buildPhases).flatMap((phaseId) => {
10522
+ const phase = ref.project.object(phaseId);
10523
+ if (phase?.isa !== "PBXHeadersBuildPhase") return [];
10524
+ return list(phase.files).flatMap((id) => {
10525
+ const file = ref.project.object(id);
10526
+ const attributes = isDict(file?.settings) ? list(file.settings.ATTRIBUTES) : [];
10527
+ const resolved = ref.project.resolvePath(str(file?.fileRef) ?? "");
10528
+ return attributes.includes("Public") && resolved ? [resolved] : [];
10529
+ });
10485
10530
  }),
10531
+ headers: [
10532
+ .../* @__PURE__ */ new Set([
10533
+ ...headers,
10534
+ ...Object.keys(ref.project.objects).flatMap((id) => {
10535
+ const file = ref.project.resolvePath(id);
10536
+ return file && /\.(h|hh|hpp|hxx|pch)$/.test(file) && import_node_fs5.default.existsSync(file) ? [file] : [];
10537
+ })
10538
+ ])
10539
+ ],
10486
10540
  prefixHeader: settings2("GCC_PREFIX_HEADER") ? absolute(settings2("GCC_PREFIX_HEADER")) : null,
10487
10541
  bridgingHeader: settings2("SWIFT_OBJC_BRIDGING_HEADER") ? absolute(settings2("SWIFT_OBJC_BRIDGING_HEADER")) : null,
10488
10542
  headerSearchPaths: [
@@ -10493,7 +10547,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
10493
10547
  settings2("FRAMEWORK_SEARCH_PATHS")
10494
10548
  ).flatMap((raw) => expandSearchPath(absolute(raw), searchRules)),
10495
10549
  flags: [
10496
- ...settings2("CLANG_ENABLE_OBJC_ARC") === "YES" ? ["-fobjc-arc"] : [],
10550
+ settings2("CLANG_ENABLE_OBJC_ARC") === "YES" ? "-fobjc-arc" : "-fno-objc-arc",
10497
10551
  ...settings2("CLANG_ENABLE_OBJC_WEAK") === "YES" ? ["-fobjc-weak"] : [],
10498
10552
  ...settings2("CLANG_ENABLE_MODULES") === "YES" ? ["-fmodules"] : [],
10499
10553
  ...settings2("GCC_C_LANGUAGE_STANDARD") ? [`-std=${settings2("GCC_C_LANGUAGE_STANDARD")}`] : [],
@@ -11413,229 +11467,33 @@ function insertPackageVersionsFooter(source, versions) {
11413
11467
  return insertBundleGlobalFooter(source, FOOTER2, readPackageVersions(versions));
11414
11468
  }
11415
11469
 
11416
- // src/runtime-assets.ts
11417
- var import_fs2 = __toESM(require("fs"), 1);
11418
- var import_path2 = __toESM(require("path"), 1);
11419
- var import_url = require("url");
11420
-
11421
- // ../contrast-runtime-delivery/src/index.ts
11422
- init_process_group();
11423
-
11424
- // ../contrast-runtime-delivery/src/product.ts
11425
- init_version();
11426
-
11427
- // src/home-paths.ts
11428
- var import_node_fs8 = __toESM(require("node:fs"), 1);
11429
- var import_node_os2 = require("node:os");
11430
- var import_node_path8 = __toESM(require("node:path"), 1);
11431
- var PEACH_HOME_ENV = "PEACH_HOME";
11432
- var ACTIVE_RUNTIME_FILE = "active";
11433
- function rnxHomeDir() {
11434
- const override = process.env[PEACH_HOME_ENV];
11435
- if (override && override.length > 0) return import_node_path8.default.resolve(override);
11436
- return import_node_path8.default.join((0, import_node_os2.homedir)(), ".peach");
11437
- }
11438
- function runtimesDir() {
11439
- return import_node_path8.default.join(rnxHomeDir(), "runtimes");
11440
- }
11441
- function runtimeDir(version) {
11442
- return import_node_path8.default.join(runtimesDir(), version);
11443
- }
11444
- function activeRuntimeFile() {
11445
- return import_node_path8.default.join(runtimesDir(), ACTIVE_RUNTIME_FILE);
11446
- }
11447
- function readActiveRuntime() {
11448
- try {
11449
- const value = import_node_fs8.default.readFileSync(activeRuntimeFile(), "utf8").trim();
11450
- return value.length > 0 ? value : null;
11451
- } catch {
11452
- return null;
11453
- }
11454
- }
11455
- var DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
11470
+ // src/metro-plugin.ts
11471
+ init_runtime_assets();
11456
11472
 
11457
- // src/runtime-assets.ts
11458
- var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[peach] no engine runtime installed. run `peach runtime install`";
11459
- var _monorepoRootCache;
11460
- function findMonorepoRoot() {
11461
- if (_monorepoRootCache !== void 0) return _monorepoRootCache;
11462
- let dir = import_path2.default.dirname((0, import_url.fileURLToPath)(__sootsim_import_meta_url));
11463
- for (let i = 0; i < 12 && dir !== import_path2.default.dirname(dir); i++) {
11464
- if (import_fs2.default.existsSync(import_path2.default.join(dir, "packages/peach-engine/package.json")) && import_fs2.default.existsSync(import_path2.default.join(dir, "public/sootsim"))) {
11465
- _monorepoRootCache = dir;
11466
- return dir;
11467
- }
11468
- dir = import_path2.default.dirname(dir);
11469
- }
11470
- _monorepoRootCache = null;
11471
- return null;
11472
- }
11473
- function resolveDevCheckoutRuntimeRoot() {
11474
- if (process.env.PEACH_HOME && readActiveRuntime()) return null;
11475
- const root = findMonorepoRoot();
11476
- if (!root) return null;
11477
- const devBuild = import_path2.default.join(root, "public/sootsim");
11478
- if (import_fs2.default.existsSync(import_path2.default.join(devBuild, "index.html")) && import_fs2.default.existsSync(import_path2.default.join(devBuild, "engine/index.html")) && import_fs2.default.existsSync(import_path2.default.join(devBuild, "engine-tenant/worker.js")) && import_fs2.default.existsSync(import_path2.default.join(devBuild, "engine-tenant/worker.prod.js"))) {
11479
- return devBuild;
11480
- }
11481
- return null;
11482
- }
11483
- var MIME_TYPES = {
11484
- ".js": "application/javascript",
11485
- ".mjs": "application/javascript",
11486
- ".css": "text/css",
11487
- ".html": "text/html",
11488
- ".wasm": "application/wasm",
11489
- ".json": "application/json",
11490
- ".jpg": "image/jpeg",
11491
- ".jpeg": "image/jpeg",
11492
- ".png": "image/png",
11493
- ".svg": "image/svg+xml",
11494
- ".webp": "image/webp",
11495
- ".glb": "model/gltf-binary",
11496
- ".ttf": "font/ttf",
11497
- ".otf": "font/otf",
11498
- ".woff": "font/woff",
11499
- ".woff2": "font/woff2",
11500
- ".mp3": "audio/mpeg",
11501
- ".wav": "audio/wav",
11502
- ".mp4": "video/mp4",
11503
- ".m4v": "video/mp4",
11504
- ".mov": "video/quicktime",
11505
- ".webm": "video/webm"
11506
- };
11507
- var ROOT_RUNTIME_PATHS = [
11508
- "/assets/",
11509
- "/engine/",
11510
- "/engine-tenant/",
11511
- "/photos/",
11512
- "/three-mode/",
11513
- "/fonts/",
11514
- "/icons/",
11515
- "/sounds/",
11516
- "/spike/",
11517
- "/test-wallpaper.jpg",
11518
- "/preview-sw.js",
11519
- "/peach.svg",
11520
- "/bedrock-sqlite.wasm",
11521
- "/bedrock-sqlite.js",
11522
- "/sootsim/"
11523
- ];
11524
- function resolveActiveRuntimeRoot() {
11525
- const devRoot = resolveDevCheckoutRuntimeRoot();
11526
- if (devRoot) return devRoot;
11527
- const active = readActiveRuntime();
11528
- if (!active) return null;
11529
- const dir = runtimeDir(active);
11530
- if (!import_fs2.default.existsSync(import_path2.default.join(dir, "index.html"))) return null;
11531
- return dir;
11532
- }
11533
- var RUNTIME_VERSION_HOSTNAME_SUFFIX = ".runtime.localhost";
11534
- function isRuntimeVersionHostname(hostname) {
11535
- return hostname.toLowerCase().endsWith(RUNTIME_VERSION_HOSTNAME_SUFFIX);
11536
- }
11537
- function runtimeVersionFromHostname(hostname) {
11538
- if (!isRuntimeVersionHostname(hostname)) return null;
11539
- const labels = hostname.slice(0, -RUNTIME_VERSION_HOSTNAME_SUFFIX.length).split(".");
11540
- if (labels.length === 0 || labels.some((label) => !/^[0-9a-f]{1,60}$/i.test(label))) {
11541
- return null;
11542
- }
11543
- const encoded = labels.join("");
11544
- if (encoded.length % 2 !== 0) return null;
11545
- try {
11546
- const version = Buffer.from(encoded, "hex").toString("utf8");
11547
- return isValidRuntimeVersion(version) ? version : null;
11548
- } catch {
11549
- return null;
11550
- }
11551
- }
11552
- function resolveInstalledRuntimeRoot(version) {
11553
- const dir = runtimeDir(version);
11554
- if (!import_fs2.default.existsSync(import_path2.default.join(dir, "index.html"))) return null;
11555
- return dir;
11556
- }
11557
- function resolveRuntimeRootForHostname(hostname) {
11558
- if (!isRuntimeVersionHostname(hostname)) return resolveActiveRuntimeRoot();
11559
- const version = runtimeVersionFromHostname(hostname);
11560
- return version ? resolveInstalledRuntimeRoot(version) : null;
11561
- }
11562
- function resolveRuntimeRootForRequestHost(host) {
11563
- if (!host) return resolveActiveRuntimeRoot();
11564
- try {
11565
- return resolveRuntimeRootForHostname(new URL(`http://${host}`).hostname);
11566
- } catch {
11567
- return null;
11568
- }
11569
- }
11570
- function isRootRuntimeAssetPath(pathname) {
11571
- return ROOT_RUNTIME_PATHS.some((p) => pathname === p || pathname.startsWith(p));
11572
- }
11573
- function resolveRuntimeFilePath(runtimeRoot, pathname) {
11574
- if (!pathname.startsWith("/")) return null;
11575
- if (pathname.includes("\0") || pathname.includes("\\")) return null;
11576
- for (const segment of pathname.split("/")) {
11577
- if (segment === "..") return null;
11578
- }
11579
- const normalized = pathname.startsWith("/sootsim/") ? pathname.slice("/sootsim".length) : pathname;
11580
- const fullPath = import_path2.default.resolve(runtimeRoot, normalized.replace(/^\/+/, ""));
11581
- const rootWithSep = runtimeRoot.endsWith(import_path2.default.sep) ? runtimeRoot : runtimeRoot + import_path2.default.sep;
11582
- if (!fullPath.startsWith(rootWithSep) && fullPath !== runtimeRoot) return null;
11583
- if (!import_fs2.default.existsSync(fullPath) || !import_fs2.default.statSync(fullPath).isFile()) return null;
11584
- return fullPath;
11585
- }
11586
- function serveRuntimeFile(req, res, fullPath) {
11587
- const ext = import_path2.default.extname(fullPath);
11588
- const stat = import_fs2.default.statSync(fullPath);
11589
- const lastModified = stat.mtime.toUTCString();
11590
- res.setHeader("content-type", MIME_TYPES[ext] || "application/octet-stream");
11591
- if (/^canvaskit-graphite-pipelines-[0-9a-f]{8}\.bin$/.test(import_path2.default.basename(fullPath))) {
11592
- res.setHeader("cache-control", "public, max-age=31536000, immutable");
11593
- import_fs2.default.createReadStream(fullPath).pipe(res);
11594
- return;
11595
- }
11596
- res.setHeader("cache-control", "no-cache");
11597
- res.setHeader("last-modified", lastModified);
11598
- if (req?.headers?.["if-modified-since"] === lastModified) {
11599
- res.statusCode = 304;
11600
- res.end();
11601
- return;
11602
- }
11603
- sendFileWithRanges(req, res, fullPath, stat.size, {});
11604
- }
11605
- function sendFileWithRanges(req, res, filePath, total, headers) {
11606
- const head = (req?.method || "GET").toUpperCase() === "HEAD";
11607
- const range = /^bytes=(\d*)-(\d*)$/.exec(req?.headers?.range || "");
11608
- const invalid = range && range[1] && range[2] && Number(range[2]) < Number(range[1]);
11609
- if (range && (range[1] || range[2]) && !invalid) {
11610
- const [, startRaw, endRaw] = range;
11611
- const start = startRaw ? Number(startRaw) : Math.max(0, total - Number(endRaw));
11612
- const end = startRaw && endRaw ? Math.min(Number(endRaw), total - 1) : total - 1;
11613
- if (start > end || start >= total) {
11614
- res.writeHead(416, { ...headers, "Content-Range": `bytes */${total}` });
11615
- res.end();
11616
- return;
11617
- }
11618
- res.writeHead(206, {
11619
- ...headers,
11620
- "Content-Range": `bytes ${start}-${end}/${total}`,
11621
- "Accept-Ranges": "bytes",
11622
- "Content-Length": String(end - start + 1)
11623
- });
11624
- if (head) res.end();
11625
- else streamFile(res, import_fs2.default.createReadStream(filePath, { start, end }));
11626
- return;
11627
- }
11628
- res.writeHead(200, {
11629
- ...headers,
11630
- "Accept-Ranges": "bytes",
11631
- "Content-Length": String(total)
11632
- });
11633
- if (head || total === 0) res.end();
11634
- else streamFile(res, import_fs2.default.createReadStream(filePath, { start: 0, end: total - 1 }));
11473
+ // src/runtimePlatformContract.ts
11474
+ var IOS_ADAPTER = Object.freeze({
11475
+ id: "ios",
11476
+ displayName: "iOS",
11477
+ isIOS: true,
11478
+ isAndroid: false,
11479
+ select: (registry) => registry.ios
11480
+ });
11481
+ var ANDROID_ADAPTER = Object.freeze({
11482
+ id: "android",
11483
+ displayName: "Android",
11484
+ isIOS: false,
11485
+ isAndroid: true,
11486
+ select: (registry) => registry.android
11487
+ });
11488
+ var RUNTIME_PLATFORM_ADAPTERS = Object.freeze({
11489
+ ios: IOS_ADAPTER,
11490
+ android: ANDROID_ADAPTER
11491
+ });
11492
+ function isRuntimePlatform(value) {
11493
+ return value === "ios" || value === "android";
11635
11494
  }
11636
- function streamFile(res, stream) {
11637
- stream.on("error", (error) => res.destroy(error));
11638
- stream.pipe(res);
11495
+ function getRuntimePlatformAdapter(platform) {
11496
+ return RUNTIME_PLATFORM_ADAPTERS[platform];
11639
11497
  }
11640
11498
 
11641
11499
  // src/metro-plugin.ts