peachsim 0.1.1641 → 0.1.1653
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/cli/app-bundle-resources.ts +57 -0
- package/cli/app-catalog.ts +1 -1
- package/cli/app-fonts.ts +11 -80
- package/cli/app-splash.ts +18 -12
- package/cli/bridge-flow-runner.ts +11 -7
- package/cli/cloud-client.ts +10 -13
- package/cli/command-registry.ts +13 -4
- package/cli/commands/box.ts +4 -4
- package/cli/commands/control.ts +105 -53
- package/cli/commands/coverage-parser.ts +67 -0
- package/cli/commands/coverage.ts +550 -0
- package/cli/commands/debug.ts +9 -18
- package/cli/commands/desktop.ts +19 -7
- package/cli/commands/device.ts +14 -9
- package/cli/commands/guest-host.ts +6 -10
- package/cli/commands/inspect/core.ts +81 -17
- package/cli/commands/inspect.ts +13 -8
- package/cli/commands/kotlin.ts +2 -2
- package/cli/commands/maestro-compare.ts +1 -1
- package/cli/commands/platform.ts +20 -11
- package/cli/commands/preview.ts +16 -18
- package/cli/commands/runtime.ts +3 -2
- package/cli/commands/screenshot-layers.ts +1 -1
- package/cli/commands/screenshot.ts +1 -1
- package/cli/commands/serve.ts +5 -1
- package/cli/commands/support.ts +4 -4
- package/cli/commands/three-mode.ts +22 -15
- package/cli/commands/upload.ts +44 -45
- package/cli/current-sim.ts +38 -0
- package/cli/desktop-companion.ts +36 -8
- package/cli/device-option.ts +1 -1
- package/cli/drivers/playwright.ts +40 -0
- package/cli/drivers/types.ts +4 -0
- package/cli/help-core.ts +1 -1
- package/cli/internal-child.ts +2 -1
- package/cli/main.ts +9 -3
- package/cli/outbound-endpoints.ts +15 -5
- package/cli/output-redaction.ts +39 -14
- package/cli/remote-simulators.ts +4 -1
- package/cli/scene-video.ts +5 -2
- package/cli/send-to-box.ts +7 -10
- package/cli/telemetry.ts +1 -1
- package/cli/ws-bridge.ts +8 -1
- package/detox/attempt-events.cjs +3 -1
- package/detox/attempt-events.d.cts +1 -1
- package/detox/expectations.ts +108 -99
- package/detox/frame-offset.d.mts +6 -0
- package/detox/frame-offset.mjs +35 -0
- package/detox/gestures.ts +6 -18
- package/detox/index.ts +169 -101
- package/detox/jest-preset.cjs +1 -3
- package/detox/jest-transform.cjs +4 -0
- package/detox/matchers.ts +3 -0
- package/detox/motion-change.cjs +52 -118
- package/detox/motion-change.d.cts +6 -27
- package/detox/motion-leg-starts.cjs +20 -0
- package/detox/motion-leg-starts.d.cts +8 -0
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +3 -3
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +65 -1
- package/dist-lib/bridge-contract-input.mjs +63 -1
- package/dist-lib/bridge-contract.cjs +19 -1
- package/dist-lib/bridge-contract.mjs +17 -1
- package/dist-lib/bundle-channel.cjs +38332 -14940
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/cloud-test-args.cjs +1 -1
- package/dist-lib/cloud-test-args.mjs +1 -1
- package/dist-lib/cloud.cjs +1 -1
- package/dist-lib/cloud.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/config.mjs +5 -3
- package/dist-lib/detox/index.cjs +1247 -4511
- package/dist-lib/detox/jest-preset.cjs +1 -3
- package/dist-lib/detox/jest-transform.cjs +4 -0
- package/dist-lib/dev-bundle-resolution.cjs +28 -24
- package/dist-lib/expo-swift-bundle.cjs +35243 -13172
- package/dist-lib/expo-swift-metadata.cjs +1 -1
- package/dist-lib/expo-swift-metadata.mjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +45285 -63163
- package/dist-lib/host/fetch-proxy-handler.cjs +3544 -11
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +1997 -2069
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/jump-to-source-native.cjs +1 -1
- package/dist-lib/kotlin-host.cjs +2 -2
- package/dist-lib/menu.cjs +14 -6
- package/dist-lib/menu.mjs +14 -6
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.mjs +1 -1
- package/dist-lib/metro-production-bundle.cjs +1 -1
- package/dist-lib/metro-production-bundle.mjs +1 -1
- package/dist-lib/metro.cjs +468 -563
- package/dist-lib/native-app-identity-project.cjs +128 -292
- package/dist-lib/native-app-identity-project.mjs +1262 -51
- package/dist-lib/native-app-identity.cjs +8 -3
- package/dist-lib/native-app-identity.mjs +8 -3
- package/dist-lib/native-firebase-metadata.cjs +1 -1
- package/dist-lib/native-firebase-metadata.mjs +1 -1
- package/dist-lib/plist.cjs +2 -244
- package/dist-lib/plist.mjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/public-origins-lib-esm.json +290 -0
- package/dist-lib/public-origins-lib-static.json +1 -0
- package/dist-lib/public-origins-lib.json +1852 -0
- package/dist-lib/react-native-host-modules.cjs +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +14 -253
- package/dist-lib/sdk.cjs +84 -16
- package/dist-lib/sdk.mjs +82 -15
- package/dist-lib/skills.cjs +51248 -75450
- package/dist-lib/swift-compile.cjs +26154 -1245
- package/dist-lib/swift-compile.mjs +26151 -1230
- package/dist-lib/swift-package.cjs +79 -1
- package/dist-lib/swift-package.mjs +75 -1
- package/dist-lib/swift-submit.cjs +1 -1
- package/dist-lib/swift-submit.mjs +1 -1
- package/dist-lib/swift-toolchain.cjs +1 -1
- package/dist-lib/swift.cjs +1 -1
- package/dist-lib/vite-swift.cjs +34394 -12323
- package/dist-lib/vite.cjs +373 -298
- package/dist-lib/worklet-executable.cjs +1 -1
- package/dist-lib/worklet-executable.mjs +1 -1
- package/dist-types/packages/peach-compat/src/engine-config.d.ts +2 -0
- package/dist-types/packages/peach-compat/src/stubs/form-sheet-spring.d.ts +9 -0
- package/dist-types/packages/peach-compat/src/stubs/native-evaluation-lease.d.ts +47 -0
- package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +113 -0
- package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-gesture-handler.d.ts +154 -0
- package/dist-types/packages/peach-compat/src/stubs/screen-transition-math.d.ts +756 -0
- package/dist-types/packages/peach-compat/src/stubs/transition-scalar.d.ts +25 -0
- package/dist-types/packages/peach-engine/src/billing/plans.d.ts +64 -0
- package/dist-types/packages/peach-engine/src/browser-page-target.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/bundle-platform-url.d.ts +3 -0
- package/dist-types/packages/peach-engine/src/capture/browser-accessibility-host.d.ts +3 -0
- package/dist-types/packages/peach-engine/src/capture/browser-composite.d.ts +55 -0
- package/dist-types/packages/peach-engine/src/capture/browserAccessibilityContract.d.ts +27 -0
- package/dist-types/packages/peach-engine/src/capture/nativeScreenCaptureContract.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/cli-companion.d.ts +36 -0
- package/dist-types/packages/peach-engine/src/components/native-ui/webview-frame-bridge.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/config.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/engine/android-stretch-effect.d.ts +57 -0
- package/dist-types/packages/peach-engine/src/engine/animated-driven-style.d.ts +47 -0
- package/dist-types/packages/peach-engine/src/engine/animated-value.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/engine/animated.d.ts +195 -0
- package/dist-types/packages/peach-engine/src/engine/animation-clockContract.d.ts +15 -0
- package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +148 -0
- package/dist-types/packages/peach-engine/src/engine/app-catalog-wire.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/engine/app-font-registry.d.ts +87 -0
- package/dist-types/packages/peach-engine/src/engine/attributed-paragraph-paint.d.ts +7 -0
- package/dist-types/packages/peach-engine/src/engine/attributed-paragraph.d.ts +123 -0
- package/dist-types/packages/peach-engine/src/engine/audioContract.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +93 -0
- package/dist-types/packages/peach-engine/src/engine/canvaskit-renderer.d.ts +216 -0
- package/dist-types/packages/peach-engine/src/engine/config-plugin-fonts.d.ts +40 -0
- package/dist-types/packages/peach-engine/src/engine/config-plugin-splash.d.ts +25 -0
- package/dist-types/packages/peach-engine/src/engine/cull-visibility.d.ts +44 -0
- package/dist-types/packages/peach-engine/src/engine/damage-rect.d.ts +19 -0
- package/dist-types/packages/peach-engine/src/engine/engine-resource.d.ts +6 -0
- package/dist-types/packages/peach-engine/src/engine/expo-manifest.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/engine/fiber-debug-metadata.d.ts +30 -0
- package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +139 -0
- package/dist-types/packages/peach-engine/src/engine/generated/sf-pro-font.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +31 -0
- package/dist-types/packages/peach-engine/src/engine/host-composite.d.ts +100 -0
- package/dist-types/packages/peach-engine/src/engine/hosted-semantics.d.ts +49 -0
- package/dist-types/packages/peach-engine/src/engine/image-audit.d.ts +70 -0
- package/dist-types/packages/peach-engine/src/engine/image-loader.d.ts +350 -0
- package/dist-types/packages/peach-engine/src/engine/inspect-info.d.ts +27 -0
- package/dist-types/packages/peach-engine/src/engine/inspect-outline.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/engine/inspect-visibility.d.ts +33 -0
- package/dist-types/packages/peach-engine/src/engine/ios-fast-scroll.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/engine/layout-sab.d.ts +43 -0
- package/dist-types/packages/peach-engine/src/engine/liquid-glass-rect.d.ts +23 -0
- package/dist-types/packages/peach-engine/src/engine/liquid-glass-shaders.d.ts +9 -0
- package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +283 -0
- package/dist-types/packages/peach-engine/src/engine/live-object-counts.d.ts +6 -0
- package/dist-types/packages/peach-engine/src/engine/lottie-runtime.d.ts +32 -0
- package/dist-types/packages/peach-engine/src/engine/lottie-types.d.ts +138 -0
- package/dist-types/packages/peach-engine/src/engine/memory-counts.d.ts +27 -0
- package/dist-types/packages/peach-engine/src/engine/metalDirectContract.d.ts +108 -0
- package/dist-types/packages/peach-engine/src/engine/metalShaderContract.d.ts +217 -0
- package/dist-types/packages/peach-engine/src/engine/native-animation-driver.d.ts +112 -0
- package/dist-types/packages/peach-engine/src/engine/native-animation-graph.d.ts +62 -0
- package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +133 -0
- package/dist-types/packages/peach-engine/src/engine/native-resources.d.ts +26 -0
- package/dist-types/packages/peach-engine/src/engine/nativeReanimatedContract.d.ts +25 -0
- package/dist-types/packages/peach-engine/src/engine/nativeReplayContract.d.ts +64 -0
- package/dist-types/packages/peach-engine/src/engine/node.d.ts +589 -0
- package/dist-types/packages/peach-engine/src/engine/paint-boundary-types.d.ts +112 -0
- package/dist-types/packages/peach-engine/src/engine/paint-boundary.d.ts +57 -0
- package/dist-types/packages/peach-engine/src/engine/portalContract.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/engine/portals.d.ts +20 -0
- package/dist-types/packages/peach-engine/src/engine/render-damage.d.ts +107 -0
- package/dist-types/packages/peach-engine/src/engine/riveContract.d.ts +420 -0
- package/dist-types/packages/peach-engine/src/engine/rn-spring.d.ts +51 -0
- package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +379 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-momentum-math.d.ts +152 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-pan-contacts.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-platform.d.ts +75 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-range.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-velocity.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/engine/scroll.d.ts +320 -0
- package/dist-types/packages/peach-engine/src/engine/signal.d.ts +7 -0
- package/dist-types/packages/peach-engine/src/engine/snapshot-cache-policy.d.ts +6 -0
- package/dist-types/packages/peach-engine/src/engine/svg-geometry.d.ts +41 -0
- package/dist-types/packages/peach-engine/src/engine/text-attachment-paragraphs.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/engine/text-decoration.d.ts +11 -0
- package/dist-types/packages/peach-engine/src/engine/text-line-break.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/engine/text-paint-receipt.d.ts +98 -0
- package/dist-types/packages/peach-engine/src/engine/text-paragraph.d.ts +11 -0
- package/dist-types/packages/peach-engine/src/engine/text-paragraphContract.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/engine/text-transform.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/engine/types.d.ts +657 -0
- package/dist-types/packages/peach-engine/src/engine/visible-frame.d.ts +54 -0
- package/dist-types/packages/peach-engine/src/engine/webrtcContract.d.ts +74 -0
- package/dist-types/packages/peach-engine/src/graphite-stats-fields.d.ts +184 -0
- package/dist-types/packages/peach-engine/src/guest-import-meta.d.ts +12 -0
- package/dist-types/packages/peach-engine/src/guest-module-overrides.d.ts +7 -0
- package/dist-types/packages/peach-engine/src/ios/app-card-types.d.ts +7 -0
- package/dist-types/packages/peach-engine/src/ios/apps/canvas-map-data.d.ts +177 -0
- package/dist-types/packages/peach-engine/src/ios/aux-home-scene.d.ts +54 -0
- package/dist-types/packages/peach-engine/src/ios/chrome-metrics.d.ts +47 -0
- package/dist-types/packages/peach-engine/src/ios/constants.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/ios/duo-housing.d.ts +37 -0
- package/dist-types/packages/peach-engine/src/ios/home/types.d.ts +29 -0
- package/dist-types/packages/peach-engine/src/ios/home-app-catalog.d.ts +43 -0
- package/dist-types/packages/peach-engine/src/ios/photo-store.d.ts +73 -0
- package/dist-types/packages/peach-engine/src/ios/photoLibraryContract.d.ts +166 -0
- package/dist-types/packages/peach-engine/src/ios/shell-controller-types.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/ios/shell-transition-debug.d.ts +18 -0
- package/dist-types/packages/peach-engine/src/metro-asset-path.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/metro-fingerprint-registry-client.d.ts +11 -0
- package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +38 -0
- package/dist-types/packages/peach-engine/src/native-preview-bundle.d.ts +44 -0
- package/dist-types/packages/peach-engine/src/observability/types.d.ts +74 -0
- package/dist-types/packages/peach-engine/src/peach-warm-manifest.d.ts +32 -0
- package/dist-types/packages/peach-engine/src/permissions/app-settings-client.d.ts +25 -0
- package/dist-types/packages/peach-engine/src/permissions/system-permission-types.d.ts +20 -0
- package/dist-types/packages/peach-engine/src/platform/android-back-panel.d.ts +131 -0
- package/dist-types/packages/peach-engine/src/platform/android-gesture-exclusion.d.ts +28 -0
- package/dist-types/packages/peach-engine/src/platform/android-predictive-back.d.ts +33 -0
- package/dist-types/packages/peach-engine/src/platform/system-bars-state.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/playwright-sim-host.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/preview/bundle-layout.d.ts +8 -0
- package/dist-types/packages/peach-engine/src/preview/bundle-variantContract.d.ts +24 -0
- package/dist-types/packages/peach-engine/src/preview/capture-bundle.d.ts +26 -0
- package/dist-types/packages/peach-engine/src/preview/compress-node.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/preview/compress.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/preview/presigned-upload.d.ts +60 -0
- package/dist-types/packages/peach-engine/src/preview/trace.d.ts +144 -0
- package/dist-types/packages/peach-engine/src/preview/upload-protocol.d.ts +152 -0
- package/dist-types/packages/peach-engine/src/profiler/animation-recording-loader.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/profiler/profile-trace.d.ts +4 -0
- package/dist-types/packages/peach-engine/src/react-bridge.d.ts +3 -0
- package/dist-types/packages/peach-engine/src/react-native/AppState.d.ts +45 -0
- package/dist-types/packages/peach-engine/src/react-native/Appearance.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/react-native/framework-colors-data.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/react-native/host-services.d.ts +42 -0
- package/dist-types/packages/peach-engine/src/react-native/layout-animation.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/react-native/platform-colors.d.ts +17 -0
- package/dist-types/packages/peach-engine/src/remote-stream/client-config.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +58 -0
- package/dist-types/packages/peach-engine/src/remote-stream/scene-recording.d.ts +45 -0
- package/dist-types/packages/peach-engine/src/render-worker/animated-drive-output.d.ts +35 -0
- package/dist-types/packages/peach-engine/src/render-worker/app-load.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/render-worker/aux-surface-types.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/render-worker/canvaskit-shared.d.ts +42 -0
- package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +434 -0
- package/dist-types/packages/peach-engine/src/render-worker/canvaskit-worker-init.d.ts +12 -0
- package/dist-types/packages/peach-engine/src/render-worker/compositor-backend.d.ts +31 -0
- package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +202 -0
- package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1945 -0
- package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/scroll-drag-resample.d.ts +44 -0
- package/dist-types/packages/peach-engine/src/render-worker/css-keyframes-drive.d.ts +36 -0
- package/dist-types/packages/peach-engine/src/render-worker/edit-menu-geometry.d.ts +8 -0
- package/dist-types/packages/peach-engine/src/render-worker/engine-resource-relay.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/render-worker/expo-widgetContract.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/render-worker/gesture-seam-protocol.d.ts +152 -0
- package/dist-types/packages/peach-engine/src/render-worker/graph-linked-value.d.ts +29 -0
- package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler-contract.d.ts +49 -0
- package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler.d.ts +12 -0
- package/dist-types/packages/peach-engine/src/render-worker/host-service-protocol.d.ts +756 -0
- package/dist-types/packages/peach-engine/src/render-worker/image-lifecycle-event.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/render-worker/image-pixel-contract.d.ts +48 -0
- package/dist-types/packages/peach-engine/src/render-worker/live-frame-mirror.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/render-worker/map-command-channel.d.ts +189 -0
- package/dist-types/packages/peach-engine/src/render-worker/mapNativeContract.d.ts +101 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-dynamic-synchronizable.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-menu-gesture.d.ts +9 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-ui-commandContract.d.ts +23 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-ui-protocol.d.ts +1087 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-widgetContract.d.ts +100 -0
- package/dist-types/packages/peach-engine/src/render-worker/nativeAnimMirrorContract.d.ts +174 -0
- package/dist-types/packages/peach-engine/src/render-worker/nativeSyncReplyContract.d.ts +11 -0
- package/dist-types/packages/peach-engine/src/render-worker/one-native-contentContract.d.ts +54 -0
- package/dist-types/packages/peach-engine/src/render-worker/pointerSampleContract.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +880 -0
- package/dist-types/packages/peach-engine/src/render-worker/reanimated-css-contract.d.ts +63 -0
- package/dist-types/packages/peach-engine/src/render-worker/reanimated-readiness.d.ts +29 -0
- package/dist-types/packages/peach-engine/src/render-worker/resilient-frame-clock.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/render-worker/retained-app-load.d.ts +20 -0
- package/dist-types/packages/peach-engine/src/render-worker/screen-edge-swipe-commit-protocol.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/render-worker/screen-form-sheet-commit-protocol.d.ts +26 -0
- package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror-tenant.d.ts +37 -0
- package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror.d.ts +164 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-event-registry.d.ts +119 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-gesture-regions.d.ts +41 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-protocol.d.ts +603 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-scene-schema.d.ts +101 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-tree-inline-sources.d.ts +13 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +87 -0
- package/dist-types/packages/peach-engine/src/render-worker/test-bridge-protocol.d.ts +47 -0
- package/dist-types/packages/peach-engine/src/render-worker/text-inputContract.d.ts +93 -0
- package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +102 -0
- package/dist-types/packages/peach-engine/src/render-worker/webgpu-frame-transaction.d.ts +292 -0
- package/dist-types/packages/peach-engine/src/render-worker/webgpu-readback-scheduler.d.ts +107 -0
- package/dist-types/packages/peach-engine/src/render-worker/webview-capture-protocol.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/render-worker/worker-input-runtime.d.ts +211 -0
- package/dist-types/packages/peach-engine/src/render-worker/worker-storage.d.ts +33 -0
- package/dist-types/packages/peach-engine/src/render-worker/worklet-runtime.d.ts +987 -0
- package/dist-types/packages/peach-engine/src/render-worker/worklet-sab.d.ts +24 -0
- package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +84 -0
- package/dist-types/packages/peach-engine/src/rolldown-production-fingerprint.d.ts +31 -0
- package/dist-types/packages/peach-engine/src/screenshots/timeline-assets.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/screenshots/tokens.d.ts +9 -0
- package/dist-types/packages/peach-engine/src/settings/devices.d.ts +70 -0
- package/dist-types/packages/peach-engine/src/settings/duo-fold-bus.d.ts +87 -0
- package/dist-types/packages/peach-engine/src/settings/interface-rotation.d.ts +30 -0
- package/dist-types/packages/peach-engine/src/settings/react-native-configuration.d.ts +12 -0
- package/dist-types/packages/peach-engine/src/settings/scene-geometryContract.d.ts +40 -0
- package/dist-types/packages/peach-engine/src/settings/store.d.ts +37 -0
- package/dist-types/packages/peach-engine/src/shell-events.d.ts +203 -0
- package/dist-types/packages/peach-engine/src/shell-intent.d.ts +68 -0
- package/dist-types/packages/peach-engine/src/sootsim-event.d.ts +35 -0
- package/dist-types/packages/peach-engine/src/top-overlay-state.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/web-authentication-automation-host.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/webAuthenticationContract.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/webview-automation-host.d.ts +180 -0
- package/dist-types/packages/peach-engine/src/wireframe-mode.d.ts +16 -0
- package/dist-types/packages/peach-globals/src/frameBreakdownContract.d.ts +16 -0
- package/dist-types/packages/peach-globals/src/index.d.ts +3311 -0
- package/dist-types/packages/peach-globals/src/nativeSurfaceContract.d.ts +76 -0
- package/dist-types/packages/peach-globals/src/pointerSourceEventContract.d.ts +8 -0
- package/dist-types/packages/peach-globals/src/profileTrace.d.ts +11 -0
- package/dist-types/packages/peach-globals/src/profilerContract.d.ts +223 -0
- package/dist-types/packages/peach-kit/src/capabilities.d.ts +721 -0
- package/dist-types/packages/peach-kit/src/internal.d.ts +4 -0
- package/dist-types/packages/peach-kit/src/materials/types.d.ts +27 -0
- package/dist-types/packages/peach-kit/src/materials/uikit-blur-material.d.ts +14 -0
- package/dist-types/packages/peach-kit/src/navigation-types.d.ts +11 -0
- package/dist-types/packages/peach-kit/src/react-bridge.d.ts +53 -0
- package/dist-types/packages/peach-kit/src/runtime.d.ts +26 -0
- package/dist-types/packages/peach-kit/src/ui/hosting-safe-area.d.ts +24 -0
- package/dist-types/packages/peach-kit/src/ui/popover-placement.d.ts +53 -0
- package/dist-types/packages/peach-kit/src/ui/presentationContract.d.ts +17 -0
- package/kotlin/ComposeSources/PeachComposeHost.kt +1 -1
- package/kotlin/JniSources/com/facebook/jni/HybridData.kt +0 -2
- package/kotlin/JniSources/dev/peach/jni/NativeBindings.kt +0 -2
- package/kotlin/JniTransportSources/dev/peach/jni/integration/JniTransport.kt +0 -2
- package/kotlin/README.md +6 -0
- package/package.json +22 -2
- package/runtime-companion.json +1 -0
- package/skills/contrast/SKILL.md +1 -0
- package/src/appBundleResourcesContract.ts +51 -0
- package/src/assetCatalogContract.ts +21 -0
- package/src/backend-origin.ts +3 -1
- package/src/bridge-contract-input.ts +84 -0
- package/src/bridge-contract.ts +35 -3
- package/src/browser-launch-policy.ts +1 -0
- package/src/bundle-channel.mjs +4 -2
- package/src/cli-runtime.ts +55 -0
- package/src/crash-fingerprint.ts +26 -0
- package/src/dev-bundle-resolution.ts +50 -23
- package/src/device-catalog.ts +1159 -0
- package/src/host/bridge-host.ts +20 -37
- package/src/host/browser-pointer.ts +71 -0
- package/src/host/dev-server-package-versions.ts +23 -0
- package/src/host/fetch-proxy-handler.ts +17 -4
- package/src/host/staged-host-files.ts +28 -4
- package/src/installed-package-versions.ts +142 -38
- package/src/kotlin-host.ts +1 -1
- package/src/launchMetadataContract.ts +1 -0
- package/src/menu.ts +12 -4
- package/src/metro-plugin.ts +4 -4
- package/src/metro-project-root.ts +68 -0
- package/src/native-app-identity-project.ts +47 -38
- package/src/nitro-adapter.lock.json +26 -0
- package/src/nitro-adapter.ts +103 -0
- package/src/nitro-bundle.ts +24 -10
- package/src/nitro-compile.ts +33 -51
- package/src/nitro-source.ts +177 -96
- package/src/nitroAdapterContract.ts +217 -0
- package/src/nitroContract.ts +24 -11
- package/src/process-group.ts +41 -34
- package/src/react-bridge-importers.ts +28 -0
- package/src/reactNativeConfigurationContract.ts +36 -0
- package/src/runtime-assets.ts +7 -2
- package/src/runtime-delivery.ts +8 -7
- package/src/runtimePlatformContract.ts +70 -0
- package/src/screenshots/frame-compose.ts +42 -43
- package/src/screenshots/org-deck.ts +9 -4
- package/src/screenshots/preset-names.ts +29 -0
- package/src/screenshots/registry.ts +5 -5
- package/src/screenshots/schema.ts +1 -1
- package/src/screenshots/screenshotContract.ts +971 -0
- package/src/settings-flags.ts +107 -0
- package/src/settingsContract.ts +609 -0
- package/src/storageSnapshotContract.ts +344 -0
- package/src/stub-pattern-matcher.ts +550 -0
- package/src/swift-compile.ts +926 -47
- package/src/swift-compiler-digest.ts +17 -3
- package/src/swift-distribution.lock.json +49 -22
- package/src/swift-host.ts +167 -52
- package/src/swift-objc-compile.ts +86 -26
- package/src/swift-objc-export.ts +532 -0
- package/src/swift-objc-import.ts +769 -0
- package/src/swift-objc-metadata.ts +285 -10
- package/src/swift-objc-sdk.ts +13970 -158
- package/src/swift-objc-standin.ts +137 -1
- package/src/swift-package.ts +94 -0
- package/src/swift-packages.ts +5 -5
- package/src/swift-root-lock.ts +241 -92
- package/src/swift-submit.ts +6 -0
- package/src/swiftContract.ts +99 -0
- package/src/target-matcher.ts +6 -1
- package/src/vite-plugin.ts +14 -40
- package/src/worker-system-chunks.ts +1 -1
- package/src/workerChunkContract.ts +5 -0
- package/src/worklets-babel.ts +24 -5
- package/src/xcode-project.ts +103 -11
- package/src/xcode-target-members.ts +10 -3
- package/cli/drivers/playwright-sim-host.ts +0 -825
- package/kotlin/fixtures/counter/Counter.d.kt.ts +0 -17
- package/kotlin/fixtures/counter/Counter.kt +0 -51
- package/kotlin/fixtures/counter/CounterApp.native.tsx +0 -61
- package/kotlin/fixtures/counter/CounterApp.tsx +0 -3
- package/kotlin/fixtures/counter/CounterScreen.d.kt.ts +0 -8
- package/kotlin/fixtures/counter/CounterScreen.kt +0 -56
- package/kotlin/fixtures/counter/app/_layout.tsx +0 -4
- package/kotlin/fixtures/counter/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/counter/app/routes.d.ts +0 -18
- package/kotlin/fixtures/counter/package.json +0 -20
- package/kotlin/fixtures/counter/tsconfig.json +0 -19
- package/kotlin/fixtures/counter/vite.config.ts +0 -20
- package/kotlin/fixtures/headless-counter/Headless.kt +0 -234
- package/kotlin/fixtures/import-animation/Animation.d.kt.ts +0 -7
- package/kotlin/fixtures/import-animation/Animation.kt +0 -80
- package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +0 -13
- package/kotlin/fixtures/import-animation/README.md +0 -24
- package/kotlin/fixtures/import-animation/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-animation/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-animation/app/routes.d.ts +0 -18
- package/kotlin/fixtures/import-animation/package.json +0 -23
- package/kotlin/fixtures/import-animation/tsconfig.json +0 -20
- package/kotlin/fixtures/import-animation/vite.config.ts +0 -20
- package/kotlin/fixtures/import-drawing/Drawing.d.kt.ts +0 -7
- package/kotlin/fixtures/import-drawing/Drawing.kt +0 -101
- package/kotlin/fixtures/import-drawing/ImportDrawing.native.tsx +0 -18
- package/kotlin/fixtures/import-drawing/README.md +0 -34
- package/kotlin/fixtures/import-drawing/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-drawing/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-drawing/package.json +0 -23
- package/kotlin/fixtures/import-drawing/tsconfig.json +0 -20
- package/kotlin/fixtures/import-drawing/vite.config.ts +0 -20
- package/kotlin/fixtures/import-editor/Editor.d.kt.ts +0 -7
- package/kotlin/fixtures/import-editor/Editor.kt +0 -59
- package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +0 -23
- package/kotlin/fixtures/import-editor/README.md +0 -27
- package/kotlin/fixtures/import-editor/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-editor/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-editor/package.json +0 -23
- package/kotlin/fixtures/import-editor/tsconfig.json +0 -20
- package/kotlin/fixtures/import-editor/vite.config.ts +0 -20
- package/kotlin/fixtures/import-effects/Effects.d.kt.ts +0 -7
- package/kotlin/fixtures/import-effects/Effects.kt +0 -87
- package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +0 -13
- package/kotlin/fixtures/import-effects/README.md +0 -19
- package/kotlin/fixtures/import-effects/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-effects/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-effects/package.json +0 -23
- package/kotlin/fixtures/import-effects/tsconfig.json +0 -20
- package/kotlin/fixtures/import-effects/vite.config.ts +0 -20
- package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +0 -13
- package/kotlin/fixtures/import-layout/Layout.d.kt.ts +0 -7
- package/kotlin/fixtures/import-layout/Layout.kt +0 -72
- package/kotlin/fixtures/import-layout/README.md +0 -24
- package/kotlin/fixtures/import-layout/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-layout/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-layout/package.json +0 -23
- package/kotlin/fixtures/import-layout/tsconfig.json +0 -20
- package/kotlin/fixtures/import-layout/vite.config.ts +0 -20
- package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +0 -18
- package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +0 -7
- package/kotlin/fixtures/import-navigation/Navigation.kt +0 -104
- package/kotlin/fixtures/import-navigation/README.md +0 -31
- package/kotlin/fixtures/import-navigation/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-navigation/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-navigation/package.json +0 -23
- package/kotlin/fixtures/import-navigation/tsconfig.json +0 -20
- package/kotlin/fixtures/import-navigation/vite.config.ts +0 -20
- package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +0 -29
- package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +0 -7
- package/kotlin/fixtures/import-overlays/Overlays.kt +0 -93
- package/kotlin/fixtures/import-overlays/README.md +0 -34
- package/kotlin/fixtures/import-overlays/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-overlays/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-overlays/package.json +0 -23
- package/kotlin/fixtures/import-overlays/tsconfig.json +0 -20
- package/kotlin/fixtures/import-overlays/vite.config.ts +0 -20
- package/kotlin/fixtures/import-resources/ImportResources.native.tsx +0 -18
- package/kotlin/fixtures/import-resources/README.md +0 -26
- package/kotlin/fixtures/import-resources/Resources.d.kt.ts +0 -6
- package/kotlin/fixtures/import-resources/Resources.kt +0 -72
- package/kotlin/fixtures/import-resources/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-resources/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-resources/package.json +0 -23
- package/kotlin/fixtures/import-resources/tsconfig.json +0 -20
- package/kotlin/fixtures/import-resources/vite.config.ts +0 -20
- package/kotlin/fixtures/import-scroll/ImportNested.native.tsx +0 -10
- package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +0 -13
- package/kotlin/fixtures/import-scroll/Nested.d.kt.ts +0 -4
- package/kotlin/fixtures/import-scroll/Nested.kt +0 -64
- package/kotlin/fixtures/import-scroll/README.md +0 -38
- package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +0 -7
- package/kotlin/fixtures/import-scroll/Scroll.kt +0 -91
- package/kotlin/fixtures/import-scroll/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-scroll/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-scroll/app/nested+spa.tsx +0 -1
- package/kotlin/fixtures/import-scroll/package.json +0 -23
- package/kotlin/fixtures/import-scroll/tsconfig.json +0 -20
- package/kotlin/fixtures/import-scroll/vite.config.ts +0 -20
- package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +0 -44
- package/kotlin/fixtures/import-selection/README.md +0 -32
- package/kotlin/fixtures/import-selection/Selection.d.kt.ts +0 -8
- package/kotlin/fixtures/import-selection/Selection.kt +0 -78
- package/kotlin/fixtures/import-selection/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-selection/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-selection/package.json +0 -23
- package/kotlin/fixtures/import-selection/tsconfig.json +0 -20
- package/kotlin/fixtures/import-selection/vite.config.ts +0 -20
- package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +0 -13
- package/kotlin/fixtures/import-surfaces/README.md +0 -22
- package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +0 -7
- package/kotlin/fixtures/import-surfaces/Surfaces.kt +0 -64
- package/kotlin/fixtures/import-surfaces/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-surfaces/package.json +0 -23
- package/kotlin/fixtures/import-surfaces/tsconfig.json +0 -20
- package/kotlin/fixtures/import-surfaces/vite.config.ts +0 -20
- package/kotlin/fixtures/import-values/ImportValues.native.tsx +0 -61
- package/kotlin/fixtures/import-values/README.md +0 -28
- package/kotlin/fixtures/import-values/Values.d.kt.ts +0 -15
- package/kotlin/fixtures/import-values/Values.kt +0 -84
- package/kotlin/fixtures/import-values/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-values/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-values/package.json +0 -23
- package/kotlin/fixtures/import-values/tsconfig.json +0 -20
- package/kotlin/fixtures/import-values/vite.config.ts +0 -20
- package/kotlin/fixtures/kotlin-app/app/build.gradle.kts +0 -30
- package/kotlin/fixtures/kotlin-app/app/src/main/AndroidManifest.xml +0 -13
- package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/MainActivity.kt +0 -60
- package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/ProbeApplication.kt +0 -18
- package/kotlin/fixtures/kotlin-app/build.gradle.kts +0 -5
- package/kotlin/fixtures/kotlin-app/gradle.properties +0 -4
- package/kotlin/fixtures/kotlin-app/settings.gradle.kts +0 -4
- package/kotlin/fixtures/kotlin-app-variants/Anim.kt +0 -62
- package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +0 -38
- package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +0 -36
- package/kotlin/fixtures/kotlin-app-variants/Bitmaps.kt +0 -50
- package/kotlin/fixtures/kotlin-app-variants/Browse.kt +0 -73
- package/kotlin/fixtures/kotlin-app-variants/Colors.kt +0 -41
- package/kotlin/fixtures/kotlin-app-variants/Controls.kt +0 -62
- package/kotlin/fixtures/kotlin-app-variants/Drag.kt +0 -56
- package/kotlin/fixtures/kotlin-app-variants/Draw.kt +0 -74
- package/kotlin/fixtures/kotlin-app-variants/Drawables.kt +0 -53
- package/kotlin/fixtures/kotlin-app-variants/Focus.kt +0 -62
- package/kotlin/fixtures/kotlin-app-variants/Form.kt +0 -47
- package/kotlin/fixtures/kotlin-app-variants/Icons.kt +0 -59
- package/kotlin/fixtures/kotlin-app-variants/Ime.kt +0 -53
- package/kotlin/fixtures/kotlin-app-variants/Lists.kt +0 -57
- package/kotlin/fixtures/kotlin-app-variants/Nav.kt +0 -47
- package/kotlin/fixtures/kotlin-app-variants/Note.kt +0 -40
- package/kotlin/fixtures/kotlin-app-variants/Overlays.kt +0 -56
- package/kotlin/fixtures/kotlin-app-variants/Pan.kt +0 -38
- package/kotlin/fixtures/kotlin-app-variants/Pickers.kt +0 -44
- package/kotlin/fixtures/kotlin-app-variants/Press.kt +0 -43
- package/kotlin/fixtures/kotlin-app-variants/Scroll.kt +0 -63
- package/kotlin/fixtures/kotlin-app-variants/Sheet.kt +0 -43
- package/kotlin/fixtures/kotlin-app-variants/Strings.kt +0 -49
- package/kotlin/fixtures/kotlin-app-variants/Tabs.kt +0 -47
- package/kotlin/fixtures/kotlin-app-variants/TextWidth.kt +0 -45
- package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +0 -50
- package/kotlin/fixtures/kotlin-app-variants/Transition.kt +0 -69
- package/kotlin/fixtures/kotlin-app-variants/ViewConfig.kt +0 -22
- package/kotlin/fixtures/kotlin-app-variants/Widgets.kt +0 -67
- package/kotlin/fixtures/runtime-state/RuntimeState.kt +0 -200
- package/kotlin/fork/README.md +0 -97
- package/kotlin/fork/build.sh +0 -176
- package/kotlin/fork/compose-worker-globals.patch +0 -1247
- package/kotlin/fork/fork.json +0 -46
- package/kotlin/fork/publish.ts +0 -99
- package/kotlin/fork/skia-android-shaping.patch +0 -189
- package/kotlin/fork/skiko-local.init.gradle +0 -10
- package/kotlin/fork/skiko-worker-clock.patch +0 -122
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { resolveListeningPid, resolveProcessCwd } from '../scripts/dev-server-scanner'
|
|
2
|
+
import { loopbackOriginOf } from './backend-origin'
|
|
3
|
+
import { MANIFEST_PROBE_TIMEOUT_MS } from './dev-bundle-resolution'
|
|
4
|
+
import { parseExpoManifestBody } from './expo-manifest-body'
|
|
5
|
+
|
|
6
|
+
// resolve a metro dev server's project root. Expo's middleware advertises it
|
|
7
|
+
// in X-React-Native-Project-Root, encoded with encodeURI. Older servers name it
|
|
8
|
+
// in extra.expoClient._internal.projectRoot. The local peach open path runs from the
|
|
9
|
+
// CLI's cwd, which almost never owns the bundle being opened (e.g.
|
|
10
|
+
// `peach open 8081` run from ~/contrast against a 3pc metro), so scanning cwd for
|
|
11
|
+
// font declarations finds nothing.
|
|
12
|
+
//
|
|
13
|
+
// a bare react-native packager serves no such manifest, so the same resolver
|
|
14
|
+
// asks the OS for the listening process's cwd. that is still the development
|
|
15
|
+
// server's project identity; the invoking CLI's cwd is never consulted.
|
|
16
|
+
//
|
|
17
|
+
// it waits on the same budget as the manifest resolution that found this dev
|
|
18
|
+
// server. a cold Expo Metro answers /status in 2-4s while it builds a bundle,
|
|
19
|
+
// and dropping the project there opens the app without its fonts, splash or
|
|
20
|
+
// Firebase config. a server that stays silent past the budget fails the open.
|
|
21
|
+
export async function resolveMetroProjectRoot(bundleUrl: string): Promise<string | null> {
|
|
22
|
+
const origin = loopbackOriginOf(bundleUrl)
|
|
23
|
+
if (!origin) return null
|
|
24
|
+
const controller = new AbortController()
|
|
25
|
+
const timer = setTimeout(() => controller.abort(), MANIFEST_PROBE_TIMEOUT_MS)
|
|
26
|
+
let servedManifest = false
|
|
27
|
+
let metroRunning = false
|
|
28
|
+
try {
|
|
29
|
+
const status = await fetch(`${origin}/status`, { signal: controller.signal })
|
|
30
|
+
const advertisedRoot = status.headers.get('X-React-Native-Project-Root')
|
|
31
|
+
if (status.ok && advertisedRoot) return decodeURI(advertisedRoot)
|
|
32
|
+
metroRunning = status.ok && (await status.text()).trim() === 'packager-status:running'
|
|
33
|
+
const res = await fetch(`${origin}/`, {
|
|
34
|
+
headers: { 'expo-platform': 'ios', Accept: 'application/json' },
|
|
35
|
+
signal: controller.signal,
|
|
36
|
+
})
|
|
37
|
+
if (res.ok) {
|
|
38
|
+
const manifest: unknown = parseExpoManifestBody(await res.text())
|
|
39
|
+
servedManifest = true
|
|
40
|
+
let root: unknown = manifest
|
|
41
|
+
for (const key of ['extra', 'expoClient', '_internal', 'projectRoot']) {
|
|
42
|
+
root =
|
|
43
|
+
typeof root === 'object' && root !== null ? Reflect.get(root, key) : undefined
|
|
44
|
+
}
|
|
45
|
+
if (typeof root === 'string' && root.length > 0) return root
|
|
46
|
+
}
|
|
47
|
+
} catch {
|
|
48
|
+
if (controller.signal.aborted)
|
|
49
|
+
throw new Error(
|
|
50
|
+
`Metro project root request timed out after ${MANIFEST_PROBE_TIMEOUT_MS / 1000}s: ${origin}. Wait for the dev server to finish starting or pass --project-root.`,
|
|
51
|
+
)
|
|
52
|
+
} finally {
|
|
53
|
+
clearTimeout(timer)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// a server that answered with a manifest has already told us everything it
|
|
57
|
+
// knows. if it did not name a project root there is none to learn, and asking
|
|
58
|
+
// the OS about the listening process would answer with whatever directory
|
|
59
|
+
// that process happens to sit in — which is the CLI's own cwd trap this
|
|
60
|
+
// function exists to avoid. only a server whose status identifies Metro
|
|
61
|
+
// and which served no manifest gets the process lookup.
|
|
62
|
+
if (servedManifest || !metroRunning) return null
|
|
63
|
+
|
|
64
|
+
const port = Number(new URL(origin).port)
|
|
65
|
+
if (!Number.isFinite(port) || port <= 0) return null
|
|
66
|
+
const pid = await resolveListeningPid(port)
|
|
67
|
+
return pid === null ? null : resolveProcessCwd(pid)
|
|
68
|
+
}
|
|
@@ -326,44 +326,8 @@ function readIosNativeAppIdentity(
|
|
|
326
326
|
parseInfoPlist: (source: string) => unknown,
|
|
327
327
|
iosTarget: string | undefined,
|
|
328
328
|
): NativeAppIdentity | null {
|
|
329
|
-
const
|
|
330
|
-
if (!
|
|
331
|
-
const projects = fs
|
|
332
|
-
.readdirSync(iosRoot, { withFileTypes: true })
|
|
333
|
-
.filter((entry) => entry.isDirectory() && entry.name.endsWith('.xcodeproj'))
|
|
334
|
-
if (projects.length === 0) return null
|
|
335
|
-
if (projects.length > 1 && !iosTarget) {
|
|
336
|
-
throw new NativeAppTargetSelectionError(
|
|
337
|
-
`native app identity requires a selected Xcode project; set withPeach's iosTarget to an app target in one of: ${projects.map((entry) => entry.name).join(', ')}`,
|
|
338
|
-
)
|
|
339
|
-
}
|
|
340
|
-
let project = projects[0]!
|
|
341
|
-
if (iosTarget && projects.length > 1) {
|
|
342
|
-
const matches = projects.filter((entry) =>
|
|
343
|
-
listXcodeAppTargets(path.join(iosRoot, entry.name), {
|
|
344
|
-
requireSources: false,
|
|
345
|
-
}).includes(iosTarget),
|
|
346
|
-
)
|
|
347
|
-
if (matches.length === 0) {
|
|
348
|
-
throw new Error(`native app identity has no application target ${iosTarget}`)
|
|
349
|
-
}
|
|
350
|
-
if (matches.length > 1) {
|
|
351
|
-
throw new Error(
|
|
352
|
-
`native app identity target ${iosTarget} is ambiguous across ${matches.map((entry) => entry.name).join(', ')}`,
|
|
353
|
-
)
|
|
354
|
-
}
|
|
355
|
-
project = matches[0]!
|
|
356
|
-
}
|
|
357
|
-
const xcodeproj = path.join(iosRoot, project.name)
|
|
358
|
-
const appTargets = listXcodeAppTargets(xcodeproj, { requireSources: false })
|
|
359
|
-
if (!iosTarget && appTargets.length > 1) {
|
|
360
|
-
throw new NativeAppTargetSelectionError(
|
|
361
|
-
`native app identity requires a selected app target; set withPeach's iosTarget to one of: ${appTargets.join(', ')}`,
|
|
362
|
-
)
|
|
363
|
-
}
|
|
364
|
-
const app = readXcodeAppTarget(xcodeproj, iosTarget ?? appTargets[0], 'Release', {
|
|
365
|
-
requireSources: false,
|
|
366
|
-
})
|
|
329
|
+
const app = readIosAppTarget(projectRoot, iosTarget)
|
|
330
|
+
if (!app) return null
|
|
367
331
|
const identity = readNativeAppIdentityFromXcodeTarget(app, parseInfoPlist)
|
|
368
332
|
const projectManifestPath = path.join(projectRoot, 'package.json')
|
|
369
333
|
const projectRequire = createRequire(projectManifestPath)
|
|
@@ -422,3 +386,48 @@ function readIosNativeAppIdentity(
|
|
|
422
386
|
}
|
|
423
387
|
return { ...identity, reanimatedStaticFeatureFlags: flags }
|
|
424
388
|
}
|
|
389
|
+
|
|
390
|
+
// native identity and copied resources must select the same application target.
|
|
391
|
+
export function readIosAppTarget(
|
|
392
|
+
projectRoot: string,
|
|
393
|
+
iosTarget?: string,
|
|
394
|
+
): XcodeAppTarget | null {
|
|
395
|
+
const iosRoot = path.join(projectRoot, 'ios')
|
|
396
|
+
if (!fs.existsSync(iosRoot)) return null
|
|
397
|
+
const projects = fs
|
|
398
|
+
.readdirSync(iosRoot, { withFileTypes: true })
|
|
399
|
+
.filter((entry) => entry.isDirectory() && entry.name.endsWith('.xcodeproj'))
|
|
400
|
+
if (projects.length === 0) return null
|
|
401
|
+
if (projects.length > 1 && !iosTarget) {
|
|
402
|
+
throw new NativeAppTargetSelectionError(
|
|
403
|
+
`native app identity requires a selected Xcode project; set withPeach's iosTarget to an app target in one of: ${projects.map((entry) => entry.name).join(', ')}`,
|
|
404
|
+
)
|
|
405
|
+
}
|
|
406
|
+
let project = projects[0]!
|
|
407
|
+
if (iosTarget && projects.length > 1) {
|
|
408
|
+
const matches = projects.filter((entry) =>
|
|
409
|
+
listXcodeAppTargets(path.join(iosRoot, entry.name), {
|
|
410
|
+
requireSources: false,
|
|
411
|
+
}).includes(iosTarget),
|
|
412
|
+
)
|
|
413
|
+
if (matches.length === 0) {
|
|
414
|
+
throw new Error(`native app identity has no application target ${iosTarget}`)
|
|
415
|
+
}
|
|
416
|
+
if (matches.length > 1) {
|
|
417
|
+
throw new Error(
|
|
418
|
+
`native app identity target ${iosTarget} is ambiguous across ${matches.map((entry) => entry.name).join(', ')}`,
|
|
419
|
+
)
|
|
420
|
+
}
|
|
421
|
+
project = matches[0]!
|
|
422
|
+
}
|
|
423
|
+
const xcodeproj = path.join(iosRoot, project.name)
|
|
424
|
+
const appTargets = listXcodeAppTargets(xcodeproj, { requireSources: false })
|
|
425
|
+
if (!iosTarget && appTargets.length > 1) {
|
|
426
|
+
throw new NativeAppTargetSelectionError(
|
|
427
|
+
`native app identity requires a selected app target; set withPeach's iosTarget to one of: ${appTargets.join(', ')}`,
|
|
428
|
+
)
|
|
429
|
+
}
|
|
430
|
+
return readXcodeAppTarget(xcodeproj, iosTarget ?? appTargets[0], 'Release', {
|
|
431
|
+
requireSources: false,
|
|
432
|
+
})
|
|
433
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": 1,
|
|
3
|
+
"platform": "ios",
|
|
4
|
+
"target": "wasm32-unknown-wasip1",
|
|
5
|
+
"recipe": "93ec12de28e70ccd6a0ff72c91fe59add61930da9b9f0c981c35b8ff64abdf8e",
|
|
6
|
+
"adapter": {
|
|
7
|
+
"sha256": "051a6905f1194aa18075d68e0444d30e69b4e52dc6017f3e70815a2403e3c306"
|
|
8
|
+
},
|
|
9
|
+
"headers": {
|
|
10
|
+
"reactNativeJsi": "96db4e758dd53e9320cef7cad485e00aa06e7a982cefd920f17007de8a5bd9f9",
|
|
11
|
+
"nitroModules": "372b6f69fc063a0b316792eec9b26f36063868dc206f169acbb5d993c6572f65"
|
|
12
|
+
},
|
|
13
|
+
"compiler": "swift-6.4.0-RELEASE-custom-0d775d32d7c74eae",
|
|
14
|
+
"sdk": {
|
|
15
|
+
"id": "swift-6.4.0-RELEASE_wasm-peach-f02bd198",
|
|
16
|
+
"checksum": "1e19ea768fd4e821aae34b8966c4ddcee45615c4b3cf018979b061aee2fb5504"
|
|
17
|
+
},
|
|
18
|
+
"framework": {
|
|
19
|
+
"distribution": "e3bdd3d8fa4f9993",
|
|
20
|
+
"wireAbi": "ed0b01fcc0a79236d88ef9ac7950ac30932dfc19c19112c69d1d6a039a489292"
|
|
21
|
+
},
|
|
22
|
+
"archive": {
|
|
23
|
+
"sha256": "1cf000ee821aaf65b04a3d6702c7d4341e450371cfd199e5887c6056f80af899",
|
|
24
|
+
"size": 31175
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// the private Nitro adapter archive an installed peach links into every Nitro
|
|
2
|
+
// compile: downloaded from PEACH_SWIFT_ENDPOINT, verified against the lock this
|
|
3
|
+
// build carries, then checked against the app's own original headers and the
|
|
4
|
+
// compiler, SDK and framework the module root compiles with
|
|
5
|
+
// (docs/swift-distribution.md). the adapter source never reaches this machine.
|
|
6
|
+
import fs from 'node:fs'
|
|
7
|
+
import path from 'node:path'
|
|
8
|
+
import { installVerifiedTarball } from '@contrast/runtime-delivery'
|
|
9
|
+
import { rnxHomeDir } from './home-paths'
|
|
10
|
+
import lockJson from './nitro-adapter.lock.json' with { type: 'json' }
|
|
11
|
+
import {
|
|
12
|
+
headerDigests,
|
|
13
|
+
NITRO_ADAPTER_MANIFEST,
|
|
14
|
+
nitroAdapterArchiveKey,
|
|
15
|
+
parseNitroAdapterLock,
|
|
16
|
+
verifyInstalledNitroAdapter,
|
|
17
|
+
type NitroAdapterLock,
|
|
18
|
+
type NitroAdapterManifest,
|
|
19
|
+
} from './nitroAdapterContract'
|
|
20
|
+
import { NITRO_GUEST_PLATFORM } from './nitroContract'
|
|
21
|
+
import { swiftDistributionAt, swiftModuleSdk, WASM_TRIPLE } from './swift-compile'
|
|
22
|
+
import { SWIFT_ENDPOINT_ENV } from './swift-distribution'
|
|
23
|
+
import type { NitroSourceCollection } from './nitro-source'
|
|
24
|
+
|
|
25
|
+
/** the verified adapter this build ships, the only lock normal compiles use. */
|
|
26
|
+
export const committedNitroAdapterLock = parseNitroAdapterLock(lockJson)
|
|
27
|
+
|
|
28
|
+
export interface NitroAdapterArchive {
|
|
29
|
+
manifest: NitroAdapterManifest
|
|
30
|
+
/** the static archive, base64, as SwiftCompileInput.libraries carries it. */
|
|
31
|
+
base64: string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** rejects a lock built for other guest platform, target, headers, compiler,
|
|
35
|
+
* SDK or framework than this app's original headers and the module root
|
|
36
|
+
* compiling it. the committed lock is the trust root and pins the whole
|
|
37
|
+
* manifest. its wire ABI digest is producer provenance the reviewed lock
|
|
38
|
+
* fixes; the consumer cannot recompute it and the framework distribution id
|
|
39
|
+
* does not independently bind it. */
|
|
40
|
+
function verifyIdentity(
|
|
41
|
+
lock: NitroAdapterLock,
|
|
42
|
+
collection: NitroSourceCollection,
|
|
43
|
+
moduleRoot: string,
|
|
44
|
+
) {
|
|
45
|
+
const { nitro, reactNative } = collection
|
|
46
|
+
const distribution = swiftDistributionAt(moduleRoot)
|
|
47
|
+
if (!distribution) throw new Error(`${moduleRoot} holds no Swift distribution`)
|
|
48
|
+
const sdk = swiftModuleSdk(moduleRoot)
|
|
49
|
+
const headers = headerDigests({
|
|
50
|
+
nitroModules: nitro.root,
|
|
51
|
+
reactNative: reactNative.root,
|
|
52
|
+
})
|
|
53
|
+
const mismatched = [
|
|
54
|
+
lock.platform !== NITRO_GUEST_PLATFORM && 'guest platform',
|
|
55
|
+
lock.target !== WASM_TRIPLE && 'target',
|
|
56
|
+
lock.headers.reactNativeJsi !== headers.reactNativeJsi && 'React Native JSI headers',
|
|
57
|
+
lock.headers.nitroModules !== headers.nitroModules && 'Nitro Modules headers',
|
|
58
|
+
lock.compiler !== distribution.release && 'compiler',
|
|
59
|
+
(lock.sdk.id !== sdk.wasmSdkId || lock.sdk.checksum !== sdk.wasmSdkChecksum) &&
|
|
60
|
+
'Swift SDK',
|
|
61
|
+
lock.framework.distribution !== distribution.id && 'Swift distribution',
|
|
62
|
+
].filter((name) => name !== false)
|
|
63
|
+
if (mismatched.length > 0)
|
|
64
|
+
throw new Error(
|
|
65
|
+
`Nitro adapter archive does not match this app and toolchain: ${mismatched.join(', ')}`,
|
|
66
|
+
)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** the verified adapter archive for a collection: identity first, then the
|
|
70
|
+
* download, whose tarball and unpacked bytes the lock pins. */
|
|
71
|
+
export async function resolveNitroAdapter(
|
|
72
|
+
collection: NitroSourceCollection,
|
|
73
|
+
moduleRoot: string,
|
|
74
|
+
lock: NitroAdapterLock,
|
|
75
|
+
signal?: AbortSignal,
|
|
76
|
+
): Promise<NitroAdapterArchive> {
|
|
77
|
+
verifyIdentity(lock, collection, moduleRoot)
|
|
78
|
+
const endpoint = process.env[SWIFT_ENDPOINT_ENV]?.trim().replace(/\/+$/, '')
|
|
79
|
+
if (!endpoint)
|
|
80
|
+
throw new Error(
|
|
81
|
+
`Nitro compilation needs ${SWIFT_ENDPOINT_ENV} for its adapter archive`,
|
|
82
|
+
)
|
|
83
|
+
const dir = path.join(rnxHomeDir(), 'swift', `nitro-adapter-${lock.archive.sha256}`)
|
|
84
|
+
if (!fs.existsSync(path.join(dir, NITRO_ADAPTER_MANIFEST))) {
|
|
85
|
+
process.stderr.write(`peach: downloading Nitro adapter ${lock.archive.sha256}…\n`)
|
|
86
|
+
await installVerifiedTarball({
|
|
87
|
+
signal,
|
|
88
|
+
url: `${endpoint}/${nitroAdapterArchiveKey(lock)}`,
|
|
89
|
+
digest: { algorithm: 'sha256', encoding: 'hex', value: lock.archive.sha256 },
|
|
90
|
+
destDir: dir,
|
|
91
|
+
installedMarker: NITRO_ADAPTER_MANIFEST,
|
|
92
|
+
label: 'Nitro adapter archive',
|
|
93
|
+
verify: (installed) => {
|
|
94
|
+
verifyInstalledNitroAdapter(installed, lock)
|
|
95
|
+
},
|
|
96
|
+
})
|
|
97
|
+
}
|
|
98
|
+
const manifest = verifyInstalledNitroAdapter(dir, lock)
|
|
99
|
+
return {
|
|
100
|
+
manifest,
|
|
101
|
+
base64: fs.readFileSync(path.join(dir, manifest.archive.path)).toString('base64'),
|
|
102
|
+
}
|
|
103
|
+
}
|
package/src/nitro-bundle.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { compileNitroModule } from './nitro-compile'
|
|
2
|
+
import { discoverNitroProviders } from './nitro-source'
|
|
3
|
+
import { SWIFT_ENDPOINT_ENV, swiftDistributionRoot } from './swift-distribution'
|
|
2
4
|
import { icuUrl } from './swift-host'
|
|
3
|
-
import type { NitroSourceOptions } from './nitro-source'
|
|
4
5
|
import type { NitroCompiledModule } from './nitroContract'
|
|
5
6
|
|
|
6
7
|
export interface NitroBundle {
|
|
@@ -8,14 +9,28 @@ export interface NitroBundle {
|
|
|
8
9
|
assets: { path: string; bytes: Buffer; contentType: string }[]
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
//
|
|
12
|
-
//
|
|
12
|
+
// every installed iOS Nitro provider the app declares compiles into one
|
|
13
|
+
// executable with the same compiler and asset addresses as local native loads.
|
|
14
|
+
// package javascript is carried verbatim by its bundler.
|
|
13
15
|
export async function buildNitroBundle(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
if (
|
|
16
|
+
appRoot: string,
|
|
17
|
+
moduleRoot?: string,
|
|
18
|
+
): Promise<NitroBundle | null> {
|
|
19
|
+
const packageRoots = discoverNitroProviders(appRoot)
|
|
20
|
+
if (packageRoots.length === 0) return null
|
|
21
|
+
// the adapter archive is built against the published distribution, so Nitro
|
|
22
|
+
// compiles against it even in a source checkout; the checkout framework has
|
|
23
|
+
// no manifest for the adapter identity check to bind.
|
|
24
|
+
const module = moduleRoot ?? (await swiftDistributionRoot())
|
|
25
|
+
if (!module)
|
|
26
|
+
throw new Error(
|
|
27
|
+
`Nitro compilation needs ${SWIFT_ENDPOINT_ENV} for the Swift distribution`,
|
|
28
|
+
)
|
|
29
|
+
const { artifact, collection } = await compileNitroModule({
|
|
30
|
+
appRoot,
|
|
31
|
+
packageRoots,
|
|
32
|
+
moduleRoot: module,
|
|
33
|
+
})
|
|
19
34
|
const assets: NitroBundle['assets'] = [
|
|
20
35
|
{
|
|
21
36
|
path: `__peach/swift/${artifact.hash}.wasm`,
|
|
@@ -32,8 +47,7 @@ export async function buildNitroBundle(
|
|
|
32
47
|
return {
|
|
33
48
|
metadata: {
|
|
34
49
|
platform: 'ios',
|
|
35
|
-
|
|
36
|
-
packageVersion: implementation.version,
|
|
50
|
+
packages: collection.providers.map(({ name, version }) => ({ name, version })),
|
|
37
51
|
url: `/__peach/swift/${artifact.hash}.wasm`,
|
|
38
52
|
hash: artifact.hash,
|
|
39
53
|
icuUrl: icuUrl('', artifact),
|
package/src/nitro-compile.ts
CHANGED
|
@@ -2,6 +2,11 @@ import { createHash } from 'node:crypto'
|
|
|
2
2
|
import fs from 'node:fs'
|
|
3
3
|
import os from 'node:os'
|
|
4
4
|
import path from 'node:path'
|
|
5
|
+
import {
|
|
6
|
+
committedNitroAdapterLock,
|
|
7
|
+
resolveNitroAdapter,
|
|
8
|
+
type NitroAdapterArchive,
|
|
9
|
+
} from './nitro-adapter'
|
|
5
10
|
import {
|
|
6
11
|
collectNitroSources,
|
|
7
12
|
type NitroSourceCollection,
|
|
@@ -9,59 +14,31 @@ import {
|
|
|
9
14
|
} from './nitro-source'
|
|
10
15
|
import { syncSwiftTree } from './swift-compile'
|
|
11
16
|
import { artifactFor, projectFor, type SwiftArtifact } from './swift-host'
|
|
12
|
-
import { readPackageFile } from './swift-source-file'
|
|
13
|
-
import { MAX_SWIFT_COMPILE_SOURCE_BYTES } from './swift-submit'
|
|
14
17
|
import type { SwiftCompileInput } from './swift-compile'
|
|
15
18
|
|
|
16
|
-
// installed
|
|
17
|
-
// one executable. the
|
|
19
|
+
// every selected installed implementation, its generated registration and the
|
|
20
|
+
// verified adapter archive form one executable. the archive carries the private
|
|
21
|
+
// adapter objects and links into NitroCore; the common Swift compiler owns
|
|
22
|
+
// linking and reuse.
|
|
18
23
|
export function collectNitroCompileInput(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
24
|
+
collection: NitroSourceCollection,
|
|
25
|
+
adapter: NitroAdapterArchive,
|
|
26
|
+
): SwiftCompileInput {
|
|
22
27
|
const files = { ...collection.files }
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
readPackageFile(
|
|
26
|
-
platform,
|
|
27
|
-
path.join(platform, file),
|
|
28
|
-
MAX_SWIFT_COMPILE_SOURCE_BYTES,
|
|
29
|
-
).toString('utf8')
|
|
30
|
-
for (const file of [
|
|
31
|
-
'platform/ThreadUtils.cpp',
|
|
32
|
-
'platform/NitroLogger.cpp',
|
|
33
|
-
'threading/UIThreadDispatcher.cpp',
|
|
34
|
-
'threading/UIThreadDispatcher.hpp',
|
|
35
|
-
]) {
|
|
36
|
-
files[`Sources/NitroCore/peach/${file}`] = read(file)
|
|
37
|
-
}
|
|
38
|
-
files['Sources/NitroCore/include/UIThreadDispatcher.hpp'] =
|
|
39
|
-
'#include "../peach/threading/UIThreadDispatcher.hpp"\n'
|
|
40
|
-
|
|
41
|
-
const runtime = 'PeachNitroRuntime'
|
|
42
|
-
for (const file of [
|
|
43
|
-
'ProxyRuntime.cpp',
|
|
44
|
-
'RuntimeEntry.cpp',
|
|
45
|
-
'HostImports.hpp',
|
|
46
|
-
'ProxyRuntime.hpp',
|
|
47
|
-
'RuntimeEntry.hpp',
|
|
48
|
-
]) {
|
|
49
|
-
const relative = file.endsWith('.hpp') ? `include/${file}` : file
|
|
50
|
-
files[`Sources/${runtime}/${relative}`] = read(`jsi/${file}`)
|
|
51
|
-
}
|
|
52
|
-
files[`Sources/${runtime}/include/PeachNitroEntry.hpp`] =
|
|
28
|
+
// the archive has no module, so NitroCore's module map declares its entry.
|
|
29
|
+
files['Sources/NitroCore/include/PeachNitroEntry.hpp'] =
|
|
53
30
|
'#pragma once\nextern "C" void peachNitroInitialize();\n'
|
|
54
|
-
files[
|
|
55
|
-
|
|
31
|
+
const core = files['Sources/NitroCore/include/module.modulemap']
|
|
32
|
+
if (!core?.endsWith(' export * }\n'))
|
|
33
|
+
throw new Error('Nitro collection has no NitroCore module map')
|
|
34
|
+
files['Sources/NitroCore/include/module.modulemap'] =
|
|
35
|
+
`${core.slice(0, -' export * }\n'.length)} header "PeachNitroEntry.hpp" export * }\n`
|
|
56
36
|
|
|
57
|
-
const implementation = collection.targets.find((target) =>
|
|
58
|
-
collection.registration.header.startsWith(`${target.path}/`),
|
|
59
|
-
)
|
|
60
|
-
if (!implementation) throw new Error('Nitro registration has no package target')
|
|
61
37
|
const entry = 'Sources/PeachNitroApp/main.swift'
|
|
38
|
+
// every provider registers before the one runtime serves guest evaluation.
|
|
62
39
|
files[entry] =
|
|
63
|
-
`import ${
|
|
64
|
-
`peachNitroInitialize()\n${collection.
|
|
40
|
+
`import NitroCore\n${collection.registrations.map(({ target }) => `import ${target}\n`).join('')}` +
|
|
41
|
+
`peachNitroInitialize()\n${collection.registrations.map(({ symbol }) => `${symbol}()\n`).join('')}`
|
|
65
42
|
files['Package.swift'] = [
|
|
66
43
|
'// swift-tools-version: 6.2',
|
|
67
44
|
'import PackageDescription',
|
|
@@ -70,20 +47,23 @@ export function collectNitroCompileInput(
|
|
|
70
47
|
(target) =>
|
|
71
48
|
`.target(name: ${JSON.stringify(target.name)}, dependencies: ${JSON.stringify(target.dependencies?.map((dependency) => dependency.name) ?? [])}, path: ${JSON.stringify(target.path)}, ${target.cxxInterop ? 'swiftSettings: [.interoperabilityMode(.Cxx)]' : 'cxxSettings: [.define("DEBUG")]'}),`,
|
|
72
49
|
),
|
|
73
|
-
`.
|
|
74
|
-
`.executableTarget(name: "PeachNitroApp", dependencies: ["${runtime}", "${implementation.name}"], swiftSettings: [.interoperabilityMode(.Cxx)]),`,
|
|
50
|
+
`.executableTarget(name: "PeachNitroApp", dependencies: ${JSON.stringify(collection.registrations.map(({ target }) => target))}, swiftSettings: [.interoperabilityMode(.Cxx)]),`,
|
|
75
51
|
'], cxxLanguageStandard: .cxx20)',
|
|
76
52
|
'',
|
|
77
53
|
].join('\n')
|
|
78
|
-
return {
|
|
54
|
+
return { files, entry, libraries: { NitroCore: adapter.base64 } }
|
|
79
55
|
}
|
|
80
56
|
|
|
81
57
|
export async function compileNitroModule(
|
|
82
58
|
options: NitroSourceOptions & { moduleRoot: string },
|
|
83
59
|
): Promise<{ artifact: SwiftArtifact; collection: NitroSourceCollection }> {
|
|
84
|
-
const
|
|
60
|
+
const collection = collectNitroSources(options)
|
|
61
|
+
const input = collectNitroCompileInput(
|
|
62
|
+
collection,
|
|
63
|
+
await resolveNitroAdapter(collection, options.moduleRoot, committedNitroAdapterLock),
|
|
64
|
+
)
|
|
85
65
|
const key = createHash('sha256')
|
|
86
|
-
.update(
|
|
66
|
+
.update(collection.providers.map(({ root }) => root).join('\0'))
|
|
87
67
|
.update('\0')
|
|
88
68
|
.update(fs.realpathSync(options.moduleRoot))
|
|
89
69
|
.digest('hex')
|
|
@@ -97,8 +77,10 @@ export async function compileNitroModule(
|
|
|
97
77
|
]),
|
|
98
78
|
),
|
|
99
79
|
)
|
|
80
|
+
const project = projectFor(packagePath)
|
|
81
|
+
project.libraries = input.libraries
|
|
100
82
|
return {
|
|
101
|
-
artifact: await artifactFor(
|
|
83
|
+
artifact: await artifactFor(project, input.entry, options.moduleRoot),
|
|
102
84
|
collection,
|
|
103
85
|
}
|
|
104
86
|
}
|