peachsim 0.1.939 → 0.1.1399

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 (396) hide show
  1. package/README.md +28 -22
  2. package/cli/app-catalog.ts +29 -14
  3. package/cli/app-fonts.ts +5 -3
  4. package/cli/bridge-flow-runner.ts +40 -29
  5. package/cli/cloud-client.ts +57 -21
  6. package/cli/cloud-test-tunnel.ts +12 -18
  7. package/cli/commands/agent.ts +1 -1
  8. package/cli/commands/app-fonts.ts +3 -3
  9. package/cli/commands/assert.ts +8 -8
  10. package/cli/commands/auth.ts +8 -3
  11. package/cli/commands/box/bundle-plane.ts +13 -1
  12. package/cli/commands/box.ts +16 -5
  13. package/cli/commands/compat.ts +1 -1
  14. package/cli/commands/config.ts +2 -2
  15. package/cli/commands/control.ts +125 -71
  16. package/cli/commands/cpu-profile.ts +45 -1
  17. package/cli/commands/daemon.ts +131 -33
  18. package/cli/commands/debug.ts +24 -17
  19. package/cli/commands/desktop.ts +7 -1
  20. package/cli/commands/detect.ts +101 -0
  21. package/cli/commands/detox.ts +6 -6
  22. package/cli/commands/device.ts +12 -12
  23. package/cli/commands/electron.ts +32 -14
  24. package/cli/commands/flow.ts +49 -41
  25. package/cli/commands/guest-host.ts +39 -1
  26. package/cli/commands/inspect/core.ts +14 -8
  27. package/cli/commands/inspect/list.ts +1 -1
  28. package/cli/commands/inspect/settle.ts +5 -3
  29. package/cli/commands/inspect/settling.ts +229 -44
  30. package/cli/commands/inspect/wait-idle.ts +3 -2
  31. package/cli/commands/inspect.ts +105 -93
  32. package/cli/commands/install-cli.ts +36 -15
  33. package/cli/commands/install-desktop.ts +68 -195
  34. package/cli/commands/kotlin.ts +6 -5
  35. package/cli/commands/login.ts +5 -5
  36. package/cli/commands/maestro-compare.ts +554 -0
  37. package/cli/commands/maestro-generate.ts +6 -3
  38. package/cli/commands/maestro.ts +22 -0
  39. package/cli/commands/mode.ts +2 -2
  40. package/cli/commands/no-bridge-hint.ts +6 -2
  41. package/cli/commands/platform.ts +35 -6
  42. package/cli/commands/preview.ts +6 -0
  43. package/cli/commands/project-report.ts +10 -12
  44. package/cli/commands/record.ts +37 -37
  45. package/cli/commands/runtime.ts +9 -9
  46. package/cli/commands/screenshot-layers.ts +4 -4
  47. package/cli/commands/screenshot-mode.ts +2 -2
  48. package/cli/commands/screenshot.ts +8 -8
  49. package/cli/commands/screenshots-capture.ts +2 -2
  50. package/cli/commands/serve.ts +9 -12
  51. package/cli/commands/setup.ts +29 -14
  52. package/cli/commands/shell-boolean-mode.ts +2 -2
  53. package/cli/commands/show-touches-mode.ts +2 -2
  54. package/cli/commands/skills.ts +11 -11
  55. package/cli/commands/swift.ts +29 -11
  56. package/cli/commands/telemetry.ts +2 -2
  57. package/cli/commands/test.ts +5 -0
  58. package/cli/commands/three-mode.ts +3 -3
  59. package/cli/commands/timeline.ts +4 -4
  60. package/cli/commands/upgrade.ts +2 -2
  61. package/cli/commands/upload.ts +15 -15
  62. package/cli/commands/what-happened.ts +2 -2
  63. package/cli/current-sim.ts +6 -3
  64. package/cli/desktop-companion.ts +55 -149
  65. package/cli/dev-build-freshness.ts +2 -2
  66. package/cli/drivers/desktop.ts +17 -9
  67. package/cli/drivers/electron.ts +1 -2
  68. package/cli/drivers/playwright-sim-host.ts +11 -2
  69. package/cli/drivers/playwright.ts +35 -2
  70. package/cli/drivers/types.ts +8 -0
  71. package/cli/maestro-compare.ts +670 -0
  72. package/cli/outbound-endpoints.ts +46 -8
  73. package/cli/recording-access.ts +6 -6
  74. package/cli/run-registry.ts +1 -1
  75. package/cli/runtime-compat.ts +5 -1
  76. package/cli/send-to-box.ts +3 -3
  77. package/cli/shell-init.ts +2 -1
  78. package/cli/ws-bridge.ts +9 -5
  79. package/detox/element-types.ts +1 -0
  80. package/detox/gestures.ts +3 -3
  81. package/detox/index.ts +67 -38
  82. package/detox/navigation-lifecycle.ts +9 -6
  83. package/detox/proof-frame.cjs +6 -4
  84. package/dist-lib/agent-daemon-client.cjs +1 -1
  85. package/dist-lib/agent-events.cjs +1 -1
  86. package/dist-lib/attached-projects.cjs +1 -1
  87. package/dist-lib/auth/shared-session.cjs +1 -1
  88. package/dist-lib/backend-origin.cjs +1 -1
  89. package/dist-lib/beta.cjs +1 -1
  90. package/dist-lib/beta.mjs +1 -1
  91. package/dist-lib/bridge-constants.cjs +1 -1
  92. package/dist-lib/bridge-contract-input.cjs +42 -17
  93. package/dist-lib/bridge-contract-input.mjs +41 -16
  94. package/dist-lib/bridge-contract.cjs +1 -4
  95. package/dist-lib/bridge-contract.mjs +1 -3
  96. package/dist-lib/bundle-channel.cjs +2918 -550
  97. package/dist-lib/capture-contract.cjs +65 -24
  98. package/dist-lib/capture-contract.mjs +63 -24
  99. package/dist-lib/cloud-contract.cjs +2 -2
  100. package/dist-lib/cloud-contract.mjs +2 -2
  101. package/dist-lib/cloud-test-args.cjs +1 -1
  102. package/dist-lib/cloud-test-args.mjs +1 -1
  103. package/dist-lib/cloud.cjs +3 -3
  104. package/dist-lib/cloud.mjs +3 -3
  105. package/dist-lib/config.cjs +15 -5
  106. package/dist-lib/config.mjs +154 -0
  107. package/dist-lib/detox/index.cjs +495 -139
  108. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  109. package/dist-lib/expo-swift-bundle.cjs +1168 -238
  110. package/dist-lib/expo-swift-metadata.cjs +34 -23
  111. package/dist-lib/expo-swift-metadata.mjs +32 -23
  112. package/dist-lib/home-paths.cjs +2 -2
  113. package/dist-lib/host/bridge-host.cjs +2938 -654
  114. package/dist-lib/host/fetch-proxy-handler.cjs +14 -1
  115. package/dist-lib/host/fetch-proxy-overrides.cjs +7 -1
  116. package/dist-lib/host/fetch-proxy-overrides.mjs +5 -1
  117. package/dist-lib/host/replacement-module-handler.cjs +2 -2
  118. package/dist-lib/host/websocket-proxy.cjs +1 -1
  119. package/dist-lib/index.cjs +999 -353
  120. package/dist-lib/jump-to-source-babel.cjs +1 -1
  121. package/dist-lib/jump-to-source-native.cjs +1 -1
  122. package/dist-lib/kotlin-host.cjs +332 -19
  123. package/dist-lib/menu.cjs +1 -1
  124. package/dist-lib/menu.mjs +1 -1
  125. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  126. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  127. package/dist-lib/metro-production-bundle.cjs +7 -7
  128. package/dist-lib/metro-production-bundle.mjs +5 -5
  129. package/dist-lib/metro.cjs +688 -250
  130. package/dist-lib/native-app-identity-project.cjs +2647 -0
  131. package/dist-lib/native-app-identity-project.mjs +1257 -0
  132. package/dist-lib/native-app-identity.cjs +325 -25
  133. package/dist-lib/native-app-identity.mjs +323 -25
  134. package/dist-lib/native-firebase-metadata.cjs +1 -1
  135. package/dist-lib/native-firebase-metadata.mjs +1 -1
  136. package/dist-lib/plist.cjs +1 -1
  137. package/dist-lib/plist.mjs +1 -1
  138. package/dist-lib/profiles.cjs +1 -1
  139. package/dist-lib/public-brand.cjs +1 -1
  140. package/dist-lib/react-native-host-modules.cjs +5 -1
  141. package/dist-lib/react-native-host-modules.mjs +5 -1
  142. package/dist-lib/scripts/dev-server-scanner.cjs +57 -32
  143. package/dist-lib/sdk.cjs +231 -51
  144. package/dist-lib/sdk.mjs +231 -51
  145. package/dist-lib/skills.cjs +4107 -1374
  146. package/dist-lib/swift-compile.cjs +290 -30
  147. package/dist-lib/swift-compile.mjs +290 -30
  148. package/dist-lib/swift-package.cjs +143 -12
  149. package/dist-lib/swift-package.mjs +137 -11
  150. package/dist-lib/swift-submit.cjs +47 -5
  151. package/dist-lib/swift-submit.mjs +42 -5
  152. package/dist-lib/swift-toolchain.cjs +7 -2
  153. package/dist-lib/swift.cjs +1 -1
  154. package/dist-lib/vite-swift.cjs +1392 -458
  155. package/dist-lib/vite.cjs +13 -17
  156. package/dist-lib/worklet-executable.cjs +248 -33
  157. package/dist-lib/worklet-executable.mjs +248 -33
  158. package/install.sh +10 -1
  159. package/kotlin/{AppSources → AndroidViewSources}/android/content/res/Resources.kt +9 -9
  160. package/kotlin/AndroidViewSources/android/graphics/Canvas.kt +20 -0
  161. package/kotlin/AndroidViewSources/android/view/View.kt +211 -0
  162. package/kotlin/AndroidViewSources/android/widget/FrameLayout.kt +61 -0
  163. package/kotlin/AndroidViewSources/android/widget/LinearLayout.kt +49 -0
  164. package/kotlin/AppSources/android/view/Window.kt +36 -0
  165. package/kotlin/AppSources/android/view/WindowInsets.kt +9 -0
  166. package/kotlin/AppSources/android/view/WindowInsetsController.kt +5 -0
  167. package/kotlin/AppSources/android/window/OnBackInvokedDispatcher.kt +48 -0
  168. package/kotlin/AppSources/androidx/activity/OnBackPressedDispatcher.kt +20 -5
  169. package/kotlin/AppSources/androidx/compose/foundation/layout/WindowInsets.kt +15 -0
  170. package/kotlin/AppSources/androidx/compose/ui/platform/ComposeView.kt +2 -1
  171. package/kotlin/AppSources/dev/peach/app/PeachApp.kt +42 -50
  172. package/kotlin/ComposeSources/PeachComposeHost.kt +200 -84
  173. package/kotlin/ExpoComposeSources/PeachAndroidView.kt +87 -0
  174. package/kotlin/ExpoComposeSources/PeachExpoViewMount.kt +24 -0
  175. package/kotlin/ExpoComposeSources/dev/peach/expo/PeachExpoCompose.kt +28 -0
  176. package/kotlin/ExpoComposeSources/expo/modules/kotlin/views/ExpoComposeView.kt +70 -0
  177. package/kotlin/ExpoSources/dev/peach/expo/PeachExpoRuntime.kt +513 -0
  178. package/kotlin/ExpoSources/dev/peach/expo/PeachExpoTypes.kt +173 -0
  179. package/kotlin/ExpoSources/expo/modules/kotlin/AppContext.kt +20 -0
  180. package/kotlin/ExpoSources/expo/modules/kotlin/Promise.kt +19 -0
  181. package/kotlin/ExpoSources/expo/modules/kotlin/classcomponent/ClassComponentBuilder.kt +198 -0
  182. package/kotlin/ExpoSources/expo/modules/kotlin/exception/CodedException.kt +126 -0
  183. package/kotlin/ExpoSources/expo/modules/kotlin/functions/Functions.kt +132 -0
  184. package/kotlin/ExpoSources/expo/modules/kotlin/jni/JavaScriptTypedArray.kt +81 -0
  185. package/kotlin/ExpoSources/expo/modules/kotlin/modules/Module.kt +98 -0
  186. package/kotlin/ExpoSources/expo/modules/kotlin/objects/ObjectDefinitionBuilder.kt +236 -0
  187. package/kotlin/ExpoSources/expo/modules/kotlin/records/Record.kt +12 -0
  188. package/kotlin/ExpoSources/expo/modules/kotlin/runtime/Runtime.kt +9 -0
  189. package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedObject.kt +50 -0
  190. package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedObjectRegistry.kt +57 -0
  191. package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedRef.kt +19 -0
  192. package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/ConcreteTypedArrays.kt +158 -0
  193. package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/GenericTypedArray.kt +8 -0
  194. package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/TypedArray.kt +29 -0
  195. package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/TypedArrayIterator.kt +9 -0
  196. package/kotlin/ExpoSources/expo/modules/kotlin/types/AnyType.kt +155 -0
  197. package/kotlin/ExpoSources/expo/modules/kotlin/types/Either.kt +91 -0
  198. package/kotlin/ExpoSources/expo/modules/kotlin/types/Enumerable.kt +6 -0
  199. package/kotlin/ExpoSources/expo/modules/kotlin/viewevent/ViewEvent.kt +54 -0
  200. package/kotlin/ExpoSources/expo/modules/kotlin/views/ExpoView.kt +23 -0
  201. package/kotlin/ExpoSources/expo/modules/kotlin/views/ViewDefinitionBuilder.kt +71 -0
  202. package/kotlin/ExpoSources/expo/modules/kotlin/views/ViewProps.kt +35 -0
  203. package/kotlin/README.md +13 -3
  204. package/kotlin/Sources/android/os/Build.kt +17 -0
  205. package/kotlin/Sources/android/os/Handler.kt +35 -0
  206. package/kotlin/Sources/android/os/Looper.kt +17 -0
  207. package/kotlin/Sources/android/os/MessageQueue.kt +56 -0
  208. package/kotlin/Sources/android/os/SystemClock.kt +14 -0
  209. package/kotlin/Sources/android/util/Log.kt +64 -0
  210. package/kotlin/Sources/java/security/MessageDigest.kt +114 -0
  211. package/kotlin/Sources/kotlin/text/StringFormat.kt +9 -0
  212. package/kotlin/Sources/org/json/JSON.kt +44 -0
  213. package/kotlin/fixtures/counter/Counter.d.kt.ts +1 -0
  214. package/kotlin/fixtures/counter/Counter.kt +10 -3
  215. package/kotlin/fixtures/counter/CounterApp.native.tsx +1 -1
  216. package/kotlin/fixtures/counter/vite.config.ts +2 -2
  217. package/kotlin/fixtures/headless-counter/Headless.kt +7 -6
  218. package/kotlin/fixtures/import-animation/Animation.d.kt.ts +7 -0
  219. package/kotlin/fixtures/import-animation/Animation.kt +80 -0
  220. package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +13 -0
  221. package/kotlin/fixtures/import-animation/README.md +24 -0
  222. package/kotlin/fixtures/import-animation/app/_layout.tsx +4 -0
  223. package/kotlin/fixtures/import-animation/app/index+spa.tsx +1 -0
  224. package/kotlin/fixtures/import-animation/app/routes.d.ts +18 -0
  225. package/kotlin/fixtures/import-animation/package.json +23 -0
  226. package/kotlin/fixtures/import-animation/tsconfig.json +20 -0
  227. package/kotlin/fixtures/import-animation/vite.config.ts +20 -0
  228. package/kotlin/fixtures/import-editor/Editor.d.kt.ts +7 -0
  229. package/kotlin/fixtures/import-editor/Editor.kt +59 -0
  230. package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +23 -0
  231. package/kotlin/fixtures/import-editor/README.md +27 -0
  232. package/kotlin/fixtures/import-editor/app/_layout.tsx +4 -0
  233. package/kotlin/fixtures/import-editor/app/index+spa.tsx +1 -0
  234. package/kotlin/fixtures/import-editor/package.json +23 -0
  235. package/kotlin/fixtures/import-editor/tsconfig.json +20 -0
  236. package/kotlin/fixtures/import-editor/vite.config.ts +20 -0
  237. package/kotlin/fixtures/import-effects/Effects.d.kt.ts +7 -0
  238. package/kotlin/fixtures/import-effects/Effects.kt +87 -0
  239. package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +13 -0
  240. package/kotlin/fixtures/import-effects/README.md +19 -0
  241. package/kotlin/fixtures/import-effects/app/_layout.tsx +4 -0
  242. package/kotlin/fixtures/import-effects/app/index+spa.tsx +1 -0
  243. package/kotlin/fixtures/import-effects/package.json +23 -0
  244. package/kotlin/fixtures/import-effects/tsconfig.json +20 -0
  245. package/kotlin/fixtures/import-effects/vite.config.ts +20 -0
  246. package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +13 -0
  247. package/kotlin/fixtures/import-layout/Layout.d.kt.ts +7 -0
  248. package/kotlin/fixtures/import-layout/Layout.kt +72 -0
  249. package/kotlin/fixtures/import-layout/README.md +24 -0
  250. package/kotlin/fixtures/import-layout/app/_layout.tsx +4 -0
  251. package/kotlin/fixtures/import-layout/app/index+spa.tsx +1 -0
  252. package/kotlin/fixtures/import-layout/package.json +23 -0
  253. package/kotlin/fixtures/import-layout/tsconfig.json +20 -0
  254. package/kotlin/fixtures/import-layout/vite.config.ts +20 -0
  255. package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +18 -0
  256. package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +7 -0
  257. package/kotlin/fixtures/import-navigation/Navigation.kt +104 -0
  258. package/kotlin/fixtures/import-navigation/README.md +31 -0
  259. package/kotlin/fixtures/import-navigation/app/_layout.tsx +4 -0
  260. package/kotlin/fixtures/import-navigation/app/index+spa.tsx +1 -0
  261. package/kotlin/fixtures/import-navigation/package.json +23 -0
  262. package/kotlin/fixtures/import-navigation/tsconfig.json +20 -0
  263. package/kotlin/fixtures/import-navigation/vite.config.ts +20 -0
  264. package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +29 -0
  265. package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +7 -0
  266. package/kotlin/fixtures/import-overlays/Overlays.kt +93 -0
  267. package/kotlin/fixtures/import-overlays/README.md +34 -0
  268. package/kotlin/fixtures/import-overlays/app/_layout.tsx +4 -0
  269. package/kotlin/fixtures/import-overlays/app/index+spa.tsx +1 -0
  270. package/kotlin/fixtures/import-overlays/package.json +23 -0
  271. package/kotlin/fixtures/import-overlays/tsconfig.json +20 -0
  272. package/kotlin/fixtures/import-overlays/vite.config.ts +20 -0
  273. package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +13 -0
  274. package/kotlin/fixtures/import-scroll/README.md +23 -0
  275. package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +7 -0
  276. package/kotlin/fixtures/import-scroll/Scroll.kt +91 -0
  277. package/kotlin/fixtures/import-scroll/app/_layout.tsx +4 -0
  278. package/kotlin/fixtures/import-scroll/app/index+spa.tsx +1 -0
  279. package/kotlin/fixtures/import-scroll/package.json +23 -0
  280. package/kotlin/fixtures/import-scroll/tsconfig.json +20 -0
  281. package/kotlin/fixtures/import-scroll/vite.config.ts +20 -0
  282. package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +44 -0
  283. package/kotlin/fixtures/import-selection/README.md +32 -0
  284. package/kotlin/fixtures/import-selection/Selection.d.kt.ts +8 -0
  285. package/kotlin/fixtures/import-selection/Selection.kt +78 -0
  286. package/kotlin/fixtures/import-selection/app/_layout.tsx +4 -0
  287. package/kotlin/fixtures/import-selection/app/index+spa.tsx +1 -0
  288. package/kotlin/fixtures/import-selection/package.json +23 -0
  289. package/kotlin/fixtures/import-selection/tsconfig.json +20 -0
  290. package/kotlin/fixtures/import-selection/vite.config.ts +20 -0
  291. package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +13 -0
  292. package/kotlin/fixtures/import-surfaces/README.md +22 -0
  293. package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +7 -0
  294. package/kotlin/fixtures/import-surfaces/Surfaces.kt +64 -0
  295. package/kotlin/fixtures/import-surfaces/app/_layout.tsx +4 -0
  296. package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +1 -0
  297. package/kotlin/fixtures/import-surfaces/package.json +23 -0
  298. package/kotlin/fixtures/import-surfaces/tsconfig.json +20 -0
  299. package/kotlin/fixtures/import-surfaces/vite.config.ts +20 -0
  300. package/kotlin/fixtures/import-values/ImportValues.native.tsx +35 -0
  301. package/kotlin/fixtures/import-values/README.md +23 -0
  302. package/kotlin/fixtures/import-values/Values.d.kt.ts +11 -0
  303. package/kotlin/fixtures/import-values/Values.kt +66 -0
  304. package/kotlin/fixtures/import-values/app/_layout.tsx +4 -0
  305. package/kotlin/fixtures/import-values/app/index+spa.tsx +1 -0
  306. package/kotlin/fixtures/import-values/package.json +23 -0
  307. package/kotlin/fixtures/import-values/tsconfig.json +20 -0
  308. package/kotlin/fixtures/import-values/vite.config.ts +20 -0
  309. package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +38 -0
  310. package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +36 -0
  311. package/kotlin/fixtures/kotlin-app-variants/Ime.kt +3 -1
  312. package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +50 -0
  313. package/kotlin/fork/NOTICE +6 -1
  314. package/kotlin/fork/README.md +15 -7
  315. package/kotlin/fork/build.sh +2 -0
  316. package/kotlin/fork/compose-worker-globals.patch +186 -4
  317. package/kotlin/fork/fork.json +2 -2
  318. package/kotlin/fork/skiko-worker-clock.patch +12 -0
  319. package/kotlin/toolchain.json +12 -12
  320. package/kotlin/tools/expo-types.main.kts +115 -0
  321. package/package.json +17 -23
  322. package/scripts/dev-server-scanner.ts +92 -66
  323. package/skills/contrast/SKILL.md +2 -2
  324. package/skills/peach-debug/SKILL.md +1 -1
  325. package/skills/peach-perf/SKILL.md +1 -1
  326. package/skills/peach-setup/SKILL.md +2 -1
  327. package/skills/peach-test/SKILL.md +8 -0
  328. package/src/assetCatalogContract.ts +43 -1
  329. package/src/bridge-contract-input.ts +46 -19
  330. package/src/bridge-contract.ts +0 -1
  331. package/src/bundle-channel.mjs +197 -84
  332. package/src/bundleGlobalFooter.ts +38 -0
  333. package/src/capture-contract.ts +107 -33
  334. package/src/cloud-contract.ts +5 -1
  335. package/src/cloud.ts +5 -2
  336. package/src/config.ts +22 -3
  337. package/src/configured-bundle-producer.ts +1 -1
  338. package/src/desktop-host-delivery.ts +95 -1
  339. package/src/expo-kotlin-bundle.ts +29 -0
  340. package/src/expo-kotlin-host.ts +201 -0
  341. package/src/expo-swift-host.ts +96 -76
  342. package/src/expoKotlinContract.ts +70 -0
  343. package/src/expoSwiftContract.ts +4 -25
  344. package/src/home-paths.ts +7 -4
  345. package/src/host/bridge-host.ts +23 -3
  346. package/src/host/fetch-proxy-handler.ts +13 -0
  347. package/src/host/fetch-proxy-overrides.ts +11 -0
  348. package/src/host/replacement-module-handler.ts +5 -2
  349. package/src/index.ts +3 -1
  350. package/src/kotlin-host.ts +463 -19
  351. package/src/metro-plugin.ts +56 -28
  352. package/src/metro-production-bundle.ts +2 -2
  353. package/src/native-app-identity-project.ts +190 -0
  354. package/src/native-app-identity.ts +398 -34
  355. package/src/native-firebase-config.ts +69 -15
  356. package/src/native-seam-manifest.ts +6 -0
  357. package/src/one-widget-discovery.ts +2 -1
  358. package/src/openstep-plist.ts +107 -0
  359. package/src/react-native-host-modules.ts +4 -0
  360. package/src/runtime-assets.ts +2 -2
  361. package/src/sim-client.ts +2 -2
  362. package/src/swift-binary-modules.ts +3 -1
  363. package/src/swift-compile.ts +286 -38
  364. package/src/swift-distribution-contract.ts +4 -0
  365. package/src/swift-distribution.lock.json +123 -12
  366. package/src/swift-distribution.ts +7 -3
  367. package/src/swift-host.ts +298 -83
  368. package/src/swift-package-manifest.ts +29 -2
  369. package/src/swift-package.ts +180 -10
  370. package/src/swift-packages.ts +4 -0
  371. package/src/swift-standin-emit.ts +4 -1
  372. package/src/swift-standins.ts +274 -15
  373. package/src/swift-submit.ts +62 -7
  374. package/src/swift-toolchain.ts +6 -1
  375. package/src/swiftContract.ts +126 -3
  376. package/src/vite-plugin-one.ts +13 -16
  377. package/src/vite-plugin-swift.ts +4 -5
  378. package/src/vite-plugin.ts +360 -144
  379. package/src/vite.d.ts +1 -1
  380. package/src/worker-system-chunks.ts +221 -0
  381. package/src/worklet-executable.ts +348 -38
  382. package/src/worklets-babel.ts +1 -1
  383. package/src/xcode-project.ts +243 -127
  384. package/dist-lib/agent-identity.cjs +0 -39
  385. package/dist-lib/agent-sessions.cjs +0 -760
  386. package/dist-lib/cli-constants.cjs +0 -32
  387. package/dist-lib/render-mode.cjs +0 -44
  388. package/kotlin/AppSources/android/view/View.kt +0 -74
  389. package/kotlin/AppSources/android/widget/FrameLayout.kt +0 -6
  390. package/src/render-mode.ts +0 -15
  391. /package/kotlin/{AppSources → AndroidViewSources}/android/content/Context.kt +0 -0
  392. /package/kotlin/{AppSources → AndroidViewSources}/android/content/res/Configuration.kt +0 -0
  393. /package/kotlin/{AppSources → AndroidViewSources}/android/graphics/Color.kt +0 -0
  394. /package/kotlin/{AppSources → AndroidViewSources}/android/util/DisplayMetrics.kt +0 -0
  395. /package/kotlin/{AppSources → AndroidViewSources}/dev/peach/app/JavaFormat.kt +0 -0
  396. /package/kotlin/{AppSources → Sources}/java/lang/Runnable.kt +0 -0
