rnxsim 0.1.363 → 0.1.365
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/cli/outbound-endpoints.ts +2 -6
- package/dist-cli/bin.js +5 -5
- package/dist-cli/chunks/{agent-EN7USQWO.js → agent-BVMNQFKF.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-4K2P2EBF.js → agent-wrapper-B6YFXGC3.js} +2 -2
- package/dist-cli/chunks/app-fonts-MEI6R6XR.js +4 -0
- package/dist-cli/chunks/{assert-WEQDRDJ2.js → assert-JGHI53HV.js} +2 -2
- package/dist-cli/chunks/{auth-U5GBY5SE.js → auth-STEOXUS7.js} +2 -2
- package/dist-cli/chunks/{beta-WOKLQLOJ.js → beta-HT3FLS5T.js} +2 -2
- package/dist-cli/chunks/{camera-GRMP2HT3.js → camera-ZCLFSLON.js} +2 -2
- package/dist-cli/chunks/{chunk-TIZP26F4.js → chunk-25BTVHK2.js} +2 -2
- package/dist-cli/chunks/{chunk-YFF6YFYJ.js → chunk-2CXHDTQ5.js} +1 -1
- package/dist-cli/chunks/{chunk-TK4ZQQAL.js → chunk-2JFZ5Z7Q.js} +1 -1
- package/dist-cli/chunks/{chunk-QVUS7OHN.js → chunk-2SFMW5K6.js} +1 -1
- package/dist-cli/chunks/{chunk-6BGR523F.js → chunk-4WFN4DFR.js} +2 -2
- package/dist-cli/chunks/{chunk-4QK74NWP.js → chunk-52ES4API.js} +2 -2
- package/dist-cli/chunks/{chunk-FFWDCXTD.js → chunk-5AS7S6HY.js} +2 -2
- package/dist-cli/chunks/{chunk-SIKPB3GL.js → chunk-5VHWQGGF.js} +1 -1
- package/dist-cli/chunks/{chunk-GLYEL265.js → chunk-622E4JET.js} +1 -1
- package/dist-cli/chunks/{chunk-DK764ET6.js → chunk-67ATAITF.js} +2 -2
- package/dist-cli/chunks/{chunk-2AELGO56.js → chunk-6BAF6GFS.js} +1 -1
- package/dist-cli/chunks/{chunk-ZSFETJZV.js → chunk-BGRGP3QR.js} +1 -1
- package/dist-cli/chunks/{chunk-7CT75XQF.js → chunk-CYIE65QN.js} +1 -1
- package/dist-cli/chunks/{chunk-PDGEVGHU.js → chunk-DBJZUCFP.js} +2 -2
- package/dist-cli/chunks/{chunk-KCHXGTYQ.js → chunk-DQFOHIRF.js} +1 -1
- package/dist-cli/chunks/{chunk-MOC4QX3B.js → chunk-EAFKG5R3.js} +2 -2
- package/dist-cli/chunks/{chunk-DFL5AISK.js → chunk-EFL2ASZO.js} +1 -1
- package/dist-cli/chunks/{chunk-GMW6T2K6.js → chunk-EFXNSJ55.js} +2 -2
- package/dist-cli/chunks/{chunk-NUU3SWLR.js → chunk-EVBQDQVY.js} +1 -1
- package/dist-cli/chunks/{chunk-X2ITJOHZ.js → chunk-FHWZPUGC.js} +1 -1
- package/dist-cli/chunks/{chunk-23MIH7SN.js → chunk-FIXRGPUT.js} +1 -1
- package/dist-cli/chunks/{chunk-EAXYIY5U.js → chunk-GK7PGYFH.js} +1 -1
- package/dist-cli/chunks/{chunk-BPYGMBOL.js → chunk-GZEUDDAW.js} +2 -2
- package/dist-cli/chunks/{chunk-WIV5YAQT.js → chunk-HIDS3PYC.js} +2 -2
- package/dist-cli/chunks/{chunk-WYD5DEEU.js → chunk-IWPS3EKJ.js} +2 -2
- package/dist-cli/chunks/{chunk-5N5BWVZK.js → chunk-J66US2OZ.js} +1 -1
- package/dist-cli/chunks/{chunk-MM2XAXTN.js → chunk-JAFF4RAU.js} +1 -1
- package/dist-cli/chunks/{chunk-GKKO7RE2.js → chunk-JRPU5TFI.js} +3 -3
- package/dist-cli/chunks/{chunk-ZSLOAO3P.js → chunk-M5KJCLUW.js} +3 -3
- package/dist-cli/chunks/{chunk-4ZGUXZ6U.js → chunk-MACI34ST.js} +3 -3
- package/dist-cli/chunks/chunk-MCHKBFUL.js +4 -0
- package/dist-cli/chunks/{chunk-42O6RKCS.js → chunk-MR3YPNUI.js} +2 -2
- package/dist-cli/chunks/{chunk-QXBFDUCQ.js → chunk-MRNW4GVL.js} +2 -2
- package/dist-cli/chunks/{chunk-VXN2HAHP.js → chunk-NEH4T67X.js} +2 -2
- package/dist-cli/chunks/{chunk-ZCHCE6WJ.js → chunk-O2ORLK6W.js} +2 -2
- package/dist-cli/chunks/{chunk-KWFRIVXW.js → chunk-O6P4N2JD.js} +2 -2
- package/dist-cli/chunks/{chunk-BWTDQWRB.js → chunk-OSZ5HZSI.js} +2 -2
- package/dist-cli/chunks/{chunk-HJN6LXR5.js → chunk-QIQL7Y5V.js} +2 -2
- package/dist-cli/chunks/{chunk-LV4BJLQU.js → chunk-R4FQZXJC.js} +2 -2
- package/dist-cli/chunks/{chunk-74RRQIWF.js → chunk-RI3NS77J.js} +1 -1
- package/dist-cli/chunks/{chunk-BAPVTWIM.js → chunk-TKCGP3DD.js} +2 -2
- package/dist-cli/chunks/{chunk-S6CNNXSR.js → chunk-TULWPOAY.js} +2 -2
- package/dist-cli/chunks/{chunk-FADHHMJU.js → chunk-UR345KM3.js} +2 -2
- package/dist-cli/chunks/{chunk-IY2WWLFH.js → chunk-W3UIDI3W.js} +2 -2
- package/dist-cli/chunks/{chunk-FNVWTY57.js → chunk-WGNDJARS.js} +1 -1
- package/dist-cli/chunks/{chunk-XYPCBRGY.js → chunk-X5ZOZVHC.js} +1 -1
- package/dist-cli/chunks/{chunk-HGPDQPIG.js → chunk-XKRUNS7A.js} +2 -2
- package/dist-cli/chunks/{chunk-FAWMDCMJ.js → chunk-XPOTXF5Q.js} +2 -2
- package/dist-cli/chunks/{chunk-WPXQ7CNQ.js → chunk-XR4KID25.js} +2 -2
- package/dist-cli/chunks/{chunk-AGUR7LE7.js → chunk-XRO5WQXP.js} +1 -1
- package/dist-cli/chunks/{chunk-YSLE3K2S.js → chunk-XXNPISER.js} +2 -2
- package/dist-cli/chunks/{chunk-PH4W36KI.js → chunk-YE3M3YD4.js} +3 -3
- package/dist-cli/chunks/{chunk-46BMZYP7.js → chunk-ZCP4CRP6.js} +2 -2
- package/dist-cli/chunks/{chunk-KJ5SZIXX.js → chunk-ZGD7GZRI.js} +2 -2
- package/dist-cli/chunks/{chunk-2IVWNQDE.js → chunk-ZGH5U4AJ.js} +2 -2
- package/dist-cli/chunks/{chunk-4CMRJ7UX.js → chunk-ZTWUNK45.js} +2 -2
- package/dist-cli/chunks/{cleanup-ZVQLJLTY.js → cleanup-G4TEYVKY.js} +2 -2
- package/dist-cli/chunks/cli-version-ZM3PVKQ5.js +4 -0
- package/dist-cli/chunks/{compat-7T2VZZDL.js → compat-EZ5NP32J.js} +2 -2
- package/dist-cli/chunks/{config-E7OULENQ.js → config-27M2DGCS.js} +2 -2
- package/dist-cli/chunks/{control-X5O5UXPP.js → control-4QR43FXV.js} +2 -2
- package/dist-cli/chunks/daemon-2U4CJ6AT.js +4 -0
- package/dist-cli/chunks/{debug-LK6GRYHR.js → debug-EXU3D7PC.js} +3 -3
- package/dist-cli/chunks/{desktop-2LAHHUP6.js → desktop-SHHPZAWQ.js} +3 -3
- package/dist-cli/chunks/{detox-7GF6V6E6.js → detox-RQ6FFSBS.js} +2 -2
- package/dist-cli/chunks/{device-G3IF4IRA.js → device-4NI26HG6.js} +2 -2
- package/dist-cli/chunks/{diagnose-6G2RJWVP.js → diagnose-P4SFXH6J.js} +2 -2
- package/dist-cli/chunks/{disk-cleanup-PRAJROKV.js → disk-cleanup-BUAKWYMY.js} +2 -2
- package/dist-cli/chunks/drivers-OVCUPQTM.js +4 -0
- package/dist-cli/chunks/{film-CGVAWXPR.js → film-Y2BAQINB.js} +3 -3
- package/dist-cli/chunks/flow-ELTLKKZ3.js +4 -0
- package/dist-cli/chunks/help-CDEZAG2L.js +4 -0
- package/dist-cli/chunks/{hidden-runtime-alias-FCDWZQM3.js → hidden-runtime-alias-U2MAY2XV.js} +2 -2
- package/dist-cli/chunks/{home-paths-JEUBFYPY.js → home-paths-PAJMZCOS.js} +2 -2
- package/dist-cli/chunks/inspect-VVQRPJLS.js +4 -0
- package/dist-cli/chunks/install-desktop-YXSRKR35.js +4 -0
- package/dist-cli/chunks/{login-HBPZL3QX.js → login-D53XKBEO.js} +2 -2
- package/dist-cli/chunks/{logout-SVBZGGEI.js → logout-HZQKLNUJ.js} +2 -2
- package/dist-cli/chunks/{maestro-445CMWSH.js → maestro-XSS2KX6L.js} +3 -3
- package/dist-cli/chunks/{maestro-generate-4JWKONR2.js → maestro-generate-DNDQX3JQ.js} +3 -3
- package/dist-cli/chunks/{mode-M6GVNTDZ.js → mode-LEVGOKI3.js} +2 -2
- package/dist-cli/chunks/{optional-demo-registry-Q5CATNHD.js → optional-demo-registry-2XZIJNDG.js} +2 -2
- package/dist-cli/chunks/{perf-MBNYDE6X.js → perf-OKMAXDLB.js} +2 -2
- package/dist-cli/chunks/{permissions-HNLQIZJD.js → permissions-VG5TBUTN.js} +2 -2
- package/dist-cli/chunks/privacy-MNRHREME.js +4 -0
- package/dist-cli/chunks/{record-MH3BLHON.js → record-BQYGZOMV.js} +3 -3
- package/dist-cli/chunks/{report-issue-6HQHCFBG.js → report-issue-HCPZESWE.js} +2 -2
- package/dist-cli/chunks/reset-R4E4W4YI.js +4 -0
- package/dist-cli/chunks/runtime-XRQZ7W34.js +4 -0
- package/dist-cli/chunks/{screenshot-command-D6VS6GDA.js → screenshot-command-DWEYPJE7.js} +3 -3
- package/dist-cli/chunks/{screenshot-layers-MC7JHOO2.js → screenshot-layers-5GMBXLO7.js} +2 -2
- package/dist-cli/chunks/{screenshots-capture-PUQTDG5I.js → screenshots-capture-5KCI7IZD.js} +2 -2
- package/dist-cli/chunks/serve-QNKTA2HR.js +56 -0
- package/dist-cli/chunks/setup-RNMM5GO5.js +4 -0
- package/dist-cli/chunks/{skills-IJDXM6IC.js → skills-DOEALD3X.js} +2 -2
- package/dist-cli/chunks/{state-KCBXBFZZ.js → state-3HH2IHIF.js} +2 -2
- package/dist-cli/chunks/{storage-RBYDWRJC.js → storage-E7WUWN3E.js} +2 -2
- package/dist-cli/chunks/store-HUPZUCFG.js +4 -0
- package/dist-cli/chunks/telemetry-IJ53XR2Y.js +4 -0
- package/dist-cli/chunks/{timeline-RPEEEB3A.js → timeline-IKNUGQ2A.js} +2 -2
- package/dist-cli/chunks/{upgrade-TFLWCW3P.js → upgrade-VS3OKXE2.js} +2 -2
- package/dist-cli/chunks/upload-A57NAAHF.js +4 -0
- package/dist-cli/chunks/{version-LHPE2VT4.js → version-F4XHNTBZ.js} +2 -2
- package/dist-cli/chunks/{web-QJ74GCNZ.js → web-F72724QL.js} +2 -2
- package/dist-cli/chunks/welcome-B72RRMBW.js +5 -0
- package/dist-cli/chunks/{what-happened-JXBBC5U7.js → what-happened-APK7YKOV.js} +2 -2
- 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.cjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/config.cjs +1 -1
- 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 +89 -154
- package/dist-lib/host/fetch-proxy-handler.cjs +36 -3
- 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 +60 -107
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +60 -105
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.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 +60 -105
- 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 +1 -1
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +126 -189
- package/dist-lib/vite.cjs +59 -104
- package/package.json +1 -1
- package/src/host/bridge-host.ts +2 -50
- package/src/host/fetch-proxy-handler.ts +40 -3
- package/src/host/replacement-module-handler.ts +65 -117
- package/dist-cli/chunks/app-fonts-7B5E7UDM.js +0 -4
- package/dist-cli/chunks/chunk-FQGTATLA.js +0 -4
- package/dist-cli/chunks/cli-version-KAVMACHT.js +0 -4
- package/dist-cli/chunks/daemon-GEDFARBC.js +0 -4
- package/dist-cli/chunks/drivers-4WSF4T4I.js +0 -4
- package/dist-cli/chunks/flow-MEDCS46T.js +0 -4
- package/dist-cli/chunks/help-KOAHGOH4.js +0 -4
- package/dist-cli/chunks/inspect-IU5HFVKF.js +0 -4
- package/dist-cli/chunks/install-desktop-5Q2WB4QO.js +0 -4
- package/dist-cli/chunks/privacy-UL6QT67W.js +0 -4
- package/dist-cli/chunks/reset-GHLOGMF3.js +0 -4
- package/dist-cli/chunks/runtime-JK43NPS6.js +0 -4
- package/dist-cli/chunks/serve-4UDVILST.js +0 -118
- package/dist-cli/chunks/setup-5IHFDPBA.js +0 -4
- package/dist-cli/chunks/store-O2PYGAXL.js +0 -4
- package/dist-cli/chunks/telemetry-B2CPDQID.js +0 -4
- package/dist-cli/chunks/upload-2GJWZG6R.js +0 -4
- package/dist-cli/chunks/welcome-5XJPBRJD.js +0 -5
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.365 | (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;
|
|
@@ -1175,7 +1175,7 @@ var REACT_NATIVE_ROOT_EXPORT_WILL_IT_WORK_COVERAGE, REACT_NATIVE_ROOT_EXPORT_STR
|
|
|
1175
1175
|
var init_react_native_root_export_coverage = __esm({
|
|
1176
1176
|
"../compat/src/generated/react-native-root-export-coverage.ts"() {
|
|
1177
1177
|
"use strict";
|
|
1178
|
-
REACT_NATIVE_ROOT_EXPORT_WILL_IT_WORK_COVERAGE = 0.
|
|
1178
|
+
REACT_NATIVE_ROOT_EXPORT_WILL_IT_WORK_COVERAGE = 0.98;
|
|
1179
1179
|
REACT_NATIVE_ROOT_EXPORT_STRICT_COVERAGE = 0.653;
|
|
1180
1180
|
}
|
|
1181
1181
|
});
|
|
@@ -1592,10 +1592,10 @@ var init_registry = __esm({
|
|
|
1592
1592
|
versions: [
|
|
1593
1593
|
{
|
|
1594
1594
|
range: ">=1.0.0",
|
|
1595
|
-
coverage: 0.
|
|
1596
|
-
note: "sootsim-image
|
|
1597
|
-
working: "Image component, ImageBackground, useImage hook, ImageRef class, contentFit, tintColor, onLoad/onLoadStart/onLoadEnd/onError callbacks, source normalization (string/object/array), prefetch, clearMemoryCache, clearDiskCache, getCachePathAsync, configureCache, generateBlurhashAsync, generateThumbhashAsync, loadAsync",
|
|
1598
|
-
missing: "transition/animation effects,
|
|
1595
|
+
coverage: 0.9,
|
|
1596
|
+
note: "the real expo-image wrapper renders through the shared sootsim-image host. Paired native and SootSim runtime proof covers source-less placeholder rendering and right-edge contentPosition alignment; a negative control observed centered red/blue content before the renderer implemented the position.",
|
|
1597
|
+
working: "Image component, ImageBackground, useImage hook, ImageRef class, contentFit, contentPosition right-edge alignment, source-less placeholder rendering and placeholderContentFit, tintColor, onLoad/onLoadStart/onLoadEnd/onError callbacks, source normalization (string/object/array), prefetch, clearMemoryCache, clearDiskCache, getCachePathAsync, configureCache, generateBlurhashAsync, generateThumbhashAsync, loadAsync",
|
|
1598
|
+
missing: "transition/animation effects, blurRadius, contentPosition variants beyond the paired right-edge proof, sfEffect/SFSymbol, allowDownscaling, autoplay (GIF), responsivePolicy"
|
|
1599
1599
|
}
|
|
1600
1600
|
]
|
|
1601
1601
|
},
|
|
@@ -1644,9 +1644,9 @@ var init_registry = __esm({
|
|
|
1644
1644
|
{
|
|
1645
1645
|
range: ">=15.0.0",
|
|
1646
1646
|
coverage: 0.9,
|
|
1647
|
-
note: "both APIs implemented over one shared synchronous localStorage VFS: the SDK-18+ class-based File/Directory/Paths API (the bare `expo-file-system` export on SDK 18+) and the legacy async API (`expo-file-system/legacy`), with real network ops via fetch + navigator.storage. legacy and new interoperate on the same filesystem.",
|
|
1648
|
-
working: "SDK-18+ class API: Paths (document/cache/bundle, join/basename/extname/dirname), File (exists, size, md5, name, extension, parentDirectory, create, write text|bytes, text(Sync), base64(Sync), bytes(Sync), arrayBuffer, slice, stream, delete, info, copy, move/rename, open FileHandle, static downloadFileAsync/pickFileAsync), Directory (exists, create, createFile, createDirectory, list, info, delete, copy, move, static pickDirectoryAsync). Legacy API: documentDirectory, cacheDirectory, bundleDirectory, EncodingType, FileSystemSessionType, FileSystemUploadType, FileSystemAcceptedUploadHttpMethod, readAsStringAsync, writeAsStringAsync, deleteAsync, getInfoAsync, makeDirectoryAsync, readDirectoryAsync, copyAsync, moveAsync, downloadAsync, createDownloadResumable, uploadAsync (real fetch with binary or multipart body), createUploadTask, UploadTask class (uploadAsync, cancelAsync, fires completion callback), getFreeDiskStorageAsync (navigator.storage.estimate quota - usage), getTotalDiskCapacityAsync (navigator.storage.estimate quota), getContentUriAsync (returns uri unchanged \u2014 Android-only behavior), StorageAccessFramework namespace stub (Android-only methods throw with platform error). All upstream legacy types exported: FileSystemUploadOptions, FileSystemUploadResult, UploadProgressData, DownloadProgressData, FileSystemNetworkTaskProgressCallback.",
|
|
1649
|
-
missing: "DownloadResumable
|
|
1647
|
+
note: "both APIs implemented over one shared synchronous localStorage VFS: the SDK-18+ class-based File/Directory/Paths API (the bare `expo-file-system` export on SDK 18+) and the legacy async API (`expo-file-system/legacy`), with real network ops via fetch + navigator.storage. legacy and new interoperate on the same filesystem. paired native and SootSim runtime conformance verifies the published DownloadResumable class identity, savable state, and cancel-before-start behavior; the score stays at 90% because active-transfer control remains unsupported.",
|
|
1648
|
+
working: "SDK-18+ class API: Paths (document/cache/bundle, join/basename/extname/dirname), File (exists, size, md5, name, extension, parentDirectory, create, write text|bytes, text(Sync), base64(Sync), bytes(Sync), arrayBuffer, slice, stream, delete, info, copy, move/rename, open FileHandle, static downloadFileAsync/pickFileAsync), Directory (exists, create, createFile, createDirectory, list, info, delete, copy, move, static pickDirectoryAsync). Legacy API: documentDirectory, cacheDirectory, bundleDirectory, EncodingType, FileSystemSessionType, FileSystemUploadType, FileSystemAcceptedUploadHttpMethod, readAsStringAsync, writeAsStringAsync, deleteAsync, getInfoAsync, makeDirectoryAsync, readDirectoryAsync, copyAsync, moveAsync, downloadAsync, createDownloadResumable (published DownloadResumable class with fileUri/savable state and cancel-before-start), uploadAsync (real fetch with binary or multipart body), createUploadTask, UploadTask class (uploadAsync, cancelAsync, fires completion callback), getFreeDiskStorageAsync (navigator.storage.estimate quota - usage), getTotalDiskCapacityAsync (navigator.storage.estimate quota), getContentUriAsync (returns uri unchanged \u2014 Android-only behavior), StorageAccessFramework namespace stub (Android-only methods throw with platform error). All upstream legacy types exported: FileSystemUploadOptions, FileSystemUploadResult, UploadProgressData, DownloadProgressData, FileSystemNetworkTaskProgressCallback.",
|
|
1649
|
+
missing: "in-flight DownloadResumable pause, resume, cancellation, and streamed download progress; chunked upload progress events (fetch does not expose upload progress)"
|
|
1650
1650
|
}
|
|
1651
1651
|
]
|
|
1652
1652
|
},
|
|
@@ -2721,10 +2721,10 @@ var init_registry = __esm({
|
|
|
2721
2721
|
versions: [
|
|
2722
2722
|
{
|
|
2723
2723
|
range: ">=9.1.0 <10.0.0",
|
|
2724
|
-
coverage: 0.
|
|
2725
|
-
note: "the real upstream package JS runs from the guest bundle. the granular onValueChange prop starts in 9.1.0; its controlled iOS wrapper resolves codegenNativeComponent('RNDateTimePicker') to the engine UIDatePicker wheel.",
|
|
2726
|
-
working: "real upstream DateTimePicker and exported constants, value, mode date/time/datetime, granular onValueChange event and Date, minimumDate, maximumDate, minuteInterval, locale, timeZoneOffsetInMinutes, textColor, themeVariant, disabled",
|
|
2727
|
-
missing: "displayIOS 'default'/'compact'/'inline' calendar styles (all render as wheels), countdown mode renders the time wheel,
|
|
2724
|
+
coverage: 0.85,
|
|
2725
|
+
note: "the real upstream package JS runs from the guest bundle. the granular onValueChange prop starts in 9.1.0; its controlled iOS wrapper resolves codegenNativeComponent('RNDateTimePicker') to the engine UIDatePicker wheel. paired native and SootSim proof covers fixed-offset and IANA-named date calendars. the pinned Fabric emitter omits utcOffset, so its Int32 field is observed as 0 on native and intentionally matches that value here.",
|
|
2726
|
+
working: "real upstream DateTimePicker and exported constants, value, mode date/time/datetime, granular onValueChange event and Date, minimumDate, maximumDate, minuteInterval, locale, timeZoneOffsetInMinutes, timeZoneName for date-mode calendar selection, textColor, themeVariant, disabled",
|
|
2727
|
+
missing: "displayIOS 'default'/'compact'/'inline' calendar styles (all render as wheels), countdown mode renders the time wheel, named-zone time/datetime modes are not retained by paired proof, accentColor, public onDismiss; deprecated onChange is not covered by the retained native proof"
|
|
2728
2728
|
}
|
|
2729
2729
|
]
|
|
2730
2730
|
},
|
|
@@ -2873,14 +2873,14 @@ var init_registry = __esm({
|
|
|
2873
2873
|
"expo-screen-orientation": {
|
|
2874
2874
|
category: "Expo SDK",
|
|
2875
2875
|
stubType: "native",
|
|
2876
|
-
proofCoverage:
|
|
2876
|
+
proofCoverage: 1,
|
|
2877
2877
|
versions: [
|
|
2878
2878
|
{
|
|
2879
2879
|
range: ">=7.0.0",
|
|
2880
|
-
coverage: 0.
|
|
2881
|
-
note: "the
|
|
2882
|
-
working: "getOrientationAsync
|
|
2883
|
-
missing: "
|
|
2880
|
+
coverage: 0.95,
|
|
2881
|
+
note: "scored against the browser-hosted simulator contract: the real package imports cleanly and its meaningful lock state, platform masks, reads, and portrait-to-landscape event behavior match iOS across eight paired runtime stages. The simulator device frame is intentionally fixed, so the score does not claim faithful UIKit rotation.",
|
|
2882
|
+
working: "getOrientationAsync, getOrientationLockAsync, getPlatformOrientationLockAsync, lockAsync (with upstream TypeError validation), lockPlatformAsync, unlockAsync, supportsOrientationLockAsync, addOrientationChangeListener/remove, all enums; paired native and SootSim runtime validates support queries, portrait locks and reads, iOS platform-mask read/write, portrait-to-landscape event payloads, and unlock",
|
|
2883
|
+
missing: "deprecated bulk listener removal and same-axis portrait-up/portrait-down event filtering lack paired runtime coverage; physical device-frame rotation and sensor-driven auto-rotation are intentionally unavailable in the fixed browser-hosted simulator and do not count as an implementation gap"
|
|
2884
2884
|
}
|
|
2885
2885
|
]
|
|
2886
2886
|
},
|
|
@@ -4804,9 +4804,9 @@ var init_registry = __esm({
|
|
|
4804
4804
|
{
|
|
4805
4805
|
range: ">=14.0.0",
|
|
4806
4806
|
coverage: 0,
|
|
4807
|
-
note: "the reference iOS simulator renders Google test ads and presents consent flows. SootSim reports
|
|
4808
|
-
working: "initialize
|
|
4809
|
-
missing: "
|
|
4807
|
+
note: "the reference iOS simulator renders Google test ads and presents consent flows. the SootSim replacement only initializes to an empty adapter set and reports consent not required; it cannot create an ad through the current public factories. import safety and fabricated no-fill shapes receive no behavior credit",
|
|
4808
|
+
working: "default initialize returns an empty adapter set; AdsConsent returns a non-requesting placeholder state; RewardedAdEventType, AdEventType, AdsConsentStatus, AdsConsentDebugGeography, BannerAdSize, MaxAdContentRating, and TestIds constants are present",
|
|
4809
|
+
missing: "real ad delivery and consent UI; InterstitialAd / RewardedAd / RewardedInterstitialAd / AppOpenAd / GAM* createForAdRequest factories, BannerAd / GAMBannerAd, NativeAd / NativeAdView / NativeMediaView / NativeAsset, hooks, upstream validation, loaded state, and public event behavior"
|
|
4810
4810
|
}
|
|
4811
4811
|
]
|
|
4812
4812
|
},
|
|
@@ -4868,9 +4868,9 @@ var init_registry = __esm({
|
|
|
4868
4868
|
{
|
|
4869
4869
|
range: ">=8.0.0",
|
|
4870
4870
|
coverage: 0,
|
|
4871
|
-
note: "the reference iOS simulator renders configured RevenueCat paywalls. SootSim
|
|
4871
|
+
note: "the reference iOS simulator renders configured RevenueCat paywalls. SootSim's replacement returns NOT_PRESENTED, rejects customer center, and substitutes async no-ops for view components. the current 10.7 package ships its own visibly labeled Preview API components, but replacing the package prevents that upstream path from running. none of these shapes receive behavior credit",
|
|
4872
4872
|
working: "RevenueCatUI singleton, presentPaywall (NOT_PRESENTED), presentPaywallIfNeeded (NOT_PRESENTED), presentCustomerCenter (rejects clearly), PAYWALL_RESULT enum (NOT_PRESENTED, ERROR, CANCELLED, PURCHASED, RESTORED)",
|
|
4873
|
-
missing: "
|
|
4873
|
+
missing: "configured paywall and customer-center UI, Paywall / OriginalTemplatePaywallFooterContainerView / CustomerCenterView components, dismiss and purchase/restore callbacks, purchase logic, custom variables, management events, and the package-owned Preview API path"
|
|
4874
4874
|
}
|
|
4875
4875
|
]
|
|
4876
4876
|
},
|
|
@@ -5407,10 +5407,11 @@ var init_registry = __esm({
|
|
|
5407
5407
|
stubType: "native",
|
|
5408
5408
|
versions: [
|
|
5409
5409
|
{
|
|
5410
|
-
range: ">=0.
|
|
5411
|
-
coverage: 0,
|
|
5412
|
-
note: "
|
|
5413
|
-
|
|
5410
|
+
range: ">=0.1.0",
|
|
5411
|
+
coverage: 0.58,
|
|
5412
|
+
note: "native-seam only \u2014 the published AppleMaps and GoogleMaps namespaces, enums, permission hook, event unwrapping, and view wrappers run unchanged over SootSim's shared MapLibre-backed map owner",
|
|
5413
|
+
working: "AppleMaps.View and GoogleMaps.View live map rendering, initial and imperative camera positions, pan/pinch/rotate/tilt gesture settings, default markers, camera-move events, map-loaded callback, marker camera selection, location permission checks and requests",
|
|
5414
|
+
missing: "map/marker/shape click callbacks, polylines, polygons, circles, annotations, custom marker icons, Google Street View, Apple Look Around, traffic/building/indoor layers, platform-specific map styling and POI filtering"
|
|
5414
5415
|
}
|
|
5415
5416
|
]
|
|
5416
5417
|
},
|
|
@@ -6803,9 +6804,10 @@ var init_registry = __esm({
|
|
|
6803
6804
|
versions: [
|
|
6804
6805
|
{
|
|
6805
6806
|
range: ">=0.4.0",
|
|
6806
|
-
coverage: 0,
|
|
6807
|
-
note: "
|
|
6808
|
-
|
|
6807
|
+
coverage: 0.78,
|
|
6808
|
+
note: "native-seam only \u2014 the published SignatureCapture class, lifecycle, event adaptation, and imperative saveImage/resetImage methods run unchanged against a CanvasKit signature surface",
|
|
6809
|
+
working: "finger/stylus stroke capture and rendering, min/max stroke width, stroke and background colors, optional border/title/native Save and Reset controls, onDragEvent, imperative and button reset, PNG encoding, shared cache-VFS pathName, base64 encoded save result, onSaveEvent, style/testID/ref passthrough",
|
|
6810
|
+
missing: "rotateClockwise and square output transforms, velocity-sensitive variable stroke width, saveImageFileInExtStorage Android path choice, exact OpenGL/native Bezier smoothing and phone-specific rotated native control layout"
|
|
6809
6811
|
}
|
|
6810
6812
|
]
|
|
6811
6813
|
},
|
|
@@ -7372,10 +7374,11 @@ var init_registry = __esm({
|
|
|
7372
7374
|
stubType: "native",
|
|
7373
7375
|
versions: [
|
|
7374
7376
|
{
|
|
7375
|
-
range: ">=
|
|
7376
|
-
coverage: 0,
|
|
7377
|
-
note: "
|
|
7378
|
-
|
|
7377
|
+
range: ">=2.0.0",
|
|
7378
|
+
coverage: 0.78,
|
|
7379
|
+
note: "native-seam only \u2014 the published Waveform component, candle UI, hooks, scrub logic, events, and imperative facade run unchanged over SootSim's shared browser audio driver",
|
|
7380
|
+
working: "static waveform extraction from decoded browser audio, normalized multi-channel sample peaks, prepare/play/pause/stop/seek, current and total duration, volume, playback speed, loop/pause/stop finish modes, independent keyed players, playback progress and completion events, microphone permission, MediaRecorder start/pause/resume/stop, metering updates, recorded blob URL and duration",
|
|
7381
|
+
missing: "streaming onCurrentExtractedWaveformData progress events and extractor cancellation, reading audio URLs blocked by cross-origin fetch policy, native filesystem paths not exposed through the simulator fetch/VFS bridge, exact AVFoundation/MediaCodec decoder normalization, recording encoder/file-name options, native audio-session routing and background playback"
|
|
7379
7382
|
}
|
|
7380
7383
|
]
|
|
7381
7384
|
},
|
|
@@ -17693,7 +17696,7 @@ async function handleFetchProxyRequest(req, res) {
|
|
|
17693
17696
|
const proxyRes = await new Promise((resolve7, reject) => {
|
|
17694
17697
|
const proxyReq = transport.request(
|
|
17695
17698
|
{
|
|
17696
|
-
hostname: targetUrl2.hostname,
|
|
17699
|
+
hostname: normalizeHostname(targetUrl2.hostname),
|
|
17697
17700
|
port: targetUrl2.port || (targetUrl2.protocol === "https:" ? 443 : 80),
|
|
17698
17701
|
path: targetUrl2.pathname + targetUrl2.search,
|
|
17699
17702
|
method,
|
|
@@ -17758,6 +17761,32 @@ async function handleFetchProxyRequest(req, res) {
|
|
|
17758
17761
|
res.end(`fetch proxy error: ${formatFetchProxyError(upstreamUrl.href, err)}`);
|
|
17759
17762
|
}
|
|
17760
17763
|
}
|
|
17764
|
+
async function handleBundleProxyRequest(req, res) {
|
|
17765
|
+
const params = new URLSearchParams((req.url || "").split("?")[1] || "");
|
|
17766
|
+
const target = params.get("url");
|
|
17767
|
+
if (!target) {
|
|
17768
|
+
applyFetchProxyCors(res);
|
|
17769
|
+
res.writeHead(400, { "Content-Type": "text/plain" });
|
|
17770
|
+
res.end("bundle-proxy: missing url query param");
|
|
17771
|
+
return;
|
|
17772
|
+
}
|
|
17773
|
+
let targetUrl;
|
|
17774
|
+
try {
|
|
17775
|
+
targetUrl = new URL(target);
|
|
17776
|
+
} catch {
|
|
17777
|
+
applyFetchProxyCors(res);
|
|
17778
|
+
res.writeHead(400, { "Content-Type": "text/plain" });
|
|
17779
|
+
res.end("bundle-proxy: invalid url");
|
|
17780
|
+
return;
|
|
17781
|
+
}
|
|
17782
|
+
if (!isLoopbackHost(targetUrl.hostname)) {
|
|
17783
|
+
applyFetchProxyCors(res);
|
|
17784
|
+
res.writeHead(403, { "Content-Type": "text/plain" });
|
|
17785
|
+
res.end("bundle-proxy: only loopback targets allowed");
|
|
17786
|
+
return;
|
|
17787
|
+
}
|
|
17788
|
+
await handleFetchProxyRequest(req, res);
|
|
17789
|
+
}
|
|
17761
17790
|
function handleAppApiRequest(req, res) {
|
|
17762
17791
|
const reqUrl = req.url || "";
|
|
17763
17792
|
let targetPath = "";
|
|
@@ -17799,7 +17828,7 @@ function handleAppApiRequest(req, res) {
|
|
|
17799
17828
|
const fwdHeaders = buildAppApiProxyHeaders(req.headers, targetUrl);
|
|
17800
17829
|
const proxyReq = transport.request(
|
|
17801
17830
|
{
|
|
17802
|
-
hostname: targetUrl.hostname,
|
|
17831
|
+
hostname: normalizeHostname(targetUrl.hostname),
|
|
17803
17832
|
port: targetUrl.port || (targetUrl.protocol === "https:" ? 443 : 80),
|
|
17804
17833
|
path: targetUrl.pathname + targetUrl.search,
|
|
17805
17834
|
method: req.method,
|
|
@@ -17946,88 +17975,6 @@ function getReplacementLoader(filePath) {
|
|
|
17946
17975
|
return null;
|
|
17947
17976
|
}
|
|
17948
17977
|
}
|
|
17949
|
-
function reactRuntimeSource(reactBridgeUrl) {
|
|
17950
|
-
if (reactBridgeUrl) {
|
|
17951
|
-
return `export * from ${JSON.stringify(reactBridgeUrl)};
|
|
17952
|
-
import React from ${JSON.stringify(reactBridgeUrl)};
|
|
17953
|
-
export default React;
|
|
17954
|
-
`;
|
|
17955
|
-
}
|
|
17956
|
-
return `const bridge = globalThis.__sootsim_react_bridge
|
|
17957
|
-
if (!bridge) throw new Error('[rnx] replacement React bridge is not ready')
|
|
17958
|
-
export default bridge.default
|
|
17959
|
-
export const Activity = bridge.Activity
|
|
17960
|
-
export const Children = bridge.Children
|
|
17961
|
-
export const Component = bridge.Component
|
|
17962
|
-
export const Fragment = bridge.Fragment
|
|
17963
|
-
export const Profiler = bridge.Profiler
|
|
17964
|
-
export const PureComponent = bridge.PureComponent
|
|
17965
|
-
export const StrictMode = bridge.StrictMode
|
|
17966
|
-
export const Suspense = bridge.Suspense
|
|
17967
|
-
export const __CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = bridge.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE
|
|
17968
|
-
export const __COMPILER_RUNTIME = bridge.__COMPILER_RUNTIME
|
|
17969
|
-
export const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = bridge.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
|
|
17970
|
-
export const act = bridge.act
|
|
17971
|
-
export const cache = bridge.cache
|
|
17972
|
-
export const cacheSignal = bridge.cacheSignal
|
|
17973
|
-
export const captureOwnerStack = bridge.captureOwnerStack
|
|
17974
|
-
export const cloneElement = bridge.cloneElement
|
|
17975
|
-
export const createContext = bridge.createContext
|
|
17976
|
-
export const createElement = bridge.createElement
|
|
17977
|
-
export const createRef = bridge.createRef
|
|
17978
|
-
export const forwardRef = bridge.forwardRef
|
|
17979
|
-
export const isValidElement = bridge.isValidElement
|
|
17980
|
-
export const lazy = bridge.lazy
|
|
17981
|
-
export const memo = bridge.memo
|
|
17982
|
-
export const startTransition = bridge.startTransition
|
|
17983
|
-
export const unstable_useCacheRefresh = bridge.unstable_useCacheRefresh
|
|
17984
|
-
export const use = bridge.use
|
|
17985
|
-
export const useActionState = bridge.useActionState
|
|
17986
|
-
export const useCallback = bridge.useCallback
|
|
17987
|
-
export const useContext = bridge.useContext
|
|
17988
|
-
export const useDebugValue = bridge.useDebugValue
|
|
17989
|
-
export const useDeferredValue = bridge.useDeferredValue
|
|
17990
|
-
export const useEffect = bridge.useEffect
|
|
17991
|
-
export const useEffectEvent = bridge.useEffectEvent
|
|
17992
|
-
export const useId = bridge.useId
|
|
17993
|
-
export const useImperativeHandle = bridge.useImperativeHandle
|
|
17994
|
-
export const useInsertionEffect = bridge.useInsertionEffect
|
|
17995
|
-
export const useLayoutEffect = bridge.useLayoutEffect
|
|
17996
|
-
export const useMemo = bridge.useMemo
|
|
17997
|
-
export const useOptimistic = bridge.useOptimistic
|
|
17998
|
-
export const useReducer = bridge.useReducer
|
|
17999
|
-
export const useRef = bridge.useRef
|
|
18000
|
-
export const useState = bridge.useState
|
|
18001
|
-
export const useSyncExternalStore = bridge.useSyncExternalStore
|
|
18002
|
-
export const useTransition = bridge.useTransition
|
|
18003
|
-
export const version = bridge.version
|
|
18004
|
-
`;
|
|
18005
|
-
}
|
|
18006
|
-
function reactNativeRuntimeSource() {
|
|
18007
|
-
return `const rn = globalThis.__sootsim_components__ || {}
|
|
18008
|
-
export default rn
|
|
18009
|
-
export const View = rn.View
|
|
18010
|
-
export const Text = rn.Text
|
|
18011
|
-
export const Image = rn.Image
|
|
18012
|
-
export const ScrollView = rn.ScrollView
|
|
18013
|
-
export const FlatList = rn.FlatList
|
|
18014
|
-
export const Pressable = rn.Pressable
|
|
18015
|
-
export const TouchableOpacity = rn.TouchableOpacity
|
|
18016
|
-
export const TouchableWithoutFeedback = rn.TouchableWithoutFeedback
|
|
18017
|
-
export const TouchableHighlight = rn.TouchableHighlight
|
|
18018
|
-
export const TextInput = rn.TextInput
|
|
18019
|
-
export const ActivityIndicator = rn.ActivityIndicator
|
|
18020
|
-
export const KeyboardAvoidingView = rn.KeyboardAvoidingView
|
|
18021
|
-
export const Button = rn.Button
|
|
18022
|
-
export const Modal = rn.Modal
|
|
18023
|
-
export const Switch = rn.Switch
|
|
18024
|
-
export const StyleSheet = rn.StyleSheet
|
|
18025
|
-
export const Platform = rn.Platform
|
|
18026
|
-
export const Keyboard = rn.Keyboard
|
|
18027
|
-
export const Dimensions = rn.Dimensions
|
|
18028
|
-
export const Appearance = rn.Appearance
|
|
18029
|
-
`;
|
|
18030
|
-
}
|
|
18031
17978
|
function sendJavaScript(req, res, source) {
|
|
18032
17979
|
const origin = req.headers.origin;
|
|
18033
17980
|
let allowedOrigin;
|
|
@@ -18048,7 +17995,7 @@ function isReplacementModuleRequestUrl(rawUrl) {
|
|
|
18048
17995
|
if (!rawUrl) return false;
|
|
18049
17996
|
try {
|
|
18050
17997
|
const pathname = new URL(rawUrl, "http://rnx.local").pathname;
|
|
18051
|
-
return pathname === REPLACEMENT_MODULE_ROUTE
|
|
17998
|
+
return pathname === REPLACEMENT_MODULE_ROUTE;
|
|
18052
17999
|
} catch {
|
|
18053
18000
|
return false;
|
|
18054
18001
|
}
|
|
@@ -18078,14 +18025,6 @@ async function handleReplacementModuleRequest(req, res, options = {}) {
|
|
|
18078
18025
|
return true;
|
|
18079
18026
|
}
|
|
18080
18027
|
}
|
|
18081
|
-
if (url.pathname === `${REPLACEMENT_RUNTIME_PREFIX}/react`) {
|
|
18082
|
-
sendJavaScript(req, res, reactRuntimeSource(options.reactBridgeUrl));
|
|
18083
|
-
return true;
|
|
18084
|
-
}
|
|
18085
|
-
if (url.pathname === `${REPLACEMENT_RUNTIME_PREFIX}/react-native`) {
|
|
18086
|
-
sendJavaScript(req, res, reactNativeRuntimeSource());
|
|
18087
|
-
return true;
|
|
18088
|
-
}
|
|
18089
18028
|
if (url.pathname !== REPLACEMENT_MODULE_ROUTE) return false;
|
|
18090
18029
|
if (options.requestToken && url.searchParams.get("token") !== options.requestToken) {
|
|
18091
18030
|
res.writeHead(403, { "Content-Type": "text/plain; charset=utf-8" });
|
|
@@ -18109,6 +18048,7 @@ async function handleReplacementModuleRequest(req, res, options = {}) {
|
|
|
18109
18048
|
res.end("replacement file path must be absolute");
|
|
18110
18049
|
return true;
|
|
18111
18050
|
}
|
|
18051
|
+
const runtimePackages = new Set(url.searchParams.getAll("runtimePackage"));
|
|
18112
18052
|
let resolvedProjectRoot;
|
|
18113
18053
|
if (options.projectRoot) {
|
|
18114
18054
|
const lexicalProjectRoot = import_node_path10.default.resolve(options.projectRoot);
|
|
@@ -18151,19 +18091,64 @@ async function handleReplacementModuleRequest(req, res, options = {}) {
|
|
|
18151
18091
|
tsconfigRaw: { compilerOptions: { jsx: "react" } },
|
|
18152
18092
|
sourcemap: "inline",
|
|
18153
18093
|
logLevel: "silent",
|
|
18154
|
-
|
|
18094
|
+
plugins: [
|
|
18095
|
+
{
|
|
18096
|
+
name: "sootsim-replacement-runtime",
|
|
18097
|
+
setup(runtimeBuild) {
|
|
18098
|
+
runtimeBuild.onResolve(
|
|
18099
|
+
{
|
|
18100
|
+
filter: /^(react|react-native|react\/jsx-runtime|react\/jsx-dev-runtime)$/
|
|
18101
|
+
},
|
|
18102
|
+
(args) => ({ path: args.path, namespace: "sootsim-replacement-runtime" })
|
|
18103
|
+
);
|
|
18104
|
+
runtimeBuild.onResolve(
|
|
18105
|
+
{ filter: /.*/ },
|
|
18106
|
+
(args) => runtimePackages.has(args.path) ? { path: args.path, namespace: "sootsim-replacement-runtime" } : void 0
|
|
18107
|
+
);
|
|
18108
|
+
runtimeBuild.onLoad(
|
|
18109
|
+
{ filter: /.*/, namespace: "sootsim-replacement-runtime" },
|
|
18110
|
+
(args) => {
|
|
18111
|
+
if (args.path === "react-native") {
|
|
18112
|
+
return {
|
|
18113
|
+
contents: `const bridge = globalThis.__sootsim_components__
|
|
18114
|
+
if (!bridge) throw new Error('[rnx] replacement React Native bridge is not ready')
|
|
18115
|
+
module.exports = bridge`,
|
|
18116
|
+
loader: "js"
|
|
18117
|
+
};
|
|
18118
|
+
}
|
|
18119
|
+
if (args.path === "react") {
|
|
18120
|
+
return {
|
|
18121
|
+
contents: `const bridge = globalThis.__sootsim_react_bridge
|
|
18122
|
+
if (!bridge) throw new Error('[rnx] replacement React bridge is not ready')
|
|
18123
|
+
module.exports = bridge`,
|
|
18124
|
+
loader: "js"
|
|
18125
|
+
};
|
|
18126
|
+
}
|
|
18127
|
+
if (args.path !== "react/jsx-runtime" && args.path !== "react/jsx-dev-runtime") {
|
|
18128
|
+
return {
|
|
18129
|
+
contents: `const packages = globalThis.__sootsim_config_package_modules
|
|
18130
|
+
const bridge = packages?.[${JSON.stringify(args.path)}]
|
|
18131
|
+
if (!bridge) throw new Error(${JSON.stringify(`[rnx] replacement package bridge ${args.path} is not ready`)})
|
|
18132
|
+
module.exports = bridge`,
|
|
18133
|
+
loader: "js"
|
|
18134
|
+
};
|
|
18135
|
+
}
|
|
18136
|
+
return {
|
|
18137
|
+
contents: `const React = globalThis.__sootsim_react_bridge
|
|
18138
|
+
if (!React) throw new Error('[rnx] replacement React bridge is not ready')
|
|
18139
|
+
exports.Fragment = React.Fragment
|
|
18140
|
+
exports.jsx = (type, props, key) => React.createElement(type, key === undefined ? props : { ...props, key })
|
|
18141
|
+
exports.jsxs = exports.jsx
|
|
18142
|
+
exports.jsxDEV = exports.jsx`,
|
|
18143
|
+
loader: "js"
|
|
18144
|
+
};
|
|
18145
|
+
}
|
|
18146
|
+
);
|
|
18147
|
+
}
|
|
18148
|
+
}
|
|
18149
|
+
]
|
|
18155
18150
|
});
|
|
18156
|
-
|
|
18157
|
-
const hasReactBinding = /\bimport\s+(?:\*\s+as\s+React|React(?:\s*,|\s+from)|\{[^}]*\bdefault\s+as\s+React\b)/.test(
|
|
18158
|
-
bundledCode
|
|
18159
|
-
);
|
|
18160
|
-
const reactImport = /\bReact\.(?:createElement|Fragment)\b/.test(bundledCode) && !hasReactBinding ? `import * as React from '${REPLACEMENT_RUNTIME_PREFIX}/react';
|
|
18161
|
-
` : "";
|
|
18162
|
-
const runtimeCode = (reactImport + bundledCode).replace(
|
|
18163
|
-
/from\s*["']react-native["']/g,
|
|
18164
|
-
`from '${REPLACEMENT_RUNTIME_PREFIX}/react-native'`
|
|
18165
|
-
).replace(/from\s*["']react["']/g, `from '${REPLACEMENT_RUNTIME_PREFIX}/react'`);
|
|
18166
|
-
sendJavaScript(req, res, runtimeCode);
|
|
18151
|
+
sendJavaScript(req, res, result.outputFiles[0]?.text ?? "");
|
|
18167
18152
|
} catch (error) {
|
|
18168
18153
|
const message = error instanceof Error ? error.message : String(error);
|
|
18169
18154
|
res.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" });
|
|
@@ -18171,7 +18156,7 @@ async function handleReplacementModuleRequest(req, res, options = {}) {
|
|
|
18171
18156
|
}
|
|
18172
18157
|
return true;
|
|
18173
18158
|
}
|
|
18174
|
-
var import_promises5, import_node_path10, import_esbuild, REPLACEMENT_MODULE_ROUTE
|
|
18159
|
+
var import_promises5, import_node_path10, import_esbuild, REPLACEMENT_MODULE_ROUTE;
|
|
18175
18160
|
var init_replacement_module_handler = __esm({
|
|
18176
18161
|
"src/host/replacement-module-handler.ts"() {
|
|
18177
18162
|
"use strict";
|
|
@@ -18180,7 +18165,6 @@ var init_replacement_module_handler = __esm({
|
|
|
18180
18165
|
import_esbuild = require("esbuild");
|
|
18181
18166
|
init_backend_origin();
|
|
18182
18167
|
REPLACEMENT_MODULE_ROUTE = "/__sootsim-replacement-module";
|
|
18183
|
-
REPLACEMENT_RUNTIME_PREFIX = "/__sootsim-replacement-runtime";
|
|
18184
18168
|
}
|
|
18185
18169
|
});
|
|
18186
18170
|
|
|
@@ -18416,7 +18400,6 @@ var init_bridge_host = __esm({
|
|
|
18416
18400
|
import_path2 = __toESM(require("path"), 1);
|
|
18417
18401
|
import_ws2 = require("ws");
|
|
18418
18402
|
init_dev_server_scanner();
|
|
18419
|
-
init_backend_origin();
|
|
18420
18403
|
init_bridge_constants();
|
|
18421
18404
|
init_cli_version();
|
|
18422
18405
|
init_home_paths();
|
|
@@ -19549,53 +19532,7 @@ var init_bridge_host = __esm({
|
|
|
19549
19532
|
return;
|
|
19550
19533
|
}
|
|
19551
19534
|
if (url.pathname === "/__bundle-proxy") {
|
|
19552
|
-
|
|
19553
|
-
if (!target) {
|
|
19554
|
-
res.writeHead(400, { "Content-Type": "text/plain" });
|
|
19555
|
-
res.end("bundle-proxy: missing url query param");
|
|
19556
|
-
return;
|
|
19557
|
-
}
|
|
19558
|
-
let parsedTarget;
|
|
19559
|
-
try {
|
|
19560
|
-
parsedTarget = new URL(target);
|
|
19561
|
-
} catch {
|
|
19562
|
-
res.writeHead(400, { "Content-Type": "text/plain" });
|
|
19563
|
-
res.end("bundle-proxy: invalid url");
|
|
19564
|
-
return;
|
|
19565
|
-
}
|
|
19566
|
-
if (!isLoopbackHost(parsedTarget.hostname)) {
|
|
19567
|
-
res.writeHead(403, { "Content-Type": "text/plain" });
|
|
19568
|
-
res.end("bundle-proxy: only loopback targets allowed");
|
|
19569
|
-
return;
|
|
19570
|
-
}
|
|
19571
|
-
void (async () => {
|
|
19572
|
-
try {
|
|
19573
|
-
const upstream = await fetch(parsedTarget.toString(), {
|
|
19574
|
-
redirect: "follow"
|
|
19575
|
-
});
|
|
19576
|
-
const headers = {};
|
|
19577
|
-
const ct = upstream.headers.get("content-type");
|
|
19578
|
-
if (ct) headers["Content-Type"] = ct;
|
|
19579
|
-
headers["Cache-Control"] = "no-store";
|
|
19580
|
-
res.writeHead(upstream.status, headers);
|
|
19581
|
-
if (!upstream.body) {
|
|
19582
|
-
res.end();
|
|
19583
|
-
return;
|
|
19584
|
-
}
|
|
19585
|
-
const reader = upstream.body.getReader();
|
|
19586
|
-
while (true) {
|
|
19587
|
-
const { done, value } = await reader.read();
|
|
19588
|
-
if (done) break;
|
|
19589
|
-
res.write(Buffer.from(value));
|
|
19590
|
-
}
|
|
19591
|
-
res.end();
|
|
19592
|
-
} catch (err) {
|
|
19593
|
-
res.writeHead(502, { "Content-Type": "text/plain" });
|
|
19594
|
-
res.end(
|
|
19595
|
-
`bundle-proxy: upstream fetch failed: ${err instanceof Error ? err.message : String(err)}`
|
|
19596
|
-
);
|
|
19597
|
-
}
|
|
19598
|
-
})();
|
|
19535
|
+
void handleBundleProxyRequest(req, res);
|
|
19599
19536
|
return;
|
|
19600
19537
|
}
|
|
19601
19538
|
if (url.pathname === "/__server-scan") {
|