peachsim 0.1.1644 → 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-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 +93 -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 +1 -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 +11 -3
- 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 +46 -114
- package/detox/motion-change.d.cts +5 -27
- 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 +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 +38091 -14846
- 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 +1244 -4509
- 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 +35049 -13125
- 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 +45112 -63143
- 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 +1909 -2029
- 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 +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 +1 -1
- package/dist-lib/metro-production-bundle.mjs +1 -1
- package/dist-lib/metro.cjs +380 -522
- package/dist-lib/native-app-identity-project.cjs +39 -252
- package/dist-lib/native-app-identity-project.mjs +1174 -11
- 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 +83 -16
- package/dist-lib/sdk.mjs +81 -15
- package/dist-lib/skills.cjs +50546 -75098
- package/dist-lib/swift-compile.cjs +25897 -1070
- package/dist-lib/swift-compile.mjs +25866 -1033
- 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 +34273 -12349
- 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/assetCatalogContract.ts +21 -0
- 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 +3 -26
- 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/installed-package-versions.ts +142 -38
- package/src/kotlin-host.ts +1 -1
- package/src/metro-plugin.ts +4 -4
- package/src/metro-project-root.ts +68 -0
- 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 +2 -0
- 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 +908 -40
- package/src/swift-compiler-digest.ts +13 -1
- package/src/swift-distribution.lock.json +49 -22
- package/src/swift-host.ts +167 -52
- package/src/swift-objc-compile.ts +54 -24
- 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-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 +36 -7
- 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/cli/commands/upload.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'crypto'
|
|
2
|
+
import { readFileSync, rmSync } from 'fs'
|
|
1
3
|
// peach record upload — publish a recording from a running simulator. scene
|
|
2
4
|
// recordings carry their own content identity; --live-bundle adds the app
|
|
3
5
|
// bundle for interactive playback under the existing bundle identity.
|
|
@@ -7,44 +9,19 @@
|
|
|
7
9
|
// owner turns on Public link from the preview page's share menu. uploads
|
|
8
10
|
// require a signed-in desktop session or an api key so the share is
|
|
9
11
|
// associated with the user's account.
|
|
10
|
-
|
|
11
|
-
import { createHash, randomUUID } from 'crypto'
|
|
12
|
-
import { readFileSync, rmSync } from 'fs'
|
|
13
12
|
import { tmpdir } from 'os'
|
|
14
13
|
import path from 'path'
|
|
15
14
|
import { gzipSync, gunzipSync } from 'zlib'
|
|
16
15
|
import { readProfileTrace } from '@peach/globals/profile-trace'
|
|
17
16
|
import { toProfileFile, type ProfileFile } from '@peach/globals/profiler'
|
|
18
|
-
import { resolveAppFontsWire } from 'peach-engine/engine/config-plugin-fonts'
|
|
19
|
-
import { shouldCompress } from 'peach-engine/preview/compress'
|
|
20
|
-
import { brotliBundle } from 'peach-engine/preview/compress-node'
|
|
21
|
-
import {
|
|
22
|
-
canonicalPublicPreviewOrigin,
|
|
23
|
-
runPresignedUpload,
|
|
24
|
-
type InitRequestBody,
|
|
25
|
-
} from 'peach-engine/preview/presigned-upload'
|
|
26
|
-
import {
|
|
27
|
-
hasShareableStorage,
|
|
28
|
-
type ShareableStorageSnapshot,
|
|
29
|
-
} from 'peach-engine/preview/storage-snapshot-contract'
|
|
30
|
-
import {
|
|
31
|
-
TRACE_CAPTURE_POSTROLL_MS,
|
|
32
|
-
TRACE_CAPTURE_PREROLL_MS,
|
|
33
|
-
isTraceTimelineEvent,
|
|
34
|
-
parseTraceTimelineJsonl,
|
|
35
|
-
} from 'peach-engine/preview/trace'
|
|
36
|
-
import {
|
|
37
|
-
mergeProfileTimeline,
|
|
38
|
-
profileFrameSummary,
|
|
39
|
-
} from 'peach-engine/profiler/profile-trace'
|
|
40
|
-
import { readSceneRecordingUpload } from 'peach-engine/remote-stream/scene-recording'
|
|
41
|
-
import {
|
|
42
|
-
resolvedExpoAppIconUrl,
|
|
43
|
-
expoConfigFromManifest,
|
|
44
|
-
} from '../../../peach-engine/src/engine/expo-manifest'
|
|
45
17
|
import { loopbackOriginOf } from '../../src/backend-origin'
|
|
18
|
+
import { getCliRuntime } from '../../src/cli-runtime.ts'
|
|
46
19
|
import { parseExpoManifestBody } from '../../src/expo-manifest-body'
|
|
47
20
|
import { rnxPublicBrand } from '../../src/public-brand'
|
|
21
|
+
import {
|
|
22
|
+
hasShareableStorage,
|
|
23
|
+
ShareableStorageSnapshot,
|
|
24
|
+
} from '../../src/storageSnapshotContract.ts'
|
|
48
25
|
import { fetchAppFontFiles } from '../app-fonts'
|
|
49
26
|
import { fetchAppSplashImages } from '../app-splash'
|
|
50
27
|
import { authHeaderValue, githubUploadIdentity, resolveCliAuth } from '../auth'
|
|
@@ -59,8 +36,9 @@ import {
|
|
|
59
36
|
evalInBridge,
|
|
60
37
|
parseBridgeCliArgs,
|
|
61
38
|
} from '../ws-bridge'
|
|
39
|
+
import type { BundleSnapshot } from '#peach-cli-contract/preview/capture-bundle'
|
|
40
|
+
import type { InitRequestBody } from '#peach-cli-contract/preview/presigned-upload'
|
|
62
41
|
import type { SootSimTimelineEvent } from '@peach/globals'
|
|
63
|
-
import type { BundleSnapshot } from 'peach-engine/preview/capture-bundle'
|
|
64
42
|
|
|
65
43
|
interface UploadOptions {
|
|
66
44
|
port?: number
|
|
@@ -375,9 +353,13 @@ function traceTimelineQuery(args: {
|
|
|
375
353
|
}): { since?: number; until?: number; limit: number } {
|
|
376
354
|
if (args.recordedDurationMs && args.recordingStartedAtMs) {
|
|
377
355
|
return {
|
|
378
|
-
since:
|
|
356
|
+
since:
|
|
357
|
+
args.recordingStartedAtMs -
|
|
358
|
+
getCliRuntime().preview_trace.TRACE_CAPTURE_PREROLL_MS,
|
|
379
359
|
until:
|
|
380
|
-
args.recordingStartedAtMs +
|
|
360
|
+
args.recordingStartedAtMs +
|
|
361
|
+
args.recordedDurationMs +
|
|
362
|
+
getCliRuntime().preview_trace.TRACE_CAPTURE_POSTROLL_MS,
|
|
381
363
|
limit: 2000,
|
|
382
364
|
}
|
|
383
365
|
}
|
|
@@ -388,7 +370,7 @@ function readTraceTimelineEventsFile(filePath: string): SootSimTimelineEvent[] {
|
|
|
388
370
|
const bytes = readFileSync(filePath)
|
|
389
371
|
const isGzip = bytes[0] === 0x1f && bytes[1] === 0x8b
|
|
390
372
|
const text = (isGzip ? gunzipSync(bytes) : bytes).toString('utf8')
|
|
391
|
-
return parseTraceTimelineJsonl(text)
|
|
373
|
+
return getCliRuntime().preview_trace.parseTraceTimelineJsonl(text)
|
|
392
374
|
}
|
|
393
375
|
|
|
394
376
|
async function readTraceProfileFile(filePath: string): Promise<ProfileFile> {
|
|
@@ -693,14 +675,17 @@ export async function runUpload(
|
|
|
693
675
|
: []
|
|
694
676
|
traceTimelineEvents = [
|
|
695
677
|
...traceTimelineEvents,
|
|
696
|
-
...timelineEvents.filter(isTraceTimelineEvent),
|
|
678
|
+
...timelineEvents.filter(getCliRuntime().preview_trace.isTraceTimelineEvent),
|
|
697
679
|
].sort((a, b) => a.t - b.t || a.seq - b.seq)
|
|
698
680
|
} finally {
|
|
699
681
|
bridge.close()
|
|
700
682
|
}
|
|
701
683
|
|
|
702
684
|
if (traceProfile)
|
|
703
|
-
traceTimelineEvents = mergeProfileTimeline(
|
|
685
|
+
traceTimelineEvents = getCliRuntime().profiler_profile_trace.mergeProfileTimeline(
|
|
686
|
+
traceTimelineEvents,
|
|
687
|
+
traceProfile,
|
|
688
|
+
)
|
|
704
689
|
|
|
705
690
|
if (!snapshot) {
|
|
706
691
|
console.error(
|
|
@@ -881,7 +866,10 @@ export async function runUpload(
|
|
|
881
866
|
let sceneStream: InitRequestBody['sceneStream']
|
|
882
867
|
if (scenePath) {
|
|
883
868
|
sceneBytes = readFileSync(scenePath)
|
|
884
|
-
const { header, slot } =
|
|
869
|
+
const { header, slot } =
|
|
870
|
+
await getCliRuntime().remote_stream_scene_recording.readSceneRecordingUpload(
|
|
871
|
+
sceneBytes,
|
|
872
|
+
)
|
|
885
873
|
sceneStream = slot
|
|
886
874
|
console.log(
|
|
887
875
|
` attaching scene stream: ${(sceneBytes.byteLength / 1024).toFixed(1)} KiB, ${header.frameCount} frames over ${Math.round(header.durationMs)}ms`,
|
|
@@ -949,7 +937,7 @@ export async function runUpload(
|
|
|
949
937
|
responseHeaders?: Array<{ name: string; value: string }>,
|
|
950
938
|
requestVaryHash?: string,
|
|
951
939
|
): PreparedFile => {
|
|
952
|
-
const compress = shouldCompress(contentType)
|
|
940
|
+
const compress = getCliRuntime().preview_compress.shouldCompress(contentType)
|
|
953
941
|
const bytes = compress ? gzipSync(raw) : raw
|
|
954
942
|
return {
|
|
955
943
|
url,
|
|
@@ -972,7 +960,10 @@ export async function runUpload(
|
|
|
972
960
|
// pipelines store identical bytes keyed by sha256(url).
|
|
973
961
|
const appFontFiles: PreparedFile[] = []
|
|
974
962
|
const appFontsWire = hasBundle
|
|
975
|
-
? await resolveAppFontsWire(
|
|
963
|
+
? await getCliRuntime().engine_config_plugin_fonts.resolveAppFontsWire(
|
|
964
|
+
appFontsWireFromPageHref(snapshot.pageHref),
|
|
965
|
+
fetch,
|
|
966
|
+
)
|
|
976
967
|
: ''
|
|
977
968
|
if (appFontsWire) {
|
|
978
969
|
const fonts = await fetchAppFontFiles(appFontsWire, {
|
|
@@ -1043,7 +1034,7 @@ export async function runUpload(
|
|
|
1043
1034
|
})
|
|
1044
1035
|
if (response.ok && !response.headers.get('content-type')?.includes('html')) {
|
|
1045
1036
|
const manifest: unknown = parseExpoManifestBody(await response.text())
|
|
1046
|
-
const config = expoConfigFromManifest(manifest)
|
|
1037
|
+
const config = getCliRuntime().engine_expo_manifest.expoConfigFromManifest(manifest)
|
|
1047
1038
|
if (config) {
|
|
1048
1039
|
appManifest = manifestUrl
|
|
1049
1040
|
appIdentityFiles.push(
|
|
@@ -1056,7 +1047,11 @@ export async function runUpload(
|
|
|
1056
1047
|
'application/json',
|
|
1057
1048
|
),
|
|
1058
1049
|
)
|
|
1059
|
-
const iconUrl = resolvedExpoAppIconUrl(
|
|
1050
|
+
const iconUrl = getCliRuntime().engine_expo_manifest.resolvedExpoAppIconUrl(
|
|
1051
|
+
config,
|
|
1052
|
+
platform,
|
|
1053
|
+
snapshot.bundleUrl,
|
|
1054
|
+
)
|
|
1060
1055
|
if (iconUrl) {
|
|
1061
1056
|
try {
|
|
1062
1057
|
const icon = await fetch(iconUrl, { signal: AbortSignal.timeout(30_000) })
|
|
@@ -1116,7 +1111,9 @@ export async function runUpload(
|
|
|
1116
1111
|
// brotli source bytes for the upload. finalize verifies the source hash,
|
|
1117
1112
|
// minifies in the node build container, and stores one canonical brotli
|
|
1118
1113
|
// bundle. assets stay gzip below.
|
|
1119
|
-
const bundleBr = bundleBytes
|
|
1114
|
+
const bundleBr = bundleBytes
|
|
1115
|
+
? getCliRuntime().preview_compress_node.brotliBundle(bundleBytes)
|
|
1116
|
+
: undefined
|
|
1120
1117
|
const identityBytes = bundleBytes ?? sceneBytes
|
|
1121
1118
|
if (!identityBytes) throw new Error('upload requires a bundle or scene recording')
|
|
1122
1119
|
const contentHash = createHash('sha256').update(identityBytes).digest('hex')
|
|
@@ -1181,7 +1178,9 @@ export async function runUpload(
|
|
|
1181
1178
|
storage: storageGz
|
|
1182
1179
|
? { sizeBytes: storageGz.byteLength, encoding: 'gzip' }
|
|
1183
1180
|
: undefined,
|
|
1184
|
-
traceFrameStats: traceProfile
|
|
1181
|
+
traceFrameStats: traceProfile
|
|
1182
|
+
? getCliRuntime().profiler_profile_trace.profileFrameSummary(traceProfile)
|
|
1183
|
+
: undefined,
|
|
1185
1184
|
recordedDurationMs,
|
|
1186
1185
|
recordingStartedAtMs,
|
|
1187
1186
|
capture,
|
|
@@ -1250,7 +1249,7 @@ export async function runUpload(
|
|
|
1250
1249
|
|
|
1251
1250
|
let finalize
|
|
1252
1251
|
try {
|
|
1253
|
-
const result = await runPresignedUpload({
|
|
1252
|
+
const result = await getCliRuntime().preview_presigned_upload.runPresignedUpload({
|
|
1254
1253
|
originBase: origin,
|
|
1255
1254
|
initBody,
|
|
1256
1255
|
bundleBytes: bundleBr,
|
|
@@ -1308,7 +1307,7 @@ export async function runUpload(
|
|
|
1308
1307
|
peachExit(1, message)
|
|
1309
1308
|
}
|
|
1310
1309
|
|
|
1311
|
-
const previewUrl = `${canonicalPublicPreviewOrigin(publicOrigin)}${finalize.url}`
|
|
1310
|
+
const previewUrl = `${getCliRuntime().preview_presigned_upload.canonicalPublicPreviewOrigin(publicOrigin)}${finalize.url}`
|
|
1312
1311
|
console.log(`\n stored ${finalize.filesStored ?? 0} extra files`)
|
|
1313
1312
|
console.log(` preview: ${previewUrl}`)
|
|
1314
1313
|
|
package/cli/current-sim.ts
CHANGED
|
@@ -191,6 +191,7 @@ export function readCurrentTarget(): LocalCurrentTarget | null {
|
|
|
191
191
|
rmSync(filepath, { force: true })
|
|
192
192
|
return null
|
|
193
193
|
}
|
|
194
|
+
if (Reflect.get(parsed, 'pendingOpen') === true) return null
|
|
194
195
|
const version = Reflect.get(parsed, 'version')
|
|
195
196
|
const plane = Reflect.get(parsed, 'plane')
|
|
196
197
|
const simId = Reflect.get(parsed, 'simId')
|
|
@@ -241,3 +242,40 @@ export function saveCurrentSimId(simId: string) {
|
|
|
241
242
|
export function clearCurrentSimId() {
|
|
242
243
|
rmSync(getCurrentSimPath(), { force: true })
|
|
243
244
|
}
|
|
245
|
+
|
|
246
|
+
// `peach open` has started choosing a new target and none is pinned yet. the
|
|
247
|
+
// mark holds until a successful open/use pins a sim or the pin is cleared, so
|
|
248
|
+
// a failed open cannot hand later mutating commands to whichever other tab the
|
|
249
|
+
// bridge happens to hold.
|
|
250
|
+
export function markOpenPending() {
|
|
251
|
+
writeSecureJsonAtomic(getCurrentSimPath(), {
|
|
252
|
+
version: CURRENT_SIM_VERSION,
|
|
253
|
+
plane: 'local',
|
|
254
|
+
pendingOpen: true,
|
|
255
|
+
updatedAt: new Date().toISOString(),
|
|
256
|
+
})
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// refuses a command that would choose its own sim while an open is pending.
|
|
260
|
+
// callers pass it only for commands with no sim the user named.
|
|
261
|
+
export function assertNoPendingOpen() {
|
|
262
|
+
if (!isOpenPending()) return
|
|
263
|
+
throw new Error(
|
|
264
|
+
'the last `peach open` did not pin a sim, so this command would land on whichever tab is connected. run `peach open` again, `peach use <sim>`, or pass --sim <id>',
|
|
265
|
+
)
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
function isOpenPending(): boolean {
|
|
269
|
+
const filepath = getCurrentSimPath()
|
|
270
|
+
if (!existsSync(filepath)) return false
|
|
271
|
+
try {
|
|
272
|
+
const parsed: unknown = JSON.parse(readFileSync(filepath, 'utf8'))
|
|
273
|
+
return (
|
|
274
|
+
parsed !== null &&
|
|
275
|
+
typeof parsed === 'object' &&
|
|
276
|
+
Reflect.get(parsed, 'pendingOpen') === true
|
|
277
|
+
)
|
|
278
|
+
} catch {
|
|
279
|
+
return false
|
|
280
|
+
}
|
|
281
|
+
}
|
package/cli/desktop-companion.ts
CHANGED
|
@@ -134,12 +134,15 @@ function retiredElectronApps(): string[] {
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
// existing Electron apps stay on disk; CLI users receive the migration once.
|
|
137
|
-
// the notice names those apps and does not reject a native host beside them
|
|
137
|
+
// the notice names those apps and does not reject a native host beside them;
|
|
138
|
+
// it recommends installing only when no native host is selected and present.
|
|
138
139
|
export function notifyDesktopMigration(): void {
|
|
139
140
|
if (process.platform !== 'darwin' && process.platform !== 'linux') return
|
|
140
141
|
const legacy = retiredElectronApps()
|
|
141
142
|
const marker = join(rnxHomeDir(), 'electron-native-migration')
|
|
142
143
|
if (legacy.length === 0 || existsSync(marker)) return
|
|
144
|
+
const nativeApp = nativeDesktopOverrideError() ? null : getNativeDesktopAppPath()
|
|
145
|
+
const nativeReady = nativeApp !== null && existsSync(nativeExecutable(nativeApp))
|
|
143
146
|
mkdirSync(rnxHomeDir(), { recursive: true })
|
|
144
147
|
try {
|
|
145
148
|
writeFileSync(marker, '', { flag: 'wx' })
|
|
@@ -148,7 +151,10 @@ export function notifyDesktopMigration(): void {
|
|
|
148
151
|
throw error
|
|
149
152
|
}
|
|
150
153
|
console.error(
|
|
151
|
-
` Electron has retired on Mac and Linux (${legacy.join(', ')}).
|
|
154
|
+
` Electron has retired on Mac and Linux (${legacy.join(', ')}). ` +
|
|
155
|
+
(nativeReady
|
|
156
|
+
? `The native app at ${nativeApp} is in use.`
|
|
157
|
+
: 'Install the native app: peach desktop install'),
|
|
152
158
|
)
|
|
153
159
|
}
|
|
154
160
|
|
|
@@ -198,7 +204,21 @@ export function nativeDesktopIsDefault(): boolean {
|
|
|
198
204
|
)
|
|
199
205
|
}
|
|
200
206
|
|
|
207
|
+
// why PEACH_DESKTOP_APP cannot select a host; launch rejects it, the installer
|
|
208
|
+
// and the migration notice do not use it
|
|
209
|
+
function nativeDesktopOverrideError(): string | null {
|
|
210
|
+
const explicitApp = process.env.PEACH_DESKTOP_APP
|
|
211
|
+
if (!explicitApp) return null
|
|
212
|
+
if (process.platform === 'darwin' && !explicitApp.endsWith('.app'))
|
|
213
|
+
return 'PEACH_DESKTOP_APP must name a Mac .app bundle'
|
|
214
|
+
if (process.platform !== 'darwin' && process.platform !== 'linux')
|
|
215
|
+
return 'native desktop requires macOS or Linux'
|
|
216
|
+
return null
|
|
217
|
+
}
|
|
218
|
+
|
|
201
219
|
export function getNativeDesktopAppPath(): string | null {
|
|
220
|
+
const overrideError = nativeDesktopOverrideError()
|
|
221
|
+
if (overrideError) throw new Error(overrideError)
|
|
202
222
|
const explicitApp = process.env.PEACH_DESKTOP_APP
|
|
203
223
|
if (!explicitApp)
|
|
204
224
|
return process.platform === 'linux'
|
|
@@ -206,18 +226,20 @@ export function getNativeDesktopAppPath(): string | null {
|
|
|
206
226
|
? '/usr/bin/peach-desktop'
|
|
207
227
|
: null
|
|
208
228
|
: activeDesktopHostApp()
|
|
209
|
-
if (process.platform === 'darwin' && !explicitApp.endsWith('.app'))
|
|
210
|
-
throw new Error('PEACH_DESKTOP_APP must name a Mac .app bundle')
|
|
211
|
-
if (process.platform !== 'darwin' && process.platform !== 'linux')
|
|
212
|
-
throw new Error('native desktop requires macOS or Linux')
|
|
213
229
|
return resolve(explicitApp)
|
|
214
230
|
}
|
|
215
231
|
|
|
232
|
+
function nativeExecutable(appPath: string): string {
|
|
233
|
+
return process.platform === 'darwin'
|
|
234
|
+
? join(appPath, 'Contents/MacOS/PeachDesktop')
|
|
235
|
+
: appPath
|
|
236
|
+
}
|
|
237
|
+
|
|
216
238
|
function findNativeDesktopCompanion(): DesktopCompanionInstall | null {
|
|
217
239
|
const appPath = getNativeDesktopAppPath()
|
|
218
240
|
if (!appPath) return null
|
|
219
241
|
const mac = process.platform === 'darwin'
|
|
220
|
-
if (!existsSync(
|
|
242
|
+
if (!existsSync(nativeExecutable(appPath))) {
|
|
221
243
|
throw new Error(
|
|
222
244
|
`native desktop executable missing in ${appPath}${mac ? ' (run `peach desktop install --native --force`)' : ''}`,
|
|
223
245
|
)
|
|
@@ -394,6 +416,7 @@ export async function launchDesktopCompanion(
|
|
|
394
416
|
if (opts.ownerPid && opts.ownerPid > 1) extraArgs.push(`--owner-pid=${opts.ownerPid}`)
|
|
395
417
|
|
|
396
418
|
if (install.kind === 'native-mac-app') {
|
|
419
|
+
const explicitApp = Boolean(process.env.PEACH_DESKTOP_APP)
|
|
397
420
|
const launchUrl =
|
|
398
421
|
url ||
|
|
399
422
|
opts.profileId ||
|
|
@@ -404,6 +427,7 @@ export async function launchDesktopCompanion(
|
|
|
404
427
|
? buildMacLaunchUrl(url, opts, true)
|
|
405
428
|
: ''
|
|
406
429
|
if (
|
|
430
|
+
!explicitApp &&
|
|
407
431
|
opts.bridgePort &&
|
|
408
432
|
launchUrl &&
|
|
409
433
|
(await openInConnectedMacApp(opts.bridgePort, launchUrl))
|
|
@@ -413,7 +437,11 @@ export async function launchDesktopCompanion(
|
|
|
413
437
|
// `open -n -a` spawns an instance bound to this caller's PEACH_HOME and
|
|
414
438
|
// bridge port rather than handing the URL to another session's running
|
|
415
439
|
// PeachDesktop process; subsequent opens on the same bridge reuse that
|
|
416
|
-
// instance via openInConnectedMacApp above.
|
|
440
|
+
// instance via openInConnectedMacApp above unless a build is explicitly selected.
|
|
441
|
+
// a connected host cannot establish the selected build or its launch preferences.
|
|
442
|
+
if (explicitApp) {
|
|
443
|
+
extraArgs.push('-SUEnableAutomaticChecks', 'NO', '-SUAutomaticallyUpdate', 'NO')
|
|
444
|
+
}
|
|
417
445
|
extraArgs.push('--no-personal-home')
|
|
418
446
|
// a CLI launch builds its windows from its own args: skip appkit's restore of a prior
|
|
419
447
|
// crashed session, whose reopen alert blocks boot, without clearing the saved state
|
package/cli/device-option.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { devices, listSelectableDeviceModels } from '
|
|
1
|
+
import { devices, listSelectableDeviceModels } from '../src/device-catalog.ts'
|
|
2
2
|
|
|
3
3
|
export function validateDeviceOption(device: string | undefined): boolean {
|
|
4
4
|
if (!device || device in devices) return true
|
|
@@ -274,6 +274,7 @@ async function launch(opts: DriverLaunchOptions): Promise<DriverLaunchResult> {
|
|
|
274
274
|
launched: true,
|
|
275
275
|
message: `playwright ${hostCommand ? 'native host' : 'Chromium'} launched → ${targetUrl.href}${ownerNote}`,
|
|
276
276
|
pid: child.pid,
|
|
277
|
+
process: child,
|
|
277
278
|
target: resolved.spec,
|
|
278
279
|
attachUrl: targetUrl.href,
|
|
279
280
|
connectAckFile,
|
package/cli/drivers/types.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// playwright-owned profile. desktop launches the native host; electron the
|
|
3
3
|
// Electron companion.
|
|
4
4
|
|
|
5
|
+
import type { ChildProcess } from 'node:child_process'
|
|
6
|
+
|
|
5
7
|
export type DriverId = 'desktop' | 'electron' | 'playwright'
|
|
6
8
|
|
|
7
9
|
// broad category for grouping / filtering. "native" is a desktop host;
|
|
@@ -85,6 +87,8 @@ export interface DriverLaunchResult {
|
|
|
85
87
|
// expose what makes sense for its environment. pid for spawned processes,
|
|
86
88
|
// `target` for an install path, `attachUrl` for automation drivers.
|
|
87
89
|
pid?: number
|
|
90
|
+
// the spawned handle, for drivers whose process tree the caller must stop.
|
|
91
|
+
process?: ChildProcess
|
|
88
92
|
target?: string
|
|
89
93
|
attachUrl?: string
|
|
90
94
|
connectAckFile?: string
|
package/cli/help-core.ts
CHANGED
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
renderCliGroupHelp,
|
|
5
5
|
renderCliIndexHelp,
|
|
6
6
|
} from '@peach/skills/cli/renderers'
|
|
7
|
-
import { formatFlagHelp } from 'peach-engine/settings/cli-flags'
|
|
8
7
|
import {
|
|
9
8
|
DEFAULT_SOOTSIM_BRIDGE_PORT,
|
|
10
9
|
DEFAULT_SOOTSIM_BRIDGE_URL,
|
|
11
10
|
} from '../src/bridge-constants'
|
|
11
|
+
import { formatFlagHelp } from '../src/settings-flags.ts'
|
|
12
12
|
import {
|
|
13
13
|
getRnxCommandAvailability,
|
|
14
14
|
getRnxFirstPositional,
|
package/cli/internal-child.ts
CHANGED
|
@@ -195,7 +195,8 @@ export async function runScript(scriptPath: string, args: string[]): Promise<voi
|
|
|
195
195
|
* an absolute path the driver hands it in the environment, launches chrome,
|
|
196
196
|
* and keeps this process alive until the browser goes away. */
|
|
197
197
|
async function playwrightHost(): Promise<void> {
|
|
198
|
-
const {
|
|
198
|
+
const { getCliRuntime } = await import('../src/cli-runtime')
|
|
199
|
+
const { PLAYWRIGHT_SIM_HOST } = getCliRuntime().playwright_sim_host
|
|
199
200
|
const run: unknown = vm.runInThisContext(
|
|
200
201
|
`(function(require){${PLAYWRIGHT_SIM_HOST}\n})`,
|
|
201
202
|
{ filename: 'rnx-playwright-host.js' },
|
package/cli/main.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { Console } from 'node:console'
|
|
1
2
|
// the peach CLI proper: argv parsing, the one-time privacy choice, and the
|
|
2
3
|
// single lazy-imported command a run dispatches to. `./bin` imports this only
|
|
3
4
|
// when none of its hidden entry points claimed the process.
|
|
4
|
-
|
|
5
|
-
import { Console } from 'node:console'
|
|
6
5
|
import { automaticPeachUpdatesEnabled } from '../src/automatic-update-policy'
|
|
6
|
+
import { getCliRuntime } from '../src/cli-runtime.ts'
|
|
7
7
|
import { exitWithFlushedOutput } from '../src/process-output'
|
|
8
8
|
import { rnxPublicBrand } from '../src/public-brand'
|
|
9
9
|
import { levenshtein } from './levenshtein'
|
|
@@ -330,7 +330,7 @@ if (theme && theme !== 'light' && theme !== 'dark' && theme !== 'auto') {
|
|
|
330
330
|
|
|
331
331
|
// apply device/theme to settings store if provided
|
|
332
332
|
if (device || theme) {
|
|
333
|
-
const { settingsStore } = await
|
|
333
|
+
const { settingsStore } = await Promise.resolve(getCliRuntime().settings_store)
|
|
334
334
|
const overrides: Record<string, any> = {}
|
|
335
335
|
if (device) overrides.deviceModel = device
|
|
336
336
|
if (theme) overrides.colorScheme = theme
|
|
@@ -708,6 +708,12 @@ try {
|
|
|
708
708
|
break
|
|
709
709
|
}
|
|
710
710
|
|
|
711
|
+
case 'coverage': {
|
|
712
|
+
const { runCoverage } = await import('./commands/coverage')
|
|
713
|
+
process.exitCode = await runCoverage(parsed.commandArgs)
|
|
714
|
+
break
|
|
715
|
+
}
|
|
716
|
+
|
|
711
717
|
case 'project-report': {
|
|
712
718
|
const { runProjectReport } = await import('./commands/project-report')
|
|
713
719
|
await exitWithFlush(runProjectReport(parsed.commandArgs))
|
|
@@ -216,6 +216,14 @@ export const OUTBOUND_ENDPOINTS: Record<string, OutboundEndpointDeclaration> = {
|
|
|
216
216
|
payload:
|
|
217
217
|
'HTTP GET of a pinned, sha256-checked toolchain file; fires only when the user builds a Kotlin app and the file is not cached',
|
|
218
218
|
},
|
|
219
|
+
coverage_parser_download: {
|
|
220
|
+
category: 'explicit-user-action',
|
|
221
|
+
destination:
|
|
222
|
+
'https://registry.npmjs.org/@typescript/typescript-<platform>/-/ pinned parser tarball',
|
|
223
|
+
preConsent: false,
|
|
224
|
+
payload:
|
|
225
|
+
'HTTP GET of the pinned, sha512-checked native parser when peach coverage has no matching installed or cached parser; version, platform and architecture only, with no source or project data',
|
|
226
|
+
},
|
|
219
227
|
linux_browser_libs_download: {
|
|
220
228
|
category: 'runtime-delivery',
|
|
221
229
|
destination:
|
|
@@ -658,7 +666,7 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
|
|
|
658
666
|
},
|
|
659
667
|
"packages/peach-engine/src/settings/persistence.ts :: fetch :: '/__sootsim/shared-config'":
|
|
660
668
|
{ category: 'same_origin_runtime', count: 1 },
|
|
661
|
-
'packages/peachsim/
|
|
669
|
+
'packages/peachsim/src/metro-project-root.ts :: fetch :: `${origin}/`': {
|
|
662
670
|
category: 'local_development',
|
|
663
671
|
count: 1,
|
|
664
672
|
},
|
|
@@ -791,7 +799,7 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
|
|
|
791
799
|
},
|
|
792
800
|
'packages/peach-engine/src/components/native-ui/ShareSheetView.tsx :: fetch-alias :: `/__fetch-proxy?url=${encodeURIComponent()}`':
|
|
793
801
|
{ category: 'guest_app_network', count: 1 },
|
|
794
|
-
'packages/peachsim/src/dev-bundle-resolution.ts :: fetch ::
|
|
802
|
+
'packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: `${pageOrigin}/__fetch-proxy?url=${encodeURIComponent()}`':
|
|
795
803
|
{ category: 'guest_app_network', count: 1 },
|
|
796
804
|
'packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: targetUrl': {
|
|
797
805
|
category: 'guest_app_network',
|
|
@@ -839,7 +847,7 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
|
|
|
839
847
|
category: 'guest_app_network',
|
|
840
848
|
count: 1,
|
|
841
849
|
},
|
|
842
|
-
'packages/peachsim/
|
|
850
|
+
'packages/peachsim/src/metro-project-root.ts :: fetch :: `${origin}/status`': {
|
|
843
851
|
category: 'local_development',
|
|
844
852
|
count: 1,
|
|
845
853
|
},
|
package/cli/output-redaction.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import { createHash } from 'node:crypto'
|
|
7
7
|
import { format, inspect } from 'node:util'
|
|
8
|
+
import { PEACH_CONFIG_QUERY_PARAM } from '../src/config'
|
|
8
9
|
|
|
9
10
|
// the commands that print only through this process's console and streams.
|
|
10
11
|
// anything else may hand its output to a child process, which no wrapper here
|
|
@@ -45,7 +46,7 @@ const PAIR = new RegExp(
|
|
|
45
46
|
'g',
|
|
46
47
|
)
|
|
47
48
|
const STRING_TOKEN = new RegExp(STRING, 'g')
|
|
48
|
-
const QUERY_PAIR = /([?&;]([\w.%-]+)=)([^&#\s"']+)/g
|
|
49
|
+
const QUERY_PAIR = /([?&;]([\w.%-]+)=)([^&#\s"'\\]+)/g
|
|
49
50
|
const HEADER_LINE = /^(\s*([\w-]+)\s*:\s+)(\S.*)$/gm
|
|
50
51
|
const MASKED = /^<redacted:[0-9a-f]{4}>$/
|
|
51
52
|
|
|
@@ -63,10 +64,10 @@ function maskQuoted(quoted: string): string {
|
|
|
63
64
|
// a string can carry a document of its own: json escaped inside a json string,
|
|
64
65
|
// or json inside a js string. its decoded contents are redacted and encoded
|
|
65
66
|
// back the same way; each level is shorter, so this ends.
|
|
66
|
-
function redactString(quoted: string): string {
|
|
67
|
+
function redactString(quoted: string, configurationOnly: boolean): string {
|
|
67
68
|
if (quoted.startsWith("'")) {
|
|
68
69
|
const inner = quoted.slice(1, -1)
|
|
69
|
-
const redacted =
|
|
70
|
+
const redacted = redactText(inner, configurationOnly)
|
|
70
71
|
return redacted === inner ? quoted : `'${redacted}'`
|
|
71
72
|
}
|
|
72
73
|
let decoded: string
|
|
@@ -75,7 +76,7 @@ function redactString(quoted: string): string {
|
|
|
75
76
|
} catch {
|
|
76
77
|
decoded = quoted.slice(1, -1).replace(/\\(["\\/])/g, '$1')
|
|
77
78
|
}
|
|
78
|
-
const redacted =
|
|
79
|
+
const redacted = redactText(decoded, configurationOnly)
|
|
79
80
|
return redacted === decoded ? quoted : JSON.stringify(redacted)
|
|
80
81
|
}
|
|
81
82
|
|
|
@@ -95,33 +96,57 @@ function redactPair(
|
|
|
95
96
|
quotedName: string | undefined,
|
|
96
97
|
bareName: string,
|
|
97
98
|
value: string,
|
|
99
|
+
configurationOnly: boolean,
|
|
98
100
|
): string {
|
|
99
|
-
|
|
101
|
+
const name = quotedName ?? bareName
|
|
102
|
+
if (name === PEACH_CONFIG_QUERY_PARAM) return `${prefix}"[redacted]"`
|
|
103
|
+
if (configurationOnly || !SECRET_NAME.test(name)) {
|
|
100
104
|
if (!/^["'[]/.test(value)) return pair
|
|
101
105
|
const inner = value.startsWith('[')
|
|
102
|
-
? value.replace(STRING_TOKEN, redactString)
|
|
103
|
-
: redactString(value)
|
|
106
|
+
? value.replace(STRING_TOKEN, (quoted) => redactString(quoted, configurationOnly))
|
|
107
|
+
: redactString(value, configurationOnly)
|
|
104
108
|
return inner === value ? pair : `${prefix}${inner}`
|
|
105
109
|
}
|
|
106
110
|
if (value.startsWith('[')) return `${prefix}${value.replace(STRING_TOKEN, maskQuoted)}`
|
|
107
111
|
return `${prefix}${/^["']/.test(value) ? maskQuoted(value) : `"${mask(value)}"`}`
|
|
108
112
|
}
|
|
109
113
|
|
|
114
|
+
// configuration is always private, including arbitrary env names. share the
|
|
115
|
+
// string/query traversal with optional account redaction so nested encodings
|
|
116
|
+
// receive the same policy before persistence and when printing launch urls.
|
|
117
|
+
export function redactConfigurationForDiagnostics(text: string): string {
|
|
118
|
+
return redactText(text, true)
|
|
119
|
+
}
|
|
120
|
+
|
|
110
121
|
export function redactForSharing(text: string): string {
|
|
111
|
-
return text
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
122
|
+
return redactText(text, false)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function redactText(text: string, configurationOnly: boolean): string {
|
|
126
|
+
if (!configurationOnly) {
|
|
127
|
+
text = text
|
|
128
|
+
.replace(JWT, mask)
|
|
129
|
+
.replace(GOOGLE_API_KEY, mask)
|
|
130
|
+
.replace(BEARER, (match, scheme: string) => `${scheme} ${mask(match)}`)
|
|
131
|
+
}
|
|
132
|
+
const redacted = text
|
|
133
|
+
.replace(PAIR, (pair, prefix, quotedName, bareName, value) =>
|
|
134
|
+
redactPair(pair, prefix, quotedName, bareName, value, configurationOnly),
|
|
135
|
+
)
|
|
116
136
|
.replace(QUERY_PAIR, (pair, prefix: string, name: string, value: string) => {
|
|
117
|
-
|
|
137
|
+
const decodedName = decodeOrSelf(name)
|
|
138
|
+
if (decodedName === PEACH_CONFIG_QUERY_PARAM) return `${prefix}%5Bredacted%5D`
|
|
139
|
+
if (!configurationOnly && SECRET_NAME.test(decodedName))
|
|
140
|
+
return `${prefix}${mask(value)}`
|
|
118
141
|
// a launch url can carry a whole config object, or another url with its
|
|
119
142
|
// own query, as one encoded value; each decode is shorter, so this ends.
|
|
120
143
|
if (!/%[0-9a-f]{2}/i.test(value)) return pair
|
|
121
144
|
const decoded = decodeOrSelf(value)
|
|
122
|
-
const redacted =
|
|
145
|
+
const redacted = redactText(decoded, configurationOnly)
|
|
123
146
|
return redacted === decoded ? pair : `${prefix}${encodeURIComponent(redacted)}`
|
|
124
147
|
})
|
|
148
|
+
if (configurationOnly) return redacted
|
|
149
|
+
return redacted
|
|
125
150
|
.replace(HEADER_LINE, (line, prefix: string, name: string, value: string) =>
|
|
126
151
|
SECRET_NAME.test(name) ? `${prefix}${mask(value)}` : line,
|
|
127
152
|
)
|
package/cli/remote-simulators.ts
CHANGED
|
@@ -106,7 +106,10 @@ export async function stopAccountRemoteSimulator(
|
|
|
106
106
|
})
|
|
107
107
|
await deleteCloudBox({
|
|
108
108
|
connectUrl: cloudBoxConnectUrl(reference.endpoint, reference.boxId),
|
|
109
|
-
|
|
109
|
+
authority: {
|
|
110
|
+
kind: 'account',
|
|
111
|
+
credential: account.authorization.replace(/^Bearer /, ''),
|
|
112
|
+
},
|
|
110
113
|
})
|
|
111
114
|
return { simId: sim.simId }
|
|
112
115
|
}
|
package/cli/scene-video.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { writeFile } from 'node:fs/promises'
|
|
2
2
|
import { createRequire } from 'node:module'
|
|
3
|
-
import { readSceneRecordingUpload } from 'peach-engine/remote-stream/scene-recording'
|
|
4
3
|
import { launchReapedChrome } from '../../../scripts/lib/reap-browser'
|
|
4
|
+
import { getCliRuntime } from '../src/cli-runtime.ts'
|
|
5
5
|
import {
|
|
6
6
|
ensurePlaywrightBrowser,
|
|
7
7
|
provisionPlaywright,
|
|
@@ -19,7 +19,10 @@ export async function renderSceneToVideo(options: {
|
|
|
19
19
|
renderTimeMs: number
|
|
20
20
|
sizeBytes: number
|
|
21
21
|
}> {
|
|
22
|
-
const { header } =
|
|
22
|
+
const { header } =
|
|
23
|
+
await getCliRuntime().remote_stream_scene_recording.readSceneRecordingUpload(
|
|
24
|
+
options.scene,
|
|
25
|
+
)
|
|
23
26
|
const resolved = await provisionPlaywright()
|
|
24
27
|
const installed = await ensurePlaywrightBrowser(resolved, true)
|
|
25
28
|
if (!installed.ok) throw new Error(installed.message)
|