@@ -354,14 +354,23 @@ diff --git a/compose/ui/ui-skiko/src/nonAndroidMain/kotlin/androidx/compose/ui/t
354
354
  import kotlin.math.floor
355
355
  import org.jetbrains.skia.FontMetrics
356
356
  import org.jetbrains.skia.IRange
357
- @@ -217,10 +221,18 @@
357
+ @@ -216,11 +220,31 @@
358
+ )
358
359
  }
359
360
 
361
+ + private val usesAndroidBoringLayout: Boolean
362
+ + get() = paragraphIntrinsics.androidBoringMetrics &&
363
+ + maxIntrinsicWidth <= width && lineCount == 1 && !didExceedMaxLines
364
+ +
360
365
  override fun getLineLeft(lineIndex: Int): Float =
361
366
  - lineMetrics.getOrNull(lineIndex)?.left?.toFloat() ?: 0f
362
367
  + lineMetrics.getOrNull(lineIndex)?.let { line ->
363
368
  + if (currentPlatform() == Platform.Android && paragraphIntrinsics.style.textAlign == TextAlign.Center) {
364
369
  + floor((width - line.width.toFloat()) / 2)
370
+ + } else if (usesAndroidBoringLayout) {
371
+ + if (paragraphIntrinsics.style.textAlign == TextAlign.Right ||
372
+ + paragraphIntrinsics.style.textAlign == TextAlign.End)
373
+ + width - paragraphIntrinsics.androidBoringWidth else 0f
365
374
  + } else line.left.toFloat()
366
375
  + } ?: 0f
