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/detox/index.ts
CHANGED
|
@@ -13,24 +13,19 @@ import {
|
|
|
13
13
|
reserveChromiumAdmission,
|
|
14
14
|
type ChromiumLaunchAdmission,
|
|
15
15
|
} from '../../../scripts/lib/reap-browser'
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
MOTION_CHANGE_DEFINITION,
|
|
18
|
+
type DiscreteFrameCadence,
|
|
19
|
+
type MotionChangeDefinition,
|
|
20
|
+
} from '../../peach-conformance/src/cases/checkpoint-evidence.cjs'
|
|
21
|
+
import { getCliRuntime } from '../src/cli-runtime.ts'
|
|
17
22
|
import type {
|
|
18
23
|
LockstepInputReceipt,
|
|
19
24
|
LockstepScheduledInput,
|
|
20
25
|
SootSimLockstepFrameReceipt,
|
|
21
26
|
} from '@peach/globals'
|
|
22
27
|
export { reserveChromiumAdmission } from '../../../scripts/lib/reap-browser'
|
|
23
|
-
|
|
24
|
-
readBrowserCompositeCaptureRequest,
|
|
25
|
-
resolveBrowserCompositeCdpClip,
|
|
26
|
-
} from '../../peach-engine/src/capture/browser-composite'
|
|
27
|
-
import { WEBVIEW_HOST_BOOTSTRAP_SOURCE } from '../../peach-engine/src/components/native-ui/webview-frame-bridge'
|
|
28
|
-
import { isAppBootTargetUrl } from '../../peach-engine/src/render-worker/app-load'
|
|
29
|
-
import {
|
|
30
|
-
automateWebViewFrames,
|
|
31
|
-
webViewAutomationHelpers,
|
|
32
|
-
webViewAutomationNames,
|
|
33
|
-
} from '../../peach-engine/src/webview-automation-host'
|
|
28
|
+
|
|
34
29
|
import { waitForSootsimIdle as waitForRuntimeIdle } from '../cli/commands/inspect/settling'
|
|
35
30
|
import { createBridge } from '../cli/ws-bridge'
|
|
36
31
|
import { resolveSootsimBridgePortForHttpPort } from '../src/bridge-constants'
|
|
@@ -45,6 +40,7 @@ import {
|
|
|
45
40
|
isTextInputNodeFocused,
|
|
46
41
|
isNodeVisible,
|
|
47
42
|
} from './expectations'
|
|
43
|
+
import { frameTimingRoundingBound } from './frame-offset.mjs'
|
|
48
44
|
import {
|
|
49
45
|
dispatchTwoFingerGesture,
|
|
50
46
|
DETOX_PLATFORM,
|
|
@@ -57,13 +53,10 @@ import {
|
|
|
57
53
|
} from './gestures'
|
|
58
54
|
import { by, type Matcher } from './matchers'
|
|
59
55
|
import {
|
|
60
|
-
MOTION_CHANGE_DEFINITION,
|
|
61
56
|
measureMotionChange,
|
|
62
57
|
classifyDiscreteFrame,
|
|
63
|
-
type DiscreteFrameCadence,
|
|
64
58
|
type DiscreteFrameObservation,
|
|
65
59
|
type DiscreteFrameTrace,
|
|
66
|
-
type MotionChangeDefinition,
|
|
67
60
|
type MotionChangeMeasurement,
|
|
68
61
|
} from './motion-change.cjs'
|
|
69
62
|
import { describeSootsimBridgeFailure, navigateSootsimPage } from './navigation-lifecycle'
|
|
@@ -277,7 +270,8 @@ export async function waitForSootsimShellReady(
|
|
|
277
270
|
// shell first paint for home boots, compositor app-surface first paint for
|
|
278
271
|
// app boots.
|
|
279
272
|
// exported for the focused regression test.
|
|
280
|
-
const expectsInitialAppPaint =
|
|
273
|
+
const expectsInitialAppPaint =
|
|
274
|
+
getCliRuntime().render_worker_app_load.isAppBootTargetUrl(page.url())
|
|
281
275
|
try {
|
|
282
276
|
await page.evaluate(
|
|
283
277
|
async ({ timeoutMs, expectsInitialAppPaint }) => {
|
|
@@ -2027,23 +2021,28 @@ export const device = {
|
|
|
2027
2021
|
reapOwnedBrowser()
|
|
2028
2022
|
throw error
|
|
2029
2023
|
}
|
|
2030
|
-
await automateWebViewFrames(
|
|
2024
|
+
await getCliRuntime().webview_automation_host.automateWebViewFrames(
|
|
2031
2025
|
_context,
|
|
2032
|
-
webViewAutomationNames(
|
|
2026
|
+
getCliRuntime().webview_automation_host.webViewAutomationNames(
|
|
2033
2027
|
`peachwv${randomBytes(12).toString('hex')}`,
|
|
2034
|
-
|
|
2028
|
+
getCliRuntime().components_native_ui_webview_frame_bridge
|
|
2029
|
+
.WEBVIEW_HOST_BOOTSTRAP_SOURCE,
|
|
2035
2030
|
),
|
|
2036
|
-
webViewAutomationHelpers,
|
|
2031
|
+
getCliRuntime().webview_automation_host.webViewAutomationHelpers,
|
|
2037
2032
|
(page) => page.workers(),
|
|
2038
2033
|
)
|
|
2039
2034
|
await _context.exposeBinding('__sootsimHostCapture', async (source, value) => {
|
|
2040
|
-
const request =
|
|
2035
|
+
const request =
|
|
2036
|
+
getCliRuntime().capture_browser_composite.readBrowserCompositeCaptureRequest(
|
|
2037
|
+
value,
|
|
2038
|
+
)
|
|
2041
2039
|
const session = await source.page.context().newCDPSession(source.page)
|
|
2042
2040
|
try {
|
|
2043
|
-
const { clip, originX, originY } =
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2041
|
+
const { clip, originX, originY } =
|
|
2042
|
+
getCliRuntime().capture_browser_composite.resolveBrowserCompositeCdpClip(
|
|
2043
|
+
request,
|
|
2044
|
+
await session.send('Page.getLayoutMetrics'),
|
|
2045
|
+
)
|
|
2047
2046
|
const result = await session.send('Page.captureScreenshot', {
|
|
2048
2047
|
format: 'png',
|
|
2049
2048
|
fromSurface: true,
|
|
@@ -2064,7 +2063,7 @@ export const device = {
|
|
|
2064
2063
|
reapOwnedBrowser()
|
|
2065
2064
|
throw error
|
|
2066
2065
|
}
|
|
2067
|
-
await automateWebAuthenticationSessions(
|
|
2066
|
+
await getCliRuntime().web_authentication_automation_host.automateWebAuthenticationSessions(
|
|
2068
2067
|
_context!,
|
|
2069
2068
|
'__peachWebAuthenticationHost',
|
|
2070
2069
|
_page,
|
|
@@ -2310,6 +2309,7 @@ export const device = {
|
|
|
2310
2309
|
}
|
|
2311
2310
|
lockstepCapture: {
|
|
2312
2311
|
begin: (fps: number) => Promise<{
|
|
2312
|
+
framesForOffset: (offsetMs: number) => number
|
|
2313
2313
|
stepFrame: () => Promise<{ frameIndex: number; virtualTimestampMs: number }>
|
|
2314
2314
|
end: () => void
|
|
2315
2315
|
}>
|
|
@@ -2366,6 +2366,7 @@ export const device = {
|
|
|
2366
2366
|
let baseMs: number | null = null
|
|
2367
2367
|
let currentMs = 0
|
|
2368
2368
|
let anchorMs: number | null = null
|
|
2369
|
+
let anchorFrameIndex = 0
|
|
2369
2370
|
const stageFrames: DiscreteStageFrame[] = []
|
|
2370
2371
|
const observeTick = async () => {
|
|
2371
2372
|
const receipt = await controller.stepFrame()
|
|
@@ -2406,14 +2407,16 @@ export const device = {
|
|
|
2406
2407
|
anchorMs === null &&
|
|
2407
2408
|
classification.phase === cadence.entryFrame &&
|
|
2408
2409
|
rows[0].phase !== cadence.entryFrame
|
|
2409
|
-
)
|
|
2410
|
+
) {
|
|
2410
2411
|
anchorMs = currentMs
|
|
2412
|
+
anchorFrameIndex = rows.length - 1
|
|
2413
|
+
}
|
|
2411
2414
|
if (anchorMs !== null) {
|
|
2412
2415
|
const next = stages[stageFrames.length]
|
|
2413
2416
|
if (
|
|
2414
2417
|
next &&
|
|
2415
|
-
|
|
2416
|
-
|
|
2418
|
+
rows.length - 1 >=
|
|
2419
|
+
anchorFrameIndex + controller.framesForOffset(next.offsetMs)
|
|
2417
2420
|
) {
|
|
2418
2421
|
requestedPngs++
|
|
2419
2422
|
stageFrames.push({
|
|
@@ -2433,20 +2436,13 @@ export const device = {
|
|
|
2433
2436
|
step: async (durationMs) => {
|
|
2434
2437
|
if (!Number.isFinite(durationMs) || durationMs < 0)
|
|
2435
2438
|
throw new Error('peach discrete wait needs a nonnegative duration')
|
|
2436
|
-
const
|
|
2437
|
-
|
|
2438
|
-
|
|
2439
|
-
|
|
2440
|
-
|
|
2441
|
-
while (
|
|
2442
|
-
|
|
2443
|
-
(horizon !== null && end + 0.00001 >= horizon && currentMs < horizon)
|
|
2444
|
-
) {
|
|
2445
|
-
if (
|
|
2446
|
-
cadence.mode === 'playing' &&
|
|
2447
|
-
anchorMs !== null &&
|
|
2448
|
-
currentMs >= anchorMs + 1900
|
|
2449
|
-
) {
|
|
2439
|
+
const endFrame = rows.length - 1 + controller.framesForOffset(durationMs)
|
|
2440
|
+
const horizonFrame =
|
|
2441
|
+
cadence.mode === 'playing' && anchorMs !== null
|
|
2442
|
+
? anchorFrameIndex + controller.framesForOffset(1900)
|
|
2443
|
+
: null
|
|
2444
|
+
while (rows.length - 1 < endFrame) {
|
|
2445
|
+
if (horizonFrame !== null && rows.length - 1 >= horizonFrame) {
|
|
2450
2446
|
await new Promise((resolve) => setTimeout(resolve, 1000 / 60))
|
|
2451
2447
|
break
|
|
2452
2448
|
}
|
|
@@ -2601,6 +2597,8 @@ export const device = {
|
|
|
2601
2597
|
throw new Error('discrete capture missed requested stages')
|
|
2602
2598
|
const discreteTrace = await this.endProofFrameObservation()
|
|
2603
2599
|
ended = true
|
|
2600
|
+
const anchorFrame = discreteTrace.observations.find((row) => row.atMs === anchorMs)
|
|
2601
|
+
if (!anchorFrame) throw new Error('discrete capture has no observed anchor frame')
|
|
2604
2602
|
discreteTrace.triggerStartedAtMs = triggerStartMs
|
|
2605
2603
|
discreteTrace.triggerCompletedAtMs = triggerCompletedMs
|
|
2606
2604
|
discreteTrace.completedAtMs = Date.now()
|
|
@@ -2610,7 +2608,7 @@ export const device = {
|
|
|
2610
2608
|
triggerCompletedMs,
|
|
2611
2609
|
discreteTrace,
|
|
2612
2610
|
driveStart: {
|
|
2613
|
-
frameIndex:
|
|
2611
|
+
frameIndex: anchorFrame.frameIndex,
|
|
2614
2612
|
virtualTimestampMs: anchorMs,
|
|
2615
2613
|
},
|
|
2616
2614
|
anchors: [],
|
|
@@ -2668,6 +2666,9 @@ export const device = {
|
|
|
2668
2666
|
// delivers its release ('up') rather than from the first visible
|
|
2669
2667
|
// change, the delivered touch anchor the native lane uses.
|
|
2670
2668
|
anchorAtTouch?: 'down' | 'up'
|
|
2669
|
+
// a witnessed drag replays native delivered times and samples the
|
|
2670
|
+
// declared offsets directly, as the native lane does.
|
|
2671
|
+
witnessedDrag?: boolean
|
|
2671
2672
|
rootFrame?: { height: number; width: number; x: number; y: number } | null
|
|
2672
2673
|
settleMs?: number
|
|
2673
2674
|
trigger?: () => unknown
|
|
@@ -2704,7 +2705,7 @@ export const device = {
|
|
|
2704
2705
|
totalPixels: number
|
|
2705
2706
|
frameIndex: number
|
|
2706
2707
|
virtualTimestampMs: number
|
|
2707
|
-
}
|
|
2708
|
+
} | null
|
|
2708
2709
|
}> {
|
|
2709
2710
|
const page = getPage()
|
|
2710
2711
|
const token = `motion-${process.pid}-${Date.now()}-${Math.random()}`
|
|
@@ -2725,6 +2726,7 @@ export const device = {
|
|
|
2725
2726
|
}, WORKLET_FRAME_TRACE_LIMIT)
|
|
2726
2727
|
}
|
|
2727
2728
|
const capturePromise: Promise<{
|
|
2729
|
+
workletFirstDelivery: { first: number | null; initial: number } | null
|
|
2728
2730
|
inputReceipts: LockstepInputReceipt[]
|
|
2729
2731
|
anchors: Array<{
|
|
2730
2732
|
changedPixelPercent: number
|
|
@@ -2750,7 +2752,7 @@ export const device = {
|
|
|
2750
2752
|
minimumChangePercent: number
|
|
2751
2753
|
totalPixels: number
|
|
2752
2754
|
virtualTimestampMs: number
|
|
2753
|
-
}
|
|
2755
|
+
} | null
|
|
2754
2756
|
}> = page.evaluate(
|
|
2755
2757
|
async (input) => {
|
|
2756
2758
|
type CaptureWindow = Window & {
|
|
@@ -2975,7 +2977,13 @@ export const device = {
|
|
|
2975
2977
|
heldInput.catch(() => {})
|
|
2976
2978
|
await controller.flushFrame()
|
|
2977
2979
|
} else {
|
|
2978
|
-
|
|
2980
|
+
// the paired receipt starts after native touch-up. target lookup
|
|
2981
|
+
// and synthetic press delivery must finish before consuming it.
|
|
2982
|
+
while (
|
|
2983
|
+
!(input.workletFrameTimestampsSeconds
|
|
2984
|
+
? state.triggerCompleted
|
|
2985
|
+
: state.triggerStarted)
|
|
2986
|
+
) {
|
|
2979
2987
|
if (state.cancelled) throw new Error('peach motion capture was cancelled')
|
|
2980
2988
|
await new Promise((resolve) => setTimeout(resolve, 0))
|
|
2981
2989
|
}
|
|
@@ -2984,8 +2992,12 @@ export const device = {
|
|
|
2984
2992
|
let visibleStart: SootSimLockstepFrameReceipt | null = null
|
|
2985
2993
|
let detectedMeasurement: MotionChangeMeasurement | null = null
|
|
2986
2994
|
let previousBitmap: ImageBitmap | null = null
|
|
2995
|
+
const detectionFrameLimit = controller.framesForOffset(input.detectionTimeoutMs)
|
|
2996
|
+
// a touch anchor takes stage zero from the delivered touch on both
|
|
2997
|
+
// legs, so no visible change gates its drive; a feedback below the
|
|
2998
|
+
// change minimum still captures, as it does natively.
|
|
2987
2999
|
// android can publish mount layout at p=0 before a clock step.
|
|
2988
|
-
if (input.platform === 'android') {
|
|
3000
|
+
if (!input.anchorAtTouch && input.platform === 'android') {
|
|
2989
3001
|
// time zero needs the same producer publication fence as stepped
|
|
2990
3002
|
// frames; intermediate tree paints are not a transition onset.
|
|
2991
3003
|
const receipt = await controller.flushFrame()
|
|
@@ -3007,19 +3019,14 @@ export const device = {
|
|
|
3007
3019
|
candidateBitmap.close()
|
|
3008
3020
|
}
|
|
3009
3021
|
}
|
|
3010
|
-
|
|
3011
|
-
|
|
3022
|
+
for (
|
|
3023
|
+
let frame = 0;
|
|
3024
|
+
!input.anchorAtTouch && !visibleStart && frame < detectionFrameLimit;
|
|
3025
|
+
frame++
|
|
3026
|
+
) {
|
|
3012
3027
|
if (state.cancelled) throw new Error('peach motion capture was cancelled')
|
|
3013
3028
|
const receipt = await controller.stepFrame()
|
|
3014
3029
|
const candidateBitmap = await captureBitmap()
|
|
3015
|
-
// a touch anchor's stages may precede the first visible change
|
|
3016
|
-
if (
|
|
3017
|
-
input.anchorAtTouch === 'down' ||
|
|
3018
|
-
(input.anchorAtTouch === 'up' &&
|
|
3019
|
-
releaseReceipt()?.frameIndex === receipt.frameIndex)
|
|
3020
|
-
) {
|
|
3021
|
-
keepFrame(receipt, await createImageBitmap(candidateBitmap))
|
|
3022
|
-
}
|
|
3023
3030
|
const bounds = boundsFor(candidateBitmap)
|
|
3024
3031
|
const measurement = measureChange({
|
|
3025
3032
|
baseline,
|
|
@@ -3040,22 +3047,36 @@ export const device = {
|
|
|
3040
3047
|
previousBitmap?.close()
|
|
3041
3048
|
previousBitmap = candidateBitmap
|
|
3042
3049
|
}
|
|
3043
|
-
|
|
3044
|
-
previousBitmap?.close()
|
|
3045
|
-
throw new Error(
|
|
3046
|
-
`peach motion had no visible change before ${input.detectionTimeoutMs}ms`,
|
|
3047
|
-
)
|
|
3048
|
-
}
|
|
3050
|
+
previousBitmap?.close()
|
|
3049
3051
|
// stages on every platform measure from the first frame that
|
|
3050
3052
|
// differs from baseline: native extraction anchors at its
|
|
3051
3053
|
// detection frame's pts, so the drive starts here too. the
|
|
3052
3054
|
// preceding tick is still baseline on both legs. a touch anchor
|
|
3053
3055
|
// instead starts the drive at the press or at the frame that
|
|
3054
3056
|
// delivers the touch-up.
|
|
3055
|
-
let driveStart
|
|
3056
|
-
let currentReceipt
|
|
3057
|
-
if (input.anchorAtTouch
|
|
3058
|
-
|
|
3057
|
+
let driveStart: SootSimLockstepFrameReceipt
|
|
3058
|
+
let currentReceipt: SootSimLockstepFrameReceipt
|
|
3059
|
+
if (!input.anchorAtTouch) {
|
|
3060
|
+
if (!visibleStart || !detectedMeasurement) {
|
|
3061
|
+
throw new Error(
|
|
3062
|
+
`peach motion had no visible change before ${input.detectionTimeoutMs}ms`,
|
|
3063
|
+
)
|
|
3064
|
+
}
|
|
3065
|
+
driveStart = visibleStart
|
|
3066
|
+
currentReceipt = visibleStart
|
|
3067
|
+
} else if (input.anchorAtTouch === 'down') {
|
|
3068
|
+
const press = controller.inputReceipts.find(
|
|
3069
|
+
(receipt) => receipt.phase === 'down',
|
|
3070
|
+
)
|
|
3071
|
+
if (press?.frameIndex !== controller.initialFrame.frameIndex) {
|
|
3072
|
+
throw new Error(
|
|
3073
|
+
'peach press anchoring found no press delivered on the baseline frame',
|
|
3074
|
+
)
|
|
3075
|
+
}
|
|
3076
|
+
driveStart = controller.initialFrame
|
|
3077
|
+
currentReceipt = controller.initialFrame
|
|
3078
|
+
} else {
|
|
3079
|
+
currentReceipt = controller.initialFrame
|
|
3059
3080
|
while (!releaseReceipt()) {
|
|
3060
3081
|
if (state.cancelled) throw new Error('peach motion capture was cancelled')
|
|
3061
3082
|
const receipt = await controller.stepFrame()
|
|
@@ -3099,15 +3120,17 @@ export const device = {
|
|
|
3099
3120
|
// proof.js owns the default and fills it; this backstop only
|
|
3100
3121
|
// serves direct shim callers.
|
|
3101
3122
|
const onsetThresholdPercent = anchor.onsetThresholdPercent ?? 5
|
|
3123
|
+
const searchStartFrame =
|
|
3124
|
+
driveStart.frameIndex + controller.framesForOffset(anchor.notBeforeMs)
|
|
3102
3125
|
const searchStartVts = driveStart.virtualTimestampMs + anchor.notBeforeMs
|
|
3103
|
-
if (currentReceipt.
|
|
3126
|
+
if (currentReceipt.frameIndex > searchStartFrame) {
|
|
3104
3127
|
throw new Error(
|
|
3105
3128
|
`peach motion anchor ${anchor.id} searches from ${anchor.notBeforeMs}ms but the clock already sits past it: the ladder is unexecutable`,
|
|
3106
3129
|
)
|
|
3107
3130
|
}
|
|
3108
3131
|
// step, never jump, to the search start so hold moves land.
|
|
3109
3132
|
let searchReceipt = currentReceipt
|
|
3110
|
-
while (searchReceipt.
|
|
3133
|
+
while (searchReceipt.frameIndex < searchStartFrame) {
|
|
3111
3134
|
if (state.cancelled) throw new Error('peach motion capture was cancelled')
|
|
3112
3135
|
searchReceipt = await controller.stepFrame()
|
|
3113
3136
|
}
|
|
@@ -3173,12 +3196,42 @@ export const device = {
|
|
|
3173
3196
|
return { anchorId: anchor.id, receipt: anchorReceipt }
|
|
3174
3197
|
}
|
|
3175
3198
|
|
|
3199
|
+
// the hold's schedule in delivery order, in ms after the press.
|
|
3200
|
+
const holdScheduleMs = input.hold
|
|
3201
|
+
? [
|
|
3202
|
+
0,
|
|
3203
|
+
...(input.hold.moves ?? []).map((move) => move.afterMs),
|
|
3204
|
+
input.hold.durationMs,
|
|
3205
|
+
].sort((a, b) => a - b)
|
|
3206
|
+
: []
|
|
3207
|
+
// transition stages take the native touch rule from the touches this
|
|
3208
|
+
// lane delivered, stepping until the last one due has landed.
|
|
3209
|
+
const stageOffsetMs = async (offsetMs: number, anchorId: string) => {
|
|
3210
|
+
if (anchorId !== 'transition' || input.witnessedDrag) return offsetMs
|
|
3211
|
+
const due = holdScheduleMs.filter((scheduledMs) => scheduledMs <= offsetMs)
|
|
3212
|
+
while (controller.inputReceipts.length < due.length) {
|
|
3213
|
+
if (state.cancelled) throw new Error('peach motion capture was cancelled')
|
|
3214
|
+
currentReceipt = await controller.stepFrame()
|
|
3215
|
+
}
|
|
3216
|
+
const [press] = controller.inputReceipts
|
|
3217
|
+
return controller.stageTouchOffsetMs(
|
|
3218
|
+
due.map((scheduledMs, index) => ({
|
|
3219
|
+
scheduledMs,
|
|
3220
|
+
landedMs:
|
|
3221
|
+
controller.inputReceipts[index].virtualTimestampMs -
|
|
3222
|
+
press.virtualTimestampMs,
|
|
3223
|
+
})),
|
|
3224
|
+
offsetMs,
|
|
3225
|
+
)
|
|
3226
|
+
}
|
|
3227
|
+
|
|
3176
3228
|
const snapshots: Snapshot[] = []
|
|
3177
3229
|
for (const stage of input.stages) {
|
|
3178
3230
|
if (state.cancelled) throw new Error('peach motion capture was cancelled')
|
|
3179
3231
|
const { anchorId, receipt: anchorReceipt } = await resolveAnchor(stage)
|
|
3232
|
+
const touchOffsetMs = await stageOffsetMs(stage.offsetMs, anchorId)
|
|
3180
3233
|
const stageFrameIndex =
|
|
3181
|
-
anchorReceipt.frameIndex + controller.framesForOffset(
|
|
3234
|
+
anchorReceipt.frameIndex + controller.framesForOffset(touchOffsetMs)
|
|
3182
3235
|
const kept = keptFrames.get(stageFrameIndex)
|
|
3183
3236
|
if (kept && stageFrameIndex <= currentReceipt.frameIndex) {
|
|
3184
3237
|
snapshots.push({
|
|
@@ -3193,7 +3246,7 @@ export const device = {
|
|
|
3193
3246
|
})
|
|
3194
3247
|
continue
|
|
3195
3248
|
}
|
|
3196
|
-
const receipt = await controller.stepToOffset(anchorReceipt,
|
|
3249
|
+
const receipt = await controller.stepToOffset(anchorReceipt, touchOffsetMs)
|
|
3197
3250
|
currentReceipt = receipt
|
|
3198
3251
|
snapshots.push({
|
|
3199
3252
|
actualMs: receipt.virtualTimestampMs - anchorReceipt.virtualTimestampMs,
|
|
@@ -3233,21 +3286,16 @@ export const device = {
|
|
|
3233
3286
|
await controller.stepFrame()
|
|
3234
3287
|
await new Promise((resolve) => setTimeout(resolve, 0))
|
|
3235
3288
|
}
|
|
3236
|
-
|
|
3237
|
-
|
|
3238
|
-
|
|
3239
|
-
const firstFrameIndex =
|
|
3240
|
-
first === null
|
|
3241
|
-
? null
|
|
3242
|
-
: Math.round(
|
|
3243
|
-
(first - controller.initialFrame.virtualTimestampMs) / (1000 / 60),
|
|
3244
|
-
)
|
|
3245
|
-
if (firstFrameIndex !== 1)
|
|
3246
|
-
throw new Error(
|
|
3247
|
-
`paired worklets first delivery did not match the next UI frame: ${firstFrameIndex}`,
|
|
3248
|
-
)
|
|
3249
|
-
}
|
|
3289
|
+
const stats = input.workletFrameTimestampsSeconds
|
|
3290
|
+
? await pairedPeerStats()
|
|
3291
|
+
: null
|
|
3250
3292
|
return {
|
|
3293
|
+
workletFirstDelivery: stats
|
|
3294
|
+
? {
|
|
3295
|
+
first: stats.nativeFrameFirstTimestampMs,
|
|
3296
|
+
initial: controller.initialFrame.virtualTimestampMs,
|
|
3297
|
+
}
|
|
3298
|
+
: null,
|
|
3251
3299
|
inputReceipts: controller.inputReceipts,
|
|
3252
3300
|
anchors: anchorRecords,
|
|
3253
3301
|
driveStart: {
|
|
@@ -3255,16 +3303,20 @@ export const device = {
|
|
|
3255
3303
|
virtualTimestampMs: driveStart.virtualTimestampMs,
|
|
3256
3304
|
},
|
|
3257
3305
|
frames: snapshots.map(encode),
|
|
3258
|
-
visibleChangeDetection:
|
|
3259
|
-
|
|
3260
|
-
|
|
3261
|
-
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
3267
|
-
|
|
3306
|
+
visibleChangeDetection:
|
|
3307
|
+
visibleStart && detectedMeasurement
|
|
3308
|
+
? {
|
|
3309
|
+
actualMs: (visibleStart.frameIndex * 1000) / 60,
|
|
3310
|
+
changedPixelPercent: detectedMeasurement.changePercent,
|
|
3311
|
+
changedPixels: detectedMeasurement.changePixels,
|
|
3312
|
+
channelThreshold: input.motionChangeDefinition.channelThreshold,
|
|
3313
|
+
minimumChangePercent:
|
|
3314
|
+
input.motionChangeDefinition.minimumChangePercent,
|
|
3315
|
+
totalPixels: detectedMeasurement.totalPixels,
|
|
3316
|
+
frameIndex: visibleStart.frameIndex,
|
|
3317
|
+
virtualTimestampMs: visibleStart.virtualTimestampMs,
|
|
3318
|
+
}
|
|
3319
|
+
: null,
|
|
3268
3320
|
}
|
|
3269
3321
|
} finally {
|
|
3270
3322
|
for (const kept of keptFrames.values()) kept.bitmap.close()
|
|
@@ -3277,6 +3329,7 @@ export const device = {
|
|
|
3277
3329
|
detectionTimeoutMs: options.detectionTimeoutMs ?? 3000,
|
|
3278
3330
|
frame: options.frame ?? null,
|
|
3279
3331
|
anchorAtTouch: options.anchorAtTouch ?? null,
|
|
3332
|
+
witnessedDrag: options.witnessedDrag === true,
|
|
3280
3333
|
hold: options.hold ?? null,
|
|
3281
3334
|
motionChangeDefinition: MOTION_CHANGE_DEFINITION,
|
|
3282
3335
|
platform: device.getPlatform(),
|
|
@@ -3327,6 +3380,19 @@ export const device = {
|
|
|
3327
3380
|
}, token)
|
|
3328
3381
|
})()
|
|
3329
3382
|
const [capture] = await Promise.all([capturePromise, triggerPromise])
|
|
3383
|
+
if (capture.workletFirstDelivery) {
|
|
3384
|
+
const { first, initial } = capture.workletFirstDelivery
|
|
3385
|
+
const interval = 1000 / 60
|
|
3386
|
+
if (
|
|
3387
|
+
first === null ||
|
|
3388
|
+
!Number.isFinite(first) ||
|
|
3389
|
+
Math.abs(first - initial - interval) >
|
|
3390
|
+
frameTimingRoundingBound(first, initial, interval)
|
|
3391
|
+
)
|
|
3392
|
+
throw new Error(
|
|
3393
|
+
`paired worklets first delivery did not match the next UI frame: ${first}`,
|
|
3394
|
+
)
|
|
3395
|
+
}
|
|
3330
3396
|
return {
|
|
3331
3397
|
inputReceipts: capture.inputReceipts,
|
|
3332
3398
|
anchors: capture.anchors,
|
|
@@ -3334,11 +3400,13 @@ export const device = {
|
|
|
3334
3400
|
frames: writeFastScreenshotFrames(namePrefix, capture.frames),
|
|
3335
3401
|
triggerCompletedMs,
|
|
3336
3402
|
triggerStartMs,
|
|
3337
|
-
visibleChangeDetection:
|
|
3338
|
-
|
|
3339
|
-
|
|
3340
|
-
|
|
3341
|
-
|
|
3403
|
+
visibleChangeDetection: capture.visibleChangeDetection
|
|
3404
|
+
? {
|
|
3405
|
+
...capture.visibleChangeDetection,
|
|
3406
|
+
frame: options.frame ?? null,
|
|
3407
|
+
rootFrame: options.rootFrame ?? null,
|
|
3408
|
+
}
|
|
3409
|
+
: null,
|
|
3342
3410
|
}
|
|
3343
3411
|
} catch (error) {
|
|
3344
3412
|
captureFailure = { error }
|
package/detox/jest-preset.cjs
CHANGED
|
@@ -22,9 +22,7 @@ module.exports = {
|
|
|
22
22
|
// keep per-pixel arithmetic inside the module instead of the vm global proxy.
|
|
23
23
|
sandboxInjectedGlobals: ['Math'],
|
|
24
24
|
setupFilesAfterEnv: [path.join(PACKAGE_ROOT, 'detox', 'jest-setup-after-env.cjs')],
|
|
25
|
-
transform:
|
|
26
|
-
'^.+\\.[jt]sx?$': ['@sucrase/jest-plugin', { jsxRuntime: 'automatic' }],
|
|
27
|
-
},
|
|
25
|
+
transform: require('./jest-transform.cjs'),
|
|
28
26
|
moduleNameMapper: {
|
|
29
27
|
'^detox$': DRIVER_ENTRY,
|
|
30
28
|
},
|
package/detox/matchers.ts
CHANGED
|
@@ -7,6 +7,9 @@ export type Matcher = SootSimTargetMatcher
|
|
|
7
7
|
|
|
8
8
|
function createMatcher(type: 'id' | 'text' | 'label', value: string | RegExp): Matcher {
|
|
9
9
|
if (typeof value === 'string') return { type, value }
|
|
10
|
+
if (Object.prototype.toString.call(value) !== '[object RegExp]') {
|
|
11
|
+
throw new Error(`${type} should be a string or regex, but got ${value}`)
|
|
12
|
+
}
|
|
10
13
|
// detox ignores global and sticky state and always uses unicode matching.
|
|
11
14
|
return {
|
|
12
15
|
type,
|