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
|
@@ -1,4 +1,96 @@
|
|
|
1
|
-
/*!
|
|
1
|
+
/*! peach v0.1.1399 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
|
+
|
|
3
|
+
// src/openstep-plist.ts
|
|
4
|
+
function parseOpenStepPlist(text) {
|
|
5
|
+
let i = 0;
|
|
6
|
+
const fail = (message) => {
|
|
7
|
+
const line = text.slice(0, i).split("\n").length;
|
|
8
|
+
throw new Error(`project.pbxproj line ${line}: ${message}`);
|
|
9
|
+
};
|
|
10
|
+
const skip = () => {
|
|
11
|
+
for (; ; ) {
|
|
12
|
+
const ch = text[i];
|
|
13
|
+
if (ch === " " || ch === " " || ch === "\n" || ch === "\r") i++;
|
|
14
|
+
else if (ch === "/" && text[i + 1] === "*") {
|
|
15
|
+
const end = text.indexOf("*/", i + 2);
|
|
16
|
+
if (end < 0) fail("unterminated comment");
|
|
17
|
+
i = end + 2;
|
|
18
|
+
} else if (ch === "/" && text[i + 1] === "/") {
|
|
19
|
+
const end = text.indexOf("\n", i);
|
|
20
|
+
i = end < 0 ? text.length : end + 1;
|
|
21
|
+
} else return;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const quoted = () => {
|
|
25
|
+
i++;
|
|
26
|
+
let out = "";
|
|
27
|
+
for (; ; ) {
|
|
28
|
+
const ch = text[i++];
|
|
29
|
+
if (ch === void 0) fail("unterminated string");
|
|
30
|
+
if (ch === '"') return out;
|
|
31
|
+
if (ch !== "\\") {
|
|
32
|
+
out += ch;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const next = text[i++];
|
|
36
|
+
if (next === "n") out += "\n";
|
|
37
|
+
else if (next === "t") out += " ";
|
|
38
|
+
else if (next === "r") out += "\r";
|
|
39
|
+
else if (next === "U") {
|
|
40
|
+
out += String.fromCharCode(parseInt(text.slice(i, i + 4), 16));
|
|
41
|
+
i += 4;
|
|
42
|
+
} else out += next;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const value = () => {
|
|
46
|
+
skip();
|
|
47
|
+
const ch = text[i];
|
|
48
|
+
if (ch === "{") {
|
|
49
|
+
i++;
|
|
50
|
+
const dict = {};
|
|
51
|
+
for (; ; ) {
|
|
52
|
+
skip();
|
|
53
|
+
if (text[i] === "}") {
|
|
54
|
+
i++;
|
|
55
|
+
return dict;
|
|
56
|
+
}
|
|
57
|
+
const key = value();
|
|
58
|
+
if (typeof key !== "string") fail("dictionary key is not a string");
|
|
59
|
+
skip();
|
|
60
|
+
if (text[i++] !== "=") fail("expected =");
|
|
61
|
+
if (Object.hasOwn(dict, key)) fail(`duplicate key ${key}`);
|
|
62
|
+
dict[key] = value();
|
|
63
|
+
skip();
|
|
64
|
+
if (text[i++] !== ";") fail("expected ;");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (ch === "(") {
|
|
68
|
+
i++;
|
|
69
|
+
const list = [];
|
|
70
|
+
for (; ; ) {
|
|
71
|
+
skip();
|
|
72
|
+
if (text[i] === ")") {
|
|
73
|
+
i++;
|
|
74
|
+
return list;
|
|
75
|
+
}
|
|
76
|
+
list.push(value());
|
|
77
|
+
skip();
|
|
78
|
+
if (text[i] === ",") i++;
|
|
79
|
+
else if (text[i] !== ")") fail("expected , or )");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (ch === '"') return quoted();
|
|
83
|
+
const start = i;
|
|
84
|
+
while (i < text.length && /[A-Za-z0-9_$+/:.\-<>]/.test(text[i])) i++;
|
|
85
|
+
if (i === start) fail(`unexpected ${JSON.stringify(ch ?? "end of file")}`);
|
|
86
|
+
return text.slice(start, i);
|
|
87
|
+
};
|
|
88
|
+
if (text.startsWith("// !$*UTF8*$!")) i = text.indexOf("\n") + 1;
|
|
89
|
+
const root = value();
|
|
90
|
+
skip();
|
|
91
|
+
if (i !== text.length) fail("trailing content");
|
|
92
|
+
return root;
|
|
93
|
+
}
|
|
2
94
|
|
|
3
95
|
// src/native-app-identity.ts
|
|
4
96
|
var NATIVE_APP_IDENTITY_PREFIX = "globalThis.__sootsimNativeAppIdentity=";
|
|
@@ -12,13 +104,40 @@ function nonEmptyString(value) {
|
|
|
12
104
|
}
|
|
13
105
|
function isNativeAppIdentity(value) {
|
|
14
106
|
if (!isRecord(value)) return false;
|
|
107
|
+
const oneUpdates = value.oneUpdates;
|
|
108
|
+
if (oneUpdates !== void 0 && (!isRecord(oneUpdates) || typeof oneUpdates.enabled !== "boolean" || oneUpdates.url !== null && typeof oneUpdates.url !== "string" || oneUpdates.runtimeVersion !== null && typeof oneUpdates.runtimeVersion !== "string" || oneUpdates.embeddedManifestJson !== null && typeof oneUpdates.embeddedManifestJson !== "string" || oneUpdates.enabled && (typeof oneUpdates.url !== "string" || oneUpdates.url.length === 0 || typeof oneUpdates.runtimeVersion !== "string" || oneUpdates.runtimeVersion.length === 0))) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
15
111
|
const descriptions = value.permissionUsageDescriptions;
|
|
16
112
|
if (descriptions !== void 0 && !isRecord(descriptions)) return false;
|
|
17
113
|
if (value.urlQuerySchemes !== void 0 && !Array.isArray(value.urlQuerySchemes))
|
|
18
114
|
return false;
|
|
19
115
|
if (value.appIntentIdentifiers !== void 0 && (!Array.isArray(value.appIntentIdentifiers) || !value.appIntentIdentifiers.every((identifier) => typeof identifier === "string")))
|
|
20
116
|
return false;
|
|
117
|
+
if (value.backgroundTaskIdentifiers !== void 0 && (!Array.isArray(value.backgroundTaskIdentifiers) || !value.backgroundTaskIdentifiers.every(
|
|
118
|
+
(identifier) => typeof identifier === "string"
|
|
119
|
+
)))
|
|
120
|
+
return false;
|
|
121
|
+
if (value.backgroundModes !== void 0 && (!Array.isArray(value.backgroundModes) || !value.backgroundModes.every((mode) => typeof mode === "string")))
|
|
122
|
+
return false;
|
|
123
|
+
if (value.shareIntoAppGroupId !== void 0 && typeof value.shareIntoAppGroupId !== "string")
|
|
124
|
+
return false;
|
|
125
|
+
if (value.applicationDisplayName !== void 0 && typeof value.applicationDisplayName !== "string")
|
|
126
|
+
return false;
|
|
127
|
+
if (value.rootViewBackgroundColor !== void 0 && (typeof value.rootViewBackgroundColor !== "number" || !Number.isInteger(value.rootViewBackgroundColor)))
|
|
128
|
+
return false;
|
|
129
|
+
for (const orientations of [
|
|
130
|
+
value.supportedInterfaceOrientations,
|
|
131
|
+
value.ipadSupportedInterfaceOrientations
|
|
132
|
+
]) {
|
|
133
|
+
if (orientations !== void 0 && (!Array.isArray(orientations) || !orientations.every((orientation) => typeof orientation === "string")))
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
if (value.defaultScreenOrientationMask !== void 0 && typeof value.defaultScreenOrientationMask !== "string")
|
|
137
|
+
return false;
|
|
21
138
|
const platform = value.platform;
|
|
139
|
+
if (value.alternateIconNames !== void 0 && (!Array.isArray(value.alternateIconNames) || !value.alternateIconNames.every((name) => typeof name === "string")))
|
|
140
|
+
return false;
|
|
22
141
|
if (platform !== "ios" && platform !== "android") return false;
|
|
23
142
|
const applicationName = value.applicationName;
|
|
24
143
|
if (applicationName !== null && nonEmptyString(applicationName) === null) return false;
|
|
@@ -38,16 +157,39 @@ function readNativeAppIdentity(value) {
|
|
|
38
157
|
}
|
|
39
158
|
return {
|
|
40
159
|
applicationName: value.applicationName,
|
|
160
|
+
...value.applicationDisplayName === void 0 ? {} : { applicationDisplayName: value.applicationDisplayName },
|
|
161
|
+
...value.rootViewBackgroundColor === void 0 ? {} : { rootViewBackgroundColor: value.rootViewBackgroundColor },
|
|
41
162
|
...value.bundleName === void 0 ? {} : { bundleName: value.bundleName },
|
|
42
163
|
appVersion: value.appVersion,
|
|
43
164
|
buildVersion: value.buildVersion,
|
|
44
165
|
bundleIdentifier: value.bundleIdentifier,
|
|
45
166
|
platform: value.platform,
|
|
167
|
+
...value.alternateIconNames === void 0 ? {} : { alternateIconNames: [...value.alternateIconNames] },
|
|
46
168
|
...value.permissionUsageDescriptions === void 0 ? {} : {
|
|
47
169
|
permissionUsageDescriptions: { ...value.permissionUsageDescriptions }
|
|
48
170
|
},
|
|
49
171
|
...value.appIntentIdentifiers === void 0 ? {} : { appIntentIdentifiers: [...value.appIntentIdentifiers] },
|
|
50
|
-
...value.
|
|
172
|
+
...value.backgroundTaskIdentifiers === void 0 ? {} : { backgroundTaskIdentifiers: [...value.backgroundTaskIdentifiers] },
|
|
173
|
+
...value.supportedInterfaceOrientations === void 0 ? {} : {
|
|
174
|
+
supportedInterfaceOrientations: [...value.supportedInterfaceOrientations]
|
|
175
|
+
},
|
|
176
|
+
...value.ipadSupportedInterfaceOrientations === void 0 ? {} : {
|
|
177
|
+
ipadSupportedInterfaceOrientations: [
|
|
178
|
+
...value.ipadSupportedInterfaceOrientations
|
|
179
|
+
]
|
|
180
|
+
},
|
|
181
|
+
...value.defaultScreenOrientationMask === void 0 ? {} : { defaultScreenOrientationMask: value.defaultScreenOrientationMask },
|
|
182
|
+
...value.backgroundModes === void 0 ? {} : { backgroundModes: [...value.backgroundModes] },
|
|
183
|
+
...value.shareIntoAppGroupId === void 0 ? {} : { shareIntoAppGroupId: value.shareIntoAppGroupId },
|
|
184
|
+
...value.urlQuerySchemes === void 0 ? {} : { urlQuerySchemes: [...value.urlQuerySchemes] },
|
|
185
|
+
...value.oneUpdates === void 0 ? {} : {
|
|
186
|
+
oneUpdates: {
|
|
187
|
+
enabled: value.oneUpdates.enabled,
|
|
188
|
+
url: value.oneUpdates.url,
|
|
189
|
+
runtimeVersion: value.oneUpdates.runtimeVersion,
|
|
190
|
+
embeddedManifestJson: value.oneUpdates.embeddedManifestJson
|
|
191
|
+
}
|
|
192
|
+
}
|
|
51
193
|
};
|
|
52
194
|
}
|
|
53
195
|
function createNativeAppIdentityHeader(identity) {
|
|
@@ -75,7 +217,10 @@ function readNativeAppIdentityFromBundle(source, header) {
|
|
|
75
217
|
}
|
|
76
218
|
const identity = readNativeAppIdentity(value);
|
|
77
219
|
if (!identity) throw new Error("native app identity response header is malformed");
|
|
78
|
-
|
|
220
|
+
const footerIdentity = footer ? readNativeAppIdentity(footer) : null;
|
|
221
|
+
const headerBase = { ...identity, oneUpdates: void 0 };
|
|
222
|
+
const footerBase = footerIdentity && { ...footerIdentity, oneUpdates: void 0 };
|
|
223
|
+
if (footerIdentity && !equalIdentityValues(headerBase, footerBase)) {
|
|
79
224
|
throw new Error("native app identity response header conflicts with bundle footer");
|
|
80
225
|
}
|
|
81
226
|
return identity;
|
|
@@ -90,7 +235,9 @@ function getAppliedNativeAppIdentity() {
|
|
|
90
235
|
return isNativeAppIdentity(value) ? value : null;
|
|
91
236
|
}
|
|
92
237
|
function createNativeAppIdentityFooter(identity) {
|
|
93
|
-
const
|
|
238
|
+
const footerIdentity = { ...identity };
|
|
239
|
+
delete footerIdentity.oneUpdates;
|
|
240
|
+
const payload = JSON.stringify(footerIdentity).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029").replace(/<\//g, "<\\/");
|
|
94
241
|
return `
|
|
95
242
|
${NATIVE_APP_IDENTITY_PREFIX}${payload};`;
|
|
96
243
|
}
|
|
@@ -115,6 +262,9 @@ function readNativeAppIdentityFooter(source) {
|
|
|
115
262
|
if (!isNativeAppIdentity(parsed)) {
|
|
116
263
|
throw new Error("native app identity footer is malformed");
|
|
117
264
|
}
|
|
265
|
+
if (parsed.oneUpdates !== void 0) {
|
|
266
|
+
throw new Error("native app identity footer cannot contain one updates receipt");
|
|
267
|
+
}
|
|
118
268
|
return parsed;
|
|
119
269
|
}
|
|
120
270
|
function detachNativeAppIdentityFooter(source) {
|
|
@@ -218,30 +368,119 @@ function appTargetReleaseSettings(pbxproj, targetName, infoPlistRelativePath) {
|
|
|
218
368
|
(candidate) => candidate.name === "Release" && named(candidate.settings)
|
|
219
369
|
)?.settings ?? null;
|
|
220
370
|
}
|
|
221
|
-
function nativeAppIdentityFromIos(files, parseInfoPlist) {
|
|
371
|
+
function nativeAppIdentityFromIos(files, parseInfoPlist, iosTarget) {
|
|
222
372
|
const pbxprojPath = Object.keys(files).find(
|
|
223
373
|
(path) => /(?:^|\/)ios\/[^/]+\.xcodeproj\/project\.pbxproj$/.test(path)
|
|
224
|
-
)
|
|
374
|
+
) ?? Object.keys(files).find(
|
|
375
|
+
(path) => /(?:^|\/)[^/]+\.xcodeproj\/project\.pbxproj$/.test(path)
|
|
376
|
+
) ?? Object.keys(files).find((path) => /(?:^|\/)project\.pbxproj$/.test(path));
|
|
225
377
|
if (!pbxprojPath) return null;
|
|
226
378
|
const pbxproj = files[pbxprojPath];
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
)
|
|
232
|
-
|
|
379
|
+
let objects = {};
|
|
380
|
+
try {
|
|
381
|
+
const parsed = parseOpenStepPlist(pbxproj);
|
|
382
|
+
if (isRecord(parsed)) {
|
|
383
|
+
objects = isRecord(parsed.objects) ? parsed.objects : parsed;
|
|
384
|
+
}
|
|
385
|
+
} catch {
|
|
386
|
+
}
|
|
387
|
+
const targets = [];
|
|
388
|
+
for (const [id, obj] of Object.entries(objects)) {
|
|
389
|
+
if (isRecord(obj) && obj.isa === "PBXNativeTarget" && typeof obj.name === "string") {
|
|
390
|
+
targets.push({
|
|
391
|
+
id,
|
|
392
|
+
name: obj.name,
|
|
393
|
+
productType: typeof obj.productType === "string" ? obj.productType : void 0,
|
|
394
|
+
buildConfigurationList: typeof obj.buildConfigurationList === "string" ? obj.buildConfigurationList : void 0
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
const applicationTargetNames = new Set(
|
|
399
|
+
targets.filter((t) => t.productType === "com.apple.product-type.application").map((t) => t.name)
|
|
233
400
|
);
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
401
|
+
if (applicationTargetNames.size === 0) {
|
|
402
|
+
for (const match of pbxproj.matchAll(
|
|
403
|
+
/isa = PBXNativeTarget;[^}]*?name = "?([^";]+)"?;[^}]*?productType = "com\.apple\.product-type\.application";/g
|
|
404
|
+
)) {
|
|
405
|
+
applicationTargetNames.add(match[1]);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
let targetName = null;
|
|
409
|
+
if (iosTarget) {
|
|
410
|
+
if (applicationTargetNames.has(iosTarget)) {
|
|
411
|
+
targetName = iosTarget;
|
|
412
|
+
} else {
|
|
413
|
+
return null;
|
|
414
|
+
}
|
|
415
|
+
} else if (applicationTargetNames.size === 1) {
|
|
416
|
+
targetName = [...applicationTargetNames][0];
|
|
417
|
+
} else if (applicationTargetNames.size > 1) {
|
|
418
|
+
const appDelegatePattern = /(?:^|\/)ios\/([^/]+)\/AppDelegate\.(?:swift|mm|m)$/;
|
|
419
|
+
const delegateTargets = Object.keys(files).filter((path) => !path.includes("/Pods/")).map((path) => path.match(appDelegatePattern)?.[1]).filter(
|
|
420
|
+
(name) => typeof name === "string" && applicationTargetNames.has(name)
|
|
421
|
+
);
|
|
422
|
+
if (delegateTargets.length === 1) {
|
|
423
|
+
targetName = delegateTargets[0];
|
|
424
|
+
} else {
|
|
425
|
+
return null;
|
|
426
|
+
}
|
|
427
|
+
} else {
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
430
|
+
const selectedTarget = targets.find((t) => t.name === targetName);
|
|
431
|
+
const settings = {
|
|
432
|
+
TARGET_NAME: targetName,
|
|
433
|
+
PRODUCT_NAME: targetName
|
|
434
|
+
};
|
|
435
|
+
for (const obj of Object.values(objects)) {
|
|
436
|
+
if (isRecord(obj) && obj.isa === "PBXProject" && typeof obj.buildConfigurationList === "string") {
|
|
437
|
+
const listObj = objects[obj.buildConfigurationList];
|
|
438
|
+
if (isRecord(listObj) && Array.isArray(listObj.buildConfigurations)) {
|
|
439
|
+
for (const configId of listObj.buildConfigurations) {
|
|
440
|
+
if (typeof configId === "string") {
|
|
441
|
+
const configObj = objects[configId];
|
|
442
|
+
if (isRecord(configObj) && configObj.name === "Release" && isRecord(configObj.buildSettings)) {
|
|
443
|
+
for (const [k, v] of Object.entries(configObj.buildSettings)) {
|
|
444
|
+
if (typeof v === "string") settings[k] = v;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
if (selectedTarget?.buildConfigurationList) {
|
|
453
|
+
const listObj = objects[selectedTarget.buildConfigurationList];
|
|
454
|
+
if (isRecord(listObj) && Array.isArray(listObj.buildConfigurations)) {
|
|
455
|
+
for (const configId of listObj.buildConfigurations) {
|
|
456
|
+
if (typeof configId === "string") {
|
|
457
|
+
const configObj = objects[configId];
|
|
458
|
+
if (isRecord(configObj) && configObj.name === "Release" && isRecord(configObj.buildSettings)) {
|
|
459
|
+
for (const [k, v] of Object.entries(configObj.buildSettings)) {
|
|
460
|
+
if (typeof v === "string") settings[k] = v;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
} else {
|
|
467
|
+
const legacy = appTargetReleaseSettings(
|
|
468
|
+
pbxproj,
|
|
469
|
+
targetName,
|
|
470
|
+
`${targetName}/Info.plist`
|
|
471
|
+
);
|
|
472
|
+
if (legacy) Object.assign(settings, legacy);
|
|
473
|
+
}
|
|
474
|
+
let plist;
|
|
475
|
+
const infoPlistPath = settings.INFOPLIST_FILE;
|
|
476
|
+
if (infoPlistPath) {
|
|
477
|
+
const normalized = infoPlistPath.replace(/^"|"$/g, "");
|
|
478
|
+
plist = files[`ios/${normalized}`] ?? files[normalized] ?? Object.entries(files).find(([k]) => k.endsWith(`/${normalized}`))?.[1];
|
|
479
|
+
}
|
|
480
|
+
if (!plist) {
|
|
481
|
+
plist = files[`ios/${targetName}/Info.plist`] ?? files[`${targetName}/Info.plist`] ?? Object.entries(files).find(([k]) => k.endsWith(`/${targetName}/Info.plist`))?.[1];
|
|
482
|
+
}
|
|
238
483
|
if (!plist) return null;
|
|
239
|
-
const settings = appTargetReleaseSettings(
|
|
240
|
-
pbxproj,
|
|
241
|
-
targetName,
|
|
242
|
-
`${targetName}/Info.plist`
|
|
243
|
-
);
|
|
244
|
-
if (!settings) return null;
|
|
245
484
|
const bundleIdentifier = identityFieldFrom(
|
|
246
485
|
settings,
|
|
247
486
|
plistString(plist, "CFBundleIdentifier"),
|
|
@@ -268,8 +507,57 @@ function nativeAppIdentityFromIos(files, parseInfoPlist) {
|
|
|
268
507
|
const applicationName = identityFieldFrom(settings, plistString(plist, "CFBundleDisplayName"), void 0) ?? bundleName;
|
|
269
508
|
const dictionary = parseInfoPlist(plist);
|
|
270
509
|
if (!isRecord(dictionary)) throw new Error("native app Info.plist is not a dictionary");
|
|
510
|
+
const declaredDisplayName = dictionary.CFBundleDisplayName;
|
|
511
|
+
const applicationDisplayName = typeof declaredDisplayName === "string" ? resolveBuildSetting(declaredDisplayName, settings) : void 0;
|
|
512
|
+
if (applicationDisplayName === null)
|
|
513
|
+
throw new Error("native app Info.plist CFBundleDisplayName is unresolved");
|
|
514
|
+
const declaredBackgroundColor = dictionary.RCTRootViewBackgroundColor;
|
|
515
|
+
const rootViewBackgroundColor = typeof declaredBackgroundColor === "number" && Number.isInteger(declaredBackgroundColor) ? declaredBackgroundColor : void 0;
|
|
516
|
+
const icons = dictionary.CFBundleIcons;
|
|
517
|
+
const alternates = isRecord(icons) ? icons.CFBundleAlternateIcons : void 0;
|
|
518
|
+
const alternateIconNames = /* @__PURE__ */ new Set();
|
|
519
|
+
for (const name of isRecord(alternates) ? Object.keys(alternates) : []) {
|
|
520
|
+
const resolved = resolveBuildSetting(name, settings);
|
|
521
|
+
if (resolved === null) throw new Error("native alternate icon name is unresolved");
|
|
522
|
+
alternateIconNames.add(resolved);
|
|
523
|
+
}
|
|
524
|
+
const alternateSetting = resolveBuildSetting(
|
|
525
|
+
settings.ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES ?? "",
|
|
526
|
+
settings
|
|
527
|
+
);
|
|
528
|
+
if (alternateSetting === null)
|
|
529
|
+
throw new Error("native alternate icon setting is unresolved");
|
|
530
|
+
for (const match of alternateSetting.replace(/\\"/g, '"').matchAll(/"([^"]*)"|([^\s(),]+)/g)) {
|
|
531
|
+
alternateIconNames.add(match[1] ?? match[2]);
|
|
532
|
+
}
|
|
271
533
|
const intentIds = dictionary.OneAppIntentIdentifiers;
|
|
272
534
|
const appIntentIdentifiers = Array.isArray(intentIds) && intentIds.every((value) => typeof value === "string") ? intentIds.map((value) => resolveBuildSetting(value, settings)) : [];
|
|
535
|
+
const backgroundIds = dictionary.BGTaskSchedulerPermittedIdentifiers;
|
|
536
|
+
const backgroundTaskIdentifiers = Array.isArray(backgroundIds) && backgroundIds.every((value) => typeof value === "string") ? backgroundIds.map((value) => resolveBuildSetting(value, settings)) : [];
|
|
537
|
+
const declaredModes = dictionary.UIBackgroundModes;
|
|
538
|
+
const backgroundModes = Array.isArray(declaredModes) && declaredModes.every((value) => typeof value === "string") ? declaredModes.map((value) => resolveBuildSetting(value, settings)) : [];
|
|
539
|
+
const screenOrientationLists = [
|
|
540
|
+
"UISupportedInterfaceOrientations",
|
|
541
|
+
"UISupportedInterfaceOrientations~ipad"
|
|
542
|
+
].map((key) => {
|
|
543
|
+
const list = dictionary[key];
|
|
544
|
+
if (!Array.isArray(list) || !list.every((value) => typeof value === "string"))
|
|
545
|
+
return [];
|
|
546
|
+
return list.map((value) => {
|
|
547
|
+
const resolved = resolveBuildSetting(value, settings);
|
|
548
|
+
if (resolved === null) throw new Error(`native app Info.plist ${key} is unresolved`);
|
|
549
|
+
return resolved;
|
|
550
|
+
});
|
|
551
|
+
});
|
|
552
|
+
const [supportedInterfaceOrientations, ipadSupportedInterfaceOrientations] = screenOrientationLists;
|
|
553
|
+
const declaredDefaultOrientationMask = dictionary.EXDefaultScreenOrientationMask;
|
|
554
|
+
const defaultScreenOrientationMask = typeof declaredDefaultOrientationMask === "string" ? resolveBuildSetting(declaredDefaultOrientationMask, settings) : void 0;
|
|
555
|
+
if (defaultScreenOrientationMask === null)
|
|
556
|
+
throw new Error("native app Info.plist EXDefaultScreenOrientationMask is unresolved");
|
|
557
|
+
const declaredShareGroup = dictionary.ExpoShareIntoAppGroupId;
|
|
558
|
+
const shareIntoAppGroupId = typeof declaredShareGroup === "string" ? resolveBuildSetting(declaredShareGroup, settings) : void 0;
|
|
559
|
+
if (shareIntoAppGroupId === null)
|
|
560
|
+
throw new Error("native app Info.plist ExpoShareIntoAppGroupId is unresolved");
|
|
273
561
|
const querySchemes = dictionary.LSApplicationQueriesSchemes;
|
|
274
562
|
if (querySchemes !== void 0 && !Array.isArray(querySchemes)) {
|
|
275
563
|
throw new Error("native app Info.plist LSApplicationQueriesSchemes is not an array");
|
|
@@ -283,7 +571,8 @@ function nativeAppIdentityFromIos(files, parseInfoPlist) {
|
|
|
283
571
|
});
|
|
284
572
|
const permissionUsageDescriptions = {};
|
|
285
573
|
for (const [key, value] of Object.entries(dictionary)) {
|
|
286
|
-
if (!/^NS.*UsageDescription$/.test(key))
|
|
574
|
+
if (!/^NS.*UsageDescription$/.test(key) && key !== "NSLocationTemporaryUsageDescriptionDictionary")
|
|
575
|
+
continue;
|
|
287
576
|
if (typeof value !== "string") {
|
|
288
577
|
permissionUsageDescriptions[key] = value;
|
|
289
578
|
continue;
|
|
@@ -304,21 +593,30 @@ function nativeAppIdentityFromIos(files, parseInfoPlist) {
|
|
|
304
593
|
}
|
|
305
594
|
return {
|
|
306
595
|
applicationName,
|
|
596
|
+
...applicationDisplayName === void 0 ? {} : { applicationDisplayName },
|
|
597
|
+
...rootViewBackgroundColor === void 0 ? {} : { rootViewBackgroundColor },
|
|
307
598
|
bundleName,
|
|
308
599
|
appVersion,
|
|
309
600
|
buildVersion,
|
|
310
601
|
bundleIdentifier,
|
|
311
602
|
platform: "ios",
|
|
603
|
+
supportedInterfaceOrientations,
|
|
604
|
+
ipadSupportedInterfaceOrientations,
|
|
605
|
+
...defaultScreenOrientationMask === void 0 ? {} : { defaultScreenOrientationMask },
|
|
606
|
+
alternateIconNames: [...alternateIconNames],
|
|
312
607
|
permissionUsageDescriptions,
|
|
313
608
|
urlQuerySchemes,
|
|
609
|
+
...shareIntoAppGroupId === void 0 ? {} : { shareIntoAppGroupId },
|
|
610
|
+
backgroundTaskIdentifiers: backgroundTaskIdentifiers.every((value) => value !== null) ? backgroundTaskIdentifiers : [],
|
|
611
|
+
backgroundModes: backgroundModes.every((value) => value !== null) ? backgroundModes : [],
|
|
314
612
|
appIntentIdentifiers: appIntentIdentifiers.every((value) => value !== null) ? appIntentIdentifiers : []
|
|
315
613
|
};
|
|
316
614
|
}
|
|
317
615
|
function canExtractNativeAppIdentity(platform) {
|
|
318
616
|
return platform === "ios";
|
|
319
617
|
}
|
|
320
|
-
function extractNativeAppIdentityFromFiles(files, platform, parseInfoPlist) {
|
|
321
|
-
return canExtractNativeAppIdentity(platform) ? nativeAppIdentityFromIos(files, parseInfoPlist) : null;
|
|
618
|
+
function extractNativeAppIdentityFromFiles(files, platform, parseInfoPlist, iosTarget) {
|
|
619
|
+
return canExtractNativeAppIdentity(platform) ? nativeAppIdentityFromIos(files, parseInfoPlist, iosTarget) : null;
|
|
322
620
|
}
|
|
323
621
|
export {
|
|
324
622
|
NATIVE_APP_IDENTITY_HEADER,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*!
|
|
1
|
+
/*! peach v0.1.1399 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/plist.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*!
|
|
1
|
+
/*! peach v0.1.1399 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/plist.mjs
CHANGED
package/dist-lib/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*!
|
|
1
|
+
/*! peach v0.1.1399 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*!
|
|
1
|
+
/*! peach v0.1.1399 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*!
|
|
1
|
+
/*! peach v0.1.1399 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -27,6 +27,10 @@ __export(react_native_host_modules_exports, {
|
|
|
27
27
|
});
|
|
28
28
|
module.exports = __toCommonJS(react_native_host_modules_exports);
|
|
29
29
|
var REACT_NATIVE_PASSTHROUGH_SPECIFIERS = [
|
|
30
|
+
// sdk 58 reads these upstream getters and wraps the original metro logger.
|
|
31
|
+
"react-native/unstable-internals-do-not-use",
|
|
32
|
+
"react-native/src/unstable-internals-do-not-use",
|
|
33
|
+
"react-native/Libraries/Utilities/HMRClient",
|
|
30
34
|
"react-native/Libraries/vendor/emitter",
|
|
31
35
|
"react-native/Libraries/Components/View/ReactNativeStyleAttributes",
|
|
32
36
|
"react-native/Libraries/StyleSheet",
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
/*!
|
|
1
|
+
/*! peach v0.1.1399 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/react-native-host-modules.ts
|
|
4
4
|
var REACT_NATIVE_PASSTHROUGH_SPECIFIERS = [
|
|
5
|
+
// sdk 58 reads these upstream getters and wraps the original metro logger.
|
|
6
|
+
"react-native/unstable-internals-do-not-use",
|
|
7
|
+
"react-native/src/unstable-internals-do-not-use",
|
|
8
|
+
"react-native/Libraries/Utilities/HMRClient",
|
|
5
9
|
"react-native/Libraries/vendor/emitter",
|
|
6
10
|
"react-native/Libraries/Components/View/ReactNativeStyleAttributes",
|
|
7
11
|
"react-native/Libraries/StyleSheet",
|