367
376
 
@@ -370,6 +379,10 @@ diff --git a/compose/ui/ui-skiko/src/nonAndroidMain/kotlin/androidx/compose/ui/t
370
379
  + lineMetrics.getOrNull(lineIndex)?.let { line ->
371
380
  + if (currentPlatform() == Platform.Android && paragraphIntrinsics.style.textAlign == TextAlign.Center) {
372
381
  + ceil((width + line.width.toFloat()) / 2)
382
+ + } else if (usesAndroidBoringLayout) {
383
+ + if (paragraphIntrinsics.style.textAlign == TextAlign.Right ||
384
+ + paragraphIntrinsics.style.textAlign == TextAlign.End)
385
+ + width else paragraphIntrinsics.androidBoringWidth
373
386
  + } else line.right.toFloat()
374
387
  + } ?: 0f
375
388
 
@@ -383,7 +396,12 @@ diff --git a/compose/ui/ui-skiko/src/nonAndroidMain/kotlin/androidx/compose/ui/t
383
396
  @file:OptIn(InternalComposeUiApi::class)
384
397
 
385
398
  /*
386
- @@ -26,6 +27,7 @@
399
+ @@ -23,9 +24,12 @@
400
+ import androidx.compose.ui.InternalComposeUiApi
401
+ import androidx.compose.ui.text.AnnotatedString
402
+ import androidx.compose.ui.text.AnnotatedString.Range
403
+ +import androidx.compose.ui.text.Bullet
404
+ +import androidx.compose.ui.text.ParagraphStyle
387
405
  import androidx.compose.ui.text.ParagraphIntrinsics
388
406
  import androidx.compose.ui.text.Placeholder
389
407
  import androidx.compose.ui.text.StrongDirectionType
@@ -391,11 +409,15 @@ diff --git a/compose/ui/ui-skiko/src/nonAndroidMain/kotlin/androidx/compose/ui/t
391
409
  import androidx.compose.ui.text.TextStyle
392
410
  import androidx.compose.ui.text.firstStrongDirectionType
393
411
  import androidx.compose.ui.text.font.FontFamily
394
- @@ -35,11 +37,12 @@
412
+ @@ -33,19 +37,40 @@
413
+ import androidx.compose.ui.text.intl.LocaleList
414
+ import androidx.compose.ui.text.intl.isRtl
395
415
  import androidx.compose.ui.text.style.ResolvedTextDirection
416
+ +import androidx.compose.ui.text.style.TextIndent
396
417
  import androidx.compose.ui.text.style.TextDirection
397
418
  import androidx.compose.ui.unit.Density
398
419
  +import androidx.compose.ui.unit.TextUnit
420
+ +import androidx.compose.ui.unit.isUnspecified
399
421
  import kotlin.math.ceil
400
422
 
401
423
  internal class SkikoParagraphIntrinsics(
@@ -405,10 +427,35 @@ diff --git a/compose/ui/ui-skiko/src/nonAndroidMain/kotlin/androidx/compose/ui/t
405
427
  private val annotations: List<AnnotatedString.Range<out AnnotatedString.Annotation>>,
406
428
  private val placeholders: List<Range<Placeholder>>,
407
429
  private val density: Density,
408
- @@ -79,6 +82,16 @@
430
+ private val fontFamilyResolver: FontFamily.Resolver
431
+ ) : ParagraphIntrinsics {
432
+ val textDirection = resolveTextDirection(text, style.textDirection, style.localeList)
433
+ +
434
+ + // android boring layout ceilings the extent without rounding glyph positions.
435
+ + val androidBoringMetrics = currentPlatform() == Platform.Android &&
436
+ + textDirection == ResolvedTextDirection.Ltr && style.lineHeight.isUnspecified &&
437
+ + (style.textIndent == null || style.textIndent == TextIndent.None) &&
438
+ + style.baselineShift?.multiplier?.let { it == 0f } != false &&
439
+ + placeholders.isEmpty() && annotations.none {
440
+ + val annotation = it.item
441
+ + annotation is ParagraphStyle || annotation is Bullet ||
442
+ + (annotation is SpanStyle && annotation.baselineShift?.multiplier?.let { it != 0f } == true)
443
+ + } && text.none {
444
+ + it == '\n' || it == '\t' || it in '\u0590'..'\u08FF' ||
445
+ + it == '\u200E' || it == '\u200F' || it in '\u202A'..'\u202E' ||
446
+ + it in '\u2066'..'\u2069' || it in '\uD800'..'\uDFFF' ||
447
+ + it in '\uFB1D'..'\uFDFF' || it in '\uFE70'..'\uFEFE'
448
+ + }
449
+ + var androidBoringWidth = 0f
450
+ + private set
451
+
452
+ //we need to track it reactively to invalidate the UI
453
+ override var hasStaleResolvedFonts: Boolean by mutableStateOf(false)
454
+ @@ -79,6 +104,17 @@
409
455
  val para = layouter!!.layoutParagraph(Float.POSITIVE_INFINITY)
410
456
  minIntrinsicWidth = ceil(para.minIntrinsicWidth)
411
457
  maxIntrinsicWidth = ceil(para.maxIntrinsicWidth)
458
+ + androidBoringWidth = maxIntrinsicWidth
412
459
  + val hasLetterSpacing =
413
460
  + (style.letterSpacing != TextUnit.Unspecified && style.letterSpacing.value != 0f) ||
414
461
  + annotations.any {
@@ -434,3 +481,138 @@ diff --git a/compose/ui/ui-skiko/src/nonAndroidMain/kotlin/androidx/compose/ui/t
434
481
  TextAlign.Justify -> SkAlignment.JUSTIFY
435
482
  TextAlign.Start -> SkAlignment.START
436
483
  TextAlign.End -> SkAlignment.END
484
+ diff --git a/compose/foundation/foundation/src/webMain/kotlin/androidx/compose/foundation/RequestFocusOnClick.web.kt b/compose/foundation/foundation/src/webMain/kotlin/androidx/compose/foundation/RequestFocusOnClick.web.kt
485
+ --- a/compose/foundation/foundation/src/webMain/kotlin/androidx/compose/foundation/RequestFocusOnClick.web.kt
486
+ +++ b/compose/foundation/foundation/src/webMain/kotlin/androidx/compose/foundation/RequestFocusOnClick.web.kt
487
+ @@ -12,8 +12,11 @@
488
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
489
+ * See the License for the specific language governing permissions and
490
+ * limitations under the License.
491
+ + *
492
+ + * modified for Peach: Android touch focus keeps sibling controls from
493
+ + * taking the active field on press. see the fork record for the source pin.
494
+ */
495
+
496
+ package androidx.compose.foundation
497
+
498
+ -internal actual fun isRequestFocusOnClickEnabled(): Boolean = true
499
+ +internal actual fun isRequestFocusOnClickEnabled(): Boolean = false
500
+ diff --git a/compose/ui/ui/src/webMain/kotlin/androidx/compose/ui/focus/Focusability.web.kt b/compose/ui/ui/src/webMain/kotlin/androidx/compose/ui/focus/Focusability.web.kt
501
+ --- a/compose/ui/ui/src/webMain/kotlin/androidx/compose/ui/focus/Focusability.web.kt
502
+ +++ b/compose/ui/ui/src/webMain/kotlin/androidx/compose/ui/focus/Focusability.web.kt
503
+ @@ -12,10 +12,14 @@
504
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
505
+ * See the License for the specific language governing permissions and
506
+ * limitations under the License.
507
+ + *
508
+ + * modified for Peach: Android touch focus keeps sibling controls from
509
+ + * taking the active field on press. see the fork record for the source pin.
510
+ */
511
+
512
+ package androidx.compose.ui.focus
513
+
514
+ import androidx.compose.ui.node.CompositionLocalConsumerModifierNode
515
+
516
+ -internal actual fun systemDefinedCanFocus(node: CompositionLocalConsumerModifierNode) = true
517
+
518
+ +internal actual fun systemDefinedCanFocus(node: CompositionLocalConsumerModifierNode) =
519
+ + mobilePlatformSystemDefinedCanFocus(node)
520
+ diff --git a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/PlatformContext.skiko.kt b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/PlatformContext.skiko.kt
521
+ --- a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/PlatformContext.skiko.kt
522
+ +++ b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/PlatformContext.skiko.kt
523
+ @@ -13,4 +13,7 @@
524
+ * See the License for the specific language governing permissions and
525
+ * limitations under the License.
526
+ + *
527
+ + * modified for Peach: dialogs attach a distinct native receiving window and
528
+ + * navigation dispatcher, isolating back from the activity underneath.
529
+ */
530
+
531
+ @@ -51,4 +54,5 @@
532
+ import androidx.compose.ui.text.intl.LocaleList
533
+ import androidx.compose.ui.unit.Dp
534
+ +import androidx.navigationevent.NavigationEventDispatcher
535
+ import androidx.lifecycle.Lifecycle
536
+ import androidx.lifecycle.LifecycleOwner
537
+ @@ -83,4 +87,8 @@
538
+ */
539
+ val architectureComponentsOwner: PlatformArchitectureComponentsOwner get() = EmptyArchitectureComponentsOwner
540
+ +
541
+ + // the host owns a dialog window until its composition is disposed.
542
+ + fun attachDialogWindow(dispatcher: NavigationEventDispatcher): AutoCloseable =
543
+ + error("the native host must attach a dialog receiving window")
544
+
545
+ /**
546
+ diff --git a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/window/Dialog.skiko.kt b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/window/Dialog.skiko.kt
547
+ --- a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/window/Dialog.skiko.kt
548
+ +++ b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/window/Dialog.skiko.kt
549
+ @@ -13,4 +13,7 @@
550
+ * See the License for the specific language governing permissions and
551
+ * limitations under the License.
552
+ + *
553
+ + * modified for Peach: dialogs attach a distinct native receiving window and
554
+ + * navigation dispatcher, isolating back from the activity underneath.
555
+ */
556
+
557
+ @@ -19,4 +22,5 @@
558
+ import androidx.compose.runtime.Composable
559
+ import androidx.compose.runtime.CompositionContext
560
+ +import androidx.compose.runtime.CompositionLocalProvider
561
+ import androidx.compose.runtime.DisposableEffect
562
+ import androidx.compose.runtime.Immutable
563
+ @@ -34,4 +38,5 @@
564
+ import androidx.compose.ui.ComposeUiFlags
565
+ import androidx.compose.ui.ExperimentalComposeUiApi
566
+ +import androidx.compose.ui.InternalComposeUiApi
567
+ import androidx.compose.ui.Modifier
568
+ import androidx.compose.ui.MotionDurationScale
569
+ @@ -57,4 +62,6 @@
570
+ import androidx.compose.ui.platform.union
571
+ import androidx.compose.ui.scene.ComposeSceneLayer
572
+ +import androidx.compose.ui.scene.LocalComposeSceneContext
573
+ +import androidx.compose.ui.scene.requireCurrent
574
+ import androidx.compose.ui.scene.Content
575
+ import androidx.compose.ui.scene.rememberComposeSceneLayer
576
+ @@ -65,4 +72,6 @@
577
+ import androidx.compose.ui.unit.center
578
+ import androidx.navigationevent.compose.LocalNavigationEventDispatcherOwner
579
+ +import androidx.navigationevent.NavigationEventDispatcher
580
+ +import androidx.navigationevent.NavigationEventDispatcherOwner
581
+ import kotlin.coroutines.CoroutineContext
582
+ import kotlin.time.Duration.Companion.seconds
583
+ @@ -167,5 +176,5 @@
584
+ }
585
+
586
+ -@OptIn(InternalComposeApi::class)
587
+ +@OptIn(InternalComposeApi::class, InternalComposeUiApi::class)
588
+ @Composable
589
+ actual fun Dialog(
590
+ @@ -182,8 +191,15 @@
591
+ onBackHandler.backClickIsEnabled = properties.dismissOnBackPress
592
+ }
593
+ - val navigationEventDispatcher =
594
+ - requireNotNull(LocalNavigationEventDispatcherOwner.current) {
595
+ - error("NavigationEventDispatcherOwner not found")
596
+ - }.navigationEventDispatcher
597
+ + val dialogOwner = remember {
598
+ + object : NavigationEventDispatcherOwner {
599
+ + override val navigationEventDispatcher = NavigationEventDispatcher()
600
+ + }
601
+ + }
602
+ + val navigationEventDispatcher = dialogOwner.navigationEventDispatcher
603
+ + val platformContext = LocalComposeSceneContext.requireCurrent().platformContext
604
+ + DisposableEffect(platformContext, navigationEventDispatcher) {
605
+ + val window = platformContext.attachDialogWindow(navigationEventDispatcher)
606
+ + onDispose { window.close(); navigationEventDispatcher.dispose() }
607
+ + }
608
+ DisposableEffect(navigationEventDispatcher, onBackHandler) {
609
+ navigationEventDispatcher.addHandler(onBackHandler)
610
+ @@ -208,5 +224,7 @@
611
+ onOutsidePointerEvent = onOutsidePointerEvent,
612
+ properties = properties,
613
+ - content = content
614
+ + content = {
615
+ + CompositionLocalProvider(LocalNavigationEventDispatcherOwner provides dialogOwner, content = content)
616
+ + }
617
+ )
618
+ }
@@ -22,7 +22,7 @@
22
22
  "tag": "v1.13.0-alpha01",
