rnxsim 0.1.335 → 0.1.337
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 +104 -76
- package/cli/auth.ts +2 -2
- package/cli/bin.ts +7 -3
- package/cli/bridge-flow-runner.ts +2 -2
- package/cli/commands/agent-wrapper.ts +1 -1
- package/cli/commands/agent.ts +12 -12
- package/cli/commands/app-fonts.ts +1 -1
- package/cli/commands/assert.ts +7 -7
- package/cli/commands/auth.ts +4 -4
- package/cli/commands/camera.ts +13 -13
- package/cli/commands/cleanup.ts +6 -6
- package/cli/commands/compat.ts +4 -4
- package/cli/commands/config.ts +2 -2
- package/cli/commands/control.ts +37 -43
- package/cli/commands/cpu-profile.ts +2 -2
- package/cli/commands/daemon-mac-app.ts +2 -2
- package/cli/commands/daemon.ts +12 -12
- package/cli/commands/debug.ts +22 -22
- package/cli/commands/desktop.ts +3 -3
- package/cli/commands/detox.ts +17 -17
- package/cli/commands/device.ts +9 -9
- package/cli/commands/diagnose.ts +11 -11
- package/cli/commands/electron.ts +7 -7
- package/cli/commands/film.ts +6 -6
- package/cli/commands/inspect/core.ts +6 -7
- package/cli/commands/inspect/find.ts +2 -2
- package/cli/commands/inspect.ts +36 -36
- package/cli/commands/install-desktop.ts +8 -8
- package/cli/commands/login.ts +6 -6
- package/cli/commands/maestro-generate.ts +2 -2
- package/cli/commands/maestro.ts +23 -23
- package/cli/commands/mode.ts +4 -4
- package/cli/commands/no-bridge-hint.ts +9 -9
- package/cli/commands/perf.ts +11 -11
- package/cli/commands/permissions.ts +5 -5
- package/cli/commands/profile.ts +11 -11
- package/cli/commands/react.ts +15 -15
- package/cli/commands/record.ts +15 -15
- package/cli/commands/report-issue.ts +2 -2
- package/cli/commands/reset.ts +2 -2
- package/cli/commands/runtime.ts +18 -18
- package/cli/commands/screenshot-mode.ts +5 -5
- package/cli/commands/screenshot.ts +12 -12
- package/cli/commands/screenshots-capture.ts +7 -7
- package/cli/commands/screenshots.ts +6 -6
- package/cli/commands/serve.ts +6 -6
- package/cli/commands/setup.ts +13 -15
- package/cli/commands/skills.ts +14 -14
- package/cli/commands/slides.ts +19 -23
- package/cli/commands/state.ts +2 -2
- package/cli/commands/storage.ts +3 -3
- package/cli/commands/telemetry.ts +1 -1
- package/cli/commands/three-mode.ts +16 -16
- package/cli/commands/timeline.ts +4 -4
- package/cli/commands/upgrade.ts +1 -1
- package/cli/commands/upload.ts +11 -11
- package/cli/commands/version.ts +3 -5
- package/cli/commands/what-happened.ts +11 -11
- package/cli/drivers/electron.ts +3 -3
- package/cli/hints.ts +8 -8
- package/cli/recording-access.ts +1 -1
- package/cli/ws-bridge.ts +5 -5
- package/dist-cli/bin.js +5 -5
- package/dist-cli/chunks/{agent-XSJMAFVA.js → agent-QQ3RJNRY.js} +14 -14
- package/dist-cli/chunks/{agent-wrapper-NFLJ5K64.js → agent-wrapper-M6SQSMRY.js} +3 -3
- package/dist-cli/chunks/app-fonts-F6NDV3XC.js +4 -0
- package/dist-cli/chunks/{assert-ILAXIYB5.js → assert-5VB3KQNK.js} +12 -12
- package/dist-cli/chunks/auth-PFXODKFN.js +12 -0
- package/dist-cli/chunks/{beta-TDR6UKJU.js → beta-WUWYHT4F.js} +2 -2
- package/dist-cli/chunks/camera-V3MMTKP7.js +33 -0
- package/dist-cli/chunks/{chunk-INBPUR4T.js → chunk-2ANFH72P.js} +11 -11
- package/dist-cli/chunks/chunk-2GIA5T6B.js +74 -0
- package/dist-cli/chunks/{chunk-GP6QEBZA.js → chunk-4FRSEZ7Z.js} +1 -1
- package/dist-cli/chunks/{chunk-USGOQ3YJ.js → chunk-4GXBZHNA.js} +2 -2
- package/dist-cli/chunks/{chunk-R3CMECGC.js → chunk-4HESY5E7.js} +4 -4
- package/dist-cli/chunks/{chunk-WKT7YM5Q.js → chunk-4VJEXQGD.js} +1 -1
- package/dist-cli/chunks/{chunk-FE6ZHPKD.js → chunk-5LJNNHZH.js} +1 -1
- package/dist-cli/chunks/{chunk-I2HQB5NN.js → chunk-5QXGSTYI.js} +2 -2
- package/dist-cli/chunks/{chunk-FJSHIWAM.js → chunk-5SHAOQHJ.js} +2 -2
- package/dist-cli/chunks/{chunk-CGZWLSYD.js → chunk-5UPRBMIG.js} +1 -1
- package/dist-cli/chunks/{chunk-ZTM2MKNI.js → chunk-5ZEFRPCC.js} +1 -1
- package/dist-cli/chunks/{chunk-RTD3CPDQ.js → chunk-6ART4XVJ.js} +23 -23
- package/dist-cli/chunks/{chunk-MTD6IAEA.js → chunk-6CAUT2LH.js} +1 -1
- package/dist-cli/chunks/{chunk-ZYHCWCMM.js → chunk-7ATIH7OU.js} +1 -1
- package/dist-cli/chunks/{chunk-RVUGKXJD.js → chunk-7Q4QKHMA.js} +1 -1
- package/dist-cli/chunks/{chunk-MTNIDSOA.js → chunk-ABK2V2PR.js} +1 -1
- package/dist-cli/chunks/{chunk-TL4DNDDY.js → chunk-B53ILAHI.js} +2 -2
- package/dist-cli/chunks/{chunk-POC3QTA6.js → chunk-BSSVLFZR.js} +2 -2
- package/dist-cli/chunks/chunk-BVOBXTPN.js +30 -0
- package/dist-cli/chunks/{chunk-4KC35DMK.js → chunk-CPDEUWL5.js} +2 -2
- package/dist-cli/chunks/{chunk-HNQLZZJA.js → chunk-DINU267S.js} +2 -2
- package/dist-cli/chunks/{chunk-DCDKJ4NC.js → chunk-DQQ4CZVC.js} +2 -2
- package/dist-cli/chunks/{chunk-JWAY6DIH.js → chunk-EDWN2HOO.js} +18 -18
- package/dist-cli/chunks/{chunk-3CS4EUMG.js → chunk-EWVG4A3B.js} +2 -2
- package/dist-cli/chunks/{chunk-RTEJXUXN.js → chunk-F3NKCQHM.js} +6 -6
- package/dist-cli/chunks/{chunk-M7CBQ5I4.js → chunk-GEAGFYKP.js} +1 -1
- package/dist-cli/chunks/chunk-GGNH44PZ.js +5 -0
- package/dist-cli/chunks/{chunk-YSUIYK6B.js → chunk-HAHJJJUC.js} +2 -2
- package/dist-cli/chunks/chunk-HPJ5EKIZ.js +4 -0
- package/dist-cli/chunks/{chunk-IN2PZBQD.js → chunk-IBTHGFKE.js} +2 -2
- package/dist-cli/chunks/{chunk-ZZWO6Y7X.js → chunk-J6BYRRZQ.js} +2 -2
- package/dist-cli/chunks/{chunk-6Y3PVPTF.js → chunk-JK4OZ2TQ.js} +5 -5
- package/dist-cli/chunks/{chunk-PO3TOAED.js → chunk-KGQAO25M.js} +2 -2
- package/dist-cli/chunks/{chunk-J7XFINJG.js → chunk-L6UUIQE7.js} +2 -2
- package/dist-cli/chunks/{chunk-35XNGT5C.js → chunk-LXYLCETR.js} +1 -1
- package/dist-cli/chunks/{chunk-JWK5WD44.js → chunk-LZAL3DMP.js} +2 -2
- package/dist-cli/chunks/{chunk-3ZDOPKHE.js → chunk-M43UU7UG.js} +4 -4
- package/dist-cli/chunks/{chunk-ROPHZJ6P.js → chunk-M4LGUVBM.js} +2 -2
- package/dist-cli/chunks/{chunk-RELRA5VW.js → chunk-NCG6C5AH.js} +2 -2
- package/dist-cli/chunks/{chunk-42KDXJUD.js → chunk-NR5TSR2Y.js} +2 -2
- package/dist-cli/chunks/{chunk-R2UL5VFY.js → chunk-OCPWXT73.js} +3 -3
- package/dist-cli/chunks/{chunk-VV4MXLFR.js → chunk-ODKS6JUJ.js} +1 -1
- package/dist-cli/chunks/{chunk-F33DUJGG.js → chunk-R2WBREGQ.js} +1 -1
- package/dist-cli/chunks/chunk-RKY3ZNTA.js +5 -0
- package/dist-cli/chunks/{chunk-MGGRL2Z2.js → chunk-SW7BHOMO.js} +9 -9
- package/dist-cli/chunks/{chunk-GVKISFQ3.js → chunk-TJTLXG3R.js} +1 -1
- package/dist-cli/chunks/chunk-TNI4PW75.js +124 -0
- package/dist-cli/chunks/{chunk-CL3PREIE.js → chunk-UWEDNDND.js} +2 -2
- package/dist-cli/chunks/{chunk-IV36DY6M.js → chunk-WRID5SBV.js} +1 -1
- package/dist-cli/chunks/{chunk-42ALI64M.js → chunk-WUYI3XJ5.js} +2 -2
- package/dist-cli/chunks/{chunk-6VN5ULGQ.js → chunk-X7MHCEGG.js} +2 -2
- package/dist-cli/chunks/chunk-XIQFYLWD.js +15 -0
- package/dist-cli/chunks/{chunk-LCVUJCRJ.js → chunk-ZUK5ZQU7.js} +1 -1
- package/dist-cli/chunks/{cleanup-X6ZRPFDV.js → cleanup-6WBS3MUO.js} +10 -10
- package/dist-cli/chunks/cli-version-HUQCDGMA.js +4 -0
- package/dist-cli/chunks/{compat-VRXJ5J56.js → compat-2WOPKJYK.js} +9 -9
- package/dist-cli/chunks/{config-LHPPE4EP.js → config-FPD7WUYB.js} +5 -5
- package/dist-cli/chunks/{control-TVTNGSSF.js → control-B3XNER7I.js} +2 -2
- package/dist-cli/chunks/daemon-T4D4X2P5.js +4 -0
- package/dist-cli/chunks/{debug-EUHBBPGM.js → debug-LKV5CEAV.js} +17 -17
- package/dist-cli/chunks/desktop-EMDPOYQT.js +31 -0
- package/dist-cli/chunks/detox-4J4UTZE7.js +52 -0
- package/dist-cli/chunks/{device-PONITUZJ.js → device-PMZ7RPXQ.js} +11 -11
- package/dist-cli/chunks/{diagnose-2PN4K4L2.js → diagnose-MLEP727D.js} +12 -12
- package/dist-cli/chunks/{disk-cleanup-U2PQLOEW.js → disk-cleanup-CVEDIPEE.js} +2 -2
- package/dist-cli/chunks/drivers-NTUKJEL6.js +4 -0
- package/dist-cli/chunks/{film-XGZCFTQL.js → film-4RNECABF.js} +9 -9
- package/dist-cli/chunks/flow-5IOCAHVO.js +4 -0
- package/dist-cli/chunks/help-NUJUYEWP.js +4 -0
- package/dist-cli/chunks/{hidden-runtime-alias-I4MYF5CO.js → hidden-runtime-alias-YIF25W4F.js} +2 -2
- package/dist-cli/chunks/{home-paths-YRAPZ5LE.js → home-paths-WNJCCCCZ.js} +2 -2
- package/dist-cli/chunks/inspect-MFEIYUCN.js +4 -0
- package/dist-cli/chunks/install-desktop-NB65KI4D.js +4 -0
- package/dist-cli/chunks/{login-ZMAIAQ6F.js → login-VEHHGN42.js} +6 -6
- package/dist-cli/chunks/{logout-UQZ5JBJU.js → logout-VE7PNXL2.js} +2 -2
- package/dist-cli/chunks/{maestro-BQYKDUC4.js → maestro-ZXHTDEOI.js} +25 -25
- package/dist-cli/chunks/{maestro-generate-VQYMMQJ5.js → maestro-generate-TK33E2Z6.js} +3 -3
- package/dist-cli/chunks/mode-ZDKJ56NT.js +26 -0
- package/dist-cli/chunks/{optional-demo-registry-DUWHCLGD.js → optional-demo-registry-GBZ3WVDW.js} +2 -2
- package/dist-cli/chunks/{perf-7RAU7WRZ.js → perf-JXNZOUKW.js} +28 -28
- package/dist-cli/chunks/permissions-WQ62PW7Y.js +13 -0
- package/dist-cli/chunks/record-4S3ZMDIO.js +72 -0
- package/dist-cli/chunks/{report-issue-P376KFFU.js → report-issue-KKBADTWO.js} +4 -4
- package/dist-cli/chunks/reset-H5XIISJE.js +4 -0
- package/dist-cli/chunks/runtime-FK7EEMWA.js +4 -0
- package/dist-cli/chunks/{screenshot-command-NE7BKTQ2.js → screenshot-command-42U5MVQL.js} +34 -34
- package/dist-cli/chunks/{screenshot-layers-UE4R64PZ.js → screenshot-layers-4G42AHOX.js} +2 -2
- package/dist-cli/chunks/{screenshots-capture-ULXPLXMC.js → screenshots-capture-HMQ2OO3I.js} +11 -11
- package/dist-cli/chunks/{serve-P7BT4XHR.js → serve-S4V5EDW2.js} +16 -16
- package/dist-cli/chunks/setup-T43V7GA6.js +32 -0
- package/dist-cli/chunks/{skills-NTRYKJSF.js → skills-O426K26J.js} +16 -16
- package/dist-cli/chunks/{state-4D5YAM47.js → state-ZEEPDKJG.js} +5 -5
- package/dist-cli/chunks/storage-4GQLOFGG.js +37 -0
- package/dist-cli/chunks/store-RFMSNWLJ.js +4 -0
- package/dist-cli/chunks/telemetry-NFAAPSMN.js +4 -0
- package/dist-cli/chunks/{timeline-GZNFGD3Q.js → timeline-ONCYX7KW.js} +6 -6
- package/dist-cli/chunks/{upgrade-A46D6PEY.js → upgrade-A36T52AM.js} +2 -2
- package/dist-cli/chunks/upload-36O32DII.js +4 -0
- package/dist-cli/chunks/version-67HA253N.js +6 -0
- package/dist-cli/chunks/{web-H2IXO5SC.js → web-PWXQHQIE.js} +2 -2
- package/dist-cli/chunks/{what-happened-Z7UII5GH.js → what-happened-WNXE622R.js} +16 -16
- package/dist-lib/agent-daemon-client.cjs +5 -5
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +4 -4
- 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 +7 -7
- 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/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +248 -98
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/menu.cjs +2 -2
- package/dist-lib/menu.mjs +2 -2
- package/dist-lib/metro-host-modules/react-dom.js +6 -0
- package/dist-lib/metro-host-modules/react-native-web.js +6 -0
- package/dist-lib/metro-host-modules/react-native.js +6 -0
- package/dist-lib/metro-host-modules/react.js +6 -0
- package/dist-lib/metro-host-modules/react__jsx-dev-runtime.js +6 -0
- package/dist-lib/metro-host-modules/react__jsx-runtime.js +6 -0
- package/dist-lib/metro-production-bundle.cjs +72 -0
- package/dist-lib/metro-production-bundle.mjs +44 -0
- package/dist-lib/metro.cjs +152 -8
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +2 -2
- package/dist-lib/react-native-host-modules.cjs +50 -0
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +6 -7
- package/dist-lib/sdk.mjs +6 -7
- package/dist-lib/skills.cjs +71 -77
- package/dist-lib/vite.cjs +104 -85
- package/package.json +15 -2
- package/scripts/preuninstall.cjs +1 -1
- package/skills/contrast/SKILL.md +67 -75
- package/skills/rnx-debug/SKILL.md +84 -84
- package/skills/rnx-perf/SKILL.md +8 -8
- package/skills/rnx-setup/SKILL.md +54 -54
- package/skills/rnx-test/SKILL.md +35 -35
- package/skills/rnx-visual/SKILL.md +18 -18
- package/src/agent-daemon-client.ts +2 -2
- package/src/agent-sessions.ts +2 -2
- package/src/connect.ts +6 -6
- package/src/disk-cleanup.ts +1 -1
- package/src/home-paths.ts +1 -1
- package/src/host/bridge-host.ts +6 -6
- package/src/index.ts +1 -1
- package/src/metro-host-modules/react-dom.js +6 -0
- package/src/metro-host-modules/react-native-web.js +6 -0
- package/src/metro-host-modules/react-native.js +6 -0
- package/src/metro-host-modules/react.js +6 -0
- package/src/metro-host-modules/react__jsx-dev-runtime.js +6 -0
- package/src/metro-host-modules/react__jsx-runtime.js +6 -0
- package/src/metro-plugin.ts +249 -10
- package/src/metro-production-bundle.ts +51 -0
- package/src/public-brand.ts +1 -1
- package/src/react-native-host-modules.ts +25 -0
- package/src/runtime-assets.ts +1 -1
- package/src/sim-client.ts +1 -1
- package/src/vite-plugin-one.ts +171 -145
- package/dist-cli/chunks/app-fonts-L3UXFYVE.js +0 -4
- package/dist-cli/chunks/auth-ISX2EUQL.js +0 -12
- package/dist-cli/chunks/camera-4SWTNJUA.js +0 -33
- package/dist-cli/chunks/chunk-BRHZEZKN.js +0 -124
- package/dist-cli/chunks/chunk-EJPYPJWP.js +0 -5
- package/dist-cli/chunks/chunk-KWCD5MOK.js +0 -15
- package/dist-cli/chunks/chunk-MJ7QGY7Z.js +0 -4
- package/dist-cli/chunks/chunk-RSA4XWHN.js +0 -5
- package/dist-cli/chunks/chunk-S3EIOAWZ.js +0 -74
- package/dist-cli/chunks/chunk-TYANJQLO.js +0 -30
- package/dist-cli/chunks/cli-version-NZUSWKZR.js +0 -4
- package/dist-cli/chunks/daemon-XUEC47EC.js +0 -4
- package/dist-cli/chunks/desktop-LLHMP4A3.js +0 -31
- package/dist-cli/chunks/detox-QLNWLXA4.js +0 -52
- package/dist-cli/chunks/drivers-7IU37M2E.js +0 -4
- package/dist-cli/chunks/flow-NZZLR4BN.js +0 -4
- package/dist-cli/chunks/help-D7URIJRD.js +0 -4
- package/dist-cli/chunks/inspect-TJYWKY56.js +0 -4
- package/dist-cli/chunks/install-desktop-LD3W5RS7.js +0 -4
- package/dist-cli/chunks/mode-ZQ6H7KWM.js +0 -26
- package/dist-cli/chunks/permissions-DRZ3HCFL.js +0 -13
- package/dist-cli/chunks/record-J5JAYW4Y.js +0 -72
- package/dist-cli/chunks/reset-KXYRDEFU.js +0 -4
- package/dist-cli/chunks/runtime-66CEPOG6.js +0 -4
- package/dist-cli/chunks/setup-QO5KZAX3.js +0 -32
- package/dist-cli/chunks/storage-X2K2MDPX.js +0 -37
- package/dist-cli/chunks/store-TUJPIRTT.js +0 -4
- package/dist-cli/chunks/telemetry-CF5DVEKI.js +0 -4
- package/dist-cli/chunks/upload-UIQJIBEZ.js +0 -4
- package/dist-cli/chunks/version-CMBB3FXL.js +0 -6
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*! rnx v0.1.337 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
|
|
3
|
+
// src/metro-production-bundle.ts
|
|
4
|
+
var RNXSIM_METRO_PRODUCTION_BUNDLE_OPTION = "rnxsim";
|
|
5
|
+
var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
|
|
6
|
+
function toRNXProductionBundleUrl(bundleUrl) {
|
|
7
|
+
const relative = bundleUrl.startsWith("/");
|
|
8
|
+
const url = new URL(bundleUrl, "http://rnxsim.local");
|
|
9
|
+
url.searchParams.set("dev", "false");
|
|
10
|
+
url.searchParams.set("hot", "false");
|
|
11
|
+
url.searchParams.set("minify", "true");
|
|
12
|
+
url.searchParams.set(`resolver.${RNXSIM_METRO_PRODUCTION_BUNDLE_OPTION}`, "true");
|
|
13
|
+
url.searchParams.set(`transform.${RNXSIM_METRO_PRODUCTION_BUNDLE_OPTION}`, "true");
|
|
14
|
+
return relative ? `${url.pathname}${url.search}${url.hash}` : url.toString();
|
|
15
|
+
}
|
|
16
|
+
function createRNXMetroModulePathsFooter(modulePaths) {
|
|
17
|
+
const payload = JSON.stringify(modulePaths).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029").replace(/<\//g, "<\\/");
|
|
18
|
+
return `
|
|
19
|
+
${RNXSIM_METRO_MODULE_PATHS_PREFIX}${payload};`;
|
|
20
|
+
}
|
|
21
|
+
function readRNXMetroModuleIdentity(bundleText) {
|
|
22
|
+
const footerPrefix = `
|
|
23
|
+
${RNXSIM_METRO_MODULE_PATHS_PREFIX}`;
|
|
24
|
+
const footerStart = bundleText.lastIndexOf(footerPrefix);
|
|
25
|
+
if (footerStart < 0 || !bundleText.endsWith(";")) return null;
|
|
26
|
+
const parsed = JSON.parse(
|
|
27
|
+
bundleText.slice(footerStart + footerPrefix.length, -1)
|
|
28
|
+
);
|
|
29
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const modulePaths = {};
|
|
33
|
+
for (const [moduleId, modulePath] of Object.entries(parsed)) {
|
|
34
|
+
if (typeof modulePath !== "string") return null;
|
|
35
|
+
modulePaths[moduleId] = modulePath;
|
|
36
|
+
}
|
|
37
|
+
return { source: bundleText.slice(0, footerStart), modulePaths };
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
RNXSIM_METRO_PRODUCTION_BUNDLE_OPTION,
|
|
41
|
+
createRNXMetroModulePathsFooter,
|
|
42
|
+
readRNXMetroModuleIdentity,
|
|
43
|
+
toRNXProductionBundleUrl
|
|
44
|
+
};
|
package/dist-lib/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.337 | (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;
|
|
@@ -33,12 +33,33 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
33
33
|
var metro_plugin_exports = {};
|
|
34
34
|
__export(metro_plugin_exports, {
|
|
35
35
|
default: () => metro_plugin_default,
|
|
36
|
-
|
|
36
|
+
toRNXProductionBundleUrl: () => toRNXProductionBundleUrl,
|
|
37
|
+
withRNX: () => withRNX
|
|
37
38
|
});
|
|
38
39
|
module.exports = __toCommonJS(metro_plugin_exports);
|
|
39
40
|
var import_fs2 = __toESM(require("fs"), 1);
|
|
41
|
+
var import_module = require("module");
|
|
40
42
|
var import_path2 = __toESM(require("path"), 1);
|
|
41
43
|
|
|
44
|
+
// src/metro-production-bundle.ts
|
|
45
|
+
var RNXSIM_METRO_PRODUCTION_BUNDLE_OPTION = "rnxsim";
|
|
46
|
+
var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
|
|
47
|
+
function toRNXProductionBundleUrl(bundleUrl) {
|
|
48
|
+
const relative = bundleUrl.startsWith("/");
|
|
49
|
+
const url = new URL(bundleUrl, "http://rnxsim.local");
|
|
50
|
+
url.searchParams.set("dev", "false");
|
|
51
|
+
url.searchParams.set("hot", "false");
|
|
52
|
+
url.searchParams.set("minify", "true");
|
|
53
|
+
url.searchParams.set(`resolver.${RNXSIM_METRO_PRODUCTION_BUNDLE_OPTION}`, "true");
|
|
54
|
+
url.searchParams.set(`transform.${RNXSIM_METRO_PRODUCTION_BUNDLE_OPTION}`, "true");
|
|
55
|
+
return relative ? `${url.pathname}${url.search}${url.hash}` : url.toString();
|
|
56
|
+
}
|
|
57
|
+
function createRNXMetroModulePathsFooter(modulePaths) {
|
|
58
|
+
const payload = JSON.stringify(modulePaths).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029").replace(/<\//g, "<\\/");
|
|
59
|
+
return `
|
|
60
|
+
${RNXSIM_METRO_MODULE_PATHS_PREFIX}${payload};`;
|
|
61
|
+
}
|
|
62
|
+
|
|
42
63
|
// src/runtime-assets.ts
|
|
43
64
|
var import_fs = __toESM(require("fs"), 1);
|
|
44
65
|
var import_path = __toESM(require("path"), 1);
|
|
@@ -80,7 +101,7 @@ function readActiveRuntime() {
|
|
|
80
101
|
var DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
|
|
81
102
|
|
|
82
103
|
// src/runtime-assets.ts
|
|
83
|
-
var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[rnx] no engine runtime installed \u2014 run `
|
|
104
|
+
var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[rnx] no engine runtime installed \u2014 run `rnx setup`, or `rnx runtime install`";
|
|
84
105
|
var _monorepoRootCache;
|
|
85
106
|
function findMonorepoRoot() {
|
|
86
107
|
if (_monorepoRootCache !== void 0) return _monorepoRootCache;
|
|
@@ -217,11 +238,129 @@ function serveRuntimeFile(req, res, fullPath) {
|
|
|
217
238
|
|
|
218
239
|
// src/metro-plugin.ts
|
|
219
240
|
var prefix = "/__soot";
|
|
220
|
-
|
|
221
|
-
|
|
241
|
+
var hostModuleSpecifiers = [
|
|
242
|
+
"react",
|
|
243
|
+
"react-dom",
|
|
244
|
+
"react/jsx-runtime",
|
|
245
|
+
"react/jsx-dev-runtime",
|
|
246
|
+
"react-native",
|
|
247
|
+
"react-native-web"
|
|
248
|
+
];
|
|
249
|
+
function isRNXProductionBundle(graph) {
|
|
250
|
+
return graph.transformOptions?.dev === false && graph.transformOptions.customTransformOptions?.[RNXSIM_METRO_PRODUCTION_BUNDLE_OPTION] === "true";
|
|
251
|
+
}
|
|
252
|
+
function assertProductionEnvironment() {
|
|
253
|
+
if (process.env.NODE_ENV === "production") return;
|
|
254
|
+
throw new Error(
|
|
255
|
+
"rnxsim: production bundle requests require NODE_ENV=production; restart Metro with NODE_ENV=production"
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
function hostModuleFileName(specifier) {
|
|
259
|
+
return `${specifier.replaceAll("/", "__")}.js`;
|
|
260
|
+
}
|
|
261
|
+
function resolveHostModules() {
|
|
262
|
+
const root = import_path2.default.join(__dirname, "metro-host-modules");
|
|
263
|
+
const files = /* @__PURE__ */ new Map();
|
|
264
|
+
for (const specifier of hostModuleSpecifiers) {
|
|
265
|
+
const filePath = import_path2.default.join(root, hostModuleFileName(specifier));
|
|
266
|
+
files.set(specifier, filePath);
|
|
267
|
+
}
|
|
268
|
+
return { root, files };
|
|
269
|
+
}
|
|
270
|
+
function readCallableMetroExport(moduleValue, label) {
|
|
271
|
+
const callable = typeof moduleValue === "function" ? moduleValue : typeof moduleValue === "object" && moduleValue !== null ? Reflect.get(moduleValue, "default") : void 0;
|
|
272
|
+
if (typeof callable !== "function") {
|
|
273
|
+
throw new Error(`rnxsim: Metro ${label} module did not export a function`);
|
|
274
|
+
}
|
|
275
|
+
return (...args) => Reflect.apply(callable, void 0, args);
|
|
276
|
+
}
|
|
277
|
+
function createMetroDefaultSerializer(projectRoot) {
|
|
278
|
+
const projectRequire = (0, import_module.createRequire)(import_path2.default.join(projectRoot, "package.json"));
|
|
279
|
+
const metroRoot = import_path2.default.dirname(projectRequire.resolve("metro/package.json"));
|
|
280
|
+
const baseJSBundle = readCallableMetroExport(
|
|
281
|
+
projectRequire(import_path2.default.join(metroRoot, "src/DeltaBundler/Serializers/baseJSBundle.js")),
|
|
282
|
+
"baseJSBundle"
|
|
283
|
+
);
|
|
284
|
+
const bundleToString = readCallableMetroExport(
|
|
285
|
+
projectRequire(import_path2.default.join(metroRoot, "src/lib/bundleToString.js")),
|
|
286
|
+
"bundleToString"
|
|
287
|
+
);
|
|
288
|
+
return (entryPoint, preModules, graph, options) => {
|
|
289
|
+
const serialized = bundleToString(
|
|
290
|
+
baseJSBundle(entryPoint, preModules, graph, options)
|
|
291
|
+
);
|
|
292
|
+
const code = typeof serialized === "object" && serialized !== null ? Reflect.get(serialized, "code") : void 0;
|
|
293
|
+
if (typeof code !== "string") {
|
|
294
|
+
throw new Error("rnxsim: Metro bundleToString did not return bundle code");
|
|
295
|
+
}
|
|
296
|
+
return code;
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
function prependRNXModulePaths(result, graph, options, projectRoot) {
|
|
300
|
+
const dependencies = graph.dependencies;
|
|
301
|
+
const createModuleId = options.createModuleId;
|
|
302
|
+
if (!dependencies || !createModuleId) {
|
|
303
|
+
throw new Error(
|
|
304
|
+
"rnxsim: Metro did not provide the production module graph and createModuleId"
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
const modulePaths = {};
|
|
308
|
+
for (const module2 of dependencies.values()) {
|
|
309
|
+
modulePaths[String(createModuleId(module2.path))] = import_path2.default.relative(projectRoot, module2.path).replaceAll(import_path2.default.sep, "/");
|
|
310
|
+
}
|
|
311
|
+
if (Object.keys(modulePaths).length !== dependencies.size) {
|
|
312
|
+
throw new Error("rnxsim: production module IDs were not unique");
|
|
313
|
+
}
|
|
314
|
+
const footer = createRNXMetroModulePathsFooter(modulePaths);
|
|
315
|
+
return typeof result === "string" ? result + footer : { ...result, code: result.code + footer };
|
|
316
|
+
}
|
|
317
|
+
function withRNX(config, options = {}) {
|
|
318
|
+
if (!options.devServer && !options.productionBundles) return config;
|
|
222
319
|
const bundleUrl = options.bundleUrl || "/index.bundle?platform=ios&dev=true&hot=true&minify=false";
|
|
223
320
|
const cfgServer = config.server;
|
|
321
|
+
const cfgResolver = config.resolver;
|
|
322
|
+
const cfgSerializer = config.serializer;
|
|
323
|
+
const cfgProjectRoot = config.projectRoot || process.cwd();
|
|
224
324
|
const existingEnhance = cfgServer?.enhanceMiddleware;
|
|
325
|
+
const existingResolveRequest = cfgResolver?.resolveRequest;
|
|
326
|
+
const existingSerializer = cfgSerializer?.customSerializer;
|
|
327
|
+
let productionConfig = {};
|
|
328
|
+
if (options.productionBundles) {
|
|
329
|
+
const hostModules = resolveHostModules();
|
|
330
|
+
let defaultSerializer;
|
|
331
|
+
productionConfig = {
|
|
332
|
+
watchFolders: [
|
|
333
|
+
...config.watchFolders || [],
|
|
334
|
+
hostModules.root
|
|
335
|
+
],
|
|
336
|
+
resolver: {
|
|
337
|
+
...cfgResolver,
|
|
338
|
+
resolveRequest: (context, moduleName, platform) => {
|
|
339
|
+
if (context.customResolverOptions?.[RNXSIM_METRO_PRODUCTION_BUNDLE_OPTION] === "true") {
|
|
340
|
+
assertProductionEnvironment();
|
|
341
|
+
const hostModule = hostModules.files.get(moduleName);
|
|
342
|
+
if (hostModule) return { type: "sourceFile", filePath: hostModule };
|
|
343
|
+
}
|
|
344
|
+
return existingResolveRequest ? existingResolveRequest(context, moduleName, platform) : context.resolveRequest(context, moduleName, platform);
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
serializer: {
|
|
348
|
+
...cfgSerializer,
|
|
349
|
+
customSerializer: async (entryPoint, preModules, graph, serializerOptions) => {
|
|
350
|
+
const serializer = existingSerializer || (defaultSerializer ||= createMetroDefaultSerializer(cfgProjectRoot));
|
|
351
|
+
const productionBundle = isRNXProductionBundle(graph);
|
|
352
|
+
if (productionBundle) assertProductionEnvironment();
|
|
353
|
+
const result = await serializer(
|
|
354
|
+
entryPoint,
|
|
355
|
+
preModules,
|
|
356
|
+
graph,
|
|
357
|
+
serializerOptions
|
|
358
|
+
);
|
|
359
|
+
return productionBundle ? prependRNXModulePaths(result, graph, serializerOptions, cfgProjectRoot) : result;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
}
|
|
225
364
|
const serverConfig = {
|
|
226
365
|
...cfgServer,
|
|
227
366
|
enhanceMiddleware: (metroMiddleware, metroServer) => {
|
|
@@ -288,10 +427,15 @@ function withSootsim(config, options = {}) {
|
|
|
288
427
|
return server;
|
|
289
428
|
}
|
|
290
429
|
};
|
|
291
|
-
return {
|
|
430
|
+
return {
|
|
431
|
+
...config,
|
|
432
|
+
...productionConfig,
|
|
433
|
+
...options.devServer ? { server: serverConfig } : {}
|
|
434
|
+
};
|
|
292
435
|
}
|
|
293
|
-
var metro_plugin_default =
|
|
436
|
+
var metro_plugin_default = withRNX;
|
|
294
437
|
// Annotate the CommonJS export names for ESM import in node:
|
|
295
438
|
0 && (module.exports = {
|
|
296
|
-
|
|
439
|
+
toRNXProductionBundleUrl,
|
|
440
|
+
withRNX
|
|
297
441
|
});
|
package/dist-lib/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.337 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.337 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -29,7 +29,7 @@ var name = "rnx";
|
|
|
29
29
|
var rnxPublicBrand = Object.freeze({
|
|
30
30
|
name,
|
|
31
31
|
packageName: "rnxsim",
|
|
32
|
-
commandName: "
|
|
32
|
+
commandName: "rnx",
|
|
33
33
|
domain: "rnxsim.com",
|
|
34
34
|
origin: "https://rnxsim.com"
|
|
35
35
|
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*! rnx v0.1.337 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
|
+
"use strict";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/react-native-host-modules.ts
|
|
23
|
+
var react_native_host_modules_exports = {};
|
|
24
|
+
__export(react_native_host_modules_exports, {
|
|
25
|
+
REACT_NATIVE_PASSTHROUGH_SPECIFIERS: () => REACT_NATIVE_PASSTHROUGH_SPECIFIERS,
|
|
26
|
+
isReactNativePassthroughSpecifier: () => isReactNativePassthroughSpecifier
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(react_native_host_modules_exports);
|
|
29
|
+
var REACT_NATIVE_PASSTHROUGH_SPECIFIERS = [
|
|
30
|
+
"react-native/Libraries/vendor/emitter",
|
|
31
|
+
"react-native/Libraries/Components/View/ReactNativeStyleAttributes",
|
|
32
|
+
"react-native/Libraries/StyleSheet",
|
|
33
|
+
"react-native/Libraries/Utilities/differ",
|
|
34
|
+
"react-native/Libraries/Utilities/stringifySafe",
|
|
35
|
+
"react-native/src/private/featureflags",
|
|
36
|
+
"react-native/Libraries/TurboModule/TurboModuleRegistry",
|
|
37
|
+
"react-native/Libraries/Utilities/Platform",
|
|
38
|
+
"react-native/Libraries/Utilities/NativePlatformConstants",
|
|
39
|
+
"react-native/src/private/specs_DEPRECATED/modules/NativePlatformConstants"
|
|
40
|
+
];
|
|
41
|
+
function isReactNativePassthroughSpecifier(specifier) {
|
|
42
|
+
return REACT_NATIVE_PASSTHROUGH_SPECIFIERS.some(
|
|
43
|
+
(passthrough) => specifier === passthrough || specifier.startsWith(`${passthrough}/`)
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
47
|
+
0 && (module.exports = {
|
|
48
|
+
REACT_NATIVE_PASSTHROUGH_SPECIFIERS,
|
|
49
|
+
isReactNativePassthroughSpecifier
|
|
50
|
+
});
|
package/dist-lib/render-mode.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.337 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.337 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/sdk.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.337 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1491,13 +1491,12 @@ function scoreInteractive(n) {
|
|
|
1491
1491
|
return score;
|
|
1492
1492
|
}
|
|
1493
1493
|
function tapCommandForNode(n) {
|
|
1494
|
-
if (n.testID) return `
|
|
1494
|
+
if (n.testID) return `rnx do tap-id ${shellEscape(n.testID)}`;
|
|
1495
1495
|
const text = typeof n.text === "string" ? n.text.trim() : "";
|
|
1496
|
-
if (text.length > 0 && text.length <= 80)
|
|
1497
|
-
return `rnxsim do tap-text ${shellEscape(text)}`;
|
|
1496
|
+
if (text.length > 0 && text.length <= 80) return `rnx do tap-text ${shellEscape(text)}`;
|
|
1498
1497
|
const x = Math.round(((n.absolutePosition?.x ?? 0) + (n.layout?.width ?? 0) / 2) * 10) / 10;
|
|
1499
1498
|
const y = Math.round(((n.absolutePosition?.y ?? 0) + (n.layout?.height ?? 0) / 2) * 10) / 10;
|
|
1500
|
-
return `
|
|
1499
|
+
return `rnx do tap ${x} ${y}`;
|
|
1501
1500
|
}
|
|
1502
1501
|
function shellEscape(value) {
|
|
1503
1502
|
if (/^[A-Za-z0-9_./@:-]+$/.test(value)) return value;
|
|
@@ -1517,7 +1516,7 @@ var WAIT_READY_PROBE = `(async () => {
|
|
|
1517
1516
|
const loadingSignal = (value) => {
|
|
1518
1517
|
const text = cleanText(value)
|
|
1519
1518
|
if (!text) return ''
|
|
1520
|
-
return /^(opening app\\b|looking for your app\\b|building bundle\\b|preparing
|
|
1519
|
+
return /^(opening app\\b|looking for your app\\b|building bundle\\b|preparing rnx runtime\\b|loading native bundle\\b|loading rnx stubs\\b|loading bundle loader\\b|loading native stubs\\b|loading compat bridge\\b|loading react-native shim\\b|loading react bridge\\b|loading reconciler\\b|loading replacement modules\\b|injecting rnx modules\\b|warming sqlite engine\\b|capturing root component\\b|reloading app\\b|loading(?:[.!\u2026]*)?$|connecting(?:[.!\u2026]*)?$)/i.test(text)
|
|
1521
1520
|
? text
|
|
1522
1521
|
: ''
|
|
1523
1522
|
}
|
|
@@ -1657,7 +1656,7 @@ function readyProbeHasTargetContent(probe) {
|
|
|
1657
1656
|
}
|
|
1658
1657
|
function waitReadyReason(status) {
|
|
1659
1658
|
if (status.bridgeError) {
|
|
1660
|
-
return `sim unreachable: ${status.bridgeError} \u2014 the target tab is closed or no sim is connected (check \`
|
|
1659
|
+
return `sim unreachable: ${status.bridgeError} \u2014 the target tab is closed or no sim is connected (check \`rnx list\`, reopen with \`rnx open\`)`;
|
|
1661
1660
|
}
|
|
1662
1661
|
const base = status.externalError ? `guest app errored: ${status.externalError}` : status.loadingText ? `still showing "${status.loadingText}"` : status.externalReady === false ? "guest app is still loading" : status.flag !== true && status.targets > 0 ? "native content is rendered but the ready signal has not settled" : status.flag !== true ? "guest app has not emitted sootsim:externalAppReady" : status.targets <= 0 ? "ready flag emitted but no visible app content is inspectable yet" : "node tree is still changing";
|
|
1663
1662
|
return !status.externalError && status.suppressedEntryError ? `${base} (suppressed entry error: ${status.suppressedEntryError})` : base;
|
package/dist-lib/sdk.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.337 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
@@ -1393,13 +1393,12 @@ function scoreInteractive(n) {
|
|
|
1393
1393
|
return score;
|
|
1394
1394
|
}
|
|
1395
1395
|
function tapCommandForNode(n) {
|
|
1396
|
-
if (n.testID) return `
|
|
1396
|
+
if (n.testID) return `rnx do tap-id ${shellEscape(n.testID)}`;
|
|
1397
1397
|
const text = typeof n.text === "string" ? n.text.trim() : "";
|
|
1398
|
-
if (text.length > 0 && text.length <= 80)
|
|
1399
|
-
return `rnxsim do tap-text ${shellEscape(text)}`;
|
|
1398
|
+
if (text.length > 0 && text.length <= 80) return `rnx do tap-text ${shellEscape(text)}`;
|
|
1400
1399
|
const x = Math.round(((n.absolutePosition?.x ?? 0) + (n.layout?.width ?? 0) / 2) * 10) / 10;
|
|
1401
1400
|
const y = Math.round(((n.absolutePosition?.y ?? 0) + (n.layout?.height ?? 0) / 2) * 10) / 10;
|
|
1402
|
-
return `
|
|
1401
|
+
return `rnx do tap ${x} ${y}`;
|
|
1403
1402
|
}
|
|
1404
1403
|
function shellEscape(value) {
|
|
1405
1404
|
if (/^[A-Za-z0-9_./@:-]+$/.test(value)) return value;
|
|
@@ -1419,7 +1418,7 @@ var WAIT_READY_PROBE = `(async () => {
|
|
|
1419
1418
|
const loadingSignal = (value) => {
|
|
1420
1419
|
const text = cleanText(value)
|
|
1421
1420
|
if (!text) return ''
|
|
1422
|
-
return /^(opening app\\b|looking for your app\\b|building bundle\\b|preparing
|
|
1421
|
+
return /^(opening app\\b|looking for your app\\b|building bundle\\b|preparing rnx runtime\\b|loading native bundle\\b|loading rnx stubs\\b|loading bundle loader\\b|loading native stubs\\b|loading compat bridge\\b|loading react-native shim\\b|loading react bridge\\b|loading reconciler\\b|loading replacement modules\\b|injecting rnx modules\\b|warming sqlite engine\\b|capturing root component\\b|reloading app\\b|loading(?:[.!\u2026]*)?$|connecting(?:[.!\u2026]*)?$)/i.test(text)
|
|
1423
1422
|
? text
|
|
1424
1423
|
: ''
|
|
1425
1424
|
}
|
|
@@ -1559,7 +1558,7 @@ function readyProbeHasTargetContent(probe) {
|
|
|
1559
1558
|
}
|
|
1560
1559
|
function waitReadyReason(status) {
|
|
1561
1560
|
if (status.bridgeError) {
|
|
1562
|
-
return `sim unreachable: ${status.bridgeError} \u2014 the target tab is closed or no sim is connected (check \`
|
|
1561
|
+
return `sim unreachable: ${status.bridgeError} \u2014 the target tab is closed or no sim is connected (check \`rnx list\`, reopen with \`rnx open\`)`;
|
|
1563
1562
|
}
|
|
1564
1563
|
const base = status.externalError ? `guest app errored: ${status.externalError}` : status.loadingText ? `still showing "${status.loadingText}"` : status.externalReady === false ? "guest app is still loading" : status.flag !== true && status.targets > 0 ? "native content is rendered but the ready signal has not settled" : status.flag !== true ? "guest app has not emitted sootsim:externalAppReady" : status.targets <= 0 ? "ready flag emitted but no visible app content is inspectable yet" : "node tree is still changing";
|
|
1565
1564
|
return !status.externalError && status.suppressedEntryError ? `${base} (suppressed entry error: ${status.suppressedEntryError})` : base;
|