peachsim 0.1.656 → 0.1.657
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 +1 -1
- package/cli/app-config.ts +9 -6
- package/cli/app-project.ts +6 -6
- package/cli/commands/control.ts +20 -20
- package/cli/commands/flow.ts +3 -3
- package/detox/config-loader.ts +1 -1
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.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 +1 -1
- package/dist-lib/bridge-contract-input.mjs +1 -1
- package/dist-lib/bridge-contract.cjs +1 -1
- package/dist-lib/bridge-contract.mjs +1 -1
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cli-constants.cjs +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 +25 -25
- package/dist-lib/detox/index.cjs +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +14 -14
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- 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 +2 -2
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +2 -2
- 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 +1 -1
- 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 +2 -2
- package/dist-lib/native-app-identity.cjs +1 -1
- package/dist-lib/native-app-identity.mjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/react-native-host-modules.cjs +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +13 -15
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +94 -70
- package/dist-lib/swift-compile.cjs +1 -1
- package/dist-lib/swift-compile.mjs +1 -1
- package/dist-lib/swift-package.cjs +1 -1
- package/dist-lib/swift-package.mjs +1 -1
- package/dist-lib/swift-submit.cjs +1 -1
- package/dist-lib/swift-submit.mjs +1 -1
- package/dist-lib/swift.cjs +1 -1
- package/dist-lib/vite-swift.cjs +1 -1
- package/dist-lib/vite.cjs +2 -2
- package/package.json +1 -1
- package/scripts/dev-server-scanner.ts +3 -3
- package/scripts/optional-demo-registry.ts +1 -1
- package/src/config.ts +26 -26
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -4425,6 +4425,8 @@ var init_supported_native_packages = __esm({
|
|
|
4425
4425
|
// seam
|
|
4426
4426
|
"@kesha-antonov/react-native-background-downloader",
|
|
4427
4427
|
// seam
|
|
4428
|
+
"@livekit/react-native-webrtc",
|
|
4429
|
+
// seam
|
|
4428
4430
|
"@lodev09/react-native-true-sheet",
|
|
4429
4431
|
// seam
|
|
4430
4432
|
"@logicwind/react-native-exit-app",
|
|
@@ -4490,7 +4492,7 @@ var init_supported_native_packages = __esm({
|
|
|
4490
4492
|
"@react-native-community/image-editor",
|
|
4491
4493
|
// seam+coverage
|
|
4492
4494
|
"@react-native-community/masked-view",
|
|
4493
|
-
// coverage
|
|
4495
|
+
// seam+coverage
|
|
4494
4496
|
"@react-native-community/netinfo",
|
|
4495
4497
|
// seam+coverage
|
|
4496
4498
|
"@react-native-community/progress-view",
|
|
@@ -4517,16 +4519,20 @@ var init_supported_native_packages = __esm({
|
|
|
4517
4519
|
// seam
|
|
4518
4520
|
"@react-native-firebase/functions",
|
|
4519
4521
|
// seam
|
|
4522
|
+
"@react-native-firebase/installations",
|
|
4523
|
+
// seam
|
|
4520
4524
|
"@react-native-firebase/messaging",
|
|
4521
4525
|
// seam
|
|
4522
4526
|
"@react-native-firebase/perf",
|
|
4523
|
-
// coverage
|
|
4527
|
+
// seam+coverage
|
|
4528
|
+
"@react-native-firebase/remote-config",
|
|
4529
|
+
// seam
|
|
4524
4530
|
"@react-native-firebase/storage",
|
|
4525
4531
|
// seam
|
|
4526
4532
|
"@react-native-google-signin/google-signin",
|
|
4527
4533
|
// seam
|
|
4528
4534
|
"@react-native-masked-view/masked-view",
|
|
4529
|
-
// coverage
|
|
4535
|
+
// seam+coverage
|
|
4530
4536
|
"@react-native-menu/menu",
|
|
4531
4537
|
// coverage
|
|
4532
4538
|
"@react-native-ml-kit/barcode-scanning",
|
|
@@ -4620,21 +4626,21 @@ var init_supported_native_packages = __esm({
|
|
|
4620
4626
|
"expo-av",
|
|
4621
4627
|
// seam+coverage
|
|
4622
4628
|
"expo-background-fetch",
|
|
4623
|
-
// semantic-proof
|
|
4629
|
+
// semantic-proof+seam
|
|
4624
4630
|
"expo-background-task",
|
|
4625
|
-
// semantic-proof
|
|
4631
|
+
// semantic-proof+seam
|
|
4626
4632
|
"expo-battery",
|
|
4627
|
-
// semantic-proof+coverage
|
|
4633
|
+
// semantic-proof+seam+coverage
|
|
4628
4634
|
"expo-blur",
|
|
4629
|
-
// coverage
|
|
4635
|
+
// seam+coverage
|
|
4630
4636
|
"expo-brightness",
|
|
4631
|
-
// semantic-proof
|
|
4637
|
+
// semantic-proof+seam
|
|
4632
4638
|
"expo-calendar",
|
|
4633
4639
|
// semantic-proof+seam
|
|
4634
4640
|
"expo-camera",
|
|
4635
4641
|
// seam+coverage
|
|
4636
4642
|
"expo-cellular",
|
|
4637
|
-
// semantic-proof
|
|
4643
|
+
// semantic-proof+seam
|
|
4638
4644
|
"expo-clipboard",
|
|
4639
4645
|
// seam+coverage
|
|
4640
4646
|
"expo-constants",
|
|
@@ -4663,6 +4669,8 @@ var init_supported_native_packages = __esm({
|
|
|
4663
4669
|
// seam+coverage
|
|
4664
4670
|
"expo-hardware-buttons",
|
|
4665
4671
|
// seam
|
|
4672
|
+
"expo-iap",
|
|
4673
|
+
// seam
|
|
4666
4674
|
"expo-ignore-battery-optimizations",
|
|
4667
4675
|
// coverage
|
|
4668
4676
|
"expo-image",
|
|
@@ -4698,7 +4706,7 @@ var init_supported_native_packages = __esm({
|
|
|
4698
4706
|
"expo-mesh-gradient",
|
|
4699
4707
|
// coverage
|
|
4700
4708
|
"expo-network",
|
|
4701
|
-
// semantic-proof+coverage
|
|
4709
|
+
// semantic-proof+seam+coverage
|
|
4702
4710
|
"expo-notifications",
|
|
4703
4711
|
// seam+coverage
|
|
4704
4712
|
"expo-passkey",
|
|
@@ -4712,7 +4720,7 @@ var init_supported_native_packages = __esm({
|
|
|
4712
4720
|
"expo-quick-actions",
|
|
4713
4721
|
// seam
|
|
4714
4722
|
"expo-screen-capture",
|
|
4715
|
-
// semantic-proof
|
|
4723
|
+
// semantic-proof+seam
|
|
4716
4724
|
"expo-screen-corner-radius",
|
|
4717
4725
|
// seam+coverage
|
|
4718
4726
|
"expo-screen-orientation",
|
|
@@ -4752,7 +4760,7 @@ var init_supported_native_packages = __esm({
|
|
|
4752
4760
|
"expo-video-metadata",
|
|
4753
4761
|
// seam
|
|
4754
4762
|
"expo-video-thumbnails",
|
|
4755
|
-
// semantic-proof
|
|
4763
|
+
// semantic-proof+seam
|
|
4756
4764
|
"expo-web-browser",
|
|
4757
4765
|
// seam
|
|
4758
4766
|
"expo-widgets",
|
|
@@ -4931,6 +4939,8 @@ var init_supported_native_packages = __esm({
|
|
|
4931
4939
|
// seam+coverage
|
|
4932
4940
|
"react-native-get-random-values",
|
|
4933
4941
|
// seam+coverage
|
|
4942
|
+
"react-native-google-mobile-ads",
|
|
4943
|
+
// seam
|
|
4934
4944
|
"react-native-google-places",
|
|
4935
4945
|
// seam
|
|
4936
4946
|
"react-native-google-play-install-referrer",
|
|
@@ -4945,6 +4955,8 @@ var init_supported_native_packages = __esm({
|
|
|
4945
4955
|
// seam
|
|
4946
4956
|
"react-native-http-bridge-refurbished",
|
|
4947
4957
|
// seam
|
|
4958
|
+
"react-native-iap",
|
|
4959
|
+
// seam
|
|
4948
4960
|
"react-native-idle-timer",
|
|
4949
4961
|
// seam+coverage
|
|
4950
4962
|
"react-native-image-colors",
|
|
@@ -5081,6 +5093,8 @@ var init_supported_native_packages = __esm({
|
|
|
5081
5093
|
// seam
|
|
5082
5094
|
"react-native-purchases",
|
|
5083
5095
|
// preset+seam+coverage
|
|
5096
|
+
"react-native-purchases-ui",
|
|
5097
|
+
// seam
|
|
5084
5098
|
"react-native-pure-jwt",
|
|
5085
5099
|
// seam+coverage
|
|
5086
5100
|
"react-native-quick-actions",
|
|
@@ -5239,6 +5253,8 @@ var init_supported_native_packages = __esm({
|
|
|
5239
5253
|
// preset
|
|
5240
5254
|
"react-native-webp-format",
|
|
5241
5255
|
// coverage
|
|
5256
|
+
"react-native-webrtc",
|
|
5257
|
+
// seam
|
|
5242
5258
|
"react-native-webview",
|
|
5243
5259
|
// preset+visual-proof+seam
|
|
5244
5260
|
"react-native-widget-picker",
|
|
@@ -6058,8 +6074,8 @@ var init_registry = __esm({
|
|
|
6058
6074
|
}
|
|
6059
6075
|
],
|
|
6060
6076
|
capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["@react-native-masked-view/masked-view"],
|
|
6061
|
-
note: "
|
|
6062
|
-
working: "MaskedView
|
|
6077
|
+
note: "upstream masked-view JS runs unchanged against an RNCMaskedView native view seam: its first subview is the alpha mask (canvaskit saveLayer + BlendMode.DstIn)",
|
|
6078
|
+
working: "MaskedView, maskElement, children, the invalid-mask warning and unmasked View fallback, style, pointerEvents, accessible, accessibilityLabel, nativeID, testID"
|
|
6063
6079
|
}
|
|
6064
6080
|
]
|
|
6065
6081
|
},
|
|
@@ -6070,7 +6086,7 @@ var init_registry = __esm({
|
|
|
6070
6086
|
{
|
|
6071
6087
|
range: ">=0.1.0 <0.2.0",
|
|
6072
6088
|
coverage: 0.9,
|
|
6073
|
-
note: "the retired package
|
|
6089
|
+
note: "the retired package JS runs unchanged against the same RNCMaskedView native view seam as its renamed successor",
|
|
6074
6090
|
working: "default MaskedView component, alpha-channel maskElement compositing, children, View props and refs, and the upstream invalid-mask warning plus unmasked View fallback",
|
|
6075
6091
|
missing: "the retired package publishes a class declaration that TypeScript 5.9 cannot use as JSX with current React 19 types; native iOS and Android compositor timing under animated masks"
|
|
6076
6092
|
}
|
|
@@ -6324,7 +6340,7 @@ var init_registry = __esm({
|
|
|
6324
6340
|
{
|
|
6325
6341
|
range: ">=12.0.0",
|
|
6326
6342
|
coverage: 0.95,
|
|
6327
|
-
note: "CanvasKit blur with measured iOS 27 filter chains for UIKit styles",
|
|
6343
|
+
note: "upstream expo-blur JS runs unchanged against an ExpoBlurView native view seam: CanvasKit blur with measured iOS 27 filter chains for UIKit styles",
|
|
6328
6344
|
working: "BlurView, BlurTargetView, tint (all 22 BlurTint values; UIKit styles use their iOS 27 blur, curve, saturation, brightness, and tint chain), intensity, blurReductionFactor, experimentalBlurMethod, blurMethod props",
|
|
6329
6345
|
missing: "native partial-intensity interpolation fidelity, Animated.createAnimatedComponent integration fidelity"
|
|
6330
6346
|
}
|
|
@@ -7293,7 +7309,7 @@ var init_registry = __esm({
|
|
|
7293
7309
|
{
|
|
7294
7310
|
range: ">=18.0.0",
|
|
7295
7311
|
coverage: 0.95,
|
|
7296
|
-
note: "
|
|
7312
|
+
note: "upstream @react-native-firebase/perf JS runs unchanged against the NativeRNFBTurboPerf (v26) and RNFBPerfModule native seam; traces and http metrics are accepted and nothing is uploaded, collection and instrumentation start enabled as FIRPerformance does",
|
|
7297
7313
|
working: "trace/newTrace/startTrace, Trace start/stop/attributes/metrics, HttpMetric start/stop/attributes/payload metadata, collection enablement",
|
|
7298
7314
|
missing: "native app start/network instrumentation, trace persistence, upload to Firebase Performance"
|
|
7299
7315
|
}
|
|
@@ -7306,9 +7322,9 @@ var init_registry = __esm({
|
|
|
7306
7322
|
{
|
|
7307
7323
|
range: ">=18.0.0",
|
|
7308
7324
|
coverage: 0.8,
|
|
7309
|
-
note: "
|
|
7325
|
+
note: "upstream @react-native-firebase/remote-config JS runs unchanged against the NativeRNFBTurboConfig (v26) and RNFBConfigModule native seam, backed by the firebase js sdk remote config for the same app: fetches reach the project template, values persist, minimum fetch intervals throttle",
|
|
7310
7326
|
working: "setDefaults, setConfigSettings, fetch, fetchAndActivate, activate, ensureInitialized, getAll, getBoolean, getNumber, getString, getValue, reset",
|
|
7311
|
-
missing: "
|
|
7327
|
+
missing: "setDefaultsFromResource (no app bundle plist)"
|
|
7312
7328
|
}
|
|
7313
7329
|
]
|
|
7314
7330
|
},
|
|
@@ -7345,9 +7361,9 @@ var init_registry = __esm({
|
|
|
7345
7361
|
{
|
|
7346
7362
|
range: ">=18.0.0",
|
|
7347
7363
|
coverage: 0,
|
|
7348
|
-
note: "
|
|
7349
|
-
working: "default installations(), getId, getToken, delete",
|
|
7350
|
-
missing: "
|
|
7364
|
+
note: "upstream @react-native-firebase/installations JS runs unchanged against the NativeRNFBTurboInstallations (v26) and RNFBInstallationsModule native seam, backed by the firebase js sdk installations for the same app",
|
|
7365
|
+
working: "default installations(), modular helpers, getId, getToken, delete",
|
|
7366
|
+
missing: "none known"
|
|
7351
7367
|
}
|
|
7352
7368
|
]
|
|
7353
7369
|
},
|
|
@@ -7369,11 +7385,11 @@ var init_registry = __esm({
|
|
|
7369
7385
|
stubType: "native",
|
|
7370
7386
|
versions: [
|
|
7371
7387
|
{
|
|
7372
|
-
range: ">=
|
|
7388
|
+
range: ">=16.0.0 <17.0.0",
|
|
7373
7389
|
coverage: 0.35,
|
|
7374
|
-
note: "
|
|
7375
|
-
working: "
|
|
7376
|
-
missing: "
|
|
7390
|
+
note: "native seam: published JS and useIAP run against the RnIap Nitro hybrid object, modeling an empty StoreKit catalog and transaction history",
|
|
7391
|
+
working: "connection lifecycle, fetchProducts, purchase error listeners, empty purchase and subscription queries, numeric finishTransaction, invalid verification result, native missing-product and receipt errors",
|
|
7392
|
+
missing: "real purchases, StoreKit UI, AppStore sync, app transactions, introductory offer eligibility, provider verification and Play Billing"
|
|
7377
7393
|
}
|
|
7378
7394
|
]
|
|
7379
7395
|
},
|
|
@@ -8874,7 +8890,14 @@ var init_registry = __esm({
|
|
|
8874
8890
|
stubType: "native",
|
|
8875
8891
|
versions: [
|
|
8876
8892
|
{
|
|
8877
|
-
range: ">=
|
|
8893
|
+
range: ">=2.0.0 <3.0.0",
|
|
8894
|
+
coverage: 0,
|
|
8895
|
+
note: "native seam: published JavaScript loads against the Compressor Nitro hybrid object; native media and filesystem operations reject explicitly",
|
|
8896
|
+
working: "published Image, Video, Audio and utility exports load; transcoding rejects with UNSUPPORTED_OPERATION instead of returning an unchanged asset as a success",
|
|
8897
|
+
missing: "native media transcoding, metadata, thumbnails, cache files, upload/download and background execution"
|
|
8898
|
+
},
|
|
8899
|
+
{
|
|
8900
|
+
range: ">=1.0.0 <2.0.0",
|
|
8878
8901
|
coverage: 0.78,
|
|
8879
8902
|
note: "native-seam: real package JS runs from the bundle; the Compressor TurboModule is browser-backed (canvas raster compression, HTMLVideoElement metadata/thumbnail, fetch upload/download)",
|
|
8880
8903
|
working: "Image.compress loads uri/base64 inputs, preserves aspect ratio, resizes/re-encodes jpg/png, returns uri or base64; getImageMetaData/getVideoMetaData report real dimensions+size; createVideoThumbnail captures the first frame; clearCache resolves (composer onClose); Video.compress passes through and drives progress to completion; backgroundUpload/download use fetch",
|
|
@@ -9654,10 +9677,10 @@ var init_registry = __esm({
|
|
|
9654
9677
|
versions: [
|
|
9655
9678
|
{
|
|
9656
9679
|
range: ">=8.0.0",
|
|
9657
|
-
coverage: 0,
|
|
9658
|
-
note: "the
|
|
9659
|
-
working: "
|
|
9660
|
-
missing: "
|
|
9680
|
+
coverage: 0.7,
|
|
9681
|
+
note: "native-seam only. the published RevenueCatUI JS runs over RNPaywalls, RNCustomerCenter and the PaywallView, RCPaywallFooterView and CustomerCenterView view managers. RevenueCat's dashboard-designed paywall never reaches Peach, so the seam draws a simplified paywall from the RNPurchases offering and buys and restores through that seam, with PaywallProxy's page-sheet presentation, entitlement check, result strings and view event bodies",
|
|
9682
|
+
working: "presentPaywall and presentPaywallIfNeeded (PURCHASED, RESTORED, CANCELLED, NOT_PRESENTED), Paywall and footer components with purchase, restore, cancel, error and dismiss events, purchase-initiated and purchase-logic round trips, presentCustomerCenter and CustomerCenterView with restore and manage-subscriptions events",
|
|
9683
|
+
missing: "dashboard-designed paywall templates, custom variables and fonts beyond fontFamily, customer-center support paths, refunds and promotional offers"
|
|
9661
9684
|
}
|
|
9662
9685
|
]
|
|
9663
9686
|
},
|
|
@@ -9887,10 +9910,11 @@ var init_registry = __esm({
|
|
|
9887
9910
|
stubType: "native",
|
|
9888
9911
|
versions: [
|
|
9889
9912
|
{
|
|
9890
|
-
range: ">=
|
|
9913
|
+
range: ">=5.0.0 <6.0.0",
|
|
9891
9914
|
coverage: 0.45,
|
|
9892
|
-
note: "
|
|
9893
|
-
|
|
9915
|
+
note: "native seam: published JS and useIAP run against ExpoIap, modeling an empty StoreKit catalog and transaction history",
|
|
9916
|
+
working: "connection lifecycle, fetchProducts, native purchase errors and event subscriptions, empty purchase and subscription queries, numeric finishTransaction, missing receipt and invalid verification result",
|
|
9917
|
+
missing: "real purchases, StoreKit UI, AppStore sync, app transactions, introductory offer eligibility, provider verification and Play Billing"
|
|
9894
9918
|
}
|
|
9895
9919
|
]
|
|
9896
9920
|
},
|
|
@@ -19215,14 +19239,14 @@ var init_backend_origin = __esm({
|
|
|
19215
19239
|
function hasOwnKeys(value) {
|
|
19216
19240
|
return !!value && Object.keys(value).length > 0;
|
|
19217
19241
|
}
|
|
19218
|
-
function
|
|
19242
|
+
function hasPeachConfig(config) {
|
|
19219
19243
|
if (!config) return false;
|
|
19220
19244
|
return typeof config.runtimeVersion === "string" && config.runtimeVersion.length > 0 || hasOwnKeys(config.modules) || hasOwnKeys(config.turboModules) || hasOwnKeys(config.nativeModules) || hasOwnKeys(config.env) || hasOwnKeys(config.network?.remap) || hasOwnKeys(config.settings) || hasOwnKeys(config.initialState);
|
|
19221
19245
|
}
|
|
19222
|
-
function
|
|
19223
|
-
if (!
|
|
19224
|
-
if (!
|
|
19225
|
-
if (!
|
|
19246
|
+
function mergePeachConfig(base, override) {
|
|
19247
|
+
if (!hasPeachConfig(base) && !hasPeachConfig(override)) return void 0;
|
|
19248
|
+
if (!hasPeachConfig(base)) return override ? { ...override } : void 0;
|
|
19249
|
+
if (!hasPeachConfig(override)) return base ? { ...base } : void 0;
|
|
19226
19250
|
return {
|
|
19227
19251
|
runtimeVersion: override.runtimeVersion ?? base.runtimeVersion,
|
|
19228
19252
|
modules: { ...base.modules || {}, ...override.modules || {} },
|
|
@@ -19242,20 +19266,20 @@ function mergeRNXConfig(base, override) {
|
|
|
19242
19266
|
initialState: { ...base.initialState || {}, ...override.initialState || {} }
|
|
19243
19267
|
};
|
|
19244
19268
|
}
|
|
19245
|
-
function
|
|
19269
|
+
function applyPeachConfigToUrl(url, config) {
|
|
19246
19270
|
const parsed = new URL(url);
|
|
19247
|
-
if (
|
|
19248
|
-
parsed.searchParams.set(
|
|
19271
|
+
if (hasPeachConfig(config)) {
|
|
19272
|
+
parsed.searchParams.set(PEACH_CONFIG_QUERY_PARAM, JSON.stringify(config));
|
|
19249
19273
|
} else {
|
|
19250
|
-
parsed.searchParams.delete(
|
|
19274
|
+
parsed.searchParams.delete(PEACH_CONFIG_QUERY_PARAM);
|
|
19251
19275
|
}
|
|
19252
19276
|
return parsed.toString();
|
|
19253
19277
|
}
|
|
19254
|
-
var
|
|
19278
|
+
var PEACH_CONFIG_QUERY_PARAM;
|
|
19255
19279
|
var init_config = __esm({
|
|
19256
19280
|
"src/config.ts"() {
|
|
19257
19281
|
"use strict";
|
|
19258
|
-
|
|
19282
|
+
PEACH_CONFIG_QUERY_PARAM = "peachConfig";
|
|
19259
19283
|
}
|
|
19260
19284
|
});
|
|
19261
19285
|
|
|
@@ -20028,7 +20052,7 @@ function withRuntimeConfig(port, bundleUrl, projectCwd) {
|
|
|
20028
20052
|
}) : [];
|
|
20029
20053
|
const exactKnownApps = knownApps.filter((app) => app.preferredPort === port);
|
|
20030
20054
|
const knownApp = exactKnownApps.length === 1 ? exactKnownApps[0] : exactKnownApps.length === 0 && knownApps.length === 1 ? knownApps[0] : void 0;
|
|
20031
|
-
const configured = knownApp?.runtimeConfig ?
|
|
20055
|
+
const configured = knownApp?.runtimeConfig ? applyPeachConfigToUrl(bundleUrl, knownApp.runtimeConfig) : bundleUrl;
|
|
20032
20056
|
return normalizeNativeDevBundleUrl(configured);
|
|
20033
20057
|
}
|
|
20034
20058
|
function isDirectOneBundleUrl(bundleUrl) {
|
|
@@ -20416,12 +20440,12 @@ var init_dev_server_scanner = __esm({
|
|
|
20416
20440
|
"scripts/dev-server-scanner.ts"() {
|
|
20417
20441
|
"use strict";
|
|
20418
20442
|
import_child_process = require("child_process");
|
|
20419
|
-
init_process_group();
|
|
20420
20443
|
import_promises2 = require("fs/promises");
|
|
20421
20444
|
import_http = __toESM(require("http"), 1);
|
|
20422
20445
|
import_net = __toESM(require("net"), 1);
|
|
20423
20446
|
import_node_fs2 = require("node:fs");
|
|
20424
20447
|
import_node_path3 = require("node:path");
|
|
20448
|
+
init_process_group();
|
|
20425
20449
|
init_backend_origin();
|
|
20426
20450
|
init_config();
|
|
20427
20451
|
init_native_dev_bundle_url();
|
|
@@ -24064,7 +24088,7 @@ function isContrastKitSpecifier(specifier) {
|
|
|
24064
24088
|
}
|
|
24065
24089
|
function unsupportedSpecifier(specifier) {
|
|
24066
24090
|
return new Error(
|
|
24067
|
-
`replacement modules may only import react, react-native, contrast-kit, and the packages rnx stubs for this app; '${specifier}' is none of those. vendor the code into the replacement file, or add the package to
|
|
24091
|
+
`replacement modules may only import react, react-native, contrast-kit, and the packages rnx stubs for this app; '${specifier}' is none of those. vendor the code into the replacement file, or add the package to peach.config so the simulator bridges it.`
|
|
24068
24092
|
);
|
|
24069
24093
|
}
|
|
24070
24094
|
function bridgeDeclaration(name2, specifier) {
|
|
@@ -32782,7 +32806,7 @@ function findExpoAppConfig(dir) {
|
|
|
32782
32806
|
return firstNamedFile(dir, EXPO_APP_CONFIG_NAMES);
|
|
32783
32807
|
}
|
|
32784
32808
|
function findRNXAppConfig(dir) {
|
|
32785
|
-
return firstNamedFile(dir,
|
|
32809
|
+
return firstNamedFile(dir, PEACH_APP_CONFIG_NAMES);
|
|
32786
32810
|
}
|
|
32787
32811
|
function resolveAppProject(projectRoot) {
|
|
32788
32812
|
const appDir = import_node_path23.default.resolve(projectRoot);
|
|
@@ -32797,7 +32821,7 @@ function resolveAppProject(projectRoot) {
|
|
|
32797
32821
|
}
|
|
32798
32822
|
return { appDir, configPath };
|
|
32799
32823
|
}
|
|
32800
|
-
var import_node_fs22, import_node_path23, EXPO_APP_CONFIG_NAMES,
|
|
32824
|
+
var import_node_fs22, import_node_path23, EXPO_APP_CONFIG_NAMES, PEACH_APP_CONFIG_NAMES;
|
|
32801
32825
|
var init_app_project = __esm({
|
|
32802
32826
|
"cli/app-project.ts"() {
|
|
32803
32827
|
"use strict";
|
|
@@ -32810,11 +32834,11 @@ var init_app_project = __esm({
|
|
|
32810
32834
|
"app.config.mjs",
|
|
32811
32835
|
"app.json"
|
|
32812
32836
|
];
|
|
32813
|
-
|
|
32814
|
-
"
|
|
32815
|
-
"
|
|
32816
|
-
"
|
|
32817
|
-
"
|
|
32837
|
+
PEACH_APP_CONFIG_NAMES = [
|
|
32838
|
+
"peach.config.ts",
|
|
32839
|
+
"peach.config.js",
|
|
32840
|
+
"peach.config.mjs",
|
|
32841
|
+
"peach.config.cjs"
|
|
32818
32842
|
];
|
|
32819
32843
|
}
|
|
32820
32844
|
});
|
|
@@ -32823,7 +32847,7 @@ var init_app_project = __esm({
|
|
|
32823
32847
|
function isOptionalRecord(value) {
|
|
32824
32848
|
return value === void 0 || value !== null && typeof value === "object" && !Array.isArray(value);
|
|
32825
32849
|
}
|
|
32826
|
-
function
|
|
32850
|
+
function isPeachConfig(value) {
|
|
32827
32851
|
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
32828
32852
|
const runtimeVersion = Reflect.get(value, "runtimeVersion");
|
|
32829
32853
|
const network = Reflect.get(value, "network");
|
|
@@ -32854,7 +32878,7 @@ async function loadRNXAppConfig(project) {
|
|
|
32854
32878
|
}
|
|
32855
32879
|
});
|
|
32856
32880
|
const loaded = await jiti.import(project.configPath, { default: true });
|
|
32857
|
-
if (!
|
|
32881
|
+
if (!isPeachConfig(loaded)) {
|
|
32858
32882
|
throw new Error("the default export must be a peach config object");
|
|
32859
32883
|
}
|
|
32860
32884
|
return resolveConfigReplacementFiles(loaded, project.configPath);
|
|
@@ -35722,9 +35746,9 @@ async function resolveShellUrl(target, baseUrl, opts = {}) {
|
|
|
35722
35746
|
if (looksLikeSootsimUrl(target)) {
|
|
35723
35747
|
const url = new URL(target);
|
|
35724
35748
|
const base = new URL(baseUrl);
|
|
35725
|
-
const baseConfig = base.searchParams.get(
|
|
35726
|
-
if (baseConfig && !url.searchParams.has(
|
|
35727
|
-
url.searchParams.set(
|
|
35749
|
+
const baseConfig = base.searchParams.get(PEACH_CONFIG_QUERY_PARAM);
|
|
35750
|
+
if (baseConfig && !url.searchParams.has(PEACH_CONFIG_QUERY_PARAM)) {
|
|
35751
|
+
url.searchParams.set(PEACH_CONFIG_QUERY_PARAM, baseConfig);
|
|
35728
35752
|
}
|
|
35729
35753
|
return url.toString();
|
|
35730
35754
|
}
|
|
@@ -36071,16 +36095,16 @@ function printOpenedSim(openUrl2, sim, mode, quiet = false) {
|
|
|
36071
36095
|
try {
|
|
36072
36096
|
const parsed = new URL(value);
|
|
36073
36097
|
let changed = false;
|
|
36074
|
-
if (parsed.searchParams.has(
|
|
36075
|
-
parsed.searchParams.set(
|
|
36098
|
+
if (parsed.searchParams.has(PEACH_CONFIG_QUERY_PARAM)) {
|
|
36099
|
+
parsed.searchParams.set(PEACH_CONFIG_QUERY_PARAM, "[redacted]");
|
|
36076
36100
|
changed = true;
|
|
36077
36101
|
}
|
|
36078
36102
|
const bundle = parsed.searchParams.get("bundle");
|
|
36079
36103
|
if (bundle) {
|
|
36080
36104
|
try {
|
|
36081
36105
|
const parsedBundle = new URL(bundle);
|
|
36082
|
-
if (parsedBundle.searchParams.has(
|
|
36083
|
-
parsedBundle.searchParams.set(
|
|
36106
|
+
if (parsedBundle.searchParams.has(PEACH_CONFIG_QUERY_PARAM)) {
|
|
36107
|
+
parsedBundle.searchParams.set(PEACH_CONFIG_QUERY_PARAM, "[redacted]");
|
|
36084
36108
|
parsed.searchParams.set("bundle", parsedBundle.toString());
|
|
36085
36109
|
changed = true;
|
|
36086
36110
|
}
|
|
@@ -36319,8 +36343,8 @@ async function runOpenCommand(args, opts = {}) {
|
|
|
36319
36343
|
const project = await resolveAppProjectForBundleUrl(resolvedBundle?.bundleUrl);
|
|
36320
36344
|
const appConfig = await loadRNXAppConfig(project);
|
|
36321
36345
|
const configuredRuntimeVersion = appConfig?.runtimeVersion;
|
|
36322
|
-
const runtimeConfig =
|
|
36323
|
-
|
|
36346
|
+
const runtimeConfig = mergePeachConfig(
|
|
36347
|
+
mergePeachConfig(
|
|
36324
36348
|
appConfig ? { ...appConfig, runtimeVersion: void 0 } : void 0,
|
|
36325
36349
|
opts.runtimeConfig
|
|
36326
36350
|
),
|
|
@@ -36493,7 +36517,7 @@ async function runOpenCommand(args, opts = {}) {
|
|
|
36493
36517
|
if (!targetSim && parsed.simIdSource !== "flag") {
|
|
36494
36518
|
targetShellUrl = await buildShellUrl(
|
|
36495
36519
|
target,
|
|
36496
|
-
|
|
36520
|
+
applyPeachConfigToUrl(baseUrl, runtimeConfig),
|
|
36497
36521
|
buildShellUrlOpts
|
|
36498
36522
|
);
|
|
36499
36523
|
const normalizedTarget = new URL(targetShellUrl);
|
|
@@ -36522,7 +36546,7 @@ async function runOpenCommand(args, opts = {}) {
|
|
|
36522
36546
|
const resolvedBaseUrl = hasExplicitBaseUrl || looksLikeSootsimUrl(target) ? baseUrl : deriveCurrentSimBaseUrl(targetSim, baseUrl);
|
|
36523
36547
|
navigatedShellUrl = targetShellUrl ?? await buildShellUrl(
|
|
36524
36548
|
target,
|
|
36525
|
-
|
|
36549
|
+
applyPeachConfigToUrl(resolvedBaseUrl, runtimeConfig),
|
|
36526
36550
|
buildShellUrlOpts
|
|
36527
36551
|
);
|
|
36528
36552
|
const navigationUrl = new URL(navigatedShellUrl);
|
|
@@ -36597,7 +36621,7 @@ async function runOpenCommand(args, opts = {}) {
|
|
|
36597
36621
|
bridge.close();
|
|
36598
36622
|
}
|
|
36599
36623
|
}
|
|
36600
|
-
const configuredBaseUrl =
|
|
36624
|
+
const configuredBaseUrl = applyPeachConfigToUrl(baseUrl, runtimeConfig);
|
|
36601
36625
|
const openUrl2 = await buildOpenUrl(target, configuredBaseUrl, token, buildShellUrlOpts);
|
|
36602
36626
|
const ownerPid = opts.ownerPid ?? getStableOwnerPid();
|
|
36603
36627
|
if (!ownerPid) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/swift.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/vite-swift.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -318,7 +318,7 @@ function isContrastKitSpecifier(specifier) {
|
|
|
318
318
|
}
|
|
319
319
|
function unsupportedSpecifier(specifier) {
|
|
320
320
|
return new Error(
|
|
321
|
-
`replacement modules may only import react, react-native, contrast-kit, and the packages rnx stubs for this app; '${specifier}' is none of those. vendor the code into the replacement file, or add the package to
|
|
321
|
+
`replacement modules may only import react, react-native, contrast-kit, and the packages rnx stubs for this app; '${specifier}' is none of those. vendor the code into the replacement file, or add the package to peach.config so the simulator bridges it.`
|
|
322
322
|
);
|
|
323
323
|
}
|
|
324
324
|
function bridgeDeclaration(name, specifier) {
|
package/package.json
CHANGED
|
@@ -14,19 +14,19 @@
|
|
|
14
14
|
// pid changes. before any HTTP, a TCP connect gate skips unreachable ports.
|
|
15
15
|
|
|
16
16
|
import { spawn } from 'child_process'
|
|
17
|
-
import { terminateProcessGroup } from '../../contrast/src/runtime/process-group'
|
|
18
17
|
import { readlink } from 'fs/promises'
|
|
19
18
|
import http from 'http'
|
|
20
19
|
import net from 'net'
|
|
21
20
|
import { realpathSync } from 'node:fs'
|
|
22
21
|
import { resolve } from 'node:path'
|
|
22
|
+
import { terminateProcessGroup } from '../../contrast/src/runtime/process-group'
|
|
23
23
|
import {
|
|
24
24
|
buildLoopbackProbeBaseUrl,
|
|
25
25
|
isLoopbackHost,
|
|
26
26
|
LOOPBACK_PROBE_HOSTNAMES,
|
|
27
27
|
normalizeHostname,
|
|
28
28
|
} from '../src/backend-origin.ts'
|
|
29
|
-
import {
|
|
29
|
+
import { applyPeachConfigToUrl } from '../src/config.ts'
|
|
30
30
|
import {
|
|
31
31
|
alignLoopbackBundleUrlWithProbe,
|
|
32
32
|
normalizeNativeDevBundleUrl,
|
|
@@ -611,7 +611,7 @@ function withRuntimeConfig(port: number, bundleUrl: string, projectCwd?: string)
|
|
|
611
611
|
? knownApps[0]
|
|
612
612
|
: undefined
|
|
613
613
|
const configured = knownApp?.runtimeConfig
|
|
614
|
-
?
|
|
614
|
+
? applyPeachConfigToUrl(bundleUrl, knownApp.runtimeConfig)
|
|
615
615
|
: bundleUrl
|
|
616
616
|
return normalizeNativeDevBundleUrl(configured)
|
|
617
617
|
}
|
|
@@ -63,7 +63,7 @@ export interface OptionalDemoApp {
|
|
|
63
63
|
dir: string
|
|
64
64
|
preferredPort: number
|
|
65
65
|
framework: 'expo' | 'one' | 'rock'
|
|
66
|
-
runtimeConfig?: import('../src/config.ts').
|
|
66
|
+
runtimeConfig?: import('../src/config.ts').PeachConfig
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
let cached: OptionalDemoApp[] | null = null
|