23
23
  "commit": "a9e47e8aa04c95cfe572ab4297c770f3cbfb234e",
24
24
  "patch": "compose-worker-globals.patch",
25
- "patchSha256": "71beda710e878c2d59d6481bcc4b8a1f256730b3f3b3cad4228c9b2442b5244a"
25
+ "patchSha256": "2446e74ae04f91fb309a5f7ddf1a6ef8bb587f561d2d34e45f213a3180851d34"
26
26
  },
27
27
  {
28
28
  "name": "skiko",
@@ -31,7 +31,7 @@
31
31
  "tag": "v0.152.0-alpha02",
32
32
  "commit": "96378296bb23c23c5f30cd2b0d42d6f8fdeff730",
33
33
  "patch": "skiko-worker-clock.patch",
34
- "patchSha256": "37bbfbb362a8759c6648969b20b32c5b6aa2ff140fd6dbdbbdb910bbb74783a8"
34
+ "patchSha256": "fba649096773ac8990b5586e7c6123819edf7eb3caa453b4c5415dc7aac110a0"
35
35
  },
36
36
  {
37
37
  "name": "skia",
@@ -91,6 +91,18 @@ diff --git a/skiko/buildSrc/src/main/kotlin/tasks/configuration/WasmTasksConfigu
91
91
  addAll(buildType.clangFlags)
92
92
  add("-fno-rtti")
93
93
  add("-fno-exceptions")
94
+ diff --git a/skiko/buildSrc/src/main/kotlin/LinkSkikoTask.kt b/skiko/buildSrc/src/main/kotlin/LinkSkikoTask.kt
95
+ --- a/skiko/buildSrc/src/main/kotlin/LinkSkikoTask.kt
96
+ +++ b/skiko/buildSrc/src/main/kotlin/LinkSkikoTask.kt
97
+ @@ -60,5 +60,7 @@ abstract class LinkSkikoTask : AbstractSkikoNativeToolTask() {
98
+ repeatedArg("-L", values = libDirs.get())
99
+ - repeatedArg(values = objectFiles.files)
100
+ + // modified for peach: filesystem enumeration must not change wasm bytes.
101
+ + // archive order stays intact because it controls symbol resolution.
102
+ + repeatedArg(values = objectFiles.files.sortedBy { it.invariantSeparatorsPath })
103
+ repeatedArg(values = libFiles.files)
104
+ rawArgs(flags.get())
105
+ }
94
106
  diff --git a/skiko/src/commonMain/kotlin/org/jetbrains/skia/paragraph/Alignment.kt b/skiko/src/commonMain/kotlin/org/jetbrains/skia/paragraph/Alignment.kt
95
107
  --- a/skiko/src/commonMain/kotlin/org/jetbrains/skia/paragraph/Alignment.kt
96
108
  +++ b/skiko/src/commonMain/kotlin/org/jetbrains/skia/paragraph/Alignment.kt
@@ -18,14 +18,14 @@
18
18
  ],
