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
package/src/swiftContract.ts
CHANGED
|
@@ -1,10 +1,128 @@
|
|
|
1
|
+
import { isSwiftImageVariants } from './assetCatalogContract.ts'
|
|
1
2
|
import type {
|
|
2
3
|
AppCatalogColor,
|
|
3
4
|
SfSymbolVector,
|
|
4
|
-
|
|
5
|
+
SwiftImageResources,
|
|
5
6
|
} from './assetCatalogContract'
|
|
6
7
|
import type { ComponentType } from 'react'
|
|
7
8
|
|
|
9
|
+
export interface SwiftMetalSource {
|
|
10
|
+
url: string
|
|
11
|
+
sha256: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface SwiftResourceBundle {
|
|
15
|
+
target: string
|
|
16
|
+
sourcePath: string
|
|
17
|
+
path: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface SwiftMetalLibrarySource extends SwiftMetalSource {
|
|
21
|
+
bundlePath: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function isSwiftResourcePath(value: unknown): value is string {
|
|
25
|
+
return (
|
|
26
|
+
typeof value === 'string' &&
|
|
27
|
+
value.length <= 4096 &&
|
|
28
|
+
!value.startsWith('/') &&
|
|
29
|
+
!value.includes('\\') &&
|
|
30
|
+
!value.includes('\0') &&
|
|
31
|
+
value.split('/').every((part) => part !== '' && part !== '.' && part !== '..')
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function isSwiftBundlePath(value: unknown): value is string {
|
|
36
|
+
return (
|
|
37
|
+
typeof value === 'string' &&
|
|
38
|
+
(value === '.' || (isSwiftResourcePath(value) && /\.(bundle|framework)$/.test(value)))
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function swiftRelativeBundlePath(
|
|
43
|
+
resourceRoot: string,
|
|
44
|
+
bundlePath: string,
|
|
45
|
+
): string {
|
|
46
|
+
const relative =
|
|
47
|
+
bundlePath === resourceRoot ? '.' : bundlePath.slice(resourceRoot.length + 1)
|
|
48
|
+
if (
|
|
49
|
+
(bundlePath !== resourceRoot && !bundlePath.startsWith(`${resourceRoot}/`)) ||
|
|
50
|
+
!isSwiftBundlePath(relative)
|
|
51
|
+
)
|
|
52
|
+
throw new Error(`swift image bundle ${bundlePath} is outside ${resourceRoot}`)
|
|
53
|
+
return relative
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function isSwiftImageResources(value: unknown): value is SwiftImageResources {
|
|
57
|
+
return (
|
|
58
|
+
typeof value === 'object' &&
|
|
59
|
+
value !== null &&
|
|
60
|
+
!Array.isArray(value) &&
|
|
61
|
+
Object.entries(value).every(
|
|
62
|
+
([bundlePath, images]) =>
|
|
63
|
+
isSwiftBundlePath(bundlePath) &&
|
|
64
|
+
typeof images === 'object' &&
|
|
65
|
+
images !== null &&
|
|
66
|
+
!Array.isArray(images) &&
|
|
67
|
+
Object.entries(images).every(
|
|
68
|
+
([name, image]) => isSwiftResourcePath(name) && isSwiftImageVariants(image),
|
|
69
|
+
),
|
|
70
|
+
)
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function isSwiftResourceBundles(value: unknown): value is SwiftResourceBundle[] {
|
|
75
|
+
return (
|
|
76
|
+
Array.isArray(value) &&
|
|
77
|
+
value.length <= 128 &&
|
|
78
|
+
value.every(
|
|
79
|
+
(bundle) =>
|
|
80
|
+
typeof bundle === 'object' &&
|
|
81
|
+
bundle !== null &&
|
|
82
|
+
typeof bundle.target === 'string' &&
|
|
83
|
+
/^[A-Za-z_][A-Za-z0-9_-]*$/.test(bundle.target) &&
|
|
84
|
+
(bundle.sourcePath === '.' || isSwiftResourcePath(bundle.sourcePath)) &&
|
|
85
|
+
isSwiftBundlePath(bundle.path),
|
|
86
|
+
) &&
|
|
87
|
+
new Set(value.map((bundle) => bundle.target)).size === value.length &&
|
|
88
|
+
new Set(value.map((bundle) => bundle.path)).size === value.length
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function isSwiftMetalSources(
|
|
93
|
+
value: unknown,
|
|
94
|
+
): value is Record<string, SwiftMetalSource> {
|
|
95
|
+
return (
|
|
96
|
+
typeof value === 'object' &&
|
|
97
|
+
value !== null &&
|
|
98
|
+
!Array.isArray(value) &&
|
|
99
|
+
Object.entries(value).every(
|
|
100
|
+
([file, source]) =>
|
|
101
|
+
file.endsWith('.metal') &&
|
|
102
|
+
isSwiftResourcePath(file) &&
|
|
103
|
+
typeof source === 'object' &&
|
|
104
|
+
source !== null &&
|
|
105
|
+
!Array.isArray(source) &&
|
|
106
|
+
'url' in source &&
|
|
107
|
+
typeof source.url === 'string' &&
|
|
108
|
+
'sha256' in source &&
|
|
109
|
+
typeof source.sha256 === 'string' &&
|
|
110
|
+
/^[a-f0-9]{64}$/.test(source.sha256),
|
|
111
|
+
)
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function isSwiftMetalLibrarySources(
|
|
116
|
+
value: unknown,
|
|
117
|
+
): value is Record<string, SwiftMetalLibrarySource> {
|
|
118
|
+
return (
|
|
119
|
+
isSwiftMetalSources(value) &&
|
|
120
|
+
Object.values(value).every(
|
|
121
|
+
(source) => 'bundlePath' in source && isSwiftBundlePath(source.bundlePath),
|
|
122
|
+
)
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
|
|
8
126
|
export interface SwiftModuleOptions {
|
|
9
127
|
// the host serves the artifact, icu data and named image bytes.
|
|
10
128
|
url: string
|
|
@@ -12,16 +130,21 @@ export interface SwiftModuleOptions {
|
|
|
12
130
|
hash: string
|
|
13
131
|
icuUrl?: string
|
|
14
132
|
exports?: readonly string[]
|
|
15
|
-
resources?:
|
|
16
|
-
//
|
|
133
|
+
resources?: SwiftImageResources
|
|
134
|
+
// bundle paths map to base64 bytes exposed to wasm through its read-only /res.
|
|
17
135
|
bundleFiles?: Record<string, string>
|
|
18
136
|
colors?: Record<string, AppCatalogColor>
|
|
19
137
|
symbols?: Record<string, SfSymbolVector>
|
|
138
|
+
// original target-relative metal sources, fetched only by the shader path.
|
|
139
|
+
metalSources?: Record<string, SwiftMetalLibrarySource>
|
|
20
140
|
}
|
|
21
141
|
|
|
22
142
|
export interface SwiftEntryOptions extends SwiftModuleOptions {
|
|
23
143
|
// only the standalone preview owns the app bundle; imports retain the host catalog.
|
|
24
144
|
mainBundle?: boolean
|
|
145
|
+
// One typed views mount through the same package instance as module calls.
|
|
146
|
+
view?: string
|
|
147
|
+
contractHash?: string
|
|
25
148
|
// the package/source path keeps a root's identity across module reloads.
|
|
26
149
|
rootId?: string
|
|
27
150
|
}
|
package/src/vite-plugin-one.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
//
|
|
1
|
+
// peach plugin for One/Vite: serves the installed peach runtime at /__peachsim/
|
|
2
2
|
// from ~/.peach/runtimes/<version>. version-owned localhost origins remain
|
|
3
3
|
// bound to that directory across an active-runtime update.
|
|
4
4
|
//
|
|
5
5
|
// usage in vite.config.ts:
|
|
6
|
-
// import {
|
|
7
|
-
// export default { plugins: [one(),
|
|
6
|
+
// import { peachPlugin } from 'peachsim/vite'
|
|
7
|
+
// export default { plugins: [one(), peachPlugin()] }
|
|
8
8
|
|
|
9
9
|
import fs from 'fs'
|
|
10
10
|
import { randomUUID } from 'node:crypto'
|
|
11
|
-
import {
|
|
11
|
+
import { fileURLToPath } from 'node:url'
|
|
12
12
|
import path from 'path'
|
|
13
13
|
import { WebSocket, WebSocketServer } from 'ws'
|
|
14
14
|
import { DEFAULT_SOOTSIM_BRIDGE_PORT } from './bridge-constants'
|
|
@@ -45,8 +45,8 @@ const KOTLIN_ROUTE_PREFIX = '/__peach/kotlin'
|
|
|
45
45
|
let kotlinHost: Promise<typeof import('peachsim/kotlin-host')> | undefined
|
|
46
46
|
const loadKotlinHost = () => (kotlinHost ??= import('peachsim/kotlin-host'))
|
|
47
47
|
|
|
48
|
-
export function
|
|
49
|
-
const prefix = options.prefix || '/
|
|
48
|
+
export function peachPlugin(options: PeachPluginOptions = {}): Plugin {
|
|
49
|
+
const prefix = options.prefix || '/__peachsim'
|
|
50
50
|
|
|
51
51
|
return {
|
|
52
52
|
name: 'sootsim-one',
|
|
@@ -72,12 +72,10 @@ export function rnxPlugin(options: PeachPluginOptions = {}): Plugin {
|
|
|
72
72
|
let swiftModuleRoot: string | null | undefined
|
|
73
73
|
const moduleRootFor = (): string | undefined => {
|
|
74
74
|
if (swiftModuleRoot === undefined) {
|
|
75
|
-
|
|
76
|
-
path.join(server.config.root, 'package.json'),
|
|
77
|
-
).resolve('peachsim/package.json')
|
|
75
|
+
// src/ or dist-lib/ → .. is peachsim; the module sits beside it
|
|
78
76
|
const moduleRoot = path.resolve(
|
|
79
|
-
path.dirname(
|
|
80
|
-
'
|
|
77
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
78
|
+
'../../sootsim-swift',
|
|
81
79
|
)
|
|
82
80
|
swiftModuleRoot = fs.existsSync(path.join(moduleRoot, 'toolchain.json'))
|
|
83
81
|
? moduleRoot
|
|
@@ -178,7 +176,7 @@ export function rnxPlugin(options: PeachPluginOptions = {}): Plugin {
|
|
|
178
176
|
loadKotlinHost()
|
|
179
177
|
.then(async (host) => {
|
|
180
178
|
if (!kotlinModuleRoot) {
|
|
181
|
-
kotlinModuleRoot = host.peachKotlinModuleRoot(
|
|
179
|
+
kotlinModuleRoot = host.peachKotlinModuleRoot()
|
|
182
180
|
server.watcher.add(path.join(kotlinModuleRoot, 'Sources'))
|
|
183
181
|
}
|
|
184
182
|
const served = await host.serveKotlinRequest(pathname, res, {
|
|
@@ -346,7 +344,7 @@ export function rnxPlugin(options: PeachPluginOptions = {}): Plugin {
|
|
|
346
344
|
})
|
|
347
345
|
|
|
348
346
|
// serve a minimal /__server-scan describing THIS vite dev server, so a
|
|
349
|
-
// sootsim shell loaded from <port>/
|
|
347
|
+
// sootsim shell loaded from <port>/__peachsim can resolve this app's native
|
|
350
348
|
// bundle. dev-bundle-resolution's resolvePortViaServerScan fetches
|
|
351
349
|
// `/__server-scan` RELATIVE to the shell origin; when the shell is loaded
|
|
352
350
|
// from this target origin, that hits here. without it the request SPA-
|
|
@@ -437,7 +435,7 @@ export function rnxPlugin(options: PeachPluginOptions = {}): Plugin {
|
|
|
437
435
|
return
|
|
438
436
|
}
|
|
439
437
|
|
|
440
|
-
// serve runtime files under /
|
|
438
|
+
// serve runtime files under /__peachsim/*.
|
|
441
439
|
if (pathname.startsWith(prefix + '/')) {
|
|
442
440
|
const fullPath = resolveRuntimeFilePath(
|
|
443
441
|
runtimeRoot,
|
|
@@ -477,5 +475,4 @@ export function rnxPlugin(options: PeachPluginOptions = {}): Plugin {
|
|
|
477
475
|
}
|
|
478
476
|
}
|
|
479
477
|
|
|
480
|
-
export
|
|
481
|
-
export default rnxPlugin
|
|
478
|
+
export default peachPlugin
|
package/src/vite-plugin-swift.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// vite adapts the common Swift package host to native source imports.
|
|
2
2
|
import fs from 'node:fs'
|
|
3
3
|
import path from 'node:path'
|
|
4
|
+
import { resolveSwiftImageResourceUrls } from '../../sootsim-swift/src/bundleAssets'
|
|
4
5
|
import { swiftEntryModuleEsm } from '../../sootsim-swift/src/entryModule'
|
|
5
6
|
import { swiftModuleInputFiles } from './swift-compile'
|
|
6
7
|
import {
|
|
@@ -158,11 +159,9 @@ export function swiftPlugin(options: SwiftPluginOptions = {}): Plugin {
|
|
|
158
159
|
this.warn(error instanceof Error ? error.message : String(error))
|
|
159
160
|
artifact = project.artifact
|
|
160
161
|
}
|
|
161
|
-
const resources =
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
{ ...image, uri: `${serverOrigin()}${image.uri}` },
|
|
165
|
-
]),
|
|
162
|
+
const resources = resolveSwiftImageResourceUrls(
|
|
163
|
+
artifact.package.resources.table,
|
|
164
|
+
serverOrigin(),
|
|
166
165
|
)
|
|
167
166
|
for (const watched of [
|
|
168
167
|
...artifact.package.resources.watched,
|