peachsim 0.1.655 → 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 +6 -13
- 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 +144 -116
- 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 +6 -13
- 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/src/dev-server-open.ts +4 -11
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",
|
|
@@ -4506,7 +4508,7 @@ var init_supported_native_packages = __esm({
|
|
|
4506
4508
|
"@react-native-documents/viewer",
|
|
4507
4509
|
// seam
|
|
4508
4510
|
"@react-native-firebase/analytics",
|
|
4509
|
-
// coverage
|
|
4511
|
+
// seam+coverage
|
|
4510
4512
|
"@react-native-firebase/app",
|
|
4511
4513
|
// seam+coverage
|
|
4512
4514
|
"@react-native-firebase/auth",
|
|
@@ -4517,14 +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
|
|
4532
|
+
"@react-native-google-signin/google-signin",
|
|
4533
|
+
// seam
|
|
4526
4534
|
"@react-native-masked-view/masked-view",
|
|
4527
|
-
// coverage
|
|
4535
|
+
// seam+coverage
|
|
4528
4536
|
"@react-native-menu/menu",
|
|
4529
4537
|
// coverage
|
|
4530
4538
|
"@react-native-ml-kit/barcode-scanning",
|
|
@@ -4610,7 +4618,7 @@ var init_supported_native_packages = __esm({
|
|
|
4610
4618
|
"expo-apple-authentication",
|
|
4611
4619
|
// seam
|
|
4612
4620
|
"expo-application",
|
|
4613
|
-
// semantic-proof+coverage
|
|
4621
|
+
// semantic-proof+seam+coverage
|
|
4614
4622
|
"expo-asset",
|
|
4615
4623
|
// seam+coverage
|
|
4616
4624
|
"expo-audio",
|
|
@@ -4618,27 +4626,27 @@ var init_supported_native_packages = __esm({
|
|
|
4618
4626
|
"expo-av",
|
|
4619
4627
|
// seam+coverage
|
|
4620
4628
|
"expo-background-fetch",
|
|
4621
|
-
// semantic-proof
|
|
4629
|
+
// semantic-proof+seam
|
|
4622
4630
|
"expo-background-task",
|
|
4623
|
-
// semantic-proof
|
|
4631
|
+
// semantic-proof+seam
|
|
4624
4632
|
"expo-battery",
|
|
4625
|
-
// semantic-proof+coverage
|
|
4633
|
+
// semantic-proof+seam+coverage
|
|
4626
4634
|
"expo-blur",
|
|
4627
|
-
// coverage
|
|
4635
|
+
// seam+coverage
|
|
4628
4636
|
"expo-brightness",
|
|
4629
|
-
// semantic-proof
|
|
4637
|
+
// semantic-proof+seam
|
|
4630
4638
|
"expo-calendar",
|
|
4631
|
-
// semantic-proof
|
|
4639
|
+
// semantic-proof+seam
|
|
4632
4640
|
"expo-camera",
|
|
4633
4641
|
// seam+coverage
|
|
4634
4642
|
"expo-cellular",
|
|
4635
|
-
// semantic-proof
|
|
4643
|
+
// semantic-proof+seam
|
|
4636
4644
|
"expo-clipboard",
|
|
4637
4645
|
// seam+coverage
|
|
4638
4646
|
"expo-constants",
|
|
4639
|
-
// semantic-proof+coverage
|
|
4647
|
+
// semantic-proof+seam+coverage
|
|
4640
4648
|
"expo-contacts",
|
|
4641
|
-
// semantic-proof
|
|
4649
|
+
// semantic-proof+seam
|
|
4642
4650
|
"expo-core-spotlight",
|
|
4643
4651
|
// seam
|
|
4644
4652
|
"expo-crypto",
|
|
@@ -4661,6 +4669,8 @@ var init_supported_native_packages = __esm({
|
|
|
4661
4669
|
// seam+coverage
|
|
4662
4670
|
"expo-hardware-buttons",
|
|
4663
4671
|
// seam
|
|
4672
|
+
"expo-iap",
|
|
4673
|
+
// seam
|
|
4664
4674
|
"expo-ignore-battery-optimizations",
|
|
4665
4675
|
// coverage
|
|
4666
4676
|
"expo-image",
|
|
@@ -4670,7 +4680,7 @@ var init_supported_native_packages = __esm({
|
|
|
4670
4680
|
"expo-image-picker",
|
|
4671
4681
|
// seam+coverage
|
|
4672
4682
|
"expo-insights",
|
|
4673
|
-
// coverage
|
|
4683
|
+
// seam+coverage
|
|
4674
4684
|
"expo-intent-launcher",
|
|
4675
4685
|
// semantic-proof
|
|
4676
4686
|
"expo-keep-awake",
|
|
@@ -4678,7 +4688,7 @@ var init_supported_native_packages = __esm({
|
|
|
4678
4688
|
"expo-key-event",
|
|
4679
4689
|
// seam
|
|
4680
4690
|
"expo-linear-gradient",
|
|
4681
|
-
// visual-proof+coverage
|
|
4691
|
+
// visual-proof+seam+coverage
|
|
4682
4692
|
"expo-linking",
|
|
4683
4693
|
// seam+coverage
|
|
4684
4694
|
"expo-local-authentication",
|
|
@@ -4696,7 +4706,7 @@ var init_supported_native_packages = __esm({
|
|
|
4696
4706
|
"expo-mesh-gradient",
|
|
4697
4707
|
// coverage
|
|
4698
4708
|
"expo-network",
|
|
4699
|
-
// semantic-proof+coverage
|
|
4709
|
+
// semantic-proof+seam+coverage
|
|
4700
4710
|
"expo-notifications",
|
|
4701
4711
|
// seam+coverage
|
|
4702
4712
|
"expo-passkey",
|
|
@@ -4706,41 +4716,43 @@ var init_supported_native_packages = __esm({
|
|
|
4706
4716
|
"expo-pip",
|
|
4707
4717
|
// seam
|
|
4708
4718
|
"expo-print",
|
|
4709
|
-
// semantic-proof
|
|
4719
|
+
// semantic-proof+seam
|
|
4720
|
+
"expo-quick-actions",
|
|
4721
|
+
// seam
|
|
4710
4722
|
"expo-screen-capture",
|
|
4711
|
-
// semantic-proof
|
|
4723
|
+
// semantic-proof+seam
|
|
4712
4724
|
"expo-screen-corner-radius",
|
|
4713
4725
|
// seam+coverage
|
|
4714
4726
|
"expo-screen-orientation",
|
|
4715
|
-
// semantic-proof+coverage
|
|
4727
|
+
// semantic-proof+seam+coverage
|
|
4716
4728
|
"expo-secure-store",
|
|
4717
|
-
// semantic-proof+coverage
|
|
4729
|
+
// semantic-proof+seam+coverage
|
|
4718
4730
|
"expo-sensors",
|
|
4719
4731
|
// semantic-proof+seam
|
|
4720
4732
|
"expo-sharing",
|
|
4721
|
-
// semantic-proof+coverage
|
|
4733
|
+
// semantic-proof+seam+coverage
|
|
4722
4734
|
"expo-sms",
|
|
4723
|
-
// semantic-proof
|
|
4735
|
+
// semantic-proof+seam
|
|
4724
4736
|
"expo-speech",
|
|
4725
4737
|
// semantic-proof+seam
|
|
4726
4738
|
"expo-speech-recognition",
|
|
4727
4739
|
// seam
|
|
4728
4740
|
"expo-splash-screen",
|
|
4729
|
-
// semantic-proof+coverage
|
|
4741
|
+
// semantic-proof+seam+coverage
|
|
4730
4742
|
"expo-sqlite",
|
|
4731
|
-
// coverage
|
|
4743
|
+
// seam+coverage
|
|
4732
4744
|
"expo-store-review",
|
|
4733
|
-
// semantic-proof+coverage
|
|
4745
|
+
// semantic-proof+seam+coverage
|
|
4734
4746
|
"expo-symbols",
|
|
4735
4747
|
// coverage
|
|
4736
4748
|
"expo-system-ui",
|
|
4737
4749
|
// seam+coverage
|
|
4738
4750
|
"expo-task-manager",
|
|
4739
|
-
// semantic-proof+coverage
|
|
4751
|
+
// semantic-proof+seam+coverage
|
|
4740
4752
|
"expo-testflight",
|
|
4741
4753
|
// seam+coverage
|
|
4742
4754
|
"expo-tracking-transparency",
|
|
4743
|
-
// semantic-proof+coverage
|
|
4755
|
+
// semantic-proof+seam+coverage
|
|
4744
4756
|
"expo-updates",
|
|
4745
4757
|
// seam+coverage
|
|
4746
4758
|
"expo-video",
|
|
@@ -4748,7 +4760,7 @@ var init_supported_native_packages = __esm({
|
|
|
4748
4760
|
"expo-video-metadata",
|
|
4749
4761
|
// seam
|
|
4750
4762
|
"expo-video-thumbnails",
|
|
4751
|
-
// semantic-proof
|
|
4763
|
+
// semantic-proof+seam
|
|
4752
4764
|
"expo-web-browser",
|
|
4753
4765
|
// seam
|
|
4754
4766
|
"expo-widgets",
|
|
@@ -4927,6 +4939,8 @@ var init_supported_native_packages = __esm({
|
|
|
4927
4939
|
// seam+coverage
|
|
4928
4940
|
"react-native-get-random-values",
|
|
4929
4941
|
// seam+coverage
|
|
4942
|
+
"react-native-google-mobile-ads",
|
|
4943
|
+
// seam
|
|
4930
4944
|
"react-native-google-places",
|
|
4931
4945
|
// seam
|
|
4932
4946
|
"react-native-google-play-install-referrer",
|
|
@@ -4934,13 +4948,15 @@ var init_supported_native_packages = __esm({
|
|
|
4934
4948
|
"react-native-gzip",
|
|
4935
4949
|
// seam+coverage
|
|
4936
4950
|
"react-native-haptic-feedback",
|
|
4937
|
-
// coverage
|
|
4951
|
+
// seam+coverage
|
|
4938
4952
|
"react-native-headphone-detection",
|
|
4939
4953
|
// seam+coverage
|
|
4940
4954
|
"react-native-home-indicator",
|
|
4941
4955
|
// seam
|
|
4942
4956
|
"react-native-http-bridge-refurbished",
|
|
4943
4957
|
// seam
|
|
4958
|
+
"react-native-iap",
|
|
4959
|
+
// seam
|
|
4944
4960
|
"react-native-idle-timer",
|
|
4945
4961
|
// seam+coverage
|
|
4946
4962
|
"react-native-image-colors",
|
|
@@ -4972,7 +4988,7 @@ var init_supported_native_packages = __esm({
|
|
|
4972
4988
|
"react-native-launch-arguments",
|
|
4973
4989
|
// coverage
|
|
4974
4990
|
"react-native-linear-gradient",
|
|
4975
|
-
// coverage
|
|
4991
|
+
// seam+coverage
|
|
4976
4992
|
"react-native-linkedin-login",
|
|
4977
4993
|
// seam
|
|
4978
4994
|
"react-native-localize",
|
|
@@ -5077,6 +5093,8 @@ var init_supported_native_packages = __esm({
|
|
|
5077
5093
|
// seam
|
|
5078
5094
|
"react-native-purchases",
|
|
5079
5095
|
// preset+seam+coverage
|
|
5096
|
+
"react-native-purchases-ui",
|
|
5097
|
+
// seam
|
|
5080
5098
|
"react-native-pure-jwt",
|
|
5081
5099
|
// seam+coverage
|
|
5082
5100
|
"react-native-quick-actions",
|
|
@@ -5235,6 +5253,8 @@ var init_supported_native_packages = __esm({
|
|
|
5235
5253
|
// preset
|
|
5236
5254
|
"react-native-webp-format",
|
|
5237
5255
|
// coverage
|
|
5256
|
+
"react-native-webrtc",
|
|
5257
|
+
// seam
|
|
5238
5258
|
"react-native-webview",
|
|
5239
5259
|
// preset+visual-proof+seam
|
|
5240
5260
|
"react-native-widget-picker",
|
|
@@ -6054,8 +6074,8 @@ var init_registry = __esm({
|
|
|
6054
6074
|
}
|
|
6055
6075
|
],
|
|
6056
6076
|
capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["@react-native-masked-view/masked-view"],
|
|
6057
|
-
note: "
|
|
6058
|
-
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"
|
|
6059
6079
|
}
|
|
6060
6080
|
]
|
|
6061
6081
|
},
|
|
@@ -6066,7 +6086,7 @@ var init_registry = __esm({
|
|
|
6066
6086
|
{
|
|
6067
6087
|
range: ">=0.1.0 <0.2.0",
|
|
6068
6088
|
coverage: 0.9,
|
|
6069
|
-
note: "the retired package
|
|
6089
|
+
note: "the retired package JS runs unchanged against the same RNCMaskedView native view seam as its renamed successor",
|
|
6070
6090
|
working: "default MaskedView component, alpha-channel maskElement compositing, children, View props and refs, and the upstream invalid-mask warning plus unmasked View fallback",
|
|
6071
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"
|
|
6072
6092
|
}
|
|
@@ -6150,7 +6170,7 @@ var init_registry = __esm({
|
|
|
6150
6170
|
{
|
|
6151
6171
|
range: ">=14.0.0",
|
|
6152
6172
|
coverage: 0.95,
|
|
6153
|
-
note: "package
|
|
6173
|
+
note: "real upstream package \u2014 not intercepted. the app's expo-constants JS computes the public Constants object over the ExponentConstants native module.",
|
|
6154
6174
|
working: "ExponentConstants native module constants matching the bare iOS dictionary: sessionId, executionEnvironment, appOwnership, debugMode, deviceName, isHeadless, statusBarHeight, systemFonts, platform.ios.buildNumber, expoConfig/manifest from the resolved app config, getWebViewUserAgentAsync, and the AppOwnership / ExecutionEnvironment / UserInterfaceIdiom enums from upstream JS",
|
|
6155
6175
|
missing: "real binary-derived embedded app config, Expo Updates manifest2, expoGoConfig/easConfig, physical-device status bar and system font enumeration. the Expo Go fields deviceYearClass, expoVersion, expoRuntimeVersion, experienceUrl, isDevice, linkingUri and the deprecated platform.ios model/platform/systemVersion/userInterfaceIdiom are intentionally absent, matching a bare iOS app where the native constants dictionary never publishes them; read device metadata from expo-device instead"
|
|
6156
6176
|
}
|
|
@@ -6228,7 +6248,7 @@ var init_registry = __esm({
|
|
|
6228
6248
|
{
|
|
6229
6249
|
range: ">=0.17.0",
|
|
6230
6250
|
coverage: 1,
|
|
6231
|
-
note: "full splash wired to the Peach canvas boot splash, including the app's REAL configured artwork. the config plugin's image + backgroundColor (+ imageWidth, resizeMode, dark variant) and the legacy expo.splash / expo.ios.splash blocks are parsed and painted on boot exactly like the native splash window. setOptions({fade,duration}) is honored: hideAsync()/hide() cross-dissolve the splash over the configured duration (default 400ms, fade default off \u2014 mirroring ios/SplashScreenManager.swift hide()); preventAutoHideAsync holds the splash until the app hides it. matches upstream index.native.ts semantics.",
|
|
6251
|
+
note: "real upstream package \u2014 not intercepted. the app's expo-splash-screen JS runs over the ExpoSplashScreen module (native-seams/expo-splash-screen.ts, mirroring ios/SplashScreenModule.swift), which also answers expo-router's internal prevent and maybe-hide calls. full splash wired to the Peach canvas boot splash, including the app's REAL configured artwork. the config plugin's image + backgroundColor (+ imageWidth, resizeMode, dark variant) and the legacy expo.splash / expo.ios.splash blocks are parsed and painted on boot exactly like the native splash window. setOptions({fade,duration}) is honored: hideAsync()/hide() cross-dissolve the splash over the configured duration (default 400ms, fade default off \u2014 mirroring ios/SplashScreenManager.swift hide()); preventAutoHideAsync holds the splash until the app hides it. matches upstream index.native.ts semantics.",
|
|
6232
6252
|
working: "preventAutoHideAsync (holds splash), hideAsync, hide (sync), setOptions (fade + duration drive the real canvas fade), configured splash image + backgroundColor + imageWidth + resizeMode + dark variant painted on boot (config plugin + legacy expo.splash), SplashScreenOptions type"
|
|
6233
6253
|
}
|
|
6234
6254
|
]
|
|
@@ -6280,7 +6300,7 @@ var init_registry = __esm({
|
|
|
6280
6300
|
{
|
|
6281
6301
|
range: ">=12.0.0",
|
|
6282
6302
|
coverage: 0.95,
|
|
6283
|
-
note: "upstream expo-secure-store JS runs
|
|
6303
|
+
note: "real upstream package \u2014 not intercepted. the app's expo-secure-store JS runs over the ExpoSecureStore native module, backed by tenant-scoped IndexedDB records encrypted with AES-GCM via WebCrypto. Bun/test environments without IndexedDB use the same encrypted record format in memory. (same golden-rule native-seam tier as expo-crypto / expo-network: upstream JS runs unmodified, every gap is a physically-absent-on-an-iOS-sim feature.)",
|
|
6284
6304
|
working: "upstream validation and constants, getItem/setItem sync APIs over the hydrated in-process cache, getItemAsync/setItemAsync/deleteItemAsync async APIs, isAvailableAsync, canUseBiometricAuthentication false, keychainService/accessGroup/requireAuthentication storage partitioning, AES-GCM encrypted storage records with per-record salt/iv and tenant-scoped PBKDF2 key derivation, persists across reloads when IndexedDB is available",
|
|
6285
6305
|
missing: "canUseBiometricAuthentication always false (no biometric prompt available on web \u2014 correct unavailable shape), requireAuthentication not enforced beyond storage partitioning/encryption (no biometric prompt to require), keychainAccessible does not affect browser storage access. sync reads cannot synchronously cold-load IndexedDB after a fresh worker boot; async reads hydrate the cache. all of these are honest absent-on-web semantics \u2014 apps with graceful-degradation paths behave correctly."
|
|
6286
6306
|
}
|
|
@@ -6320,7 +6340,7 @@ var init_registry = __esm({
|
|
|
6320
6340
|
{
|
|
6321
6341
|
range: ">=12.0.0",
|
|
6322
6342
|
coverage: 0.95,
|
|
6323
|
-
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",
|
|
6324
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",
|
|
6325
6345
|
missing: "native partial-intensity interpolation fidelity, Animated.createAnimatedComponent integration fidelity"
|
|
6326
6346
|
}
|
|
@@ -6333,8 +6353,8 @@ var init_registry = __esm({
|
|
|
6333
6353
|
{
|
|
6334
6354
|
range: ">=12.0.0",
|
|
6335
6355
|
coverage: 1,
|
|
6336
|
-
note: "
|
|
6337
|
-
working: "LinearGradient, colors, start, end, locations, dither,
|
|
6356
|
+
note: "upstream expo-linear-gradient JS runs unchanged against an ExpoLinearGradient native view seam drawing the CGGradient its layer draws",
|
|
6357
|
+
working: "LinearGradient, colors, start, end, locations, dither, style, children"
|
|
6338
6358
|
}
|
|
6339
6359
|
]
|
|
6340
6360
|
},
|
|
@@ -6422,7 +6442,7 @@ var init_registry = __esm({
|
|
|
6422
6442
|
{
|
|
6423
6443
|
range: ">=5.0.0",
|
|
6424
6444
|
coverage: 0.95,
|
|
6425
|
-
note: "upstream expo-application JS runs
|
|
6445
|
+
note: "real upstream package \u2014 not intercepted. the app's expo-application JS runs over the ExpoApplication native module, whose identity constants follow the live Expo config.",
|
|
6426
6446
|
working: "upstream constants and platform availability checks, applicationName, applicationId, nativeApplicationVersion, nativeBuildVersion, getIosIdForVendorAsync (localStorage-backed), getIosApplicationReleaseTypeAsync SIMULATOR, ApplicationReleaseType enum, getInstallationTimeAsync, getIosPushNotificationServiceEnvironmentAsync",
|
|
6427
6447
|
missing: "bare/frozen apps without resolved Expo config use simulator metadata; Android id/install referrer on non-Android platforms; push entitlement inspection"
|
|
6428
6448
|
}
|
|
@@ -6759,10 +6779,10 @@ var init_registry = __esm({
|
|
|
6759
6779
|
versions: [
|
|
6760
6780
|
{
|
|
6761
6781
|
range: ">=13.0.0",
|
|
6762
|
-
coverage: 0.
|
|
6763
|
-
note: "real
|
|
6764
|
-
working: "
|
|
6765
|
-
missing: "
|
|
6782
|
+
coverage: 0.9,
|
|
6783
|
+
note: "real upstream package \u2014 not intercepted. its JS (openDatabase*, SQLiteDatabase, SQLiteStatement cursors, SQLiteProvider, kv-store, tagged queries) runs from the bundle over the ExpoSQLite native module (native-seams/expo-sqlite.ts), which follows ios/SQLiteModule.swift on the shared bedrock-sqlite WASM engine: the per path database cache, lazy sqlite3_step cursors, iOS error codes and messages. databases live under Documents/SQLite in the tenant memfs and persist to IDB; the seam loader waits for the engine so the sync api is ready when the bundle evaluates.",
|
|
6784
|
+
working: "open/close (cached by path and options, ref counted), exec, prepare, run with array and named bindings, step, getAll, reset, finalize, column names, isInTransaction, withExclusiveTransactionAsync (second connection), deleteDatabase, importAssetDatabaseAsync from a file, serialize (VACUUM INTO) and deserialize",
|
|
6785
|
+
missing: "onDatabaseChange never fires (no sqlite3_update_hook in bedrock); backup, sessions and loadExtension throw; database files are not visible to expo-file-system"
|
|
6766
6786
|
}
|
|
6767
6787
|
]
|
|
6768
6788
|
},
|
|
@@ -7237,9 +7257,9 @@ var init_registry = __esm({
|
|
|
7237
7257
|
{
|
|
7238
7258
|
range: ">=18.0.0",
|
|
7239
7259
|
coverage: 0.95,
|
|
7240
|
-
note: "
|
|
7241
|
-
working: "default
|
|
7242
|
-
missing: "
|
|
7260
|
+
note: "upstream @react-native-firebase/analytics JS runs unchanged against the NativeRNFBTurboAnalytics (v26) and RNFBAnalyticsModule native seam; events and properties are accepted and nothing is uploaded, the app instance id persists on device and follows reset and analytics_storage consent",
|
|
7261
|
+
working: "default callable export, getAnalytics, modular helpers and their argument validation, logEvent and every log* helper, setUserId, setUserProperty, setUserProperties, setDefaultEventParameters, collection and session timeout, getAppInstanceId, getSessionId, resetAnalyticsData, setConsent, on-device conversion measurement",
|
|
7262
|
+
missing: "Google Analytics transport, DebugView, StoreKit transactions for logTransaction"
|
|
7243
7263
|
}
|
|
7244
7264
|
]
|
|
7245
7265
|
},
|
|
@@ -7289,7 +7309,7 @@ var init_registry = __esm({
|
|
|
7289
7309
|
{
|
|
7290
7310
|
range: ">=18.0.0",
|
|
7291
7311
|
coverage: 0.95,
|
|
7292
|
-
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",
|
|
7293
7313
|
working: "trace/newTrace/startTrace, Trace start/stop/attributes/metrics, HttpMetric start/stop/attributes/payload metadata, collection enablement",
|
|
7294
7314
|
missing: "native app start/network instrumentation, trace persistence, upload to Firebase Performance"
|
|
7295
7315
|
}
|
|
@@ -7302,9 +7322,9 @@ var init_registry = __esm({
|
|
|
7302
7322
|
{
|
|
7303
7323
|
range: ">=18.0.0",
|
|
7304
7324
|
coverage: 0.8,
|
|
7305
|
-
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",
|
|
7306
7326
|
working: "setDefaults, setConfigSettings, fetch, fetchAndActivate, activate, ensureInitialized, getAll, getBoolean, getNumber, getString, getValue, reset",
|
|
7307
|
-
missing: "
|
|
7327
|
+
missing: "setDefaultsFromResource (no app bundle plist)"
|
|
7308
7328
|
}
|
|
7309
7329
|
]
|
|
7310
7330
|
},
|
|
@@ -7341,9 +7361,9 @@ var init_registry = __esm({
|
|
|
7341
7361
|
{
|
|
7342
7362
|
range: ">=18.0.0",
|
|
7343
7363
|
coverage: 0,
|
|
7344
|
-
note: "
|
|
7345
|
-
working: "default installations(), getId, getToken, delete",
|
|
7346
|
-
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"
|
|
7347
7367
|
}
|
|
7348
7368
|
]
|
|
7349
7369
|
},
|
|
@@ -7365,11 +7385,11 @@ var init_registry = __esm({
|
|
|
7365
7385
|
stubType: "native",
|
|
7366
7386
|
versions: [
|
|
7367
7387
|
{
|
|
7368
|
-
range: ">=
|
|
7388
|
+
range: ">=16.0.0 <17.0.0",
|
|
7369
7389
|
coverage: 0.35,
|
|
7370
|
-
note: "
|
|
7371
|
-
working: "
|
|
7372
|
-
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"
|
|
7373
7393
|
}
|
|
7374
7394
|
]
|
|
7375
7395
|
},
|
|
@@ -7655,7 +7675,7 @@ var init_registry = __esm({
|
|
|
7655
7675
|
{
|
|
7656
7676
|
range: ">=12.0.0",
|
|
7657
7677
|
coverage: 0.9,
|
|
7658
|
-
note: "upstream expo-sharing JS runs
|
|
7678
|
+
note: "real upstream package \u2014 not intercepted. the app's expo-sharing JS runs over the ExpoSharing native module. shareAsync presents the same canvas share sheet core RN Share uses; a declared app group id reads the empty inbox a browser preview should report.",
|
|
7659
7679
|
working: "isAvailableAsync through upstream js, shareAsync presenting the shared canvas sheet and resolving on dismissal whatever the outcome, dialogTitle accepted and not shown as on iOS, ERR_FILE_PERMISSION for unreadable files, ERR_MISSING_CURRENT_VIEW_CONTROLLER without a sheet host, ERR_FAILED_TO_RESOLVE_APP_GROUP_ID from all three share-into entries when the app declares no ExpoShareIntoAppGroupId, empty incoming-share inbox when it does",
|
|
7660
7680
|
missing: "incoming share extension app-group storage (no extension writes into the group from a preview, so a declared key always reads empty); UTI/mimeType file restaging and iPad popover anchoring have no visible effect on the iPhone-idiom sheet"
|
|
7661
7681
|
}
|
|
@@ -7785,7 +7805,7 @@ var init_registry = __esm({
|
|
|
7785
7805
|
{
|
|
7786
7806
|
range: ">=1.0.0",
|
|
7787
7807
|
coverage: 0.93,
|
|
7788
|
-
note: "package
|
|
7808
|
+
note: "real upstream package \u2014 not intercepted. the app's react-native-haptic-feedback JS runs over the RNHapticFeedback TurboModule against the browser vibration API where available. full upstream API surface \u2014 every documented entry point lands on either real navigator.vibrate work or correct unavailable shape.",
|
|
7789
7809
|
working: "sootsim validated upstream trigger, stop, isSupported, triggerPattern, getSystemHapticStatus, setEnabled, isEnabled, impact, HapticFeedbackTypes, Patterns, pattern/PATTERN_CHARS, and TouchableHaptic; RNHapticFeedback TurboModule uses navigator.vibrate for trigger/triggerPattern/stop and reports browser support shape",
|
|
7790
7810
|
missing: "actual Core Haptics/UIKit haptic engine, AHAP file playback, hardware-specific intensity/sharpness rendering \u2014 these are unavailable on web (browser vibration API only honors duration patterns); apps that gate on isSupported take the no-haptic branch correctly"
|
|
7791
7811
|
}
|
|
@@ -7864,7 +7884,7 @@ var init_registry = __esm({
|
|
|
7864
7884
|
{
|
|
7865
7885
|
range: ">=10.0.0",
|
|
7866
7886
|
coverage: 0.8,
|
|
7867
|
-
note: "package
|
|
7887
|
+
note: "real upstream package \u2014 not intercepted. the app's JS runs over the RNGoogleSignin TurboModule seam for signed-out iOS flows, with RN oracle documenting the upstream new-arch provider gap",
|
|
7868
7888
|
working: "upstream GoogleSignin, GoogleSigninButton, statusCodes, and helper predicates run unchanged; configure, hasPlayServices, hasPreviousSignIn, getCurrentUser, addScopes, signInSilently no-saved response, getTokens signed-out rejection, clearCachedAccessToken, signOut/revokeAccess, and codegen native button press render through the RNGoogleSignin seam",
|
|
7869
7889
|
missing: "real Google OAuth popup/redirect flow, token exchange, keychain-backed current user persistence, successful scope grants, One Tap / web credential support, and upstream iOS new-arch module provider registration in the RN oracle app"
|
|
7870
7890
|
}
|
|
@@ -8102,7 +8122,7 @@ var init_registry = __esm({
|
|
|
8102
8122
|
{
|
|
8103
8123
|
range: ">=8.0.0",
|
|
8104
8124
|
coverage: 0.95,
|
|
8105
|
-
note: "upstream expo-store-review JS runs
|
|
8125
|
+
note: "real upstream package \u2014 not intercepted. the app's expo-store-review JS runs over the ExpoStoreReview native module.",
|
|
8106
8126
|
working: "isAvailableAsync returns iOS-simulator available, hasAction/storeUrl computed by upstream JS, requestReview resolves without a browser StoreKit prompt",
|
|
8107
8127
|
missing: "real iOS StoreKit review prompt presentation"
|
|
8108
8128
|
}
|
|
@@ -8129,7 +8149,7 @@ var init_registry = __esm({
|
|
|
8129
8149
|
{
|
|
8130
8150
|
range: ">=3.0.0",
|
|
8131
8151
|
coverage: 0.9,
|
|
8132
|
-
note: "upstream expo-tracking-transparency JS runs
|
|
8152
|
+
note: "real upstream package \u2014 not intercepted. the app's expo-tracking-transparency JS runs over the ExpoTrackingTransparency native module.",
|
|
8133
8153
|
working: "getAdvertisingId returns null for the simulator zero IDFA, getTrackingPermissionsAsync reports undetermined, requestTrackingPermissionsAsync resolves denied, isAvailable, PermissionStatus/useTrackingPermissions exports from upstream JS",
|
|
8134
8154
|
missing: "real iOS ATT consent sheet and authorized IDFA access"
|
|
8135
8155
|
}
|
|
@@ -8156,7 +8176,7 @@ var init_registry = __esm({
|
|
|
8156
8176
|
{
|
|
8157
8177
|
range: ">=11.0.0",
|
|
8158
8178
|
coverage: 0.93,
|
|
8159
|
-
note: "package
|
|
8179
|
+
note: "real upstream package \u2014 not intercepted. the app's expo-task-manager JS runs over the ExpoTaskManager native module. isAvailableAsync returns false on web per upstream's documented unavailable shape (TaskManager.ts:286), so apps with graceful-degradation paths skip background-task registration correctly. Peach is exactly as capable here as real expo-on-web (full JS surface + the same documented unavailable shape) \u2014 the only gaps are background execution primitives no browser has.",
|
|
8160
8180
|
working: "upstream defineTask/isTaskDefined validation, native EVENT_NAME, isAvailableAsync (false on web), isTaskRegisteredAsync, getTaskOptionsAsync, getRegisteredTasksAsync, unregisterTaskAsync, unregisterAllTasksAsync, notifyTaskFinishedAsync, native task execution events",
|
|
8161
8181
|
missing: "persistent native EXTaskService storage, app relaunch/headless execution, real task execution while the browser tab is suspended (browsers do not have iOS Background Fetch / Android WorkManager)"
|
|
8162
8182
|
}
|
|
@@ -8377,10 +8397,10 @@ var init_registry = __esm({
|
|
|
8377
8397
|
versions: [
|
|
8378
8398
|
{
|
|
8379
8399
|
range: ">=2.0.0",
|
|
8380
|
-
coverage: 0.
|
|
8381
|
-
note: "
|
|
8382
|
-
working: "LinearGradient, colors, start, end, locations, style, children",
|
|
8383
|
-
missing: "
|
|
8400
|
+
coverage: 0.95,
|
|
8401
|
+
note: "upstream react-native-linear-gradient JS runs unchanged against a BVLinearGradient native view seam drawing the CGGradient its layer draws, including useAngle with angle and angleCenter",
|
|
8402
|
+
working: "LinearGradient, colors, start, end, locations, useAngle, angle, angleCenter, style, children",
|
|
8403
|
+
missing: "setNativeProps on the gradient, PlatformColor stops"
|
|
8384
8404
|
}
|
|
8385
8405
|
]
|
|
8386
8406
|
},
|
|
@@ -8780,8 +8800,8 @@ var init_registry = __esm({
|
|
|
8780
8800
|
{
|
|
8781
8801
|
range: ">=11.0.0",
|
|
8782
8802
|
coverage: 0.75,
|
|
8783
|
-
note: "upstream expo-intent-launcher JS
|
|
8784
|
-
working: "upstream ActivityAction and ResultCode constants, iOS UnavailabilityError behavior for startActivityAsync/openApplication/getApplicationIconAsync,
|
|
8803
|
+
note: "real upstream package \u2014 not intercepted. on iOS the app's expo-intent-launcher JS throws UnavailabilityError itself, as its native module is Android-only",
|
|
8804
|
+
working: "upstream ActivityAction and ResultCode constants, iOS UnavailabilityError behavior for startActivityAsync/openApplication/getApplicationIconAsync, upstream argument validation and public exports",
|
|
8785
8805
|
missing: "real Android Activity result lifecycle, package manager icon extraction, Android settings/app intents, browser URL launch fallback intentionally removed to match iOS sootsim parity"
|
|
8786
8806
|
}
|
|
8787
8807
|
]
|
|
@@ -8870,7 +8890,14 @@ var init_registry = __esm({
|
|
|
8870
8890
|
stubType: "native",
|
|
8871
8891
|
versions: [
|
|
8872
8892
|
{
|
|
8873
|
-
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",
|
|
8874
8901
|
coverage: 0.78,
|
|
8875
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)",
|
|
8876
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",
|
|
@@ -9058,7 +9085,7 @@ var init_registry = __esm({
|
|
|
9058
9085
|
{
|
|
9059
9086
|
range: ">=55.0.0",
|
|
9060
9087
|
coverage: 0.95,
|
|
9061
|
-
note: "package
|
|
9088
|
+
note: "real upstream package \u2014 not intercepted. the app's expo-insights JS (an empty default export) runs over the ExpoInsights native module.",
|
|
9062
9089
|
working: "default export is the upstream empty object; ExpoInsights native module name resolves after importing expo-insights so inlined expo-modules-core bundles do not fall through to the permissive proxy",
|
|
9063
9090
|
missing: "native lifecycle telemetry delivery to i.expo.dev is intentionally absent in sootsim"
|
|
9064
9091
|
}
|
|
@@ -9650,10 +9677,10 @@ var init_registry = __esm({
|
|
|
9650
9677
|
versions: [
|
|
9651
9678
|
{
|
|
9652
9679
|
range: ">=8.0.0",
|
|
9653
|
-
coverage: 0,
|
|
9654
|
-
note: "the
|
|
9655
|
-
working: "
|
|
9656
|
-
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"
|
|
9657
9684
|
}
|
|
9658
9685
|
]
|
|
9659
9686
|
},
|
|
@@ -9883,10 +9910,11 @@ var init_registry = __esm({
|
|
|
9883
9910
|
stubType: "native",
|
|
9884
9911
|
versions: [
|
|
9885
9912
|
{
|
|
9886
|
-
range: ">=
|
|
9913
|
+
range: ">=5.0.0 <6.0.0",
|
|
9887
9914
|
coverage: 0.45,
|
|
9888
|
-
note: "
|
|
9889
|
-
|
|
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"
|
|
9890
9918
|
}
|
|
9891
9919
|
]
|
|
9892
9920
|
},
|
|
@@ -9899,7 +9927,7 @@ var init_registry = __esm({
|
|
|
9899
9927
|
coverage: 0.9,
|
|
9900
9928
|
note: "native-seam: sqlite.core.js runs unchanged from the bundle; only NativeModules.SQLite is ours, following platforms/ios/SQLite.m over the shared bedrock-sqlite WASM engine (tenant-scoped memfs IDB, so a reopened database keeps its rows). connections keyed by name, rowsAffected from the total_changes() delta, insertId whenever the connection has changed rows, WebSQL error codes from the primary sqlite code, BLOB columns as base64, the regexp() function, WAL journal mode, and the background batch reply after the calling turn",
|
|
9901
9929
|
working: "open (default/Documents/Library locations), close, delete, attach, echoStringValue, executeSqlBatch/backgroundExecuteSqlBatch, executeSql/backgroundExecuteSql; everything in sqlite.core.js above them (openDatabase, transaction/readTransaction, executeSql, sqlBatch, enablePromise) is the real package",
|
|
9902
|
-
missing: "
|
|
9930
|
+
missing: "createFromLocation copies nothing (no app-bundle www/ or sandbox asset exists); a multi-statement string errors where iOS silently runs only the first statement; regexp() bracket classes such as [[:alpha:]]; the Shared location (needs an AppGroupName) opens a temporary database as iOS does with a nil directory"
|
|
9903
9931
|
}
|
|
9904
9932
|
]
|
|
9905
9933
|
},
|
|
@@ -19211,14 +19239,14 @@ var init_backend_origin = __esm({
|
|
|
19211
19239
|
function hasOwnKeys(value) {
|
|
19212
19240
|
return !!value && Object.keys(value).length > 0;
|
|
19213
19241
|
}
|
|
19214
|
-
function
|
|
19242
|
+
function hasPeachConfig(config) {
|
|
19215
19243
|
if (!config) return false;
|
|
19216
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);
|
|
19217
19245
|
}
|
|
19218
|
-
function
|
|
19219
|
-
if (!
|
|
19220
|
-
if (!
|
|
19221
|
-
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;
|
|
19222
19250
|
return {
|
|
19223
19251
|
runtimeVersion: override.runtimeVersion ?? base.runtimeVersion,
|
|
19224
19252
|
modules: { ...base.modules || {}, ...override.modules || {} },
|
|
@@ -19238,20 +19266,20 @@ function mergeRNXConfig(base, override) {
|
|
|
19238
19266
|
initialState: { ...base.initialState || {}, ...override.initialState || {} }
|
|
19239
19267
|
};
|
|
19240
19268
|
}
|
|
19241
|
-
function
|
|
19269
|
+
function applyPeachConfigToUrl(url, config) {
|
|
19242
19270
|
const parsed = new URL(url);
|
|
19243
|
-
if (
|
|
19244
|
-
parsed.searchParams.set(
|
|
19271
|
+
if (hasPeachConfig(config)) {
|
|
19272
|
+
parsed.searchParams.set(PEACH_CONFIG_QUERY_PARAM, JSON.stringify(config));
|
|
19245
19273
|
} else {
|
|
19246
|
-
parsed.searchParams.delete(
|
|
19274
|
+
parsed.searchParams.delete(PEACH_CONFIG_QUERY_PARAM);
|
|
19247
19275
|
}
|
|
19248
19276
|
return parsed.toString();
|
|
19249
19277
|
}
|
|
19250
|
-
var
|
|
19278
|
+
var PEACH_CONFIG_QUERY_PARAM;
|
|
19251
19279
|
var init_config = __esm({
|
|
19252
19280
|
"src/config.ts"() {
|
|
19253
19281
|
"use strict";
|
|
19254
|
-
|
|
19282
|
+
PEACH_CONFIG_QUERY_PARAM = "peachConfig";
|
|
19255
19283
|
}
|
|
19256
19284
|
});
|
|
19257
19285
|
|
|
@@ -20024,7 +20052,7 @@ function withRuntimeConfig(port, bundleUrl, projectCwd) {
|
|
|
20024
20052
|
}) : [];
|
|
20025
20053
|
const exactKnownApps = knownApps.filter((app) => app.preferredPort === port);
|
|
20026
20054
|
const knownApp = exactKnownApps.length === 1 ? exactKnownApps[0] : exactKnownApps.length === 0 && knownApps.length === 1 ? knownApps[0] : void 0;
|
|
20027
|
-
const configured = knownApp?.runtimeConfig ?
|
|
20055
|
+
const configured = knownApp?.runtimeConfig ? applyPeachConfigToUrl(bundleUrl, knownApp.runtimeConfig) : bundleUrl;
|
|
20028
20056
|
return normalizeNativeDevBundleUrl(configured);
|
|
20029
20057
|
}
|
|
20030
20058
|
function isDirectOneBundleUrl(bundleUrl) {
|
|
@@ -20412,12 +20440,12 @@ var init_dev_server_scanner = __esm({
|
|
|
20412
20440
|
"scripts/dev-server-scanner.ts"() {
|
|
20413
20441
|
"use strict";
|
|
20414
20442
|
import_child_process = require("child_process");
|
|
20415
|
-
init_process_group();
|
|
20416
20443
|
import_promises2 = require("fs/promises");
|
|
20417
20444
|
import_http = __toESM(require("http"), 1);
|
|
20418
20445
|
import_net = __toESM(require("net"), 1);
|
|
20419
20446
|
import_node_fs2 = require("node:fs");
|
|
20420
20447
|
import_node_path3 = require("node:path");
|
|
20448
|
+
init_process_group();
|
|
20421
20449
|
init_backend_origin();
|
|
20422
20450
|
init_config();
|
|
20423
20451
|
init_native_dev_bundle_url();
|
|
@@ -24060,7 +24088,7 @@ function isContrastKitSpecifier(specifier) {
|
|
|
24060
24088
|
}
|
|
24061
24089
|
function unsupportedSpecifier(specifier) {
|
|
24062
24090
|
return new Error(
|
|
24063
|
-
`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.`
|
|
24064
24092
|
);
|
|
24065
24093
|
}
|
|
24066
24094
|
function bridgeDeclaration(name2, specifier) {
|
|
@@ -32778,7 +32806,7 @@ function findExpoAppConfig(dir) {
|
|
|
32778
32806
|
return firstNamedFile(dir, EXPO_APP_CONFIG_NAMES);
|
|
32779
32807
|
}
|
|
32780
32808
|
function findRNXAppConfig(dir) {
|
|
32781
|
-
return firstNamedFile(dir,
|
|
32809
|
+
return firstNamedFile(dir, PEACH_APP_CONFIG_NAMES);
|
|
32782
32810
|
}
|
|
32783
32811
|
function resolveAppProject(projectRoot) {
|
|
32784
32812
|
const appDir = import_node_path23.default.resolve(projectRoot);
|
|
@@ -32793,7 +32821,7 @@ function resolveAppProject(projectRoot) {
|
|
|
32793
32821
|
}
|
|
32794
32822
|
return { appDir, configPath };
|
|
32795
32823
|
}
|
|
32796
|
-
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;
|
|
32797
32825
|
var init_app_project = __esm({
|
|
32798
32826
|
"cli/app-project.ts"() {
|
|
32799
32827
|
"use strict";
|
|
@@ -32806,11 +32834,11 @@ var init_app_project = __esm({
|
|
|
32806
32834
|
"app.config.mjs",
|
|
32807
32835
|
"app.json"
|
|
32808
32836
|
];
|
|
32809
|
-
|
|
32810
|
-
"
|
|
32811
|
-
"
|
|
32812
|
-
"
|
|
32813
|
-
"
|
|
32837
|
+
PEACH_APP_CONFIG_NAMES = [
|
|
32838
|
+
"peach.config.ts",
|
|
32839
|
+
"peach.config.js",
|
|
32840
|
+
"peach.config.mjs",
|
|
32841
|
+
"peach.config.cjs"
|
|
32814
32842
|
];
|
|
32815
32843
|
}
|
|
32816
32844
|
});
|
|
@@ -32819,7 +32847,7 @@ var init_app_project = __esm({
|
|
|
32819
32847
|
function isOptionalRecord(value) {
|
|
32820
32848
|
return value === void 0 || value !== null && typeof value === "object" && !Array.isArray(value);
|
|
32821
32849
|
}
|
|
32822
|
-
function
|
|
32850
|
+
function isPeachConfig(value) {
|
|
32823
32851
|
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
32824
32852
|
const runtimeVersion = Reflect.get(value, "runtimeVersion");
|
|
32825
32853
|
const network = Reflect.get(value, "network");
|
|
@@ -32850,7 +32878,7 @@ async function loadRNXAppConfig(project) {
|
|
|
32850
32878
|
}
|
|
32851
32879
|
});
|
|
32852
32880
|
const loaded = await jiti.import(project.configPath, { default: true });
|
|
32853
|
-
if (!
|
|
32881
|
+
if (!isPeachConfig(loaded)) {
|
|
32854
32882
|
throw new Error("the default export must be a peach config object");
|
|
32855
32883
|
}
|
|
32856
32884
|
return resolveConfigReplacementFiles(loaded, project.configPath);
|
|
@@ -35718,9 +35746,9 @@ async function resolveShellUrl(target, baseUrl, opts = {}) {
|
|
|
35718
35746
|
if (looksLikeSootsimUrl(target)) {
|
|
35719
35747
|
const url = new URL(target);
|
|
35720
35748
|
const base = new URL(baseUrl);
|
|
35721
|
-
const baseConfig = base.searchParams.get(
|
|
35722
|
-
if (baseConfig && !url.searchParams.has(
|
|
35723
|
-
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);
|
|
35724
35752
|
}
|
|
35725
35753
|
return url.toString();
|
|
35726
35754
|
}
|
|
@@ -36067,16 +36095,16 @@ function printOpenedSim(openUrl2, sim, mode, quiet = false) {
|
|
|
36067
36095
|
try {
|
|
36068
36096
|
const parsed = new URL(value);
|
|
36069
36097
|
let changed = false;
|
|
36070
|
-
if (parsed.searchParams.has(
|
|
36071
|
-
parsed.searchParams.set(
|
|
36098
|
+
if (parsed.searchParams.has(PEACH_CONFIG_QUERY_PARAM)) {
|
|
36099
|
+
parsed.searchParams.set(PEACH_CONFIG_QUERY_PARAM, "[redacted]");
|
|
36072
36100
|
changed = true;
|
|
36073
36101
|
}
|
|
36074
36102
|
const bundle = parsed.searchParams.get("bundle");
|
|
36075
36103
|
if (bundle) {
|
|
36076
36104
|
try {
|
|
36077
36105
|
const parsedBundle = new URL(bundle);
|
|
36078
|
-
if (parsedBundle.searchParams.has(
|
|
36079
|
-
parsedBundle.searchParams.set(
|
|
36106
|
+
if (parsedBundle.searchParams.has(PEACH_CONFIG_QUERY_PARAM)) {
|
|
36107
|
+
parsedBundle.searchParams.set(PEACH_CONFIG_QUERY_PARAM, "[redacted]");
|
|
36080
36108
|
parsed.searchParams.set("bundle", parsedBundle.toString());
|
|
36081
36109
|
changed = true;
|
|
36082
36110
|
}
|
|
@@ -36315,8 +36343,8 @@ async function runOpenCommand(args, opts = {}) {
|
|
|
36315
36343
|
const project = await resolveAppProjectForBundleUrl(resolvedBundle?.bundleUrl);
|
|
36316
36344
|
const appConfig = await loadRNXAppConfig(project);
|
|
36317
36345
|
const configuredRuntimeVersion = appConfig?.runtimeVersion;
|
|
36318
|
-
const runtimeConfig =
|
|
36319
|
-
|
|
36346
|
+
const runtimeConfig = mergePeachConfig(
|
|
36347
|
+
mergePeachConfig(
|
|
36320
36348
|
appConfig ? { ...appConfig, runtimeVersion: void 0 } : void 0,
|
|
36321
36349
|
opts.runtimeConfig
|
|
36322
36350
|
),
|
|
@@ -36489,7 +36517,7 @@ async function runOpenCommand(args, opts = {}) {
|
|
|
36489
36517
|
if (!targetSim && parsed.simIdSource !== "flag") {
|
|
36490
36518
|
targetShellUrl = await buildShellUrl(
|
|
36491
36519
|
target,
|
|
36492
|
-
|
|
36520
|
+
applyPeachConfigToUrl(baseUrl, runtimeConfig),
|
|
36493
36521
|
buildShellUrlOpts
|
|
36494
36522
|
);
|
|
36495
36523
|
const normalizedTarget = new URL(targetShellUrl);
|
|
@@ -36518,7 +36546,7 @@ async function runOpenCommand(args, opts = {}) {
|
|
|
36518
36546
|
const resolvedBaseUrl = hasExplicitBaseUrl || looksLikeSootsimUrl(target) ? baseUrl : deriveCurrentSimBaseUrl(targetSim, baseUrl);
|
|
36519
36547
|
navigatedShellUrl = targetShellUrl ?? await buildShellUrl(
|
|
36520
36548
|
target,
|
|
36521
|
-
|
|
36549
|
+
applyPeachConfigToUrl(resolvedBaseUrl, runtimeConfig),
|
|
36522
36550
|
buildShellUrlOpts
|
|
36523
36551
|
);
|
|
36524
36552
|
const navigationUrl = new URL(navigatedShellUrl);
|
|
@@ -36593,7 +36621,7 @@ async function runOpenCommand(args, opts = {}) {
|
|
|
36593
36621
|
bridge.close();
|
|
36594
36622
|
}
|
|
36595
36623
|
}
|
|
36596
|
-
const configuredBaseUrl =
|
|
36624
|
+
const configuredBaseUrl = applyPeachConfigToUrl(baseUrl, runtimeConfig);
|
|
36597
36625
|
const openUrl2 = await buildOpenUrl(target, configuredBaseUrl, token, buildShellUrlOpts);
|
|
36598
36626
|
const ownerPid = opts.ownerPid ?? getStableOwnerPid();
|
|
36599
36627
|
if (!ownerPid) {
|