19
19
  "composeLibraries": [
20
20
  {
21
- "name": "ui-wasm-js-1.13.0-alpha01-peach-8caddb83ba2f.klib",
22
- "url": "https://r2.rnxsim.com/peach-kotlin-fork/8caddb83ba2f8dddd4c869eca936f0039d99c39c986f8af162e59eb27dbb92ed/ui-wasm-js-1.13.0-alpha01.klib",
23
- "sha256": "8caddb83ba2f8dddd4c869eca936f0039d99c39c986f8af162e59eb27dbb92ed"
21
+ "name": "ui-wasm-js-1.13.0-alpha01-peach-af8d1b1508e3.klib",
22
+ "url": "https://r2.rnxsim.com/peach-kotlin-fork/af8d1b1508e32318984622bdb20abb5b80acfd9f0b239293dacb2924712baeaa/ui-wasm-js-1.13.0-alpha01.klib",
23
+ "sha256": "af8d1b1508e32318984622bdb20abb5b80acfd9f0b239293dacb2924712baeaa"
24
24
  },
25
25
  {
26
- "name": "foundation-wasm-js-1.13.0-alpha01.klib",
27
- "url": "https://repo1.maven.org/maven2/org/jetbrains/compose/foundation/foundation-wasm-js/1.13.0-alpha01/foundation-wasm-js-1.13.0-alpha01.klib",
28
- "sha256": "d3469608beb11d460008b0902886080dd1b199b524edbe3a4073feaf6a00e259"
26
+ "name": "foundation-wasm-js-1.13.0-alpha01-peach-40a9b53cab72.klib",
27
+ "url": "https://r2.rnxsim.com/peach-kotlin-fork/40a9b53cab721826639ec30f11f871c1ba3f72ca073fbcef69c718792e20c868/foundation-wasm-js-1.13.0-alpha01.klib",
28
+ "sha256": "40a9b53cab721826639ec30f11f871c1ba3f72ca073fbcef69c718792e20c868"
29
29
  },
30
30
  {
31
31
  "name": "material3-wasm-js-1.13.0-alpha01-peach-fc48b8999ea9.klib",
@@ -68,9 +68,9 @@
68
68
  "sha256": "63f16892ab6435778c60e217a0959516f4fcd46cad8862d6831f055ac30f09d8"
69
69
  },
70
70
  {
71
- "name": "ui-skiko-wasm-js-1.13.0-alpha01-peach-c1c532120db6.klib",
72
- "url": "https://r2.rnxsim.com/peach-kotlin-fork/c1c532120db605507e75a47ea72c66de314861322a0fd42fbee7fd4eb1d43294/ui-skiko-wasm-js-1.13.0-alpha01.klib",
73
- "sha256": "c1c532120db605507e75a47ea72c66de314861322a0fd42fbee7fd4eb1d43294"
71
+ "name": "ui-skiko-wasm-js-1.13.0-alpha01-peach-a3a54a4b631d.klib",
72
+ "url": "https://r2.rnxsim.com/peach-kotlin-fork/a3a54a4b631db4ae191a2bf8136c5458a2fe1f88b998f5b571cda4bde59525db/ui-skiko-wasm-js-1.13.0-alpha01.klib",
73
+ "sha256": "a3a54a4b631db4ae191a2bf8136c5458a2fe1f88b998f5b571cda4bde59525db"
74
74
  },
75
75
  {
76
76
  "name": "ui-text-wasm-js-1.13.0-alpha01-peach-10c54ff0fa5f.klib",
@@ -325,9 +325,9 @@
325
325
  "skiko": "0.152.0-alpha02"
326
326
  },
327
327
  "composeRuntime": {
328
- "name": "skiko-wasm-0.152.0-alpha02-peach-3d68b5a68311.jar",
329
- "url": "https://r2.rnxsim.com/peach-kotlin-fork/3d68b5a68311fedbd5f08ddd7bbd6fc8c8c19cb1c17c4394959b2507b125c323/skiko-wasm-0.152.0-alpha02.jar",
330
- "sha256": "3d68b5a68311fedbd5f08ddd7bbd6fc8c8c19cb1c17c4394959b2507b125c323"
328
+ "name": "skiko-wasm-0.152.0-alpha02-peach-814a83451e95.jar",
329
+ "url": "https://r2.rnxsim.com/peach-kotlin-fork/814a83451e9510c54f72b94e21a0a8ae1376e7dc94861d8efeaeee12279fd4e2/skiko-wasm-0.152.0-alpha02.jar",
330
+ "sha256": "814a83451e9510c54f72b94e21a0a8ae1376e7dc94861d8efeaeee12279fd4e2"
331
331
  },
332
332
  "composeJsLibraries": [
333
333
  {
@@ -0,0 +1,115 @@
1
+ // prints the Expo records, enums, compose views and compose props each app
2
+ // source declares, as Kotlin's own parser reads them, one JSON object per file
3
+ // that has any. upstream finds @Field properties, view constructors and
4
+ // MutableState props by reflection or its compile-time introspection;
5
+ // Kotlin/Wasm has neither, so the host generates the same code from this.
6
+ @file:OptIn(
7
+ org.jetbrains.kotlin.config.CompilerConfiguration.Internals::class,
8
+ org.jetbrains.kotlin.CoreEnvironmentDeprecation::class,
9
+ org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi::class,
10
+ )
11
+ import com.intellij.openapi.util.Disposer
12
+ import org.jetbrains.kotlin.cli.extensionsStorage
13
+ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
14
+ import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
15
+ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
16
+ import org.jetbrains.kotlin.config.CompilerConfiguration
17
+ import org.jetbrains.kotlin.lexer.KtTokens
18
+ import org.jetbrains.kotlin.psi.*
19
+ import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
20
+
21
+ fun quote(value: String) = "\"" + value.replace("\\", "\\\\").replace("\"", "\\\"").replace("\n", "\\n") + "\""
22
+
23
+ val environment = KotlinCoreEnvironment.createForProduction(
24
+ Disposer.newDisposable(),
25
+ CompilerConfiguration().apply { extensionsStorage = CompilerPluginRegistrar.ExtensionStorage() },
26
+ EnvironmentConfigFiles.JVM_CONFIG_FILES,
27
+ )
28
+ val factory = KtPsiFactory(environment.project)
29
+
30
+ fun KtAnnotated.annotation(name: String): KtAnnotationEntry? =
31
+ annotationEntries.firstOrNull { it.shortName?.asString() == name }
32
+
33
+ fun relativeName(declaration: KtClassOrObject): String =
34
+ generateSequence(declaration) { it.containingClassOrObject }.toList().reversed().joinToString(".") { it.name ?: "?" }
35
+
36
+ fun hidden(declaration: KtModifierListOwner) =
37
+ declaration.hasModifier(KtTokens.PRIVATE_KEYWORD) || declaration.hasModifier(KtTokens.PROTECTED_KEYWORD)
38
+
39
+ fun field(property: KtCallableDeclaration, mutable: Boolean, initializer: KtExpression?): String? {
40
+ val annotation = property.annotation("Field") ?: return null
41
+ val argument = annotation.valueArguments.firstOrNull()?.getArgumentExpression() as? KtStringTemplateExpression
42
+ if (argument != null && argument.hasInterpolation()) error("${property.name}: @Field key must be a constant string")
43
+ val key = argument?.entries?.joinToString("") { it.text }?.takeUnless { it.isBlank() } ?: property.name!!
44
+ val range = initializer?.textRange
45
+ return "{\"name\":${quote(property.name!!)},\"key\":${quote(key)}" +
46
+ ",\"required\":${property.annotation("Required") != null}" +
47
+ ",\"mutable\":$mutable,\"hidden\":${hidden(property)}" +
48
+ ",\"initializer\":${if (range == null) "null" else "[${range.startOffset},${range.endOffset}]"}}"
49
+ }
50
+
51
+ for (path in args) {
52
+ val text = java.io.File(path).readText().replace("\r\n", "\n")
53
+ val file = factory.createFile(path.substringAfterLast('/'), text)
54
+ val records = mutableListOf<String>()
55
+ val enums = mutableListOf<String>()
56
+ val views = mutableListOf<String>()
57
+ val props = mutableListOf<String>()
58
+ file.accept(object : KtTreeVisitorVoid() {
59
+ override fun visitClass(klass: KtClass) {
60
+ super.visitClass(klass)
61
+ val name = relativeName(klass)
62
+ val isHidden = generateSequence<KtClassOrObject>(klass) { it.containingClassOrObject }.any(::hidden)
63
+ if (klass.isEnum()) {
64
+ // upstream reads the enum's declared fields: its val and var parameters
65
+ val fields = klass.primaryConstructorParameters.filter { it.hasValOrVar() }
66
+ val parameter = fields.singleOrNull()
67
+ enums += "{\"name\":${quote(name)},\"hidden\":$isHidden,\"fields\":${fields.size}" +
68
+ ",\"parameter\":${parameter?.name?.let(::quote) ?: "null"}" +
69
+ ",\"hiddenParameter\":${parameter != null && hidden(parameter)}}"
70
+ return
71
+ }
72
+ // a view class names its props class as ExpoComposeView's argument
73
+ val composeView = klass.superTypeListEntries.firstNotNullOfOrNull { entry ->
74
+ val type = entry.typeReference?.typeElement as? KtUserType ?: return@firstNotNullOfOrNull null
75
+ if (type.referencedName != "ExpoComposeView") return@firstNotNullOfOrNull null
76
+ type.typeArgumentsAsTypes.singleOrNull()?.text ?: ""
77
+ }
78
+ if (composeView != null && !klass.hasModifier(KtTokens.ABSTRACT_KEYWORD)) {
79
+ views += "{\"name\":${quote(name)},\"hidden\":$isHidden,\"props\":${quote(composeView)}}"
80
+ return
81
+ }
82
+ if (!klass.hasModifier(KtTokens.ABSTRACT_KEYWORD) && klass.superTypeListEntries.any {
83
+ (it.typeReference?.typeElement as? KtUserType)?.referencedName == "ExpoView"
84
+ }) {
85
+ views += "{\"name\":${quote(name)},\"hidden\":$isHidden,\"props\":\"\"}"
86
+ return
87
+ }
88
+ if (klass.superTypeListEntries.any { it.typeReference?.text?.substringAfterLast('.') == "ComposeProps" }) {
89
+ // upstream unwraps each member property's MutableState
90
+ val states = klass.primaryConstructorParameters.filter { it.hasValOrVar() && !hidden(it) }.map { it.name!! } +
91
+ klass.getProperties().filter { !hidden(it) }.map { it.name!! }
92
+ props += "{\"name\":${quote(name)},\"hidden\":$isHidden,\"states\":${states.joinToString(",", "[", "]") { quote(it) }}}"
93
+ return
94
+ }
95
+ val record = klass.superTypeListEntries.any {
96
+ val type = it.typeReference?.text
97
+ type == "Record" || type == "expo.modules.kotlin.records.Record"
98
+ }
99
+ if (!record) return
100
+ val fields = klass.primaryConstructorParameters
101
+ .filter { it.hasValOrVar() }
102
+ .mapNotNull { field(it, it.isMutable, it.defaultValue) } +
103
+ klass.getProperties().mapNotNull { field(it, it.isVar, it.initializer) }
104
+ records += "{\"name\":${quote(name)},\"hidden\":$isHidden,\"fields\":${fields.joinToString(",", "[", "]")}}"
105
+ }
106
+ })
107
+ if (records.isEmpty() && enums.isEmpty() && views.isEmpty() && props.isEmpty()) continue
108
+ println(
109
+ "{\"file\":${quote(path)},\"package\":${quote(file.packageFqName.asString())}" +
110
+ ",\"records\":${records.joinToString(",", "[", "]")}" +
111
+ ",\"enums\":${enums.joinToString(",", "[", "]")}" +
112
+ ",\"views\":${views.joinToString(",", "[", "]")}" +
113
+ ",\"props\":${props.joinToString(",", "[", "]")}}",
114
+ )
115
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peachsim",
3
- "version": "0.1.939",
3
+ "version": "0.1.1399",
4
4
  "description": "Vite and Metro plugins, testing drivers, and SDK exports for peach.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -26,6 +26,7 @@
26
26
  "./config": {
27
27
  "types": "./src/config.ts",
28
28
  "source": "./src/config.ts",
29
+ "import": "./dist-lib/config.mjs",
29
30
  "default": "./dist-lib/config.cjs"
30
31
  },
31
32
  "./auth/shared-session": {
@@ -130,6 +131,13 @@
130
131
  "import": "./dist-lib/native-app-identity.mjs",
131
132
  "default": "./dist-lib/native-app-identity.cjs"
132
133
  },
134
+ "./native-app-identity-project": {
135
+ "types": "./src/native-app-identity-project.ts",
136
+ "source": "./src/native-app-identity-project.ts",
137
+ "bun": "./src/native-app-identity-project.ts",
138
+ "import": "./dist-lib/native-app-identity-project.mjs",
139
+ "default": "./dist-lib/native-app-identity-project.cjs"
140
+ },
133
141
  "./metro-fingerprint-registry": {
134
142
  "types": "./src/metro-fingerprint-registry.ts",
135
143
  "source": "./src/metro-fingerprint-registry.ts",
@@ -185,20 +193,10 @@
185
193
  "source": "./src/agent-events.ts",
186
194
  "default": "./dist-lib/agent-events.cjs"
187
195
  },
188
- "./agent-sessions": {
189
- "source": "./src/agent-sessions.ts",
190
- "default": "./dist-lib/agent-sessions.cjs"
191
- },
192
196
  "./agent-daemon-client": {
193
197
  "source": "./src/agent-daemon-client.ts",
194
198
  "default": "./dist-lib/agent-daemon-client.cjs"
195
199
  },
196
- "./agent-identity": {
197
- "source": "./src/agent-identity.ts",
198
- "bun": "./src/agent-identity.ts",
199
- "import": "./src/agent-identity.ts",
200
- "default": "./dist-lib/agent-identity.cjs"
201
- },
202
200
  "./attached-projects": {
203
201
  "source": "./src/attached-projects.ts",
204
202
  "default": "./dist-lib/attached-projects.cjs"
@@ -248,10 +246,6 @@
248
246
  "source": "./src/bridge-constants.ts",
249
247
  "default": "./dist-lib/bridge-constants.cjs"
250
248
  },
251
- "./cli-constants": {
252
- "source": "./src/cli-constants.ts",
253
- "default": "./dist-lib/cli-constants.cjs"
254
- },
255
249
  "./public-brand": {
256
250
  "types": "./src/public-brand.ts",
257
251
  "source": "./src/public-brand.ts",
@@ -269,10 +263,6 @@
269
263
  "source": "./src/dev-bundle-resolution.ts",
270
264
  "default": "./dist-lib/dev-bundle-resolution.cjs"
271
265
  },
272
- "./render-mode": {
273
- "source": "./src/render-mode.ts",
274
- "default": "./dist-lib/render-mode.cjs"
275
- },
276
266
  "./host/bridge-host": {
277
267
  "source": "./src/host/bridge-host.ts",
278
268
  "default": "./dist-lib/host/bridge-host.cjs"
@@ -365,19 +355,23 @@
365
355
  }
366
356
  },
367
357
  "devDependencies": {
368
- "@types/plist": "3.0.5",
369
358
  "@contrast/runtime-delivery": "workspace:*",
370
359
  "@peach/box": "workspace:*",
360
+ "@peach/compat": "workspace:*",
371
361
  "@peach/globals": "workspace:*",
372
362
  "@peach/skills": "workspace:*",
373
- "@peach/compat": "workspace:*",
363
+ "@types/plist": "3.0.5",
374
364
  "@types/ws": "^8.5.13",
375
- "peach-kit": "workspace:*",
365
+ "json5": "^2.2.3",
376
366
  "peach-cloud-box": "workspace:*",
377
367
  "peach-engine": "workspace:*",
368
+ "peach-kit": "workspace:*",
369
+ "pixelmatch": "catalog:",
370
+ "pngjs": "catalog:",
371
+ "rollup": "4.62.2",
372
+ "systemjs": "6.15.1",
378
373
  "typescript": "7.1.0-dev.20261003.1",
379
374
  "vite": "8.3.3",
380
- "json5": "^2.2.3",
381
375
  "yaml": "^2.8.3"
382
376
  }
383
377
  }