peachsim 0.1.1641 → 0.1.1653
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/cli/app-bundle-resources.ts +57 -0
- package/cli/app-catalog.ts +1 -1
- package/cli/app-fonts.ts +11 -80
- package/cli/app-splash.ts +18 -12
- package/cli/bridge-flow-runner.ts +11 -7
- package/cli/cloud-client.ts +10 -13
- package/cli/command-registry.ts +13 -4
- package/cli/commands/box.ts +4 -4
- package/cli/commands/control.ts +105 -53
- package/cli/commands/coverage-parser.ts +67 -0
- package/cli/commands/coverage.ts +550 -0
- package/cli/commands/debug.ts +9 -18
- package/cli/commands/desktop.ts +19 -7
- package/cli/commands/device.ts +14 -9
- package/cli/commands/guest-host.ts +6 -10
- package/cli/commands/inspect/core.ts +81 -17
- package/cli/commands/inspect.ts +13 -8
- package/cli/commands/kotlin.ts +2 -2
- package/cli/commands/maestro-compare.ts +1 -1
- package/cli/commands/platform.ts +20 -11
- package/cli/commands/preview.ts +16 -18
- package/cli/commands/runtime.ts +3 -2
- package/cli/commands/screenshot-layers.ts +1 -1
- package/cli/commands/screenshot.ts +1 -1
- package/cli/commands/serve.ts +5 -1
- package/cli/commands/support.ts +4 -4
- package/cli/commands/three-mode.ts +22 -15
- package/cli/commands/upload.ts +44 -45
- package/cli/current-sim.ts +38 -0
- package/cli/desktop-companion.ts +36 -8
- package/cli/device-option.ts +1 -1
- package/cli/drivers/playwright.ts +40 -0
- package/cli/drivers/types.ts +4 -0
- package/cli/help-core.ts +1 -1
- package/cli/internal-child.ts +2 -1
- package/cli/main.ts +9 -3
- package/cli/outbound-endpoints.ts +15 -5
- package/cli/output-redaction.ts +39 -14
- package/cli/remote-simulators.ts +4 -1
- package/cli/scene-video.ts +5 -2
- package/cli/send-to-box.ts +7 -10
- package/cli/telemetry.ts +1 -1
- package/cli/ws-bridge.ts +8 -1
- package/detox/attempt-events.cjs +3 -1
- package/detox/attempt-events.d.cts +1 -1
- package/detox/expectations.ts +108 -99
- package/detox/frame-offset.d.mts +6 -0
- package/detox/frame-offset.mjs +35 -0
- package/detox/gestures.ts +6 -18
- package/detox/index.ts +169 -101
- package/detox/jest-preset.cjs +1 -3
- package/detox/jest-transform.cjs +4 -0
- package/detox/matchers.ts +3 -0
- package/detox/motion-change.cjs +52 -118
- package/detox/motion-change.d.cts +6 -27
- package/detox/motion-leg-starts.cjs +20 -0
- package/detox/motion-leg-starts.d.cts +8 -0
- 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 +3 -3
- 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 +65 -1
- package/dist-lib/bridge-contract-input.mjs +63 -1
- package/dist-lib/bridge-contract.cjs +19 -1
- package/dist-lib/bridge-contract.mjs +17 -1
- package/dist-lib/bundle-channel.cjs +38332 -14940
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/cloud-test-args.cjs +1 -1
- package/dist-lib/cloud-test-args.mjs +1 -1
- package/dist-lib/cloud.cjs +1 -1
- package/dist-lib/cloud.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/config.mjs +5 -3
- package/dist-lib/detox/index.cjs +1247 -4511
- package/dist-lib/detox/jest-preset.cjs +1 -3
- package/dist-lib/detox/jest-transform.cjs +4 -0
- package/dist-lib/dev-bundle-resolution.cjs +28 -24
- package/dist-lib/expo-swift-bundle.cjs +35243 -13172
- package/dist-lib/expo-swift-metadata.cjs +1 -1
- package/dist-lib/expo-swift-metadata.mjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +45285 -63163
- package/dist-lib/host/fetch-proxy-handler.cjs +3544 -11
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +1997 -2069
- 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 +2 -2
- package/dist-lib/menu.cjs +14 -6
- package/dist-lib/menu.mjs +14 -6
- 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 +1 -1
- package/dist-lib/metro-production-bundle.mjs +1 -1
- package/dist-lib/metro.cjs +468 -563
- package/dist-lib/native-app-identity-project.cjs +128 -292
- package/dist-lib/native-app-identity-project.mjs +1262 -51
- package/dist-lib/native-app-identity.cjs +8 -3
- package/dist-lib/native-app-identity.mjs +8 -3
- package/dist-lib/native-firebase-metadata.cjs +1 -1
- package/dist-lib/native-firebase-metadata.mjs +1 -1
- package/dist-lib/plist.cjs +2 -244
- 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/public-origins-lib-esm.json +290 -0
- package/dist-lib/public-origins-lib-static.json +1 -0
- package/dist-lib/public-origins-lib.json +1852 -0
- package/dist-lib/react-native-host-modules.cjs +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +14 -253
- package/dist-lib/sdk.cjs +84 -16
- package/dist-lib/sdk.mjs +82 -15
- package/dist-lib/skills.cjs +51248 -75450
- package/dist-lib/swift-compile.cjs +26154 -1245
- package/dist-lib/swift-compile.mjs +26151 -1230
- package/dist-lib/swift-package.cjs +79 -1
- package/dist-lib/swift-package.mjs +75 -1
- package/dist-lib/swift-submit.cjs +1 -1
- package/dist-lib/swift-submit.mjs +1 -1
- package/dist-lib/swift-toolchain.cjs +1 -1
- package/dist-lib/swift.cjs +1 -1
- package/dist-lib/vite-swift.cjs +34394 -12323
- package/dist-lib/vite.cjs +373 -298
- package/dist-lib/worklet-executable.cjs +1 -1
- package/dist-lib/worklet-executable.mjs +1 -1
- package/dist-types/packages/peach-compat/src/engine-config.d.ts +2 -0
- package/dist-types/packages/peach-compat/src/stubs/form-sheet-spring.d.ts +9 -0
- package/dist-types/packages/peach-compat/src/stubs/native-evaluation-lease.d.ts +47 -0
- package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +113 -0
- package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-gesture-handler.d.ts +154 -0
- package/dist-types/packages/peach-compat/src/stubs/screen-transition-math.d.ts +756 -0
- package/dist-types/packages/peach-compat/src/stubs/transition-scalar.d.ts +25 -0
- package/dist-types/packages/peach-engine/src/billing/plans.d.ts +64 -0
- package/dist-types/packages/peach-engine/src/browser-page-target.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/bundle-platform-url.d.ts +3 -0
- package/dist-types/packages/peach-engine/src/capture/browser-accessibility-host.d.ts +3 -0
- package/dist-types/packages/peach-engine/src/capture/browser-composite.d.ts +55 -0
- package/dist-types/packages/peach-engine/src/capture/browserAccessibilityContract.d.ts +27 -0
- package/dist-types/packages/peach-engine/src/capture/nativeScreenCaptureContract.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/cli-companion.d.ts +36 -0
- package/dist-types/packages/peach-engine/src/components/native-ui/webview-frame-bridge.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/config.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/engine/android-stretch-effect.d.ts +57 -0
- package/dist-types/packages/peach-engine/src/engine/animated-driven-style.d.ts +47 -0
- package/dist-types/packages/peach-engine/src/engine/animated-value.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/engine/animated.d.ts +195 -0
- package/dist-types/packages/peach-engine/src/engine/animation-clockContract.d.ts +15 -0
- package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +148 -0
- package/dist-types/packages/peach-engine/src/engine/app-catalog-wire.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/engine/app-font-registry.d.ts +87 -0
- package/dist-types/packages/peach-engine/src/engine/attributed-paragraph-paint.d.ts +7 -0
- package/dist-types/packages/peach-engine/src/engine/attributed-paragraph.d.ts +123 -0
- package/dist-types/packages/peach-engine/src/engine/audioContract.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +93 -0
- package/dist-types/packages/peach-engine/src/engine/canvaskit-renderer.d.ts +216 -0
- package/dist-types/packages/peach-engine/src/engine/config-plugin-fonts.d.ts +40 -0
- package/dist-types/packages/peach-engine/src/engine/config-plugin-splash.d.ts +25 -0
- package/dist-types/packages/peach-engine/src/engine/cull-visibility.d.ts +44 -0
- package/dist-types/packages/peach-engine/src/engine/damage-rect.d.ts +19 -0
- package/dist-types/packages/peach-engine/src/engine/engine-resource.d.ts +6 -0
- package/dist-types/packages/peach-engine/src/engine/expo-manifest.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/engine/fiber-debug-metadata.d.ts +30 -0
- package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +139 -0
- package/dist-types/packages/peach-engine/src/engine/generated/sf-pro-font.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +31 -0
- package/dist-types/packages/peach-engine/src/engine/host-composite.d.ts +100 -0
- package/dist-types/packages/peach-engine/src/engine/hosted-semantics.d.ts +49 -0
- package/dist-types/packages/peach-engine/src/engine/image-audit.d.ts +70 -0
- package/dist-types/packages/peach-engine/src/engine/image-loader.d.ts +350 -0
- package/dist-types/packages/peach-engine/src/engine/inspect-info.d.ts +27 -0
- package/dist-types/packages/peach-engine/src/engine/inspect-outline.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/engine/inspect-visibility.d.ts +33 -0
- package/dist-types/packages/peach-engine/src/engine/ios-fast-scroll.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/engine/layout-sab.d.ts +43 -0
- package/dist-types/packages/peach-engine/src/engine/liquid-glass-rect.d.ts +23 -0
- package/dist-types/packages/peach-engine/src/engine/liquid-glass-shaders.d.ts +9 -0
- package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +283 -0
- package/dist-types/packages/peach-engine/src/engine/live-object-counts.d.ts +6 -0
- package/dist-types/packages/peach-engine/src/engine/lottie-runtime.d.ts +32 -0
- package/dist-types/packages/peach-engine/src/engine/lottie-types.d.ts +138 -0
- package/dist-types/packages/peach-engine/src/engine/memory-counts.d.ts +27 -0
- package/dist-types/packages/peach-engine/src/engine/metalDirectContract.d.ts +108 -0
- package/dist-types/packages/peach-engine/src/engine/metalShaderContract.d.ts +217 -0
- package/dist-types/packages/peach-engine/src/engine/native-animation-driver.d.ts +112 -0
- package/dist-types/packages/peach-engine/src/engine/native-animation-graph.d.ts +62 -0
- package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +133 -0
- package/dist-types/packages/peach-engine/src/engine/native-resources.d.ts +26 -0
- package/dist-types/packages/peach-engine/src/engine/nativeReanimatedContract.d.ts +25 -0
- package/dist-types/packages/peach-engine/src/engine/nativeReplayContract.d.ts +64 -0
- package/dist-types/packages/peach-engine/src/engine/node.d.ts +589 -0
- package/dist-types/packages/peach-engine/src/engine/paint-boundary-types.d.ts +112 -0
- package/dist-types/packages/peach-engine/src/engine/paint-boundary.d.ts +57 -0
- package/dist-types/packages/peach-engine/src/engine/portalContract.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/engine/portals.d.ts +20 -0
- package/dist-types/packages/peach-engine/src/engine/render-damage.d.ts +107 -0
- package/dist-types/packages/peach-engine/src/engine/riveContract.d.ts +420 -0
- package/dist-types/packages/peach-engine/src/engine/rn-spring.d.ts +51 -0
- package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +379 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-momentum-math.d.ts +152 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-pan-contacts.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-platform.d.ts +75 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-range.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-velocity.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/engine/scroll.d.ts +320 -0
- package/dist-types/packages/peach-engine/src/engine/signal.d.ts +7 -0
- package/dist-types/packages/peach-engine/src/engine/snapshot-cache-policy.d.ts +6 -0
- package/dist-types/packages/peach-engine/src/engine/svg-geometry.d.ts +41 -0
- package/dist-types/packages/peach-engine/src/engine/text-attachment-paragraphs.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/engine/text-decoration.d.ts +11 -0
- package/dist-types/packages/peach-engine/src/engine/text-line-break.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/engine/text-paint-receipt.d.ts +98 -0
- package/dist-types/packages/peach-engine/src/engine/text-paragraph.d.ts +11 -0
- package/dist-types/packages/peach-engine/src/engine/text-paragraphContract.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/engine/text-transform.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/engine/types.d.ts +657 -0
- package/dist-types/packages/peach-engine/src/engine/visible-frame.d.ts +54 -0
- package/dist-types/packages/peach-engine/src/engine/webrtcContract.d.ts +74 -0
- package/dist-types/packages/peach-engine/src/graphite-stats-fields.d.ts +184 -0
- package/dist-types/packages/peach-engine/src/guest-import-meta.d.ts +12 -0
- package/dist-types/packages/peach-engine/src/guest-module-overrides.d.ts +7 -0
- package/dist-types/packages/peach-engine/src/ios/app-card-types.d.ts +7 -0
- package/dist-types/packages/peach-engine/src/ios/apps/canvas-map-data.d.ts +177 -0
- package/dist-types/packages/peach-engine/src/ios/aux-home-scene.d.ts +54 -0
- package/dist-types/packages/peach-engine/src/ios/chrome-metrics.d.ts +47 -0
- package/dist-types/packages/peach-engine/src/ios/constants.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/ios/duo-housing.d.ts +37 -0
- package/dist-types/packages/peach-engine/src/ios/home/types.d.ts +29 -0
- package/dist-types/packages/peach-engine/src/ios/home-app-catalog.d.ts +43 -0
- package/dist-types/packages/peach-engine/src/ios/photo-store.d.ts +73 -0
- package/dist-types/packages/peach-engine/src/ios/photoLibraryContract.d.ts +166 -0
- package/dist-types/packages/peach-engine/src/ios/shell-controller-types.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/ios/shell-transition-debug.d.ts +18 -0
- package/dist-types/packages/peach-engine/src/metro-asset-path.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/metro-fingerprint-registry-client.d.ts +11 -0
- package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +38 -0
- package/dist-types/packages/peach-engine/src/native-preview-bundle.d.ts +44 -0
- package/dist-types/packages/peach-engine/src/observability/types.d.ts +74 -0
- package/dist-types/packages/peach-engine/src/peach-warm-manifest.d.ts +32 -0
- package/dist-types/packages/peach-engine/src/permissions/app-settings-client.d.ts +25 -0
- package/dist-types/packages/peach-engine/src/permissions/system-permission-types.d.ts +20 -0
- package/dist-types/packages/peach-engine/src/platform/android-back-panel.d.ts +131 -0
- package/dist-types/packages/peach-engine/src/platform/android-gesture-exclusion.d.ts +28 -0
- package/dist-types/packages/peach-engine/src/platform/android-predictive-back.d.ts +33 -0
- package/dist-types/packages/peach-engine/src/platform/system-bars-state.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/playwright-sim-host.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/preview/bundle-layout.d.ts +8 -0
- package/dist-types/packages/peach-engine/src/preview/bundle-variantContract.d.ts +24 -0
- package/dist-types/packages/peach-engine/src/preview/capture-bundle.d.ts +26 -0
- package/dist-types/packages/peach-engine/src/preview/compress-node.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/preview/compress.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/preview/presigned-upload.d.ts +60 -0
- package/dist-types/packages/peach-engine/src/preview/trace.d.ts +144 -0
- package/dist-types/packages/peach-engine/src/preview/upload-protocol.d.ts +152 -0
- package/dist-types/packages/peach-engine/src/profiler/animation-recording-loader.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/profiler/profile-trace.d.ts +4 -0
- package/dist-types/packages/peach-engine/src/react-bridge.d.ts +3 -0
- package/dist-types/packages/peach-engine/src/react-native/AppState.d.ts +45 -0
- package/dist-types/packages/peach-engine/src/react-native/Appearance.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/react-native/framework-colors-data.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/react-native/host-services.d.ts +42 -0
- package/dist-types/packages/peach-engine/src/react-native/layout-animation.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/react-native/platform-colors.d.ts +17 -0
- package/dist-types/packages/peach-engine/src/remote-stream/client-config.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +58 -0
- package/dist-types/packages/peach-engine/src/remote-stream/scene-recording.d.ts +45 -0
- package/dist-types/packages/peach-engine/src/render-worker/animated-drive-output.d.ts +35 -0
- package/dist-types/packages/peach-engine/src/render-worker/app-load.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/render-worker/aux-surface-types.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/render-worker/canvaskit-shared.d.ts +42 -0
- package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +434 -0
- package/dist-types/packages/peach-engine/src/render-worker/canvaskit-worker-init.d.ts +12 -0
- package/dist-types/packages/peach-engine/src/render-worker/compositor-backend.d.ts +31 -0
- package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +202 -0
- package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1945 -0
- package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/scroll-drag-resample.d.ts +44 -0
- package/dist-types/packages/peach-engine/src/render-worker/css-keyframes-drive.d.ts +36 -0
- package/dist-types/packages/peach-engine/src/render-worker/edit-menu-geometry.d.ts +8 -0
- package/dist-types/packages/peach-engine/src/render-worker/engine-resource-relay.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/render-worker/expo-widgetContract.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/render-worker/gesture-seam-protocol.d.ts +152 -0
- package/dist-types/packages/peach-engine/src/render-worker/graph-linked-value.d.ts +29 -0
- package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler-contract.d.ts +49 -0
- package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler.d.ts +12 -0
- package/dist-types/packages/peach-engine/src/render-worker/host-service-protocol.d.ts +756 -0
- package/dist-types/packages/peach-engine/src/render-worker/image-lifecycle-event.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/render-worker/image-pixel-contract.d.ts +48 -0
- package/dist-types/packages/peach-engine/src/render-worker/live-frame-mirror.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/render-worker/map-command-channel.d.ts +189 -0
- package/dist-types/packages/peach-engine/src/render-worker/mapNativeContract.d.ts +101 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-dynamic-synchronizable.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-menu-gesture.d.ts +9 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-ui-commandContract.d.ts +23 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-ui-protocol.d.ts +1087 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-widgetContract.d.ts +100 -0
- package/dist-types/packages/peach-engine/src/render-worker/nativeAnimMirrorContract.d.ts +174 -0
- package/dist-types/packages/peach-engine/src/render-worker/nativeSyncReplyContract.d.ts +11 -0
- package/dist-types/packages/peach-engine/src/render-worker/one-native-contentContract.d.ts +54 -0
- package/dist-types/packages/peach-engine/src/render-worker/pointerSampleContract.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +880 -0
- package/dist-types/packages/peach-engine/src/render-worker/reanimated-css-contract.d.ts +63 -0
- package/dist-types/packages/peach-engine/src/render-worker/reanimated-readiness.d.ts +29 -0
- package/dist-types/packages/peach-engine/src/render-worker/resilient-frame-clock.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/render-worker/retained-app-load.d.ts +20 -0
- package/dist-types/packages/peach-engine/src/render-worker/screen-edge-swipe-commit-protocol.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/render-worker/screen-form-sheet-commit-protocol.d.ts +26 -0
- package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror-tenant.d.ts +37 -0
- package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror.d.ts +164 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-event-registry.d.ts +119 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-gesture-regions.d.ts +41 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-protocol.d.ts +603 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-scene-schema.d.ts +101 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-tree-inline-sources.d.ts +13 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +87 -0
- package/dist-types/packages/peach-engine/src/render-worker/test-bridge-protocol.d.ts +47 -0
- package/dist-types/packages/peach-engine/src/render-worker/text-inputContract.d.ts +93 -0
- package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +102 -0
- package/dist-types/packages/peach-engine/src/render-worker/webgpu-frame-transaction.d.ts +292 -0
- package/dist-types/packages/peach-engine/src/render-worker/webgpu-readback-scheduler.d.ts +107 -0
- package/dist-types/packages/peach-engine/src/render-worker/webview-capture-protocol.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/render-worker/worker-input-runtime.d.ts +211 -0
- package/dist-types/packages/peach-engine/src/render-worker/worker-storage.d.ts +33 -0
- package/dist-types/packages/peach-engine/src/render-worker/worklet-runtime.d.ts +987 -0
- package/dist-types/packages/peach-engine/src/render-worker/worklet-sab.d.ts +24 -0
- package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +84 -0
- package/dist-types/packages/peach-engine/src/rolldown-production-fingerprint.d.ts +31 -0
- package/dist-types/packages/peach-engine/src/screenshots/timeline-assets.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/screenshots/tokens.d.ts +9 -0
- package/dist-types/packages/peach-engine/src/settings/devices.d.ts +70 -0
- package/dist-types/packages/peach-engine/src/settings/duo-fold-bus.d.ts +87 -0
- package/dist-types/packages/peach-engine/src/settings/interface-rotation.d.ts +30 -0
- package/dist-types/packages/peach-engine/src/settings/react-native-configuration.d.ts +12 -0
- package/dist-types/packages/peach-engine/src/settings/scene-geometryContract.d.ts +40 -0
- package/dist-types/packages/peach-engine/src/settings/store.d.ts +37 -0
- package/dist-types/packages/peach-engine/src/shell-events.d.ts +203 -0
- package/dist-types/packages/peach-engine/src/shell-intent.d.ts +68 -0
- package/dist-types/packages/peach-engine/src/sootsim-event.d.ts +35 -0
- package/dist-types/packages/peach-engine/src/top-overlay-state.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/web-authentication-automation-host.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/webAuthenticationContract.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/webview-automation-host.d.ts +180 -0
- package/dist-types/packages/peach-engine/src/wireframe-mode.d.ts +16 -0
- package/dist-types/packages/peach-globals/src/frameBreakdownContract.d.ts +16 -0
- package/dist-types/packages/peach-globals/src/index.d.ts +3311 -0
- package/dist-types/packages/peach-globals/src/nativeSurfaceContract.d.ts +76 -0
- package/dist-types/packages/peach-globals/src/pointerSourceEventContract.d.ts +8 -0
- package/dist-types/packages/peach-globals/src/profileTrace.d.ts +11 -0
- package/dist-types/packages/peach-globals/src/profilerContract.d.ts +223 -0
- package/dist-types/packages/peach-kit/src/capabilities.d.ts +721 -0
- package/dist-types/packages/peach-kit/src/internal.d.ts +4 -0
- package/dist-types/packages/peach-kit/src/materials/types.d.ts +27 -0
- package/dist-types/packages/peach-kit/src/materials/uikit-blur-material.d.ts +14 -0
- package/dist-types/packages/peach-kit/src/navigation-types.d.ts +11 -0
- package/dist-types/packages/peach-kit/src/react-bridge.d.ts +53 -0
- package/dist-types/packages/peach-kit/src/runtime.d.ts +26 -0
- package/dist-types/packages/peach-kit/src/ui/hosting-safe-area.d.ts +24 -0
- package/dist-types/packages/peach-kit/src/ui/popover-placement.d.ts +53 -0
- package/dist-types/packages/peach-kit/src/ui/presentationContract.d.ts +17 -0
- package/kotlin/ComposeSources/PeachComposeHost.kt +1 -1
- package/kotlin/JniSources/com/facebook/jni/HybridData.kt +0 -2
- package/kotlin/JniSources/dev/peach/jni/NativeBindings.kt +0 -2
- package/kotlin/JniTransportSources/dev/peach/jni/integration/JniTransport.kt +0 -2
- package/kotlin/README.md +6 -0
- package/package.json +22 -2
- package/runtime-companion.json +1 -0
- package/skills/contrast/SKILL.md +1 -0
- package/src/appBundleResourcesContract.ts +51 -0
- package/src/assetCatalogContract.ts +21 -0
- package/src/backend-origin.ts +3 -1
- package/src/bridge-contract-input.ts +84 -0
- package/src/bridge-contract.ts +35 -3
- package/src/browser-launch-policy.ts +1 -0
- package/src/bundle-channel.mjs +4 -2
- package/src/cli-runtime.ts +55 -0
- package/src/crash-fingerprint.ts +26 -0
- package/src/dev-bundle-resolution.ts +50 -23
- package/src/device-catalog.ts +1159 -0
- package/src/host/bridge-host.ts +20 -37
- package/src/host/browser-pointer.ts +71 -0
- package/src/host/dev-server-package-versions.ts +23 -0
- package/src/host/fetch-proxy-handler.ts +17 -4
- package/src/host/staged-host-files.ts +28 -4
- package/src/installed-package-versions.ts +142 -38
- package/src/kotlin-host.ts +1 -1
- package/src/launchMetadataContract.ts +1 -0
- package/src/menu.ts +12 -4
- package/src/metro-plugin.ts +4 -4
- package/src/metro-project-root.ts +68 -0
- package/src/native-app-identity-project.ts +47 -38
- package/src/nitro-adapter.lock.json +26 -0
- package/src/nitro-adapter.ts +103 -0
- package/src/nitro-bundle.ts +24 -10
- package/src/nitro-compile.ts +33 -51
- package/src/nitro-source.ts +177 -96
- package/src/nitroAdapterContract.ts +217 -0
- package/src/nitroContract.ts +24 -11
- package/src/process-group.ts +41 -34
- package/src/react-bridge-importers.ts +28 -0
- package/src/reactNativeConfigurationContract.ts +36 -0
- package/src/runtime-assets.ts +7 -2
- package/src/runtime-delivery.ts +8 -7
- package/src/runtimePlatformContract.ts +70 -0
- package/src/screenshots/frame-compose.ts +42 -43
- package/src/screenshots/org-deck.ts +9 -4
- package/src/screenshots/preset-names.ts +29 -0
- package/src/screenshots/registry.ts +5 -5
- package/src/screenshots/schema.ts +1 -1
- package/src/screenshots/screenshotContract.ts +971 -0
- package/src/settings-flags.ts +107 -0
- package/src/settingsContract.ts +609 -0
- package/src/storageSnapshotContract.ts +344 -0
- package/src/stub-pattern-matcher.ts +550 -0
- package/src/swift-compile.ts +926 -47
- package/src/swift-compiler-digest.ts +17 -3
- package/src/swift-distribution.lock.json +49 -22
- package/src/swift-host.ts +167 -52
- package/src/swift-objc-compile.ts +86 -26
- package/src/swift-objc-export.ts +532 -0
- package/src/swift-objc-import.ts +769 -0
- package/src/swift-objc-metadata.ts +285 -10
- package/src/swift-objc-sdk.ts +13970 -158
- package/src/swift-objc-standin.ts +137 -1
- package/src/swift-package.ts +94 -0
- package/src/swift-packages.ts +5 -5
- package/src/swift-root-lock.ts +241 -92
- package/src/swift-submit.ts +6 -0
- package/src/swiftContract.ts +99 -0
- package/src/target-matcher.ts +6 -1
- package/src/vite-plugin.ts +14 -40
- package/src/worker-system-chunks.ts +1 -1
- package/src/workerChunkContract.ts +5 -0
- package/src/worklets-babel.ts +24 -5
- package/src/xcode-project.ts +103 -11
- package/src/xcode-target-members.ts +10 -3
- package/cli/drivers/playwright-sim-host.ts +0 -825
- package/kotlin/fixtures/counter/Counter.d.kt.ts +0 -17
- package/kotlin/fixtures/counter/Counter.kt +0 -51
- package/kotlin/fixtures/counter/CounterApp.native.tsx +0 -61
- package/kotlin/fixtures/counter/CounterApp.tsx +0 -3
- package/kotlin/fixtures/counter/CounterScreen.d.kt.ts +0 -8
- package/kotlin/fixtures/counter/CounterScreen.kt +0 -56
- package/kotlin/fixtures/counter/app/_layout.tsx +0 -4
- package/kotlin/fixtures/counter/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/counter/app/routes.d.ts +0 -18
- package/kotlin/fixtures/counter/package.json +0 -20
- package/kotlin/fixtures/counter/tsconfig.json +0 -19
- package/kotlin/fixtures/counter/vite.config.ts +0 -20
- package/kotlin/fixtures/headless-counter/Headless.kt +0 -234
- package/kotlin/fixtures/import-animation/Animation.d.kt.ts +0 -7
- package/kotlin/fixtures/import-animation/Animation.kt +0 -80
- package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +0 -13
- package/kotlin/fixtures/import-animation/README.md +0 -24
- package/kotlin/fixtures/import-animation/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-animation/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-animation/app/routes.d.ts +0 -18
- package/kotlin/fixtures/import-animation/package.json +0 -23
- package/kotlin/fixtures/import-animation/tsconfig.json +0 -20
- package/kotlin/fixtures/import-animation/vite.config.ts +0 -20
- package/kotlin/fixtures/import-drawing/Drawing.d.kt.ts +0 -7
- package/kotlin/fixtures/import-drawing/Drawing.kt +0 -101
- package/kotlin/fixtures/import-drawing/ImportDrawing.native.tsx +0 -18
- package/kotlin/fixtures/import-drawing/README.md +0 -34
- package/kotlin/fixtures/import-drawing/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-drawing/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-drawing/package.json +0 -23
- package/kotlin/fixtures/import-drawing/tsconfig.json +0 -20
- package/kotlin/fixtures/import-drawing/vite.config.ts +0 -20
- package/kotlin/fixtures/import-editor/Editor.d.kt.ts +0 -7
- package/kotlin/fixtures/import-editor/Editor.kt +0 -59
- package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +0 -23
- package/kotlin/fixtures/import-editor/README.md +0 -27
- package/kotlin/fixtures/import-editor/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-editor/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-editor/package.json +0 -23
- package/kotlin/fixtures/import-editor/tsconfig.json +0 -20
- package/kotlin/fixtures/import-editor/vite.config.ts +0 -20
- package/kotlin/fixtures/import-effects/Effects.d.kt.ts +0 -7
- package/kotlin/fixtures/import-effects/Effects.kt +0 -87
- package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +0 -13
- package/kotlin/fixtures/import-effects/README.md +0 -19
- package/kotlin/fixtures/import-effects/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-effects/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-effects/package.json +0 -23
- package/kotlin/fixtures/import-effects/tsconfig.json +0 -20
- package/kotlin/fixtures/import-effects/vite.config.ts +0 -20
- package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +0 -13
- package/kotlin/fixtures/import-layout/Layout.d.kt.ts +0 -7
- package/kotlin/fixtures/import-layout/Layout.kt +0 -72
- package/kotlin/fixtures/import-layout/README.md +0 -24
- package/kotlin/fixtures/import-layout/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-layout/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-layout/package.json +0 -23
- package/kotlin/fixtures/import-layout/tsconfig.json +0 -20
- package/kotlin/fixtures/import-layout/vite.config.ts +0 -20
- package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +0 -18
- package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +0 -7
- package/kotlin/fixtures/import-navigation/Navigation.kt +0 -104
- package/kotlin/fixtures/import-navigation/README.md +0 -31
- package/kotlin/fixtures/import-navigation/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-navigation/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-navigation/package.json +0 -23
- package/kotlin/fixtures/import-navigation/tsconfig.json +0 -20
- package/kotlin/fixtures/import-navigation/vite.config.ts +0 -20
- package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +0 -29
- package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +0 -7
- package/kotlin/fixtures/import-overlays/Overlays.kt +0 -93
- package/kotlin/fixtures/import-overlays/README.md +0 -34
- package/kotlin/fixtures/import-overlays/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-overlays/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-overlays/package.json +0 -23
- package/kotlin/fixtures/import-overlays/tsconfig.json +0 -20
- package/kotlin/fixtures/import-overlays/vite.config.ts +0 -20
- package/kotlin/fixtures/import-resources/ImportResources.native.tsx +0 -18
- package/kotlin/fixtures/import-resources/README.md +0 -26
- package/kotlin/fixtures/import-resources/Resources.d.kt.ts +0 -6
- package/kotlin/fixtures/import-resources/Resources.kt +0 -72
- package/kotlin/fixtures/import-resources/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-resources/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-resources/package.json +0 -23
- package/kotlin/fixtures/import-resources/tsconfig.json +0 -20
- package/kotlin/fixtures/import-resources/vite.config.ts +0 -20
- package/kotlin/fixtures/import-scroll/ImportNested.native.tsx +0 -10
- package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +0 -13
- package/kotlin/fixtures/import-scroll/Nested.d.kt.ts +0 -4
- package/kotlin/fixtures/import-scroll/Nested.kt +0 -64
- package/kotlin/fixtures/import-scroll/README.md +0 -38
- package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +0 -7
- package/kotlin/fixtures/import-scroll/Scroll.kt +0 -91
- package/kotlin/fixtures/import-scroll/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-scroll/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-scroll/app/nested+spa.tsx +0 -1
- package/kotlin/fixtures/import-scroll/package.json +0 -23
- package/kotlin/fixtures/import-scroll/tsconfig.json +0 -20
- package/kotlin/fixtures/import-scroll/vite.config.ts +0 -20
- package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +0 -44
- package/kotlin/fixtures/import-selection/README.md +0 -32
- package/kotlin/fixtures/import-selection/Selection.d.kt.ts +0 -8
- package/kotlin/fixtures/import-selection/Selection.kt +0 -78
- package/kotlin/fixtures/import-selection/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-selection/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-selection/package.json +0 -23
- package/kotlin/fixtures/import-selection/tsconfig.json +0 -20
- package/kotlin/fixtures/import-selection/vite.config.ts +0 -20
- package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +0 -13
- package/kotlin/fixtures/import-surfaces/README.md +0 -22
- package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +0 -7
- package/kotlin/fixtures/import-surfaces/Surfaces.kt +0 -64
- package/kotlin/fixtures/import-surfaces/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-surfaces/package.json +0 -23
- package/kotlin/fixtures/import-surfaces/tsconfig.json +0 -20
- package/kotlin/fixtures/import-surfaces/vite.config.ts +0 -20
- package/kotlin/fixtures/import-values/ImportValues.native.tsx +0 -61
- package/kotlin/fixtures/import-values/README.md +0 -28
- package/kotlin/fixtures/import-values/Values.d.kt.ts +0 -15
- package/kotlin/fixtures/import-values/Values.kt +0 -84
- package/kotlin/fixtures/import-values/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-values/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-values/package.json +0 -23
- package/kotlin/fixtures/import-values/tsconfig.json +0 -20
- package/kotlin/fixtures/import-values/vite.config.ts +0 -20
- package/kotlin/fixtures/kotlin-app/app/build.gradle.kts +0 -30
- package/kotlin/fixtures/kotlin-app/app/src/main/AndroidManifest.xml +0 -13
- package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/MainActivity.kt +0 -60
- package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/ProbeApplication.kt +0 -18
- package/kotlin/fixtures/kotlin-app/build.gradle.kts +0 -5
- package/kotlin/fixtures/kotlin-app/gradle.properties +0 -4
- package/kotlin/fixtures/kotlin-app/settings.gradle.kts +0 -4
- package/kotlin/fixtures/kotlin-app-variants/Anim.kt +0 -62
- package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +0 -38
- package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +0 -36
- package/kotlin/fixtures/kotlin-app-variants/Bitmaps.kt +0 -50
- package/kotlin/fixtures/kotlin-app-variants/Browse.kt +0 -73
- package/kotlin/fixtures/kotlin-app-variants/Colors.kt +0 -41
- package/kotlin/fixtures/kotlin-app-variants/Controls.kt +0 -62
- package/kotlin/fixtures/kotlin-app-variants/Drag.kt +0 -56
- package/kotlin/fixtures/kotlin-app-variants/Draw.kt +0 -74
- package/kotlin/fixtures/kotlin-app-variants/Drawables.kt +0 -53
- package/kotlin/fixtures/kotlin-app-variants/Focus.kt +0 -62
- package/kotlin/fixtures/kotlin-app-variants/Form.kt +0 -47
- package/kotlin/fixtures/kotlin-app-variants/Icons.kt +0 -59
- package/kotlin/fixtures/kotlin-app-variants/Ime.kt +0 -53
- package/kotlin/fixtures/kotlin-app-variants/Lists.kt +0 -57
- package/kotlin/fixtures/kotlin-app-variants/Nav.kt +0 -47
- package/kotlin/fixtures/kotlin-app-variants/Note.kt +0 -40
- package/kotlin/fixtures/kotlin-app-variants/Overlays.kt +0 -56
- package/kotlin/fixtures/kotlin-app-variants/Pan.kt +0 -38
- package/kotlin/fixtures/kotlin-app-variants/Pickers.kt +0 -44
- package/kotlin/fixtures/kotlin-app-variants/Press.kt +0 -43
- package/kotlin/fixtures/kotlin-app-variants/Scroll.kt +0 -63
- package/kotlin/fixtures/kotlin-app-variants/Sheet.kt +0 -43
- package/kotlin/fixtures/kotlin-app-variants/Strings.kt +0 -49
- package/kotlin/fixtures/kotlin-app-variants/Tabs.kt +0 -47
- package/kotlin/fixtures/kotlin-app-variants/TextWidth.kt +0 -45
- package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +0 -50
- package/kotlin/fixtures/kotlin-app-variants/Transition.kt +0 -69
- package/kotlin/fixtures/kotlin-app-variants/ViewConfig.kt +0 -22
- package/kotlin/fixtures/kotlin-app-variants/Widgets.kt +0 -67
- package/kotlin/fixtures/runtime-state/RuntimeState.kt +0 -200
- package/kotlin/fork/README.md +0 -97
- package/kotlin/fork/build.sh +0 -176
- package/kotlin/fork/compose-worker-globals.patch +0 -1247
- package/kotlin/fork/fork.json +0 -46
- package/kotlin/fork/publish.ts +0 -99
- package/kotlin/fork/skia-android-shaping.patch +0 -189
- package/kotlin/fork/skiko-local.init.gradle +0 -10
- package/kotlin/fork/skiko-worker-clock.patch +0 -122
package/src/process-group.ts
CHANGED
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
} from 'node:fs'
|
|
10
10
|
import { tmpdir } from 'node:os'
|
|
11
11
|
import { join } from 'node:path'
|
|
12
|
+
import { Duplex } from 'node:stream'
|
|
12
13
|
import { setTimeout as sleep } from 'node:timers/promises'
|
|
13
14
|
|
|
14
15
|
const GRACEFUL_TIMEOUT_MS = 3_000
|
|
@@ -90,6 +91,7 @@ async function protectProcessFreeze(rootPid: number) {
|
|
|
90
91
|
[
|
|
91
92
|
'-c',
|
|
92
93
|
`
|
|
94
|
+
(
|
|
93
95
|
journal=$1
|
|
94
96
|
cleanup() {
|
|
95
97
|
trap '' HUP INT TERM
|
|
@@ -106,26 +108,53 @@ async function protectProcessFreeze(rootPid: number) {
|
|
|
106
108
|
trap 'cleanup; exit 0' HUP INT TERM
|
|
107
109
|
trap 'rm -f "$journal"; rmdir "\${journal%/*}"' EXIT
|
|
108
110
|
printf 'ready\n'
|
|
109
|
-
if ! IFS= read -r command || [ "$command" != disarm ]; then cleanup; fi
|
|
111
|
+
if ! IFS= read -r command <&3 || [ "$command" != disarm ]; then cleanup; fi
|
|
112
|
+
) &
|
|
110
113
|
`,
|
|
111
114
|
FREEZE_GUARD_NAME,
|
|
112
115
|
journal,
|
|
113
116
|
],
|
|
114
117
|
{
|
|
115
118
|
detached: true,
|
|
116
|
-
|
|
119
|
+
// the launcher exits before capture, reparenting the guard outside any
|
|
120
|
+
// nested target tree. fd 3 survives that exit, unlike child.stdin.
|
|
121
|
+
stdio: ['ignore', 'pipe', 'ignore', 'pipe'],
|
|
117
122
|
},
|
|
118
123
|
)
|
|
124
|
+
let guardClosed = false
|
|
119
125
|
const closed = new Promise<void>((resolveClose) =>
|
|
120
|
-
guard.once('close', () =>
|
|
126
|
+
guard.once('close', () => {
|
|
127
|
+
guardClosed = true
|
|
128
|
+
resolveClose()
|
|
129
|
+
}),
|
|
121
130
|
)
|
|
122
|
-
|
|
131
|
+
const control = guard.stdio[3]
|
|
132
|
+
const output = guard.stdout
|
|
133
|
+
if (!(control instanceof Duplex) || !output) {
|
|
134
|
+
guard.kill()
|
|
135
|
+
await closed
|
|
136
|
+
rmSync(directory, { recursive: true, force: true })
|
|
137
|
+
throw new Error('process freeze guard control pipe is unavailable')
|
|
138
|
+
}
|
|
139
|
+
control.on('error', () => {})
|
|
123
140
|
try {
|
|
124
141
|
await new Promise<void>((resolveReady, reject) => {
|
|
125
|
-
let
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (
|
|
142
|
+
let readyOutput = ''
|
|
143
|
+
let launcherExited = false
|
|
144
|
+
const ready = () => {
|
|
145
|
+
if (launcherExited && readyOutput.includes('ready\n')) resolveReady()
|
|
146
|
+
}
|
|
147
|
+
output.on('data', (bytes: Buffer) => {
|
|
148
|
+
readyOutput += bytes.toString()
|
|
149
|
+
ready()
|
|
150
|
+
})
|
|
151
|
+
guard.once('exit', (code, signal) => {
|
|
152
|
+
if (code !== 0 || signal !== null) {
|
|
153
|
+
reject(new Error('process freeze guard launcher failed'))
|
|
154
|
+
return
|
|
155
|
+
}
|
|
156
|
+
launcherExited = true
|
|
157
|
+
ready()
|
|
129
158
|
})
|
|
130
159
|
guard.once('error', reject)
|
|
131
160
|
guard.once('close', () =>
|
|
@@ -133,47 +162,25 @@ async function protectProcessFreeze(rootPid: number) {
|
|
|
133
162
|
)
|
|
134
163
|
})
|
|
135
164
|
} catch (error) {
|
|
136
|
-
|
|
165
|
+
control.destroy()
|
|
137
166
|
await closed
|
|
138
167
|
rmSync(directory, { recursive: true, force: true })
|
|
139
168
|
throw error
|
|
140
169
|
}
|
|
141
170
|
return {
|
|
142
171
|
record(pid: number) {
|
|
143
|
-
if (
|
|
172
|
+
if (guardClosed || control.destroyed)
|
|
144
173
|
throw new Error('process freeze guard exited during capture')
|
|
145
174
|
appendFileSync(journal, `pid ${pid}\n`)
|
|
146
175
|
},
|
|
147
176
|
async release(disarm: boolean) {
|
|
148
|
-
|
|
177
|
+
control.end(disarm ? 'disarm\n' : undefined)
|
|
149
178
|
await closed
|
|
150
179
|
rmSync(directory, { recursive: true, force: true })
|
|
151
180
|
},
|
|
152
181
|
}
|
|
153
182
|
}
|
|
154
183
|
|
|
155
|
-
// a nested capture's guard is a descendant of this tree but must keep running
|
|
156
|
-
// to resume its own targets, so a freeze never reaches it. ps exits 1 when
|
|
157
|
-
// some pids already vanished, so only a spawn failure or timeout is an error.
|
|
158
|
-
function withoutFreezeGuards(pids: number[]): number[] {
|
|
159
|
-
if (pids.length === 0) return pids
|
|
160
|
-
const result = spawnSync('ps', ['-o', 'pid=,command=', '-p', pids.join(',')], {
|
|
161
|
-
encoding: 'utf8',
|
|
162
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
163
|
-
timeout: FORCED_EXIT_TIMEOUT_MS,
|
|
164
|
-
killSignal: 'SIGKILL',
|
|
165
|
-
})
|
|
166
|
-
if (result.error || (result.status !== 0 && result.status !== 1))
|
|
167
|
-
throw new Error(result.error?.message || `ps exited ${result.status}`)
|
|
168
|
-
const guards = new Set(
|
|
169
|
-
result.stdout
|
|
170
|
-
.split('\n')
|
|
171
|
-
.filter((line) => line.includes(FREEZE_GUARD_NAME))
|
|
172
|
-
.map((line) => Number(line.trim().split(/\s+/)[0])),
|
|
173
|
-
)
|
|
174
|
-
return pids.filter((pid) => !guards.has(pid))
|
|
175
|
-
}
|
|
176
|
-
|
|
177
184
|
// reparented members remain in the group; detached descendants need their
|
|
178
185
|
// recorded pids. both can leave zombies, which signal zero cannot distinguish
|
|
179
186
|
// from running processes. inspect their states together before confirming exit.
|
|
@@ -266,7 +273,7 @@ export async function terminateProcessGroup(
|
|
|
266
273
|
}
|
|
267
274
|
let children: number[]
|
|
268
275
|
try {
|
|
269
|
-
children =
|
|
276
|
+
children = listProcessChildren(parents, remaining)
|
|
270
277
|
} catch (error) {
|
|
271
278
|
inspectionError = new Error(`could not inspect descendants: ${String(error)}`)
|
|
272
279
|
break
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// which importers of `react` are routed through the peach-kit react bridge.
|
|
2
|
+
// shared by the vite plugins and the esbuild browser artifacts.
|
|
3
|
+
|
|
4
|
+
// the engine, compat, kit and reconciler sources the renderer shares a React with
|
|
5
|
+
export function isEngineReactImporter(importer: string): boolean {
|
|
6
|
+
return (
|
|
7
|
+
importer.includes('/peachsim/src/') ||
|
|
8
|
+
importer.includes('/peach-engine/src/') ||
|
|
9
|
+
importer.includes('/peach-compat/src/') ||
|
|
10
|
+
importer.includes('/peach-compat/dist-pressability/') ||
|
|
11
|
+
importer.includes('/peach-kit/src/') ||
|
|
12
|
+
importer.includes('react-reconciler')
|
|
13
|
+
)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// the bridge's own import of react would loop, and the stub registry needs the
|
|
17
|
+
// real React (with __CLIENT_INTERNALS) for bundle stubs. these match the files,
|
|
18
|
+
// not any path containing the name, so a checkout directory cannot trip them.
|
|
19
|
+
export function keepsRealReact(importer: string): boolean {
|
|
20
|
+
return /\/(react-bridge|stub-registry)\.[cm]?[jt]sx?$/.test(importer)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// workers are built, so any pure-JS RN-ecosystem package in node_modules is
|
|
24
|
+
// bridged too. the bridge and the stub registry keep the real React.
|
|
25
|
+
export function isWorkerReactBridgeImporter(importer: string): boolean {
|
|
26
|
+
if (keepsRealReact(importer)) return false
|
|
27
|
+
return isEngineReactImporter(importer) || importer.includes('/node_modules/')
|
|
28
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { SettingsValues } from './settingsContract.ts'
|
|
2
|
+
|
|
3
|
+
// render workers mirror only these host-owned values. importing the settings
|
|
4
|
+
// store here would also boot device selection, persistence and the ui schema.
|
|
5
|
+
export const DEFAULT_REACT_NATIVE_CONFIGURATION = {
|
|
6
|
+
// the appearance setting itself (automatic, light or dark); the resolved
|
|
7
|
+
// scheme reaches workers through Appearance
|
|
8
|
+
colorScheme: 'auto',
|
|
9
|
+
language: 'en',
|
|
10
|
+
region: 'US',
|
|
11
|
+
fontSize: 1,
|
|
12
|
+
boldText: false,
|
|
13
|
+
reduceMotion: false,
|
|
14
|
+
largerAccessibilitySizes: false,
|
|
15
|
+
glassTintAmount: 0.5,
|
|
16
|
+
reduceTransparency: false,
|
|
17
|
+
increaseContrast: false,
|
|
18
|
+
showBorders: false,
|
|
19
|
+
onOffLabels: false,
|
|
20
|
+
differentiateWithoutColor: false,
|
|
21
|
+
smartInvert: false,
|
|
22
|
+
preferCrossFadeTransitions: false,
|
|
23
|
+
} satisfies Partial<SettingsValues>
|
|
24
|
+
|
|
25
|
+
export type ReactNativeConfigurationKey = keyof typeof DEFAULT_REACT_NATIVE_CONFIGURATION
|
|
26
|
+
|
|
27
|
+
export type ReactNativeConfigurationSnapshot = Pick<
|
|
28
|
+
SettingsValues,
|
|
29
|
+
ReactNativeConfigurationKey
|
|
30
|
+
>
|
|
31
|
+
|
|
32
|
+
export const REACT_NATIVE_CONFIGURATION_KEYS = Object.keys(
|
|
33
|
+
DEFAULT_REACT_NATIVE_CONFIGURATION,
|
|
34
|
+
).filter(
|
|
35
|
+
(key): key is ReactNativeConfigurationKey => key in DEFAULT_REACT_NATIVE_CONFIGURATION,
|
|
36
|
+
)
|
package/src/runtime-assets.ts
CHANGED
|
@@ -54,7 +54,7 @@ export function findMonorepoRoot(): string | null {
|
|
|
54
54
|
/** the fresh dev-stack engine build to serve when running inside the Contrast
|
|
55
55
|
* monorepo dev checkout, or null when the installed runtime should serve
|
|
56
56
|
* (published CLI, packaged electron, or an isolated PEACH_HOME). */
|
|
57
|
-
export function
|
|
57
|
+
export function resolveDevCheckoutRuntimeAssetRoot(): string | null {
|
|
58
58
|
// an explicit home that has a STAGED/active runtime is the isolation the
|
|
59
59
|
// CI/local-publish path sets up to validate the installed-runtime code path —
|
|
60
60
|
// honor that staged runtime. an explicit home with NO active runtime is just
|
|
@@ -65,7 +65,12 @@ export function resolveDevCheckoutRuntimeRoot(): string | null {
|
|
|
65
65
|
if (process.env.PEACH_HOME && readActiveRuntime()) return null
|
|
66
66
|
const root = findMonorepoRoot()
|
|
67
67
|
if (!root) return null
|
|
68
|
-
|
|
68
|
+
return path.join(root, 'public/sootsim')
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function resolveDevCheckoutRuntimeRoot(): string | null {
|
|
72
|
+
const devBuild = resolveDevCheckoutRuntimeAssetRoot()
|
|
73
|
+
if (!devBuild) return null
|
|
69
74
|
// require the runtime shape the installed runtime also has, so serving it is
|
|
70
75
|
// a drop-in (index.html shell + engine/ + both engine-tenant workers).
|
|
71
76
|
if (
|
package/src/runtime-delivery.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// the machinery itself (hosted manifest, sha256-verified tarballs, channels,
|
|
4
4
|
// channel resolution, and auto-update) lives in @contrast/runtime-delivery and
|
|
5
5
|
// knows nothing about peach. this file supplies peach's identity, public env
|
|
6
|
-
// overrides, and the
|
|
6
|
+
// overrides, and the peachsim.com/runtimes hosting layout.
|
|
7
7
|
//
|
|
8
8
|
// @contrast/runtime-delivery is an internal workspace package that is never
|
|
9
9
|
// published, so both the CLI bundle and dist-lib inline it (see the `alias`
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
// out as a bare require.
|
|
12
12
|
|
|
13
13
|
import { createRuntimeDelivery, type RuntimeProduct } from '@contrast/runtime-delivery'
|
|
14
|
+
import { verifyCliCompanion } from './cli-runtime'
|
|
14
15
|
import {
|
|
15
16
|
cacheDir,
|
|
16
17
|
configFilePath,
|
|
@@ -20,14 +21,13 @@ import {
|
|
|
20
21
|
runtimesDir,
|
|
21
22
|
writeActiveRuntime,
|
|
22
23
|
} from './home-paths.ts'
|
|
23
|
-
import {
|
|
24
|
+
import { peachPublicBrand } from './public-brand.ts'
|
|
24
25
|
|
|
25
|
-
export const DEFAULT_RUNTIME_CDN_ORIGIN =
|
|
26
|
+
export const DEFAULT_RUNTIME_CDN_ORIGIN = peachPublicBrand.origin
|
|
26
27
|
|
|
27
|
-
/** the official curated changelog and the machine-readable release feed.
|
|
28
|
-
|
|
29
|
-
export const
|
|
30
|
-
export const RNX_CHANGELOG_API_URL = 'https://contrast.dev/api/changelog/sootsim'
|
|
28
|
+
/** the official curated changelog and the machine-readable release feed. */
|
|
29
|
+
export const RNX_CHANGELOG_URL = `${peachPublicBrand.origin}/changelog`
|
|
30
|
+
export const RNX_CHANGELOG_API_URL = `${peachPublicBrand.origin}/api/changelog/sootsim`
|
|
31
31
|
|
|
32
32
|
export const RNX_RUNTIME_PRODUCT: RuntimeProduct = {
|
|
33
33
|
id: 'peach',
|
|
@@ -38,6 +38,7 @@ export const RNX_RUNTIME_PRODUCT: RuntimeProduct = {
|
|
|
38
38
|
// engine-tenant/ beneath it. index.html is what the daemon and the
|
|
39
39
|
// vite/metro plugins serve, so its absence means the tarball is not one.
|
|
40
40
|
installedMarker: 'index.html',
|
|
41
|
+
verifyInstall: verifyCliCompanion,
|
|
41
42
|
env: {
|
|
42
43
|
cdnOrigin: 'PEACH_CDN_ORIGIN',
|
|
43
44
|
channel: 'PEACH_RUNTIME_CHANNEL',
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { RuntimePlatform } from './device-catalog.ts'
|
|
2
|
+
|
|
3
|
+
export interface RuntimePlatformAdapterRegistry<Value> {
|
|
4
|
+
readonly ios: Value
|
|
5
|
+
readonly android: Value
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface IOSRuntimePlatformAdapter {
|
|
9
|
+
readonly id: 'ios'
|
|
10
|
+
readonly displayName: 'iOS'
|
|
11
|
+
readonly isIOS: true
|
|
12
|
+
readonly isAndroid: false
|
|
13
|
+
select<Value>(registry: RuntimePlatformAdapterRegistry<Value>): Value
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface AndroidRuntimePlatformAdapter {
|
|
17
|
+
readonly id: 'android'
|
|
18
|
+
readonly displayName: 'Android'
|
|
19
|
+
readonly isIOS: false
|
|
20
|
+
readonly isAndroid: true
|
|
21
|
+
select<Value>(registry: RuntimePlatformAdapterRegistry<Value>): Value
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export type RuntimePlatformAdapter =
|
|
25
|
+
| IOSRuntimePlatformAdapter
|
|
26
|
+
| AndroidRuntimePlatformAdapter
|
|
27
|
+
|
|
28
|
+
const IOS_ADAPTER = Object.freeze({
|
|
29
|
+
id: 'ios',
|
|
30
|
+
displayName: 'iOS',
|
|
31
|
+
isIOS: true,
|
|
32
|
+
isAndroid: false,
|
|
33
|
+
select: <Value>(registry: RuntimePlatformAdapterRegistry<Value>) => registry.ios,
|
|
34
|
+
} satisfies IOSRuntimePlatformAdapter)
|
|
35
|
+
|
|
36
|
+
const ANDROID_ADAPTER = Object.freeze({
|
|
37
|
+
id: 'android',
|
|
38
|
+
displayName: 'Android',
|
|
39
|
+
isIOS: false,
|
|
40
|
+
isAndroid: true,
|
|
41
|
+
select: <Value>(registry: RuntimePlatformAdapterRegistry<Value>) => registry.android,
|
|
42
|
+
} satisfies AndroidRuntimePlatformAdapter)
|
|
43
|
+
|
|
44
|
+
const RUNTIME_PLATFORM_ADAPTERS = Object.freeze({
|
|
45
|
+
ios: IOS_ADAPTER,
|
|
46
|
+
android: ANDROID_ADAPTER,
|
|
47
|
+
} satisfies Record<RuntimePlatform, RuntimePlatformAdapter>)
|
|
48
|
+
|
|
49
|
+
export function isRuntimePlatform(value: unknown): value is RuntimePlatform {
|
|
50
|
+
return value === 'ios' || value === 'android'
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function parseRuntimePlatform(
|
|
54
|
+
value: unknown,
|
|
55
|
+
boundary = 'runtime platform',
|
|
56
|
+
): RuntimePlatform {
|
|
57
|
+
if (!isRuntimePlatform(value)) {
|
|
58
|
+
const received = typeof value === 'string' ? JSON.stringify(value) : String(value)
|
|
59
|
+
throw new Error(
|
|
60
|
+
`invalid ${boundary}: expected "ios" or "android", received ${received}`,
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
return value
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function getRuntimePlatformAdapter<Platform extends RuntimePlatform>(
|
|
67
|
+
platform: Platform,
|
|
68
|
+
): (typeof RUNTIME_PLATFORM_ADAPTERS)[Platform] {
|
|
69
|
+
return RUNTIME_PLATFORM_ADAPTERS[platform]
|
|
70
|
+
}
|
|
@@ -1,26 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
LEGACY_BOTTOM_BEZEL,
|
|
3
|
-
LEGACY_FRAME_RADIUS,
|
|
4
|
-
LEGACY_HOME_BUTTON_RING,
|
|
5
|
-
LEGACY_HOME_BUTTON_SIZE,
|
|
6
|
-
LEGACY_SIDE_BEZEL,
|
|
7
|
-
LEGACY_TOP_BEZEL,
|
|
8
|
-
SIDE_BUTTON_RESERVE,
|
|
9
|
-
} from 'peach-engine/ios/chrome-metrics'
|
|
10
|
-
import {
|
|
11
|
-
housingLayerHtml,
|
|
12
|
-
resolveHousingArt,
|
|
13
|
-
type HousingLayer,
|
|
14
|
-
} from 'peach-engine/ios/duo-housing'
|
|
15
|
-
import {
|
|
16
|
-
cornerRadii,
|
|
17
|
-
formatCornerRadii,
|
|
18
|
-
getDevice,
|
|
19
|
-
resolveDeviceFrameGeometry,
|
|
20
|
-
type CornerRadii,
|
|
21
|
-
type DeviceModel,
|
|
22
|
-
} from 'peach-engine/settings/devices'
|
|
23
1
|
import { launchProvisionedPlaywright } from '../../cli/drivers/playwright-provisioning'
|
|
2
|
+
import { getCliRuntime } from '../cli-runtime.ts'
|
|
3
|
+
import { cornerRadii, type CornerRadii, type DeviceModel } from '../device-catalog.ts'
|
|
4
|
+
import type { HousingLayer } from '#peach-cli-contract/ios/duo-housing'
|
|
24
5
|
|
|
25
6
|
const METALLIC_RING_SHADOW =
|
|
26
7
|
'inset 0 0 0 0.5px #000, inset 0 0 0 2px #757575, inset 0 0 0 5px #212121'
|
|
@@ -74,7 +55,7 @@ export interface FramedScreenshotLayout {
|
|
|
74
55
|
// - the browser rail / gutter
|
|
75
56
|
// The screen bitmap itself still comes from the raw bridge screenshot.
|
|
76
57
|
export function getFramedScreenshotLayout(model: DeviceModel): FramedScreenshotLayout {
|
|
77
|
-
const spec = getDevice(model)
|
|
58
|
+
const spec = getCliRuntime().settings_devices.getDevice(model)
|
|
78
59
|
const renderScale = spec.scale
|
|
79
60
|
// legacy = home-button iPhone (SE). the canvas workspace also has no island /
|
|
80
61
|
// home indicator / corner radius, but no status bar, so gate on statusBar > 0
|
|
@@ -87,28 +68,39 @@ export function getFramedScreenshotLayout(model: DeviceModel): FramedScreenshotL
|
|
|
87
68
|
spec.cornerRadius.topLeft === 0
|
|
88
69
|
const logicalScreenWidth = spec.width
|
|
89
70
|
const logicalScreenHeight = spec.height
|
|
90
|
-
const modernGeometry = resolveDeviceFrameGeometry(spec)
|
|
71
|
+
const modernGeometry = getCliRuntime().settings_devices.resolveDeviceFrameGeometry(spec)
|
|
91
72
|
const housingLayers = isLegacyHardware
|
|
92
73
|
? null
|
|
93
|
-
: resolveHousingArt(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
74
|
+
: getCliRuntime().ios_duo_housing.resolveHousingArt(
|
|
75
|
+
spec.posture ?? 'closed',
|
|
76
|
+
modernGeometry,
|
|
77
|
+
{
|
|
78
|
+
orientation: spec.orientation,
|
|
79
|
+
landscapeSide: spec.landscapeSide,
|
|
80
|
+
},
|
|
81
|
+
)
|
|
97
82
|
const logicalFrameWidth = isLegacyHardware
|
|
98
|
-
? spec.width + LEGACY_SIDE_BEZEL * 2
|
|
83
|
+
? spec.width + getCliRuntime().ios_chrome_metrics.LEGACY_SIDE_BEZEL * 2
|
|
99
84
|
: modernGeometry.frameWidth
|
|
100
85
|
const logicalFrameHeight = isLegacyHardware
|
|
101
|
-
? spec.height +
|
|
86
|
+
? spec.height +
|
|
87
|
+
getCliRuntime().ios_chrome_metrics.LEGACY_TOP_BEZEL +
|
|
88
|
+
getCliRuntime().ios_chrome_metrics.LEGACY_BOTTOM_BEZEL
|
|
102
89
|
: modernGeometry.frameHeight
|
|
103
|
-
const logicalFrameLeft = SIDE_BUTTON_RESERVE
|
|
90
|
+
const logicalFrameLeft = getCliRuntime().ios_chrome_metrics.SIDE_BUTTON_RESERVE
|
|
104
91
|
const logicalFrameTop = FRAME_OUTLINE_BLEED
|
|
105
92
|
const logicalOuterWidth = logicalFrameWidth + logicalFrameLeft * 2
|
|
106
93
|
const logicalOuterHeight = logicalFrameHeight + FRAME_OUTLINE_BLEED * 2
|
|
107
94
|
const logicalScreenLeft =
|
|
108
|
-
logicalFrameLeft +
|
|
109
|
-
|
|
95
|
+
logicalFrameLeft +
|
|
96
|
+
(isLegacyHardware
|
|
97
|
+
? getCliRuntime().ios_chrome_metrics.LEGACY_SIDE_BEZEL
|
|
98
|
+
: modernGeometry.screenLeft)
|
|
99
|
+
const logicalScreenTop = isLegacyHardware
|
|
100
|
+
? getCliRuntime().ios_chrome_metrics.LEGACY_TOP_BEZEL
|
|
101
|
+
: modernGeometry.screenTop
|
|
110
102
|
const logicalFrameRadius = isLegacyHardware
|
|
111
|
-
? cornerRadii(LEGACY_FRAME_RADIUS)
|
|
103
|
+
? cornerRadii(getCliRuntime().ios_chrome_metrics.LEGACY_FRAME_RADIUS)
|
|
112
104
|
: modernGeometry.frameRadius
|
|
113
105
|
const buttons: FrameButtonLayout[] = [
|
|
114
106
|
{
|
|
@@ -172,12 +164,17 @@ export function getFramedScreenshotLayout(model: DeviceModel): FramedScreenshotL
|
|
|
172
164
|
legacyHomeButton: isLegacyHardware
|
|
173
165
|
? {
|
|
174
166
|
top:
|
|
175
|
-
LEGACY_TOP_BEZEL +
|
|
167
|
+
getCliRuntime().ios_chrome_metrics.LEGACY_TOP_BEZEL +
|
|
176
168
|
spec.height +
|
|
177
|
-
(LEGACY_BOTTOM_BEZEL -
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
169
|
+
(getCliRuntime().ios_chrome_metrics.LEGACY_BOTTOM_BEZEL -
|
|
170
|
+
getCliRuntime().ios_chrome_metrics.LEGACY_HOME_BUTTON_SIZE) /
|
|
171
|
+
2,
|
|
172
|
+
left:
|
|
173
|
+
spec.width / 2 -
|
|
174
|
+
getCliRuntime().ios_chrome_metrics.LEGACY_HOME_BUTTON_SIZE / 2 +
|
|
175
|
+
getCliRuntime().ios_chrome_metrics.LEGACY_SIDE_BEZEL,
|
|
176
|
+
size: getCliRuntime().ios_chrome_metrics.LEGACY_HOME_BUTTON_SIZE,
|
|
177
|
+
ring: getCliRuntime().ios_chrome_metrics.LEGACY_HOME_BUTTON_RING,
|
|
181
178
|
}
|
|
182
179
|
: null,
|
|
183
180
|
showHomeIndicator: spec.homeIndicatorHeight > 0,
|
|
@@ -240,7 +237,7 @@ function renderFrameHtml(
|
|
|
240
237
|
style="
|
|
241
238
|
position:absolute;
|
|
242
239
|
inset:0;
|
|
243
|
-
border-radius:${formatCornerRadii(layout.logicalFrameRadius)};
|
|
240
|
+
border-radius:${getCliRuntime().settings_devices.formatCornerRadii(layout.logicalFrameRadius)};
|
|
244
241
|
box-shadow:${layout.metallicRingShadow};
|
|
245
242
|
pointer-events:none;
|
|
246
243
|
z-index:10;
|
|
@@ -251,7 +248,9 @@ function renderFrameHtml(
|
|
|
251
248
|
|
|
252
249
|
// the folding body's rail, glass ring, corner art, and hinge barrel. no
|
|
253
250
|
// z-index, so the screen div after it paints on top.
|
|
254
|
-
const housingHtml = (layout.housingLayers ?? [])
|
|
251
|
+
const housingHtml = (layout.housingLayers ?? [])
|
|
252
|
+
.map(getCliRuntime().ios_duo_housing.housingLayerHtml)
|
|
253
|
+
.join('')
|
|
255
254
|
|
|
256
255
|
const legacyHomeButtonHtml = layout.legacyHomeButton
|
|
257
256
|
? `
|
|
@@ -372,7 +371,7 @@ function renderFrameHtml(
|
|
|
372
371
|
left:${layout.logicalFrameLeft}px;
|
|
373
372
|
width:${layout.logicalFrameWidth}px;
|
|
374
373
|
height:${layout.logicalFrameHeight}px;
|
|
375
|
-
border-radius:${layout.housingLayers ? '0' : formatCornerRadii(layout.logicalFrameRadius)};
|
|
374
|
+
border-radius:${layout.housingLayers ? '0' : getCliRuntime().settings_devices.formatCornerRadii(layout.logicalFrameRadius)};
|
|
376
375
|
box-sizing:border-box;
|
|
377
376
|
overflow:visible;
|
|
378
377
|
background:${layout.frameBackground};
|
|
@@ -391,7 +390,7 @@ function renderFrameHtml(
|
|
|
391
390
|
left:${layout.logicalScreenLeft - layout.logicalFrameLeft}px;
|
|
392
391
|
width:${layout.logicalScreenWidth}px;
|
|
393
392
|
height:${layout.logicalScreenHeight}px;
|
|
394
|
-
border-radius:${formatCornerRadii(layout.logicalScreenRadius)};
|
|
393
|
+
border-radius:${getCliRuntime().settings_devices.formatCornerRadii(layout.logicalScreenRadius)};
|
|
395
394
|
overflow:hidden;
|
|
396
395
|
background:#000;
|
|
397
396
|
"
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveBgColorValue } from './screenshotContract.ts'
|
|
1
2
|
// fetch the team's screenshot deck (the copy / colors founders set up in the
|
|
2
3
|
// org dashboard) and overlay it onto a screenshots plan, so the programmatic
|
|
3
4
|
// `peach screenshot appstore --plan … --org … --repo …` flow renders the org's
|
|
@@ -5,8 +6,6 @@
|
|
|
5
6
|
// which screen each slide captures and the device frame; the deck owns copy +
|
|
6
7
|
// colors. 3d scenes don't translate to the cli's 2d composer, so only copy and
|
|
7
8
|
// colors carry over (the 3d hero look stays the in-browser screenshot mode).
|
|
8
|
-
|
|
9
|
-
import { resolveBgColorValue } from 'peach-engine/screenshots/tokens'
|
|
10
9
|
import type { BackgroundSpec } from './registry'
|
|
11
10
|
import type { NormalizedScreenshotsPlan } from './schema'
|
|
12
11
|
|
|
@@ -81,8 +80,14 @@ export function applyOrgDeckToPlan(
|
|
|
81
80
|
type: 'gradient',
|
|
82
81
|
direction: 180,
|
|
83
82
|
stops: [
|
|
84
|
-
{
|
|
85
|
-
|
|
83
|
+
{
|
|
84
|
+
offset: 0,
|
|
85
|
+
color: resolveBgColorValue(frame.bgTop),
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
offset: 1,
|
|
89
|
+
color: resolveBgColorValue(frame.bgBottom),
|
|
90
|
+
},
|
|
86
91
|
],
|
|
87
92
|
}
|
|
88
93
|
slide.background = background
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const SCREENSHOT_CANVAS_NAMES = [
|
|
2
|
+
'iphone-6-9',
|
|
3
|
+
'iphone-6-1',
|
|
4
|
+
'ipad-pro-13',
|
|
5
|
+
'android-phone',
|
|
6
|
+
'android-tablet-7',
|
|
7
|
+
'android-tablet-10',
|
|
8
|
+
] as const
|
|
9
|
+
export type ScreenshotCanvasName = (typeof SCREENSHOT_CANVAS_NAMES)[number]
|
|
10
|
+
|
|
11
|
+
export const BACKGROUND_PRESET_NAMES = ['dark', 'cyan', 'gold', 'red'] as const
|
|
12
|
+
export type BackgroundPresetName = (typeof BACKGROUND_PRESET_NAMES)[number]
|
|
13
|
+
|
|
14
|
+
export const TEXT_PRESET_NAMES = [
|
|
15
|
+
'bold-top',
|
|
16
|
+
'editorial-left',
|
|
17
|
+
'minimal-bottom',
|
|
18
|
+
'none',
|
|
19
|
+
] as const
|
|
20
|
+
export type TextPresetName = (typeof TEXT_PRESET_NAMES)[number]
|
|
21
|
+
|
|
22
|
+
export const POSE_PRESET_NAMES = [
|
|
23
|
+
'straight',
|
|
24
|
+
'tilted-left',
|
|
25
|
+
'tilted-right',
|
|
26
|
+
'cut-bottom',
|
|
27
|
+
'cut-top',
|
|
28
|
+
] as const
|
|
29
|
+
export type PosePresetName = (typeof POSE_PRESET_NAMES)[number]
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// composer-facing registry. shared tokens live in
|
|
2
|
-
// `
|
|
2
|
+
// `screenshotContract.ts` so the live browser
|
|
3
3
|
// screenshot mode and the post-process composer render from the same
|
|
4
4
|
// canvas / background / text / pose / animation / clamp vocabulary.
|
|
5
5
|
//
|
|
6
6
|
// this module re-exports those tokens plus the composer-specific
|
|
7
7
|
// `FrameComposeSpec` shape.
|
|
8
8
|
|
|
9
|
-
import type { DeviceModel } from '
|
|
9
|
+
import type { DeviceModel } from '../device-catalog.ts'
|
|
10
10
|
|
|
11
11
|
export {
|
|
12
12
|
BACKGROUND_PRESETS,
|
|
@@ -19,7 +19,7 @@ export {
|
|
|
19
19
|
cloneBackgroundSpec,
|
|
20
20
|
resolveBackgroundPreset,
|
|
21
21
|
resolveCanvasPreset,
|
|
22
|
-
} from '
|
|
22
|
+
} from './screenshotContract.ts'
|
|
23
23
|
|
|
24
24
|
export type {
|
|
25
25
|
BackgroundPresetName,
|
|
@@ -30,9 +30,9 @@ export type {
|
|
|
30
30
|
PosePresetName,
|
|
31
31
|
ScreenshotCanvasName,
|
|
32
32
|
TextPresetName,
|
|
33
|
-
} from '
|
|
33
|
+
} from './screenshotContract.ts'
|
|
34
34
|
|
|
35
|
-
import type { FrameShadowSpec, PosePresetName } from '
|
|
35
|
+
import type { FrameShadowSpec, PosePresetName } from './screenshotContract.ts'
|
|
36
36
|
|
|
37
37
|
export interface FrameComposeSpec {
|
|
38
38
|
show: boolean
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFileSync } from 'fs'
|
|
2
2
|
import path from 'path'
|
|
3
|
-
import { devices, type DeviceModel } from 'peach-engine/settings/devices'
|
|
4
3
|
import yaml from 'yaml'
|
|
4
|
+
import { devices, type DeviceModel } from '../device-catalog.ts'
|
|
5
5
|
import { isRecord } from '../is-record'
|
|
6
6
|
import {
|
|
7
7
|
cloneBackgroundSpec,
|