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.
- package/README.md +28 -22
- package/cli/app-catalog.ts +29 -14
- package/cli/app-fonts.ts +5 -3
- package/cli/bridge-flow-runner.ts +40 -29
- package/cli/cloud-client.ts +57 -21
- package/cli/cloud-test-tunnel.ts +12 -18
- package/cli/commands/agent.ts +1 -1
- package/cli/commands/app-fonts.ts +3 -3
- package/cli/commands/assert.ts +8 -8
- package/cli/commands/auth.ts +8 -3
- package/cli/commands/box/bundle-plane.ts +13 -1
- package/cli/commands/box.ts +16 -5
- package/cli/commands/compat.ts +1 -1
- package/cli/commands/config.ts +2 -2
- package/cli/commands/control.ts +125 -71
- package/cli/commands/cpu-profile.ts +45 -1
- package/cli/commands/daemon.ts +131 -33
- package/cli/commands/debug.ts +24 -17
- package/cli/commands/desktop.ts +7 -1
- package/cli/commands/detect.ts +101 -0
- package/cli/commands/detox.ts +6 -6
- package/cli/commands/device.ts +12 -12
- package/cli/commands/electron.ts +32 -14
- package/cli/commands/flow.ts +49 -41
- package/cli/commands/guest-host.ts +39 -1
- package/cli/commands/inspect/core.ts +14 -8
- package/cli/commands/inspect/list.ts +1 -1
- package/cli/commands/inspect/settle.ts +5 -3
- package/cli/commands/inspect/settling.ts +229 -44
- package/cli/commands/inspect/wait-idle.ts +3 -2
- package/cli/commands/inspect.ts +105 -93
- package/cli/commands/install-cli.ts +36 -15
- package/cli/commands/install-desktop.ts +68 -195
- package/cli/commands/kotlin.ts +6 -5
- package/cli/commands/login.ts +5 -5
- package/cli/commands/maestro-compare.ts +554 -0
- package/cli/commands/maestro-generate.ts +6 -3
- package/cli/commands/maestro.ts +22 -0
- package/cli/commands/mode.ts +2 -2
- package/cli/commands/no-bridge-hint.ts +6 -2
- package/cli/commands/platform.ts +35 -6
- package/cli/commands/preview.ts +6 -0
- package/cli/commands/project-report.ts +10 -12
- package/cli/commands/record.ts +37 -37
- package/cli/commands/runtime.ts +9 -9
- package/cli/commands/screenshot-layers.ts +4 -4
- package/cli/commands/screenshot-mode.ts +2 -2
- package/cli/commands/screenshot.ts +8 -8
- package/cli/commands/screenshots-capture.ts +2 -2
- package/cli/commands/serve.ts +9 -12
- package/cli/commands/setup.ts +29 -14
- package/cli/commands/shell-boolean-mode.ts +2 -2
- package/cli/commands/show-touches-mode.ts +2 -2
- package/cli/commands/skills.ts +11 -11
- package/cli/commands/swift.ts +29 -11
- package/cli/commands/telemetry.ts +2 -2
- package/cli/commands/test.ts +5 -0
- package/cli/commands/three-mode.ts +3 -3
- package/cli/commands/timeline.ts +4 -4
- package/cli/commands/upgrade.ts +2 -2
- package/cli/commands/upload.ts +15 -15
- package/cli/commands/what-happened.ts +2 -2
- package/cli/current-sim.ts +6 -3
- package/cli/desktop-companion.ts +55 -149
- package/cli/dev-build-freshness.ts +2 -2
- package/cli/drivers/desktop.ts +17 -9
- package/cli/drivers/electron.ts +1 -2
- package/cli/drivers/playwright-sim-host.ts +11 -2
- package/cli/drivers/playwright.ts +35 -2
- package/cli/drivers/types.ts +8 -0
- package/cli/maestro-compare.ts +670 -0
- package/cli/outbound-endpoints.ts +46 -8
- package/cli/recording-access.ts +6 -6
- package/cli/run-registry.ts +1 -1
- package/cli/runtime-compat.ts +5 -1
- package/cli/send-to-box.ts +3 -3
- package/cli/shell-init.ts +2 -1
- package/cli/ws-bridge.ts +9 -5
- package/detox/element-types.ts +1 -0
- package/detox/gestures.ts +3 -3
- package/detox/index.ts +67 -38
- package/detox/navigation-lifecycle.ts +9 -6
- package/detox/proof-frame.cjs +6 -4
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +42 -17
- package/dist-lib/bridge-contract-input.mjs +41 -16
- package/dist-lib/bridge-contract.cjs +1 -4
- package/dist-lib/bridge-contract.mjs +1 -3
- package/dist-lib/bundle-channel.cjs +2918 -550
- package/dist-lib/capture-contract.cjs +65 -24
- package/dist-lib/capture-contract.mjs +63 -24
- package/dist-lib/cloud-contract.cjs +2 -2
- package/dist-lib/cloud-contract.mjs +2 -2
- package/dist-lib/cloud-test-args.cjs +1 -1
- package/dist-lib/cloud-test-args.mjs +1 -1
- package/dist-lib/cloud.cjs +3 -3
- package/dist-lib/cloud.mjs +3 -3
- package/dist-lib/config.cjs +15 -5
- package/dist-lib/config.mjs +154 -0
- package/dist-lib/detox/index.cjs +495 -139
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/expo-swift-bundle.cjs +1168 -238
- package/dist-lib/expo-swift-metadata.cjs +34 -23
- package/dist-lib/expo-swift-metadata.mjs +32 -23
- package/dist-lib/home-paths.cjs +2 -2
- package/dist-lib/host/bridge-host.cjs +2938 -654
- package/dist-lib/host/fetch-proxy-handler.cjs +14 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +7 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +5 -1
- package/dist-lib/host/replacement-module-handler.cjs +2 -2
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +999 -353
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/jump-to-source-native.cjs +1 -1
- package/dist-lib/kotlin-host.cjs +332 -19
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.mjs +1 -1
- package/dist-lib/metro-production-bundle.cjs +7 -7
- package/dist-lib/metro-production-bundle.mjs +5 -5
- package/dist-lib/metro.cjs +688 -250
- package/dist-lib/native-app-identity-project.cjs +2647 -0
- package/dist-lib/native-app-identity-project.mjs +1257 -0
- package/dist-lib/native-app-identity.cjs +325 -25
- package/dist-lib/native-app-identity.mjs +323 -25
- package/dist-lib/native-firebase-metadata.cjs +1 -1
- package/dist-lib/native-firebase-metadata.mjs +1 -1
- package/dist-lib/plist.cjs +1 -1
- package/dist-lib/plist.mjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/react-native-host-modules.cjs +5 -1
- package/dist-lib/react-native-host-modules.mjs +5 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +57 -32
- package/dist-lib/sdk.cjs +231 -51
- package/dist-lib/sdk.mjs +231 -51
- package/dist-lib/skills.cjs +4107 -1374
- package/dist-lib/swift-compile.cjs +290 -30
- package/dist-lib/swift-compile.mjs +290 -30
- package/dist-lib/swift-package.cjs +143 -12
- package/dist-lib/swift-package.mjs +137 -11
- package/dist-lib/swift-submit.cjs +47 -5
- package/dist-lib/swift-submit.mjs +42 -5
- package/dist-lib/swift-toolchain.cjs +7 -2
- package/dist-lib/swift.cjs +1 -1
- package/dist-lib/vite-swift.cjs +1392 -458
- package/dist-lib/vite.cjs +13 -17
- package/dist-lib/worklet-executable.cjs +248 -33
- package/dist-lib/worklet-executable.mjs +248 -33
- package/install.sh +10 -1
- package/kotlin/{AppSources → AndroidViewSources}/android/content/res/Resources.kt +9 -9
- package/kotlin/AndroidViewSources/android/graphics/Canvas.kt +20 -0
- package/kotlin/AndroidViewSources/android/view/View.kt +211 -0
- package/kotlin/AndroidViewSources/android/widget/FrameLayout.kt +61 -0
- package/kotlin/AndroidViewSources/android/widget/LinearLayout.kt +49 -0
- package/kotlin/AppSources/android/view/Window.kt +36 -0
- package/kotlin/AppSources/android/view/WindowInsets.kt +9 -0
- package/kotlin/AppSources/android/view/WindowInsetsController.kt +5 -0
- package/kotlin/AppSources/android/window/OnBackInvokedDispatcher.kt +48 -0
- package/kotlin/AppSources/androidx/activity/OnBackPressedDispatcher.kt +20 -5
- package/kotlin/AppSources/androidx/compose/foundation/layout/WindowInsets.kt +15 -0
- package/kotlin/AppSources/androidx/compose/ui/platform/ComposeView.kt +2 -1
- package/kotlin/AppSources/dev/peach/app/PeachApp.kt +42 -50
- package/kotlin/ComposeSources/PeachComposeHost.kt +200 -84
- package/kotlin/ExpoComposeSources/PeachAndroidView.kt +87 -0
- package/kotlin/ExpoComposeSources/PeachExpoViewMount.kt +24 -0
- package/kotlin/ExpoComposeSources/dev/peach/expo/PeachExpoCompose.kt +28 -0
- package/kotlin/ExpoComposeSources/expo/modules/kotlin/views/ExpoComposeView.kt +70 -0
- package/kotlin/ExpoSources/dev/peach/expo/PeachExpoRuntime.kt +513 -0
- package/kotlin/ExpoSources/dev/peach/expo/PeachExpoTypes.kt +173 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/AppContext.kt +20 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/Promise.kt +19 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/classcomponent/ClassComponentBuilder.kt +198 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/exception/CodedException.kt +126 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/functions/Functions.kt +132 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/jni/JavaScriptTypedArray.kt +81 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/modules/Module.kt +98 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/objects/ObjectDefinitionBuilder.kt +236 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/records/Record.kt +12 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/runtime/Runtime.kt +9 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedObject.kt +50 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedObjectRegistry.kt +57 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedRef.kt +19 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/ConcreteTypedArrays.kt +158 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/GenericTypedArray.kt +8 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/TypedArray.kt +29 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/TypedArrayIterator.kt +9 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/types/AnyType.kt +155 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/types/Either.kt +91 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/types/Enumerable.kt +6 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/viewevent/ViewEvent.kt +54 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/views/ExpoView.kt +23 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/views/ViewDefinitionBuilder.kt +71 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/views/ViewProps.kt +35 -0
- package/kotlin/README.md +13 -3
- package/kotlin/Sources/android/os/Build.kt +17 -0
- package/kotlin/Sources/android/os/Handler.kt +35 -0
- package/kotlin/Sources/android/os/Looper.kt +17 -0
- package/kotlin/Sources/android/os/MessageQueue.kt +56 -0
- package/kotlin/Sources/android/os/SystemClock.kt +14 -0
- package/kotlin/Sources/android/util/Log.kt +64 -0
- package/kotlin/Sources/java/security/MessageDigest.kt +114 -0
- package/kotlin/Sources/kotlin/text/StringFormat.kt +9 -0
- package/kotlin/Sources/org/json/JSON.kt +44 -0
- package/kotlin/fixtures/counter/Counter.d.kt.ts +1 -0
- package/kotlin/fixtures/counter/Counter.kt +10 -3
- package/kotlin/fixtures/counter/CounterApp.native.tsx +1 -1
- package/kotlin/fixtures/counter/vite.config.ts +2 -2
- package/kotlin/fixtures/headless-counter/Headless.kt +7 -6
- package/kotlin/fixtures/import-animation/Animation.d.kt.ts +7 -0
- package/kotlin/fixtures/import-animation/Animation.kt +80 -0
- package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +13 -0
- package/kotlin/fixtures/import-animation/README.md +24 -0
- package/kotlin/fixtures/import-animation/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-animation/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-animation/app/routes.d.ts +18 -0
- package/kotlin/fixtures/import-animation/package.json +23 -0
- package/kotlin/fixtures/import-animation/tsconfig.json +20 -0
- package/kotlin/fixtures/import-animation/vite.config.ts +20 -0
- package/kotlin/fixtures/import-editor/Editor.d.kt.ts +7 -0
- package/kotlin/fixtures/import-editor/Editor.kt +59 -0
- package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +23 -0
- package/kotlin/fixtures/import-editor/README.md +27 -0
- package/kotlin/fixtures/import-editor/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-editor/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-editor/package.json +23 -0
- package/kotlin/fixtures/import-editor/tsconfig.json +20 -0
- package/kotlin/fixtures/import-editor/vite.config.ts +20 -0
- package/kotlin/fixtures/import-effects/Effects.d.kt.ts +7 -0
- package/kotlin/fixtures/import-effects/Effects.kt +87 -0
- package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +13 -0
- package/kotlin/fixtures/import-effects/README.md +19 -0
- package/kotlin/fixtures/import-effects/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-effects/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-effects/package.json +23 -0
- package/kotlin/fixtures/import-effects/tsconfig.json +20 -0
- package/kotlin/fixtures/import-effects/vite.config.ts +20 -0
- package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +13 -0
- package/kotlin/fixtures/import-layout/Layout.d.kt.ts +7 -0
- package/kotlin/fixtures/import-layout/Layout.kt +72 -0
- package/kotlin/fixtures/import-layout/README.md +24 -0
- package/kotlin/fixtures/import-layout/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-layout/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-layout/package.json +23 -0
- package/kotlin/fixtures/import-layout/tsconfig.json +20 -0
- package/kotlin/fixtures/import-layout/vite.config.ts +20 -0
- package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +18 -0
- package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +7 -0
- package/kotlin/fixtures/import-navigation/Navigation.kt +104 -0
- package/kotlin/fixtures/import-navigation/README.md +31 -0
- package/kotlin/fixtures/import-navigation/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-navigation/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-navigation/package.json +23 -0
- package/kotlin/fixtures/import-navigation/tsconfig.json +20 -0
- package/kotlin/fixtures/import-navigation/vite.config.ts +20 -0
- package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +29 -0
- package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +7 -0
- package/kotlin/fixtures/import-overlays/Overlays.kt +93 -0
- package/kotlin/fixtures/import-overlays/README.md +34 -0
- package/kotlin/fixtures/import-overlays/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-overlays/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-overlays/package.json +23 -0
- package/kotlin/fixtures/import-overlays/tsconfig.json +20 -0
- package/kotlin/fixtures/import-overlays/vite.config.ts +20 -0
- package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +13 -0
- package/kotlin/fixtures/import-scroll/README.md +23 -0
- package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +7 -0
- package/kotlin/fixtures/import-scroll/Scroll.kt +91 -0
- package/kotlin/fixtures/import-scroll/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-scroll/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-scroll/package.json +23 -0
- package/kotlin/fixtures/import-scroll/tsconfig.json +20 -0
- package/kotlin/fixtures/import-scroll/vite.config.ts +20 -0
- package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +44 -0
- package/kotlin/fixtures/import-selection/README.md +32 -0
- package/kotlin/fixtures/import-selection/Selection.d.kt.ts +8 -0
- package/kotlin/fixtures/import-selection/Selection.kt +78 -0
- package/kotlin/fixtures/import-selection/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-selection/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-selection/package.json +23 -0
- package/kotlin/fixtures/import-selection/tsconfig.json +20 -0
- package/kotlin/fixtures/import-selection/vite.config.ts +20 -0
- package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +13 -0
- package/kotlin/fixtures/import-surfaces/README.md +22 -0
- package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +7 -0
- package/kotlin/fixtures/import-surfaces/Surfaces.kt +64 -0
- package/kotlin/fixtures/import-surfaces/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-surfaces/package.json +23 -0
- package/kotlin/fixtures/import-surfaces/tsconfig.json +20 -0
- package/kotlin/fixtures/import-surfaces/vite.config.ts +20 -0
- package/kotlin/fixtures/import-values/ImportValues.native.tsx +35 -0
- package/kotlin/fixtures/import-values/README.md +23 -0
- package/kotlin/fixtures/import-values/Values.d.kt.ts +11 -0
- package/kotlin/fixtures/import-values/Values.kt +66 -0
- package/kotlin/fixtures/import-values/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-values/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-values/package.json +23 -0
- package/kotlin/fixtures/import-values/tsconfig.json +20 -0
- package/kotlin/fixtures/import-values/vite.config.ts +20 -0
- package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +38 -0
- package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +36 -0
- package/kotlin/fixtures/kotlin-app-variants/Ime.kt +3 -1
- package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +50 -0
- package/kotlin/fork/NOTICE +6 -1
- package/kotlin/fork/README.md +15 -7
- package/kotlin/fork/build.sh +2 -0
- package/kotlin/fork/compose-worker-globals.patch +186 -4
- package/kotlin/fork/fork.json +2 -2
- package/kotlin/fork/skiko-worker-clock.patch +12 -0
- package/kotlin/toolchain.json +12 -12
- package/kotlin/tools/expo-types.main.kts +115 -0
- package/package.json +17 -23
- package/scripts/dev-server-scanner.ts +92 -66
- package/skills/contrast/SKILL.md +2 -2
- package/skills/peach-debug/SKILL.md +1 -1
- package/skills/peach-perf/SKILL.md +1 -1
- package/skills/peach-setup/SKILL.md +2 -1
- package/skills/peach-test/SKILL.md +8 -0
- package/src/assetCatalogContract.ts +43 -1
- package/src/bridge-contract-input.ts +46 -19
- package/src/bridge-contract.ts +0 -1
- package/src/bundle-channel.mjs +197 -84
- package/src/bundleGlobalFooter.ts +38 -0
- package/src/capture-contract.ts +107 -33
- package/src/cloud-contract.ts +5 -1
- package/src/cloud.ts +5 -2
- package/src/config.ts +22 -3
- package/src/configured-bundle-producer.ts +1 -1
- package/src/desktop-host-delivery.ts +95 -1
- package/src/expo-kotlin-bundle.ts +29 -0
- package/src/expo-kotlin-host.ts +201 -0
- package/src/expo-swift-host.ts +96 -76
- package/src/expoKotlinContract.ts +70 -0
- package/src/expoSwiftContract.ts +4 -25
- package/src/home-paths.ts +7 -4
- package/src/host/bridge-host.ts +23 -3
- package/src/host/fetch-proxy-handler.ts +13 -0
- package/src/host/fetch-proxy-overrides.ts +11 -0
- package/src/host/replacement-module-handler.ts +5 -2
- package/src/index.ts +3 -1
- package/src/kotlin-host.ts +463 -19
- package/src/metro-plugin.ts +56 -28
- package/src/metro-production-bundle.ts +2 -2
- package/src/native-app-identity-project.ts +190 -0
- package/src/native-app-identity.ts +398 -34
- package/src/native-firebase-config.ts +69 -15
- package/src/native-seam-manifest.ts +6 -0
- package/src/one-widget-discovery.ts +2 -1
- package/src/openstep-plist.ts +107 -0
- package/src/react-native-host-modules.ts +4 -0
- package/src/runtime-assets.ts +2 -2
- package/src/sim-client.ts +2 -2
- package/src/swift-binary-modules.ts +3 -1
- package/src/swift-compile.ts +286 -38
- package/src/swift-distribution-contract.ts +4 -0
- package/src/swift-distribution.lock.json +123 -12
- package/src/swift-distribution.ts +7 -3
- package/src/swift-host.ts +298 -83
- package/src/swift-package-manifest.ts +29 -2
- package/src/swift-package.ts +180 -10
- package/src/swift-packages.ts +4 -0
- package/src/swift-standin-emit.ts +4 -1
- package/src/swift-standins.ts +274 -15
- package/src/swift-submit.ts +62 -7
- package/src/swift-toolchain.ts +6 -1
- package/src/swiftContract.ts +126 -3
- package/src/vite-plugin-one.ts +13 -16
- package/src/vite-plugin-swift.ts +4 -5
- package/src/vite-plugin.ts +360 -144
- package/src/vite.d.ts +1 -1
- package/src/worker-system-chunks.ts +221 -0
- package/src/worklet-executable.ts +348 -38
- package/src/worklets-babel.ts +1 -1
- package/src/xcode-project.ts +243 -127
- package/dist-lib/agent-identity.cjs +0 -39
- package/dist-lib/agent-sessions.cjs +0 -760
- package/dist-lib/cli-constants.cjs +0 -32
- package/dist-lib/render-mode.cjs +0 -44
- package/kotlin/AppSources/android/view/View.kt +0 -74
- package/kotlin/AppSources/android/widget/FrameLayout.kt +0 -6
- package/src/render-mode.ts +0 -15
- /package/kotlin/{AppSources → AndroidViewSources}/android/content/Context.kt +0 -0
- /package/kotlin/{AppSources → AndroidViewSources}/android/content/res/Configuration.kt +0 -0
- /package/kotlin/{AppSources → AndroidViewSources}/android/graphics/Color.kt +0 -0
- /package/kotlin/{AppSources → AndroidViewSources}/android/util/DisplayMetrics.kt +0 -0
- /package/kotlin/{AppSources → AndroidViewSources}/dev/peach/app/JavaFormat.kt +0 -0
- /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
|
-
@@ -
|
|
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
|
-
@@ -
|
|
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
|
-
@@ -
|
|
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
|
-
|
|
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
|
+
}
|
package/kotlin/fork/fork.json
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"tag": "v1.13.0-alpha01",
|
|
23
23
|
"commit": "a9e47e8aa04c95cfe572ab4297c770f3cbfb234e",
|
|
24
24
|
"patch": "compose-worker-globals.patch",
|
|
25
|
-
"patchSha256": "
|
|
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": "
|
|
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
|
package/kotlin/toolchain.json
CHANGED
|
@@ -18,14 +18,14 @@
|
|
|
18
18
|
],
|
|
19
19
|
"composeLibraries": [
|
|
20
20
|
{
|
|
21
|
-
"name": "ui-wasm-js-1.13.0-alpha01-peach-
|
|
22
|
-
"url": "https://r2.rnxsim.com/peach-kotlin-fork/
|
|
23
|
-
"sha256": "
|
|
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://
|
|
28
|
-
"sha256": "
|
|
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-
|
|
72
|
-
"url": "https://r2.rnxsim.com/peach-kotlin-fork/
|
|
73
|
-
"sha256": "
|
|
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-
|
|
329
|
-
"url": "https://r2.rnxsim.com/peach-kotlin-fork/
|
|
330
|
-
"sha256": "
|
|
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.
|
|
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
|
-
"@
|
|
363
|
+
"@types/plist": "3.0.5",
|
|
374
364
|
"@types/ws": "^8.5.13",
|
|
375
|
-
"
|
|
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
|
}
|