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
|
@@ -32,6 +32,8 @@ export interface ObjcSurface {
|
|
|
32
32
|
|
|
33
33
|
export interface ObjcView {
|
|
34
34
|
graphs: SymbolGraph[]
|
|
35
|
+
/** present for original implementations, read without repairing declarations. */
|
|
36
|
+
clangAST?: unknown
|
|
35
37
|
/** precise enum case and option ids → their header values. */
|
|
36
38
|
values: Map<string, string>
|
|
37
39
|
/** the modules the headers import besides their own. */
|
|
@@ -206,6 +208,7 @@ export function objcView(
|
|
|
206
208
|
stdlib: string,
|
|
207
209
|
cacheDir: string,
|
|
208
210
|
work: string,
|
|
211
|
+
original?: { flags: readonly string[]; target: string },
|
|
209
212
|
): ObjcView {
|
|
210
213
|
if (!fs.existsSync(stdlib))
|
|
211
214
|
throw new Error(
|
|
@@ -220,6 +223,7 @@ export function objcView(
|
|
|
220
223
|
const headersDir = framework
|
|
221
224
|
? path.join(frameworks, `${surface.module}.framework`, 'Headers')
|
|
222
225
|
: path.join(include, surface.module)
|
|
226
|
+
fs.mkdirSync(headersDir, { recursive: true })
|
|
223
227
|
const originals = new Map(
|
|
224
228
|
headerFiles(surface.headers).map((file) => [
|
|
225
229
|
path.join(headersDir, file),
|
|
@@ -373,8 +377,9 @@ export function objcView(
|
|
|
373
377
|
'-module-name',
|
|
374
378
|
surface.module,
|
|
375
379
|
'-target',
|
|
376
|
-
IOS_SDK_TARGET,
|
|
380
|
+
original?.target ?? IOS_SDK_TARGET,
|
|
377
381
|
...search,
|
|
382
|
+
...(original?.flags.flatMap((flag) => ['-Xcc', flag]) ?? []),
|
|
378
383
|
'-module-cache-path',
|
|
379
384
|
path.join(cacheDir, 'ios-module-cache'),
|
|
380
385
|
'-minimum-access-level',
|
|
@@ -391,6 +396,10 @@ export function objcView(
|
|
|
391
396
|
...run.stderr.matchAll(/^(?:(.+?):(\d+):(\d+): )?(?:fatal )?error: (.*)$/gm),
|
|
392
397
|
]
|
|
393
398
|
if (errors.length === 0 && run.status === 0) break
|
|
399
|
+
if (original)
|
|
400
|
+
throw new Error(
|
|
401
|
+
`original Objective-C declarations do not import as Swift: ${run.stderr.trim() || run.stdout.trim()}`,
|
|
402
|
+
)
|
|
394
403
|
let progress = false
|
|
395
404
|
const learn = (name: string, kind: 'class' | 'protocol' | 'struct' | 'macro') => {
|
|
396
405
|
if (missing.has(name)) return
|
|
@@ -452,11 +461,138 @@ export function objcView(
|
|
|
452
461
|
imports.delete(surface.module)
|
|
453
462
|
return {
|
|
454
463
|
graphs,
|
|
464
|
+
...(original
|
|
465
|
+
? {
|
|
466
|
+
clangAST: objcDeclarationAST(
|
|
467
|
+
surface,
|
|
468
|
+
framework,
|
|
469
|
+
toolchainBin,
|
|
470
|
+
search,
|
|
471
|
+
work,
|
|
472
|
+
original.flags,
|
|
473
|
+
original.target,
|
|
474
|
+
),
|
|
475
|
+
}
|
|
476
|
+
: {}),
|
|
455
477
|
values: enumValues(graphs, surface, framework, toolchainBin, search, work),
|
|
456
478
|
imports: [...imports].sort(),
|
|
457
479
|
}
|
|
458
480
|
}
|
|
459
481
|
|
|
482
|
+
function objcDeclarationAST(
|
|
483
|
+
surface: ObjcSurface,
|
|
484
|
+
framework: boolean,
|
|
485
|
+
toolchainBin: string,
|
|
486
|
+
search: string[],
|
|
487
|
+
work: string,
|
|
488
|
+
originalFlags: readonly string[],
|
|
489
|
+
target: string,
|
|
490
|
+
): unknown {
|
|
491
|
+
const roots = [
|
|
492
|
+
...fs
|
|
493
|
+
.readFileSync(surface.modulemap, 'utf8')
|
|
494
|
+
.matchAll(/(?:umbrella\s+)?header\s+"([^"]+)"/g),
|
|
495
|
+
].map((match) => match[1]!)
|
|
496
|
+
const probe = path.join(work, 'declarations.m')
|
|
497
|
+
fs.writeFileSync(
|
|
498
|
+
probe,
|
|
499
|
+
roots
|
|
500
|
+
.map((file) =>
|
|
501
|
+
framework ? `#import <${surface.module}/${file}>\n` : `#import "${file}"\n`,
|
|
502
|
+
)
|
|
503
|
+
.join(''),
|
|
504
|
+
)
|
|
505
|
+
const flags: string[] = []
|
|
506
|
+
for (let index = 0; index < search.length; index += 2) {
|
|
507
|
+
const [flag, value] = [search[index]!, search[index + 1]!]
|
|
508
|
+
// the swift resource directory contains swift overlays, not clang builtins.
|
|
509
|
+
if (flag === '-resource-dir') continue
|
|
510
|
+
flags.push(flag === '-sdk' ? '-isysroot' : flag, value)
|
|
511
|
+
}
|
|
512
|
+
const args = [
|
|
513
|
+
'-x',
|
|
514
|
+
'objective-c',
|
|
515
|
+
'-fobjc-arc',
|
|
516
|
+
'-fblocks',
|
|
517
|
+
'-fsyntax-only',
|
|
518
|
+
'-target',
|
|
519
|
+
target,
|
|
520
|
+
...flags,
|
|
521
|
+
...originalFlags,
|
|
522
|
+
`-fmodule-name=${surface.module}`,
|
|
523
|
+
'-Xclang',
|
|
524
|
+
'-ast-dump-all=json',
|
|
525
|
+
]
|
|
526
|
+
const dump = (filter?: string) => {
|
|
527
|
+
const run = spawnSync(
|
|
528
|
+
path.join(toolchainBin, 'clang'),
|
|
529
|
+
[
|
|
530
|
+
...args,
|
|
531
|
+
...(filter ? ['-Xclang', '-ast-dump-filter', '-Xclang', filter] : []),
|
|
532
|
+
probe,
|
|
533
|
+
],
|
|
534
|
+
{ encoding: 'utf8', env: swiftEnvironment(), maxBuffer: 256 * 1024 * 1024 },
|
|
535
|
+
)
|
|
536
|
+
if (run.error) throw run.error
|
|
537
|
+
if (run.status !== 0)
|
|
538
|
+
throw new Error(`original Objective-C declaration AST failed: ${run.stderr.trim()}`)
|
|
539
|
+
return run.stdout
|
|
540
|
+
}
|
|
541
|
+
const ast: unknown = JSON.parse(dump())
|
|
542
|
+
const children: unknown =
|
|
543
|
+
ast && typeof ast === 'object' ? Reflect.get(ast, 'inner') : undefined
|
|
544
|
+
if (!Array.isArray(children))
|
|
545
|
+
throw new Error('original Objective-C declaration AST has no translation unit')
|
|
546
|
+
const inner: unknown[] = children
|
|
547
|
+
// clang lazily omits module typedefs from a translation unit dump, even with
|
|
548
|
+
// ast-dump-all. named lookup deserializes the original typedef declarations.
|
|
549
|
+
// C function result types lack the desugared type that parameters carry.
|
|
550
|
+
const aliases = new Set<string>()
|
|
551
|
+
const declared = new Set<string>()
|
|
552
|
+
for (const node of inner) {
|
|
553
|
+
if (!node || typeof node !== 'object') continue
|
|
554
|
+
if (Reflect.get(node, 'kind') === 'TypedefDecl')
|
|
555
|
+
declared.add(String(Reflect.get(node, 'name')))
|
|
556
|
+
if (Reflect.get(node, 'kind') !== 'FunctionDecl') continue
|
|
557
|
+
const type: unknown = Reflect.get(node, 'type')
|
|
558
|
+
const written: unknown =
|
|
559
|
+
type && typeof type === 'object' ? Reflect.get(type, 'qualType') : undefined
|
|
560
|
+
const name =
|
|
561
|
+
typeof written === 'string' ? /^([A-Za-z_]\w*)\s*\(/.exec(written)?.[1] : undefined
|
|
562
|
+
if (name) aliases.add(name)
|
|
563
|
+
}
|
|
564
|
+
for (const alias of aliases) {
|
|
565
|
+
if (
|
|
566
|
+
declared.has(alias) ||
|
|
567
|
+
[
|
|
568
|
+
'void',
|
|
569
|
+
'bool',
|
|
570
|
+
'_Bool',
|
|
571
|
+
'char',
|
|
572
|
+
'short',
|
|
573
|
+
'int',
|
|
574
|
+
'long',
|
|
575
|
+
'float',
|
|
576
|
+
'double',
|
|
577
|
+
].includes(alias)
|
|
578
|
+
)
|
|
579
|
+
continue
|
|
580
|
+
const output = dump(alias)
|
|
581
|
+
// filtered clang output is a stream of JSON declaration objects.
|
|
582
|
+
for (const object of output.split(/\n(?=\{\n)/).filter((text) => text.trim())) {
|
|
583
|
+
const declaration: unknown = JSON.parse(object)
|
|
584
|
+
if (
|
|
585
|
+
declaration &&
|
|
586
|
+
typeof declaration === 'object' &&
|
|
587
|
+
Reflect.get(declaration, 'kind') === 'TypedefDecl' &&
|
|
588
|
+
Reflect.get(declaration, 'name') === alias
|
|
589
|
+
)
|
|
590
|
+
inner.push(declaration)
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
return ast
|
|
594
|
+
}
|
|
595
|
+
|
|
460
596
|
// the header values of the graphs' objective-c enum cases and option members
|
|
461
597
|
// (c:@E@Enum@Constant, c:@EA@Enum@Constant), from clang's AST of the same
|
|
462
598
|
// headers: an enumerator's value is its initializer's, or one past the one
|
package/src/swift-package.ts
CHANGED
|
@@ -174,6 +174,7 @@ export const SWIFT_NATIVE_SOURCE_EXTENSIONS = [
|
|
|
174
174
|
'.hh',
|
|
175
175
|
'.hpp',
|
|
176
176
|
'.hxx',
|
|
177
|
+
'.pch',
|
|
177
178
|
'.inc',
|
|
178
179
|
'.inl',
|
|
179
180
|
'.modulemap',
|
|
@@ -325,6 +326,99 @@ export function swiftResourceBundles(
|
|
|
325
326
|
}))
|
|
326
327
|
}
|
|
327
328
|
|
|
329
|
+
/** the generated accessor files of a native Objective-C resource target,
|
|
330
|
+
* written beside its sources: the header is forced into each unit of the
|
|
331
|
+
* target and the body is one more unit of it. */
|
|
332
|
+
export const OBJC_RESOURCE_ACCESSOR_HEADER = 'resource_bundle_accessor.h'
|
|
333
|
+
export const OBJC_RESOURCE_ACCESSOR_BODY = 'resource_bundle_accessor.m'
|
|
334
|
+
|
|
335
|
+
/** the bundle name SwiftPM derives symbols from, for a native Objective-C
|
|
336
|
+
* target. a resource target needs the assignment of its own source path, a
|
|
337
|
+
* target without resources cannot use the macro, and either mismatch is
|
|
338
|
+
* refused here because clang accepts another target's header. */
|
|
339
|
+
export function swiftObjCResourceBundleName(args: {
|
|
340
|
+
target: string
|
|
341
|
+
path: string
|
|
342
|
+
resources: boolean
|
|
343
|
+
usesBundleMacro: boolean
|
|
344
|
+
bundles: readonly SwiftResourceBundle[] | undefined
|
|
345
|
+
}): string | undefined {
|
|
346
|
+
const { target, resources, usesBundleMacro } = args
|
|
347
|
+
if (!resources) {
|
|
348
|
+
if (usesBundleMacro)
|
|
349
|
+
throw new Error(
|
|
350
|
+
`objective-c target ${target} uses SWIFTPM_MODULE_BUNDLE but declares no resources`,
|
|
351
|
+
)
|
|
352
|
+
return undefined
|
|
353
|
+
}
|
|
354
|
+
const bundle = args.bundles?.find((candidate) => candidate.target === target)
|
|
355
|
+
if (
|
|
356
|
+
!bundle ||
|
|
357
|
+
bundle.sourcePath !== args.path ||
|
|
358
|
+
!bundle.path.endsWith(`_${target}.bundle`)
|
|
359
|
+
)
|
|
360
|
+
throw new Error(`swift resource target ${target} has no matching bundle assignment`)
|
|
361
|
+
return bundle.path.slice(0, -'.bundle'.length)
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/** SwiftPM's Objective-C resource accessor for one bundle name. */
|
|
365
|
+
export function swiftObjCResourceAccessor(bundleName: string): {
|
|
366
|
+
header: string
|
|
367
|
+
body: string
|
|
368
|
+
} {
|
|
369
|
+
if (!/^[A-Za-z_]\w*$/.test(bundleName))
|
|
370
|
+
throw new Error(`Objective-C resource bundle symbol is unqualified: ${bundleName}`)
|
|
371
|
+
const symbol = `${bundleName}_SWIFTPM_MODULE_BUNDLE`
|
|
372
|
+
const finder = `${bundleName}_SWIFTPM_MODULE_BUNDLER_FINDER`
|
|
373
|
+
return {
|
|
374
|
+
header: [
|
|
375
|
+
'#import <Foundation/Foundation.h>',
|
|
376
|
+
'',
|
|
377
|
+
'__BEGIN_DECLS',
|
|
378
|
+
'',
|
|
379
|
+
`NSBundle* ${symbol}(void);`,
|
|
380
|
+
'',
|
|
381
|
+
`#define SWIFTPM_MODULE_BUNDLE ${symbol}()`,
|
|
382
|
+
'',
|
|
383
|
+
'__END_DECLS',
|
|
384
|
+
].join('\n'),
|
|
385
|
+
body: [
|
|
386
|
+
'#import <Foundation/Foundation.h>',
|
|
387
|
+
'',
|
|
388
|
+
'NS_ASSUME_NONNULL_BEGIN',
|
|
389
|
+
'',
|
|
390
|
+
`@interface ${finder} : NSObject`,
|
|
391
|
+
'@end',
|
|
392
|
+
'',
|
|
393
|
+
`@implementation ${finder}`,
|
|
394
|
+
'@end',
|
|
395
|
+
'',
|
|
396
|
+
`NSBundle* ${symbol}() {`,
|
|
397
|
+
` NSString *bundleName = @"${bundleName}";`,
|
|
398
|
+
'',
|
|
399
|
+
' NSArray<NSURL*> *candidates = @[',
|
|
400
|
+
' NSBundle.mainBundle.resourceURL,',
|
|
401
|
+
` [NSBundle bundleForClass:[${finder} class]].resourceURL,`,
|
|
402
|
+
' NSBundle.mainBundle.bundleURL',
|
|
403
|
+
' ];',
|
|
404
|
+
'',
|
|
405
|
+
' for (NSURL* candidate in candidates) {',
|
|
406
|
+
' NSURL *bundlePath = [candidate URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.bundle", bundleName]];',
|
|
407
|
+
'',
|
|
408
|
+
' NSBundle *bundle = [NSBundle bundleWithURL:bundlePath];',
|
|
409
|
+
' if (bundle != nil) {',
|
|
410
|
+
' return bundle;',
|
|
411
|
+
' }',
|
|
412
|
+
' }',
|
|
413
|
+
'',
|
|
414
|
+
' @throw [[NSException alloc] initWithName:@"SwiftPMResourcesAccessor" reason:[NSString stringWithFormat:@"unable to find bundle named %@", bundleName] userInfo:nil];',
|
|
415
|
+
'}',
|
|
416
|
+
'',
|
|
417
|
+
'NS_ASSUME_NONNULL_END',
|
|
418
|
+
].join('\n'),
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
328
422
|
/** the one resource target owning a canonical compile-input file. */
|
|
329
423
|
export function swiftResourceBundleForFile(
|
|
330
424
|
bundles: readonly SwiftResourceBundle[],
|
package/src/swift-packages.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// (swift-package-manifest.ts) to the source targets that build it; remote
|
|
4
4
|
// packages are fetched at the revision the app's Package.resolved pins, into
|
|
5
5
|
// PEACH_HOME/cache/swift-packages, isolated by the app root. swift and c-family source
|
|
6
|
-
// targets use the common compiler backend.
|
|
7
|
-
// targets the host built no stand-in for stay missing with their reason;
|
|
6
|
+
// targets, including objective-c, use the common compiler backend. assembly
|
|
7
|
+
// and binary targets the host built no stand-in for stay missing with their reason;
|
|
8
8
|
// the targets beside them still compile.
|
|
9
9
|
|
|
10
10
|
import { execFileSync } from 'node:child_process'
|
|
@@ -93,8 +93,8 @@ export function remoteSwiftCheckouts(root: string): string {
|
|
|
93
93
|
return path.join(fs.realpathSync(cacheDir()), 'swift-packages', key, 'checkouts')
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
//
|
|
97
|
-
const UNSUPPORTED_NATIVE = /\.(
|
|
96
|
+
// assembly requires its own target lowering; objective-c keeps its original bodies.
|
|
97
|
+
const UNSUPPORTED_NATIVE = /\.(s|S)$/
|
|
98
98
|
|
|
99
99
|
const BINARY = 'is a binary framework'
|
|
100
100
|
// retain every independent blocker in dependency order. a product can reach
|
|
@@ -264,7 +264,7 @@ export function resolveSwiftPackages(options: {
|
|
|
264
264
|
: target.type !== 'regular' && target.type !== 'system'
|
|
265
265
|
? `${name} is a ${target.type} target`
|
|
266
266
|
: files.some((file) => UNSUPPORTED_NATIVE.test(file))
|
|
267
|
-
? `${name} is an
|
|
267
|
+
? `${name} is an assembly target${gap ? `; ${gap}` : ''}`
|
|
268
268
|
: null
|
|
269
269
|
// every dependency resolves, so a failing one never hides the rest
|
|
270
270
|
// of the closure from the compile or from the report
|
package/src/swift-submit.ts
CHANGED
|
@@ -25,6 +25,8 @@ import {
|
|
|
25
25
|
isSwiftMetalLibrarySources,
|
|
26
26
|
type SwiftMetalLibrarySource,
|
|
27
27
|
type SwiftResourceBundle,
|
|
28
|
+
type SwiftNativeTarget,
|
|
29
|
+
type SwiftObjCPeerStartup,
|
|
28
30
|
} from './swiftContract'
|
|
29
31
|
|
|
30
32
|
export const SWIFT_COMPILE_PATH = '/api/swift-compile'
|
|
@@ -234,6 +236,8 @@ export interface SwiftCompileContext {
|
|
|
234
236
|
|
|
235
237
|
export type SwiftCompileSubmit = (work: {
|
|
236
238
|
files: Record<string, string>
|
|
239
|
+
nativeTargets?: SwiftNativeTarget[]
|
|
240
|
+
objcPeerStartup?: SwiftObjCPeerStartup
|
|
237
241
|
metalSources?: Record<string, string>
|
|
238
242
|
/** the bundle pack; absent means the project packs none. */
|
|
239
243
|
resources?: Record<string, string>
|
|
@@ -399,6 +403,8 @@ export async function compileSwiftProject(
|
|
|
399
403
|
submit: SwiftCompileSubmit,
|
|
400
404
|
work: {
|
|
401
405
|
files: Record<string, string>
|
|
406
|
+
nativeTargets?: SwiftNativeTarget[]
|
|
407
|
+
objcPeerStartup?: SwiftObjCPeerStartup
|
|
402
408
|
metalSources?: Record<string, string>
|
|
403
409
|
resources?: Record<string, string>
|
|
404
410
|
/** project-relative resource paths used to associate implicit resources with targets. */
|
package/src/swiftContract.ts
CHANGED
|
@@ -22,6 +22,105 @@ export interface SwiftObjCPeerClass {
|
|
|
22
22
|
header: string
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
/** generated registration source whose call must precede the application entry. */
|
|
26
|
+
export interface SwiftObjCPeerStartup {
|
|
27
|
+
registration: string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function isSwiftObjCPeerStartup(value: unknown): value is SwiftObjCPeerStartup {
|
|
31
|
+
return (
|
|
32
|
+
value !== null &&
|
|
33
|
+
typeof value === 'object' &&
|
|
34
|
+
'registration' in value &&
|
|
35
|
+
isSwiftResourcePath(value.registration) &&
|
|
36
|
+
value.registration.endsWith('.swift') &&
|
|
37
|
+
Object.keys(value).length === 1
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const SWIFT_NATIVE_INPUT_ROOT = '$(PEACH_INPUT_ROOT)'
|
|
42
|
+
export const SWIFT_NATIVE_SDK_INCLUDE = '$(PEACH_SDK_INCLUDE)'
|
|
43
|
+
|
|
44
|
+
export interface SwiftObjCImplementationPlan {
|
|
45
|
+
owner: string
|
|
46
|
+
registeredClasses: string[]
|
|
47
|
+
units: string[]
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface SwiftProjectPreparation {
|
|
51
|
+
headerProducers: string[]
|
|
52
|
+
objcImplementations?: SwiftObjCImplementationPlan
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** project-relative original clang inputs; no host paths cross the compile boundary. */
|
|
56
|
+
export interface SwiftNativeTarget {
|
|
57
|
+
name: string
|
|
58
|
+
deploymentTarget: string | null
|
|
59
|
+
headers: string[]
|
|
60
|
+
publicHeaders: string[]
|
|
61
|
+
bridgingHeader: string | null
|
|
62
|
+
prefixHeader: string | null
|
|
63
|
+
headerSearchPaths: string[]
|
|
64
|
+
frameworkSearchPaths: string[]
|
|
65
|
+
flags: string[]
|
|
66
|
+
cxxFlags: string[]
|
|
67
|
+
fileFlags: Record<string, string[]>
|
|
68
|
+
sourceDirectories: Record<string, string>
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function isSwiftNativeTargets(value: unknown): value is SwiftNativeTarget[] {
|
|
72
|
+
const strings = (value: unknown): value is string[] =>
|
|
73
|
+
Array.isArray(value) &&
|
|
74
|
+
value.every((item: unknown) => typeof item === 'string' && !item.includes('\0'))
|
|
75
|
+
const paths = (value: unknown): value is string[] =>
|
|
76
|
+
strings(value) && value.every(isSwiftResourcePath)
|
|
77
|
+
return (
|
|
78
|
+
Array.isArray(value) &&
|
|
79
|
+
value.length <= 128 &&
|
|
80
|
+
value.every((target: unknown) => {
|
|
81
|
+
if (!target || typeof target !== 'object') return false
|
|
82
|
+
const field = (name: string): unknown => Reflect.get(target, name)
|
|
83
|
+
const nullablePath = (name: string) =>
|
|
84
|
+
field(name) === null || isSwiftResourcePath(field(name))
|
|
85
|
+
const perFile = field('fileFlags')
|
|
86
|
+
const directories = field('sourceDirectories')
|
|
87
|
+
const searches = field('headerSearchPaths')
|
|
88
|
+
const frameworks = field('frameworkSearchPaths')
|
|
89
|
+
const deployment = field('deploymentTarget')
|
|
90
|
+
return (
|
|
91
|
+
typeof field('name') === 'string' &&
|
|
92
|
+
/^[A-Za-z_]\w*$/.test(String(field('name'))) &&
|
|
93
|
+
(deployment === null ||
|
|
94
|
+
(typeof deployment === 'string' && /^\d+(?:\.\d+){0,2}$/.test(deployment))) &&
|
|
95
|
+
paths(field('headers')) &&
|
|
96
|
+
paths(field('publicHeaders')) &&
|
|
97
|
+
nullablePath('bridgingHeader') &&
|
|
98
|
+
nullablePath('prefixHeader') &&
|
|
99
|
+
strings(searches) &&
|
|
100
|
+
searches.every((item) => item === '.' || isSwiftResourcePath(item)) &&
|
|
101
|
+
strings(frameworks) &&
|
|
102
|
+
frameworks.every((item) => item === '.' || isSwiftResourcePath(item)) &&
|
|
103
|
+
strings(field('flags')) &&
|
|
104
|
+
strings(field('cxxFlags')) &&
|
|
105
|
+
!!perFile &&
|
|
106
|
+
typeof perFile === 'object' &&
|
|
107
|
+
!Array.isArray(perFile) &&
|
|
108
|
+
Object.entries(perFile).every(
|
|
109
|
+
([file, flags]) => isSwiftResourcePath(file) && strings(flags),
|
|
110
|
+
) &&
|
|
111
|
+
!!directories &&
|
|
112
|
+
typeof directories === 'object' &&
|
|
113
|
+
!Array.isArray(directories) &&
|
|
114
|
+
Object.entries(directories).every(
|
|
115
|
+
([file, directory]) =>
|
|
116
|
+
isSwiftResourcePath(file) &&
|
|
117
|
+
(directory === '.' || isSwiftResourcePath(directory)),
|
|
118
|
+
)
|
|
119
|
+
)
|
|
120
|
+
})
|
|
121
|
+
)
|
|
122
|
+
}
|
|
123
|
+
|
|
25
124
|
export interface SwiftObjCImplementationPreparation {
|
|
26
125
|
receipt: string
|
|
27
126
|
objects: { target: string; source: string; file: string }[]
|
package/src/target-matcher.ts
CHANGED
|
@@ -43,7 +43,12 @@ export function filterTargetNodes<
|
|
|
43
43
|
)
|
|
44
44
|
return false
|
|
45
45
|
if (!regex) return matcher.type !== 'text' || node.text === matcher.value
|
|
46
|
-
|
|
46
|
+
// detox iOS compares its first regex match's range with the entire value.
|
|
47
|
+
const matches = (value: unknown) => {
|
|
48
|
+
if (typeof value !== 'string') return false
|
|
49
|
+
const match = regex.exec(value)
|
|
50
|
+
return match !== null && match.index === 0 && match[0].length === value.length
|
|
51
|
+
}
|
|
47
52
|
if (matcher.type === 'id') return matches(node.testID) || matches(node.id)
|
|
48
53
|
if (matcher.type === 'text') return matches(node.text)
|
|
49
54
|
return matches(node.accessibilityLabel || (node.accessible ? node.text : null))
|
package/src/vite-plugin.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import crypto from 'crypto'
|
|
1
2
|
// peach vite plugin — use in any vite project to get react-native resolution,
|
|
2
3
|
// native dep stubbing, and external app support.
|
|
3
4
|
//
|
|
@@ -7,8 +8,6 @@
|
|
|
7
8
|
//
|
|
8
9
|
// // with external app:
|
|
9
10
|
// export default defineConfig({ plugins: [sootsim({ app: '~/my-rn-app' })] })
|
|
10
|
-
|
|
11
|
-
import crypto from 'crypto'
|
|
12
11
|
import fs from 'fs'
|
|
13
12
|
import { createRequire } from 'module'
|
|
14
13
|
import { runInNewContext, Script } from 'node:vm'
|
|
@@ -19,6 +18,12 @@ import { minifySync, transformSync } from 'rolldown/utils'
|
|
|
19
18
|
import { type Plugin, transformWithOxc } from 'vite'
|
|
20
19
|
import { resolveOneNativeBackend } from '../../contrast-bundler/src/oneFramework.ts'
|
|
21
20
|
import { transformFlowSource } from '../../peach-compat/src/flow-strip.ts'
|
|
21
|
+
import { getCliRuntime } from './cli-runtime.ts'
|
|
22
|
+
import {
|
|
23
|
+
isEngineReactImporter,
|
|
24
|
+
isWorkerReactBridgeImporter,
|
|
25
|
+
keepsRealReact,
|
|
26
|
+
} from './react-bridge-importers.ts'
|
|
22
27
|
import { renderWorkerSystemChunk } from './worker-system-chunks.ts'
|
|
23
28
|
|
|
24
29
|
declare module '@babel/core' {
|
|
@@ -41,12 +46,6 @@ import {
|
|
|
41
46
|
compatStubsForBuildResolver,
|
|
42
47
|
reactNativeDeepStubsForBuildResolver,
|
|
43
48
|
} from '../../peach-compat/src/stub-manifest.ts'
|
|
44
|
-
import { WEBVIEW_SAME_ORIGIN_BOOTSTRAP_SOURCE } from '../../peach-engine/src/components/native-ui/webview-frame-bridge.ts'
|
|
45
|
-
import {
|
|
46
|
-
isExpoHostSocketModule,
|
|
47
|
-
isReactNativeEnvironmentSetupModule,
|
|
48
|
-
} from '../../peach-engine/src/guest-module-overrides.ts'
|
|
49
|
-
import { readPeachWarmManifest } from '../../peach-engine/src/peach-warm-manifest.ts'
|
|
50
49
|
import {
|
|
51
50
|
assertPeachPortEnvironment,
|
|
52
51
|
resolveSootsimBridgePort,
|
|
@@ -420,9 +419,9 @@ export function sootsim(options: SootSimOptions = {}): Plugin[] {
|
|
|
420
419
|
function hostEnvironmentBootstrapRedirect(): Plugin {
|
|
421
420
|
const target = '\0peach:host-environment-bootstrap'
|
|
422
421
|
const isHostBootstrap = (id: string) =>
|
|
423
|
-
isExpoHostSocketModule(id) ||
|
|
422
|
+
getCliRuntime().guest_module_overrides.isExpoHostSocketModule(id) ||
|
|
424
423
|
((id.startsWith('react-native/') || id.includes('/react-native/')) &&
|
|
425
|
-
isReactNativeEnvironmentSetupModule(id))
|
|
424
|
+
getCliRuntime().guest_module_overrides.isReactNativeEnvironmentSetupModule(id))
|
|
426
425
|
return {
|
|
427
426
|
name: 'peach-host-environment-bootstrap',
|
|
428
427
|
enforce: 'pre',
|
|
@@ -546,7 +545,7 @@ function warmManifestJsonPlugin(): Plugin {
|
|
|
546
545
|
const filename = id.slice(marker.length, -3)
|
|
547
546
|
this.addWatchFile(filename)
|
|
548
547
|
const value: unknown = JSON.parse(fs.readFileSync(filename, 'utf8'))
|
|
549
|
-
const manifest = readPeachWarmManifest(value)
|
|
548
|
+
const manifest = getCliRuntime().peach_warm_manifest.readPeachWarmManifest(value)
|
|
550
549
|
const entries = [
|
|
551
550
|
manifest.home,
|
|
552
551
|
...Object.values(manifest.launches),
|
|
@@ -1805,21 +1804,11 @@ function reactBridgePlugin(): Plugin {
|
|
|
1805
1804
|
if ((options as { scan?: boolean })?.scan || options?.ssr) return null
|
|
1806
1805
|
|
|
1807
1806
|
// only redirect imports from peachsim, peach-engine, peach-compat, and react-reconciler
|
|
1808
|
-
const shouldRedirect =
|
|
1809
|
-
importer.includes('/peachsim/src/') ||
|
|
1810
|
-
importer.includes('/peach-engine/src/') ||
|
|
1811
|
-
importer.includes('/peach-compat/src/') ||
|
|
1812
|
-
importer.includes('/peach-compat/dist-pressability/') ||
|
|
1813
|
-
importer.includes('/peach-kit/src/') ||
|
|
1814
|
-
importer.includes('react-reconciler')
|
|
1807
|
+
const shouldRedirect = isEngineReactImporter(importer)
|
|
1815
1808
|
|
|
1816
1809
|
if (!shouldRedirect) return null
|
|
1817
1810
|
|
|
1818
|
-
|
|
1819
|
-
if (importer.includes('react-bridge')) return null
|
|
1820
|
-
|
|
1821
|
-
// stub-registry needs the real React (with __CLIENT_INTERNALS) for bundle stubs
|
|
1822
|
-
if (importer.includes('stub-registry')) return null
|
|
1811
|
+
if (keepsRealReact(importer)) return null
|
|
1823
1812
|
|
|
1824
1813
|
redirectCount++
|
|
1825
1814
|
if (redirectCount <= 10) {
|
|
@@ -1851,28 +1840,13 @@ export function workerReactBridgePlugin(): Plugin {
|
|
|
1851
1840
|
// skip during dep scanning / SSR
|
|
1852
1841
|
if ((options as { scan?: boolean })?.scan || options?.ssr) return null
|
|
1853
1842
|
|
|
1854
|
-
// don't redirect react-bridge's own import of react (avoid infinite loop)
|
|
1855
|
-
if (importer.includes('react-bridge')) return null
|
|
1856
|
-
|
|
1857
|
-
// stub-registry needs the real React (with __CLIENT_INTERNALS) for bundle stubs
|
|
1858
|
-
if (importer.includes('stub-registry')) return null
|
|
1859
|
-
|
|
1860
1843
|
// redirect react imports from peachsim, peach-engine, peach-compat, react-reconciler,
|
|
1861
1844
|
// and any pure-JS RN-ecosystem package the bundle pulls in. without this
|
|
1862
1845
|
// redirect, packages like react-native-drawer-layout / use-latest-callback
|
|
1863
1846
|
// call into a separate React instance than the renderer/bridge does, so
|
|
1864
1847
|
// their useRef/useEffect refs collide with the engine's hooks state and
|
|
1865
1848
|
// we hit "Maximum update depth exceeded" infinite-loop renders.
|
|
1866
|
-
|
|
1867
|
-
importer.includes('/peachsim/src/') ||
|
|
1868
|
-
importer.includes('/peach-engine/src/') ||
|
|
1869
|
-
importer.includes('/peach-compat/src/') ||
|
|
1870
|
-
importer.includes('/peach-compat/dist-pressability/') ||
|
|
1871
|
-
importer.includes('/peach-kit/src/') ||
|
|
1872
|
-
importer.includes('react-reconciler') ||
|
|
1873
|
-
importer.includes('/node_modules/')
|
|
1874
|
-
|
|
1875
|
-
if (!shouldRedirect) return null
|
|
1849
|
+
if (!isWorkerReactBridgeImporter(importer)) return null
|
|
1876
1850
|
|
|
1877
1851
|
return { id: reactBridgePath, external: false }
|
|
1878
1852
|
},
|
|
@@ -2719,7 +2693,7 @@ export function expoDomComponentsPlugin(
|
|
|
2719
2693
|
window.process.env = window.process.env || {};
|
|
2720
2694
|
window.process.env.NODE_ENV = window.process.env.NODE_ENV || 'development';
|
|
2721
2695
|
window.process.env.EXPO_OS = 'web';
|
|
2722
|
-
${WEBVIEW_SAME_ORIGIN_BOOTSTRAP_SOURCE}
|
|
2696
|
+
${getCliRuntime().components_native_ui_webview_frame_bridge.WEBVIEW_SAME_ORIGIN_BOOTSTRAP_SOURCE}
|
|
2723
2697
|
(function () {
|
|
2724
2698
|
// metro-style require shim for expo's dom closure: classic scripts
|
|
2725
2699
|
// run before module imports evaluate, so this covers eval-time
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import fs from 'node:fs'
|
|
2
2
|
import { createRequire } from 'node:module'
|
|
3
3
|
import { Worker } from 'node:worker_threads'
|
|
4
|
-
import { PAGE_DELIVERED_CHUNKS_NAME_SUFFIX } from '../../peach-engine/src/render-worker/boot-worker-kickoff.ts'
|
|
5
4
|
import { isRecord } from './is-record'
|
|
5
|
+
import { PAGE_DELIVERED_CHUNKS_NAME_SUFFIX } from './workerChunkContract.ts'
|
|
6
6
|
|
|
7
7
|
const require = createRequire(import.meta.url)
|
|
8
8
|
const systemRuntime = fs.readFileSync(require.resolve('systemjs/dist/s.min.js'), 'utf8')
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// the kickoff ends the name of each worker it starts with this suffix. that
|
|
2
|
+
// worker's loader then links each Home chunk from the body the kickoff posts
|
|
3
|
+
// (`peach-chunk-list`, then one `peach-chunk-body` per url) instead of
|
|
4
|
+
// downloading it again (worker-system-chunks.ts).
|
|
5
|
+
export const PAGE_DELIVERED_CHUNKS_NAME_SUFFIX = ':page-chunks'
|
package/src/worklets-babel.ts
CHANGED
|
@@ -69,18 +69,37 @@ const pendingWorkletTransforms = new Map<
|
|
|
69
69
|
export function shouldApplyWorkletsPlugin(id: string, code: string): boolean {
|
|
70
70
|
if (!/\.(tsx?|jsx?|mjs|cjs|mts|cts)$/.test(id)) return false
|
|
71
71
|
if (REANIMATED_IGNORED_PATHS_REGEX.test(id)) return false
|
|
72
|
+
if (!REANIMATED_WORKLETIZATION_REGEX.test(code)) return false
|
|
72
73
|
// sootsim engine source has local helpers named like upstream reanimated
|
|
73
|
-
// hooks.
|
|
74
|
-
//
|
|
75
|
-
//
|
|
74
|
+
// hooks. without an upstream import, require an authored worklet directive
|
|
75
|
+
// before letting the plugin rewrite callbacks. keyboard hooks and shared
|
|
76
|
+
// worklet helpers need no direct reanimated import.
|
|
76
77
|
if (
|
|
77
78
|
id.includes(SOOTSIM_ENGINE_SRC_PATH) &&
|
|
78
79
|
!id.includes(SOOTSIM_ENGINE_TEST_FIXTURE_PATH) &&
|
|
79
80
|
!REANIMATED_IMPORT_REGEX.test(code)
|
|
80
81
|
) {
|
|
81
|
-
return false
|
|
82
|
+
if (!/['"]worklet['"]/.test(code)) return false
|
|
83
|
+
const { parseSync, types }: typeof import('@babel/core') =
|
|
84
|
+
sootsimPluginRequire('@babel/core')
|
|
85
|
+
const syntax = parseSync(code, {
|
|
86
|
+
filename: id,
|
|
87
|
+
babelrc: false,
|
|
88
|
+
configFile: false,
|
|
89
|
+
parserOpts: {
|
|
90
|
+
plugins: isTypescriptFile(id) ? ['typescript', 'jsx'] : ['jsx'],
|
|
91
|
+
},
|
|
92
|
+
})
|
|
93
|
+
let hasWorkletDirective = false
|
|
94
|
+
if (syntax) {
|
|
95
|
+
types.traverseFast(syntax, (node) => {
|
|
96
|
+
if (node.type === 'Directive' && node.value.value === 'worklet')
|
|
97
|
+
hasWorkletDirective = true
|
|
98
|
+
})
|
|
99
|
+
}
|
|
100
|
+
return hasWorkletDirective
|
|
82
101
|
}
|
|
83
|
-
return
|
|
102
|
+
return true
|
|
84
103
|
}
|
|
85
104
|
|
|
86
105
|
function isEngineStandIn(id: string): boolean {
|