rnxsim 0.1.339 → 0.1.341

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.
Files changed (168) hide show
  1. package/cli/app-config.ts +21 -1
  2. package/dist-cli/bin.js +5 -5
  3. package/dist-cli/chunks/{agent-HYXEA2DF.js → agent-2VZNJ5EK.js} +2 -2
  4. package/dist-cli/chunks/{agent-wrapper-XJKNKJGD.js → agent-wrapper-HUCI32H2.js} +2 -2
  5. package/dist-cli/chunks/{app-fonts-ECYIB477.js → app-fonts-X25CBLGM.js} +2 -2
  6. package/dist-cli/chunks/{assert-XVYWL4OL.js → assert-RC7CNDDD.js} +2 -2
  7. package/dist-cli/chunks/{auth-RP5LJWFS.js → auth-4P5ICOU7.js} +2 -2
  8. package/dist-cli/chunks/{beta-VBVPDQZD.js → beta-QHOS4FLY.js} +2 -2
  9. package/dist-cli/chunks/{camera-YVDG77OW.js → camera-XSDDJCA6.js} +2 -2
  10. package/dist-cli/chunks/{chunk-AVK2JHMK.js → chunk-233ZNBFD.js} +2 -2
  11. package/dist-cli/chunks/{chunk-KTL2LUE5.js → chunk-2X65F3HT.js} +1 -1
  12. package/dist-cli/chunks/{chunk-PTDAFVH5.js → chunk-2YG35MTR.js} +2 -2
  13. package/dist-cli/chunks/{chunk-WR3HAW34.js → chunk-4AXUIGKV.js} +2 -2
  14. package/dist-cli/chunks/{chunk-CIKEBWPF.js → chunk-4ECKZJFH.js} +1 -1
  15. package/dist-cli/chunks/{chunk-KAO5CST7.js → chunk-4GPFCG2O.js} +1 -1
  16. package/dist-cli/chunks/{chunk-7F3ZRIVD.js → chunk-4H6JNBY6.js} +2 -2
  17. package/dist-cli/chunks/{chunk-5TECC5CJ.js → chunk-4MLXHZHM.js} +2 -2
  18. package/dist-cli/chunks/{chunk-OGSAZBRR.js → chunk-4Q5BGK2P.js} +1 -1
  19. package/dist-cli/chunks/{chunk-QKMCPABX.js → chunk-52FRHDR5.js} +1 -1
  20. package/dist-cli/chunks/{chunk-7WQGK44R.js → chunk-53AW6GK5.js} +3 -3
  21. package/dist-cli/chunks/{chunk-3T22NM6B.js → chunk-5XINSS6Z.js} +2 -2
  22. package/dist-cli/chunks/{chunk-VCYL5IR3.js → chunk-6W2R675K.js} +1 -1
  23. package/dist-cli/chunks/{chunk-NG7EAN4Z.js → chunk-76IAWM7K.js} +2 -2
  24. package/dist-cli/chunks/{chunk-FN3MYVOI.js → chunk-7DDDFAWL.js} +2 -2
  25. package/dist-cli/chunks/{chunk-NZ4MVNIE.js → chunk-7HT77JWW.js} +1 -1
  26. package/dist-cli/chunks/{chunk-FPQ4EECQ.js → chunk-7NGLNCN6.js} +1 -1
  27. package/dist-cli/chunks/{chunk-HAPZCL5D.js → chunk-7WPJ6WLF.js} +2 -2
  28. package/dist-cli/chunks/{chunk-ST4IRWA6.js → chunk-7ZUYO4NL.js} +1 -1
  29. package/dist-cli/chunks/{chunk-BISFMRD6.js → chunk-AJ54R4E7.js} +2 -2
  30. package/dist-cli/chunks/{chunk-M3SKRWFU.js → chunk-BYYIT6KJ.js} +1 -1
  31. package/dist-cli/chunks/{chunk-Z2RU7GLW.js → chunk-DCDS3KAC.js} +2 -2
  32. package/dist-cli/chunks/{chunk-2AZOL3UF.js → chunk-EQFQ5HQO.js} +3 -3
  33. package/dist-cli/chunks/{chunk-GFHGRBLQ.js → chunk-F67L5MAP.js} +2 -2
  34. package/dist-cli/chunks/{chunk-76MUKN6C.js → chunk-FF2RR6C3.js} +1 -1
  35. package/dist-cli/chunks/{chunk-PRNSZ6B2.js → chunk-FKYMTZEX.js} +2 -2
  36. package/dist-cli/chunks/{chunk-GESUHR5O.js → chunk-G3PR7UQP.js} +2 -2
  37. package/dist-cli/chunks/{chunk-ROODJ6RF.js → chunk-I6A6OXPV.js} +1 -1
  38. package/dist-cli/chunks/{chunk-CNFXAL6Z.js → chunk-JHDSF45Z.js} +1 -1
  39. package/dist-cli/chunks/{chunk-SWW36H42.js → chunk-JQXE2VJ5.js} +2 -2
  40. package/dist-cli/chunks/{chunk-7H5BVBSN.js → chunk-K4WBNA57.js} +1 -1
  41. package/dist-cli/chunks/{chunk-QLIPEQVL.js → chunk-KDVRXHJ4.js} +2 -2
  42. package/dist-cli/chunks/{chunk-4NYMUV5O.js → chunk-KH2WSUUG.js} +2 -2
  43. package/dist-cli/chunks/{chunk-GGDZMFEK.js → chunk-L3PC6LFJ.js} +2 -2
  44. package/dist-cli/chunks/{chunk-XIEY6RUY.js → chunk-LD4Y4JIQ.js} +1 -1
  45. package/dist-cli/chunks/{chunk-76QEJTAT.js → chunk-LHG5TW5H.js} +3 -3
  46. package/dist-cli/chunks/{chunk-IWXDWYP4.js → chunk-LVVXPCZU.js} +2 -2
  47. package/dist-cli/chunks/{chunk-3R7KVPQ6.js → chunk-MMI4WQQV.js} +2 -2
  48. package/dist-cli/chunks/{chunk-ZE44MQ4K.js → chunk-NDUETWBJ.js} +2 -2
  49. package/dist-cli/chunks/{chunk-44PQEV6X.js → chunk-NKYFMLNX.js} +2 -2
  50. package/dist-cli/chunks/{chunk-42UB5N4I.js → chunk-QB3OJYP2.js} +1 -1
  51. package/dist-cli/chunks/{chunk-KPN5X2PV.js → chunk-QJSDXTPT.js} +1 -1
  52. package/dist-cli/chunks/{chunk-UMNOLET5.js → chunk-QSBX4L73.js} +2 -2
  53. package/dist-cli/chunks/{chunk-SS6FV24V.js → chunk-QWGOVJGL.js} +2 -2
  54. package/dist-cli/chunks/{chunk-ZVHDLFW6.js → chunk-RK3WWN2D.js} +3 -3
  55. package/dist-cli/chunks/{chunk-VYMD42C2.js → chunk-RQZ6VKLY.js} +2 -2
  56. package/dist-cli/chunks/{chunk-RBB3BPRM.js → chunk-SPNRKIFH.js} +2 -2
  57. package/dist-cli/chunks/{chunk-37CF2HGR.js → chunk-UFBBXUUZ.js} +1 -1
  58. package/dist-cli/chunks/{chunk-QCDZI56P.js → chunk-WCNBNVO4.js} +2 -2
  59. package/dist-cli/chunks/{chunk-IV4EVQFA.js → chunk-XPBSKCKS.js} +3 -3
  60. package/dist-cli/chunks/chunk-YZAD6XZI.js +4 -0
  61. package/dist-cli/chunks/{chunk-KW3TVLRH.js → chunk-ZDWXB3EA.js} +1 -1
  62. package/dist-cli/chunks/{chunk-VAR4NG7B.js → chunk-ZJSHTXBM.js} +1 -1
  63. package/dist-cli/chunks/{cleanup-4FUIYEXZ.js → cleanup-4KWMEI5G.js} +2 -2
  64. package/dist-cli/chunks/cli-version-Z4G2ESLX.js +4 -0
  65. package/dist-cli/chunks/{compat-N6MLQSAE.js → compat-INWNQKQV.js} +2 -2
  66. package/dist-cli/chunks/{config-VJQMQ2LP.js → config-F4DEDFMB.js} +2 -2
  67. package/dist-cli/chunks/{control-ONWYYQK6.js → control-SCM7VLMN.js} +2 -2
  68. package/dist-cli/chunks/daemon-DK4C6KYV.js +4 -0
  69. package/dist-cli/chunks/{debug-7WASIHHQ.js → debug-5WGWI2DL.js} +3 -3
  70. package/dist-cli/chunks/{desktop-TAX4UBZU.js → desktop-LWE4NVXH.js} +3 -3
  71. package/dist-cli/chunks/{detox-GUWYLR7G.js → detox-X67W4OC2.js} +2 -2
  72. package/dist-cli/chunks/{device-4CJWN2NQ.js → device-7WEEJ2U4.js} +2 -2
  73. package/dist-cli/chunks/{diagnose-PE6E6FIJ.js → diagnose-CCDNAIJT.js} +2 -2
  74. package/dist-cli/chunks/{disk-cleanup-NCNDW6UG.js → disk-cleanup-2O64YUCH.js} +2 -2
  75. package/dist-cli/chunks/drivers-V4T5FYDR.js +4 -0
  76. package/dist-cli/chunks/{film-3S5BWVCE.js → film-5WSW7OMT.js} +3 -3
  77. package/dist-cli/chunks/flow-ZYOGI4ND.js +4 -0
  78. package/dist-cli/chunks/help-67QX3FBL.js +4 -0
  79. package/dist-cli/chunks/{hidden-runtime-alias-5NJA6RDT.js → hidden-runtime-alias-TLECMPNB.js} +2 -2
  80. package/dist-cli/chunks/{home-paths-JEJ5BS23.js → home-paths-5T3CHQOF.js} +2 -2
  81. package/dist-cli/chunks/inspect-IUPBR46H.js +4 -0
  82. package/dist-cli/chunks/install-desktop-G27H2W2G.js +4 -0
  83. package/dist-cli/chunks/{login-WXWIBQ5C.js → login-XUMA7MZC.js} +4 -4
  84. package/dist-cli/chunks/{logout-WYOZ64JT.js → logout-JPZ4ELXD.js} +2 -2
  85. package/dist-cli/chunks/{maestro-VG64BSNR.js → maestro-SRSW7CGE.js} +3 -3
  86. package/dist-cli/chunks/{maestro-generate-7ILUVQKH.js → maestro-generate-7JB65LYP.js} +3 -3
  87. package/dist-cli/chunks/{mode-AWVXLR3D.js → mode-VEVCNMJ4.js} +2 -2
  88. package/dist-cli/chunks/{optional-demo-registry-RRH3SRSJ.js → optional-demo-registry-5ASZFFGW.js} +2 -2
  89. package/dist-cli/chunks/{perf-IDLWGRFE.js → perf-GNZYAEHH.js} +2 -2
  90. package/dist-cli/chunks/{permissions-YQOMEBOQ.js → permissions-2QOVZC5W.js} +2 -2
  91. package/dist-cli/chunks/{record-S76THKKB.js → record-UPBLVFFZ.js} +3 -3
  92. package/dist-cli/chunks/{report-issue-76TVGJYX.js → report-issue-5JLQSMQN.js} +2 -2
  93. package/dist-cli/chunks/reset-2OGMTXJO.js +4 -0
  94. package/dist-cli/chunks/runtime-FWJ7IWON.js +4 -0
  95. package/dist-cli/chunks/{screenshot-command-LLEQWW3R.js → screenshot-command-RWP5QECD.js} +3 -3
  96. package/dist-cli/chunks/{screenshot-layers-327WK2L3.js → screenshot-layers-KKQNFC2A.js} +2 -2
  97. package/dist-cli/chunks/{screenshots-capture-LHIBYR3R.js → screenshots-capture-P32K3R3A.js} +2 -2
  98. package/dist-cli/chunks/serve-YPY5Q7LF.js +118 -0
  99. package/dist-cli/chunks/{setup-H5EUUEOX.js → setup-OG6CDHRZ.js} +2 -2
  100. package/dist-cli/chunks/{skills-3KH5KUN4.js → skills-2W62A4VB.js} +2 -2
  101. package/dist-cli/chunks/{state-RZCVH5FJ.js → state-KPG5DSNA.js} +2 -2
  102. package/dist-cli/chunks/{storage-RRCXZVON.js → storage-SRRG2Q73.js} +2 -2
  103. package/dist-cli/chunks/store-NIZZF3ZI.js +4 -0
  104. package/dist-cli/chunks/telemetry-BANF55KR.js +4 -0
  105. package/dist-cli/chunks/{timeline-KE7BJKM5.js → timeline-RPN7Z4QD.js} +2 -2
  106. package/dist-cli/chunks/{upgrade-AE5U2CWH.js → upgrade-UKESJCPD.js} +2 -2
  107. package/dist-cli/chunks/upload-JM2R6DKU.js +4 -0
  108. package/dist-cli/chunks/{version-C5QGOCDN.js → version-SSQACF5S.js} +2 -2
  109. package/dist-cli/chunks/{web-GV7JJUAJ.js → web-YOEHGW6Z.js} +2 -2
  110. package/dist-cli/chunks/{what-happened-D6WMLM2M.js → what-happened-FJRIYKWS.js} +2 -2
  111. package/dist-lib/agent-daemon-client.cjs +1 -1
  112. package/dist-lib/agent-events.cjs +1 -1
  113. package/dist-lib/agent-identity.cjs +1 -1
  114. package/dist-lib/agent-sessions.cjs +1 -1
  115. package/dist-lib/attached-projects.cjs +1 -1
  116. package/dist-lib/auth/shared-session.cjs +1 -1
  117. package/dist-lib/backend-origin.cjs +1 -1
  118. package/dist-lib/beta.cjs +1 -1
  119. package/dist-lib/beta.mjs +1 -1
  120. package/dist-lib/bridge-constants.cjs +1 -1
  121. package/dist-lib/bridge-contract.cjs +1 -1
  122. package/dist-lib/cli-constants.cjs +1 -1
  123. package/dist-lib/config.cjs +1 -1
  124. package/dist-lib/detox/index.cjs +1 -1
  125. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  126. package/dist-lib/home-paths.cjs +1 -1
  127. package/dist-lib/host/bridge-host.cjs +203 -8
  128. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  129. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  130. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  131. package/dist-lib/host/replacement-module-handler.cjs +236 -0
  132. package/dist-lib/host/websocket-proxy.cjs +1 -1
  133. package/dist-lib/index.cjs +195 -8
  134. package/dist-lib/jump-to-source-babel.cjs +1 -1
  135. package/dist-lib/menu.cjs +1 -1
  136. package/dist-lib/menu.mjs +1 -1
  137. package/dist-lib/metro-production-bundle.cjs +1 -1
  138. package/dist-lib/metro-production-bundle.mjs +1 -1
  139. package/dist-lib/metro.cjs +1 -1
  140. package/dist-lib/profiles.cjs +1 -1
  141. package/dist-lib/public-brand.cjs +1 -1
  142. package/dist-lib/react-native-host-modules.cjs +1 -1
  143. package/dist-lib/react-native-host-modules.mjs +1 -1
  144. package/dist-lib/render-mode.cjs +1 -1
  145. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  146. package/dist-lib/sdk.cjs +1 -1
  147. package/dist-lib/sdk.mjs +1 -1
  148. package/dist-lib/skills.cjs +371 -155
  149. package/dist-lib/vite.cjs +188 -1
  150. package/package.json +6 -2
  151. package/skills/rnx-visual/SKILL.md +9 -3
  152. package/src/host/bridge-host.ts +9 -0
  153. package/src/host/replacement-module-handler.ts +220 -0
  154. package/src/vite-plugin-one.ts +7 -0
  155. package/dist-cli/chunks/chunk-K3JRFYYJ.js +0 -4
  156. package/dist-cli/chunks/cli-version-KVDXKEHT.js +0 -4
  157. package/dist-cli/chunks/daemon-XG3O4723.js +0 -4
  158. package/dist-cli/chunks/drivers-F73P7O5K.js +0 -4
  159. package/dist-cli/chunks/flow-7EO3TWAY.js +0 -4
  160. package/dist-cli/chunks/help-3GA4GYV6.js +0 -4
  161. package/dist-cli/chunks/inspect-VUH3UOVP.js +0 -4
  162. package/dist-cli/chunks/install-desktop-YFWELRMN.js +0 -4
  163. package/dist-cli/chunks/reset-TTWH3EGL.js +0 -4
  164. package/dist-cli/chunks/runtime-R6XCSUO7.js +0 -4
  165. package/dist-cli/chunks/serve-AI6WHUKJ.js +0 -44
  166. package/dist-cli/chunks/store-N6YWP4XP.js +0 -4
  167. package/dist-cli/chunks/telemetry-MI5XEML5.js +0 -4
  168. package/dist-cli/chunks/upload-THUL2TQZ.js +0 -4
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.339 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.341 | (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;
@@ -110,6 +110,188 @@ function isDaemonLockfileFresh(lock, now = Date.now()) {
110
110
  }
111
111
  }
112
112
 
113
+ // src/host/replacement-module-handler.ts
114
+ var import_promises = __toESM(require("node:fs/promises"), 1);
115
+ var import_node_path2 = __toESM(require("node:path"), 1);
116
+ var import_esbuild = require("esbuild");
117
+ var REPLACEMENT_MODULE_ROUTE = "/__sootsim-replacement-module";
118
+ var REPLACEMENT_RUNTIME_PREFIX = "/__sootsim-replacement-runtime";
119
+ function getReplacementLoader(filePath) {
120
+ const ext = import_node_path2.default.extname(filePath).toLowerCase();
121
+ switch (ext) {
122
+ case ".js":
123
+ return "js";
124
+ case ".jsx":
125
+ return "jsx";
126
+ case ".ts":
127
+ return "ts";
128
+ case ".tsx":
129
+ return "tsx";
130
+ default:
131
+ return null;
132
+ }
133
+ }
134
+ function reactRuntimeSource(reactBridgeUrl) {
135
+ if (reactBridgeUrl) {
136
+ return `export * from ${JSON.stringify(reactBridgeUrl)};
137
+ import React from ${JSON.stringify(reactBridgeUrl)};
138
+ export default React;
139
+ `;
140
+ }
141
+ return `const bridge = globalThis.__sootsim_react_bridge
142
+ if (!bridge) throw new Error('[rnx] replacement React bridge is not ready')
143
+ export default bridge.default
144
+ export const Activity = bridge.Activity
145
+ export const Children = bridge.Children
146
+ export const Component = bridge.Component
147
+ export const Fragment = bridge.Fragment
148
+ export const Profiler = bridge.Profiler
149
+ export const PureComponent = bridge.PureComponent
150
+ export const StrictMode = bridge.StrictMode
151
+ export const Suspense = bridge.Suspense
152
+ 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
153
+ export const __COMPILER_RUNTIME = bridge.__COMPILER_RUNTIME
154
+ export const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = bridge.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
155
+ export const act = bridge.act
156
+ export const cache = bridge.cache
157
+ export const cacheSignal = bridge.cacheSignal
158
+ export const captureOwnerStack = bridge.captureOwnerStack
159
+ export const cloneElement = bridge.cloneElement
160
+ export const createContext = bridge.createContext
161
+ export const createElement = bridge.createElement
162
+ export const createRef = bridge.createRef
163
+ export const forwardRef = bridge.forwardRef
164
+ export const isValidElement = bridge.isValidElement
165
+ export const lazy = bridge.lazy
166
+ export const memo = bridge.memo
167
+ export const startTransition = bridge.startTransition
168
+ export const unstable_useCacheRefresh = bridge.unstable_useCacheRefresh
169
+ export const use = bridge.use
170
+ export const useActionState = bridge.useActionState
171
+ export const useCallback = bridge.useCallback
172
+ export const useContext = bridge.useContext
173
+ export const useDebugValue = bridge.useDebugValue
174
+ export const useDeferredValue = bridge.useDeferredValue
175
+ export const useEffect = bridge.useEffect
176
+ export const useEffectEvent = bridge.useEffectEvent
177
+ export const useId = bridge.useId
178
+ export const useImperativeHandle = bridge.useImperativeHandle
179
+ export const useInsertionEffect = bridge.useInsertionEffect
180
+ export const useLayoutEffect = bridge.useLayoutEffect
181
+ export const useMemo = bridge.useMemo
182
+ export const useOptimistic = bridge.useOptimistic
183
+ export const useReducer = bridge.useReducer
184
+ export const useRef = bridge.useRef
185
+ export const useState = bridge.useState
186
+ export const useSyncExternalStore = bridge.useSyncExternalStore
187
+ export const useTransition = bridge.useTransition
188
+ export const version = bridge.version
189
+ `;
190
+ }
191
+ function reactNativeRuntimeSource() {
192
+ return `const rn = globalThis.__sootsim_components__ || {}
193
+ export default rn
194
+ export const View = rn.View
195
+ export const Text = rn.Text
196
+ export const Image = rn.Image
197
+ export const ScrollView = rn.ScrollView
198
+ export const FlatList = rn.FlatList
199
+ export const Pressable = rn.Pressable
200
+ export const TouchableOpacity = rn.TouchableOpacity
201
+ export const TouchableWithoutFeedback = rn.TouchableWithoutFeedback
202
+ export const TouchableHighlight = rn.TouchableHighlight
203
+ export const TextInput = rn.TextInput
204
+ export const ActivityIndicator = rn.ActivityIndicator
205
+ export const KeyboardAvoidingView = rn.KeyboardAvoidingView
206
+ export const Button = rn.Button
207
+ export const Modal = rn.Modal
208
+ export const Switch = rn.Switch
209
+ export const StyleSheet = rn.StyleSheet
210
+ export const Platform = rn.Platform
211
+ export const Keyboard = rn.Keyboard
212
+ export const Dimensions = rn.Dimensions
213
+ export const Appearance = rn.Appearance
214
+ `;
215
+ }
216
+ function sendJavaScript(req, res, source) {
217
+ res.writeHead(200, {
218
+ "Content-Type": "application/javascript; charset=utf-8",
219
+ "Cache-Control": "no-cache"
220
+ });
221
+ res.end(req.method === "HEAD" ? void 0 : source);
222
+ }
223
+ async function handleReplacementModuleRequest(req, res, options = {}) {
224
+ const rawUrl = req.url || "";
225
+ let url;
226
+ try {
227
+ url = new URL(rawUrl, "http://rnx.local");
228
+ } catch {
229
+ return false;
230
+ }
231
+ if (url.pathname === `${REPLACEMENT_RUNTIME_PREFIX}/react`) {
232
+ sendJavaScript(req, res, reactRuntimeSource(options.reactBridgeUrl));
233
+ return true;
234
+ }
235
+ if (url.pathname === `${REPLACEMENT_RUNTIME_PREFIX}/react-native`) {
236
+ sendJavaScript(req, res, reactNativeRuntimeSource());
237
+ return true;
238
+ }
239
+ if (url.pathname !== REPLACEMENT_MODULE_ROUTE) return false;
240
+ const targetPath = url.searchParams.get("path");
241
+ if (!targetPath) {
242
+ res.writeHead(400, { "Content-Type": "text/plain; charset=utf-8" });
243
+ res.end("missing path param");
244
+ return true;
245
+ }
246
+ const loader = getReplacementLoader(targetPath);
247
+ if (!loader) {
248
+ res.writeHead(400, { "Content-Type": "text/plain; charset=utf-8" });
249
+ res.end("replacement files must be .js, .jsx, .ts, or .tsx");
250
+ return true;
251
+ }
252
+ try {
253
+ await import_promises.default.access(targetPath);
254
+ } catch (error) {
255
+ const message = error instanceof Error ? error.message : String(error);
256
+ res.writeHead(404, { "Content-Type": "text/plain; charset=utf-8" });
257
+ res.end(`replacement file not found: ${message}`);
258
+ return true;
259
+ }
260
+ try {
261
+ const result = await (0, import_esbuild.build)({
262
+ entryPoints: [targetPath],
263
+ bundle: true,
264
+ write: false,
265
+ format: "esm",
266
+ platform: "browser",
267
+ target: "es2022",
268
+ jsx: "transform",
269
+ jsxFactory: "React.createElement",
270
+ jsxFragment: "React.Fragment",
271
+ tsconfigRaw: { compilerOptions: { jsx: "react" } },
272
+ sourcemap: "inline",
273
+ logLevel: "silent",
274
+ external: ["react", "react-native"]
275
+ });
276
+ const bundledCode = result.outputFiles[0]?.text ?? "";
277
+ const hasReactBinding = /\bimport\s+(?:\*\s+as\s+React|React(?:\s*,|\s+from)|\{[^}]*\bdefault\s+as\s+React\b)/.test(
278
+ bundledCode
279
+ );
280
+ const reactImport = /\bReact\.(?:createElement|Fragment)\b/.test(bundledCode) && !hasReactBinding ? `import * as React from '${REPLACEMENT_RUNTIME_PREFIX}/react';
281
+ ` : "";
282
+ const runtimeCode = (reactImport + bundledCode).replace(
283
+ /from\s*["']react-native["']/g,
284
+ `from '${REPLACEMENT_RUNTIME_PREFIX}/react-native'`
285
+ ).replace(/from\s*["']react["']/g, `from '${REPLACEMENT_RUNTIME_PREFIX}/react'`);
286
+ sendJavaScript(req, res, runtimeCode);
287
+ } catch (error) {
288
+ const message = error instanceof Error ? error.message : String(error);
289
+ res.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" });
290
+ res.end(`replacement bundle failed: ${message}`);
291
+ }
292
+ return true;
293
+ }
294
+
113
295
  // src/runtime-assets.ts
114
296
  var import_fs = __toESM(require("fs"), 1);
115
297
  var import_path = __toESM(require("path"), 1);
@@ -303,6 +485,11 @@ function rnxPlugin(options = {}) {
303
485
  ])
304
486
  );
305
487
  });
488
+ server.middlewares.use((req, res, next) => {
489
+ void handleReplacementModuleRequest(req, res).then((handled) => {
490
+ if (!handled) next();
491
+ });
492
+ });
306
493
  server.middlewares.use((req, res, next) => {
307
494
  const url = req.url || "";
308
495
  const pathname = url.split("?")[0];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rnxsim",
3
- "version": "0.1.339",
3
+ "version": "0.1.341",
4
4
  "description": "rnx CLI, Vite and Metro plugins, and agent skills for driving React Native apps in the browser.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -143,6 +143,10 @@
143
143
  "source": "./src/host/fetch-proxy-handler.ts",
144
144
  "default": "./dist-lib/host/fetch-proxy-handler.cjs"
145
145
  },
146
+ "./host/replacement-module-handler": {
147
+ "source": "./src/host/replacement-module-handler.ts",
148
+ "default": "./dist-lib/host/replacement-module-handler.cjs"
149
+ },
146
150
  "./host/fetch-proxy-overrides": {
147
151
  "source": "./src/host/fetch-proxy-overrides.ts",
148
152
  "import": "./dist-lib/host/fetch-proxy-overrides.mjs",
@@ -194,6 +198,7 @@
194
198
  },
195
199
  "dependencies": {
196
200
  "@expo/plist": "^0.5.4",
201
+ "esbuild": "^0.25.0",
197
202
  "jiti": "2.7.0",
198
203
  "ws": "^8.18.0"
199
204
  },
@@ -211,7 +216,6 @@
211
216
  "@sootsim/globals": "workspace:*",
212
217
  "@sootsim/skills": "workspace:*",
213
218
  "@types/ws": "^8.5.13",
214
- "esbuild": "^0.25.0",
215
219
  "sootsim-engine": "workspace:*",
216
220
  "typescript": "^5.7.0",
217
221
  "vite": "^8.2.2",
@@ -78,13 +78,19 @@ npx pixelmatch before.png after.png diff.png 0.1 # writes diff.png
78
78
  **rnx vs native iOS (fidelity to the real thing):**
79
79
 
80
80
  ```sh
81
- # native side — capture from your booted iOS simulator
82
- xcrun simctl io booted screenshot native.png
83
- # rnx side — same screen, same appearance
81
+ # native side: lifecycle and UI use xcodebuildmcp with one claimed simulator
82
+ # lossless capture names that simulator explicitly; never use the booted alias
83
+ xcrun simctl io <udid> screenshot --type=png native.png
84
+ # rnx side: same screen, same appearance
84
85
  rnx screenshot -o rnx.png
85
86
  npx pixelmatch native.png rnx.png diff.png 0.1
86
87
  ```
87
88
 
89
+ `xcodebuildmcp simulator screenshot` may return an optimized JPEG even when the
90
+ proof contract requires a lossless source. Use it only when JPEG is acceptable.
91
+ For parity proof, use the explicit-UDID PNG command above, then verify the
92
+ decoded dimensions and file type before admitting the capture.
93
+
88
94
  crop both to the same region (`--area` / `--id`) when you only care
89
95
  about one element — a full-screen diff buries a 3px font-baseline shift
90
96
  under unrelated chrome.
@@ -48,6 +48,10 @@ import {
48
48
  isFetchProxyRequestUrl,
49
49
  } from './fetch-proxy-handler.ts'
50
50
  import { openUrl as openUrlInBrowser, type OpenUrlOptions } from './open-url.ts'
51
+ import {
52
+ handleReplacementModuleRequest,
53
+ isReplacementModuleRequestUrl,
54
+ } from './replacement-module-handler.ts'
51
55
  import { handleWebSocketProxyUpgrade } from './websocket-proxy.ts'
52
56
 
53
57
  const SOOTSIM_CROSS_ORIGIN_EMBEDDER_POLICY = 'require-corp'
@@ -1563,6 +1567,11 @@ export class SootSimBridgeHost {
1563
1567
  return
1564
1568
  }
1565
1569
 
1570
+ if (isReplacementModuleRequestUrl(req.url)) {
1571
+ void handleReplacementModuleRequest(req, res)
1572
+ return
1573
+ }
1574
+
1566
1575
  const method = (req.method || 'GET').toUpperCase()
1567
1576
  let url: URL
1568
1577
  try {
@@ -0,0 +1,220 @@
1
+ import fs from 'node:fs/promises'
2
+ import path from 'node:path'
3
+ import { build } from 'esbuild'
4
+ import type { IncomingMessage, ServerResponse } from 'node:http'
5
+
6
+ export const REPLACEMENT_MODULE_ROUTE = '/__sootsim-replacement-module'
7
+ export const REPLACEMENT_RUNTIME_PREFIX = '/__sootsim-replacement-runtime'
8
+
9
+ export interface ReplacementModuleHandlerOptions {
10
+ reactBridgeUrl?: string
11
+ }
12
+
13
+ function getReplacementLoader(filePath: string): 'js' | 'jsx' | 'ts' | 'tsx' | null {
14
+ const ext = path.extname(filePath).toLowerCase()
15
+ switch (ext) {
16
+ case '.js':
17
+ return 'js'
18
+ case '.jsx':
19
+ return 'jsx'
20
+ case '.ts':
21
+ return 'ts'
22
+ case '.tsx':
23
+ return 'tsx'
24
+ default:
25
+ return null
26
+ }
27
+ }
28
+
29
+ function reactRuntimeSource(reactBridgeUrl?: string): string {
30
+ if (reactBridgeUrl) {
31
+ return (
32
+ `export * from ${JSON.stringify(reactBridgeUrl)};\n` +
33
+ `import React from ${JSON.stringify(reactBridgeUrl)};\n` +
34
+ `export default React;\n`
35
+ )
36
+ }
37
+
38
+ return `const bridge = globalThis.__sootsim_react_bridge
39
+ if (!bridge) throw new Error('[rnx] replacement React bridge is not ready')
40
+ export default bridge.default
41
+ export const Activity = bridge.Activity
42
+ export const Children = bridge.Children
43
+ export const Component = bridge.Component
44
+ export const Fragment = bridge.Fragment
45
+ export const Profiler = bridge.Profiler
46
+ export const PureComponent = bridge.PureComponent
47
+ export const StrictMode = bridge.StrictMode
48
+ export const Suspense = bridge.Suspense
49
+ 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
50
+ export const __COMPILER_RUNTIME = bridge.__COMPILER_RUNTIME
51
+ export const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = bridge.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
52
+ export const act = bridge.act
53
+ export const cache = bridge.cache
54
+ export const cacheSignal = bridge.cacheSignal
55
+ export const captureOwnerStack = bridge.captureOwnerStack
56
+ export const cloneElement = bridge.cloneElement
57
+ export const createContext = bridge.createContext
58
+ export const createElement = bridge.createElement
59
+ export const createRef = bridge.createRef
60
+ export const forwardRef = bridge.forwardRef
61
+ export const isValidElement = bridge.isValidElement
62
+ export const lazy = bridge.lazy
63
+ export const memo = bridge.memo
64
+ export const startTransition = bridge.startTransition
65
+ export const unstable_useCacheRefresh = bridge.unstable_useCacheRefresh
66
+ export const use = bridge.use
67
+ export const useActionState = bridge.useActionState
68
+ export const useCallback = bridge.useCallback
69
+ export const useContext = bridge.useContext
70
+ export const useDebugValue = bridge.useDebugValue
71
+ export const useDeferredValue = bridge.useDeferredValue
72
+ export const useEffect = bridge.useEffect
73
+ export const useEffectEvent = bridge.useEffectEvent
74
+ export const useId = bridge.useId
75
+ export const useImperativeHandle = bridge.useImperativeHandle
76
+ export const useInsertionEffect = bridge.useInsertionEffect
77
+ export const useLayoutEffect = bridge.useLayoutEffect
78
+ export const useMemo = bridge.useMemo
79
+ export const useOptimistic = bridge.useOptimistic
80
+ export const useReducer = bridge.useReducer
81
+ export const useRef = bridge.useRef
82
+ export const useState = bridge.useState
83
+ export const useSyncExternalStore = bridge.useSyncExternalStore
84
+ export const useTransition = bridge.useTransition
85
+ export const version = bridge.version
86
+ `
87
+ }
88
+
89
+ function reactNativeRuntimeSource(): string {
90
+ return `const rn = globalThis.__sootsim_components__ || {}
91
+ export default rn
92
+ export const View = rn.View
93
+ export const Text = rn.Text
94
+ export const Image = rn.Image
95
+ export const ScrollView = rn.ScrollView
96
+ export const FlatList = rn.FlatList
97
+ export const Pressable = rn.Pressable
98
+ export const TouchableOpacity = rn.TouchableOpacity
99
+ export const TouchableWithoutFeedback = rn.TouchableWithoutFeedback
100
+ export const TouchableHighlight = rn.TouchableHighlight
101
+ export const TextInput = rn.TextInput
102
+ export const ActivityIndicator = rn.ActivityIndicator
103
+ export const KeyboardAvoidingView = rn.KeyboardAvoidingView
104
+ export const Button = rn.Button
105
+ export const Modal = rn.Modal
106
+ export const Switch = rn.Switch
107
+ export const StyleSheet = rn.StyleSheet
108
+ export const Platform = rn.Platform
109
+ export const Keyboard = rn.Keyboard
110
+ export const Dimensions = rn.Dimensions
111
+ export const Appearance = rn.Appearance
112
+ `
113
+ }
114
+
115
+ function sendJavaScript(req: IncomingMessage, res: ServerResponse, source: string): void {
116
+ res.writeHead(200, {
117
+ 'Content-Type': 'application/javascript; charset=utf-8',
118
+ 'Cache-Control': 'no-cache',
119
+ })
120
+ res.end(req.method === 'HEAD' ? undefined : source)
121
+ }
122
+
123
+ export function isReplacementModuleRequestUrl(rawUrl?: string): boolean {
124
+ if (!rawUrl) return false
125
+ try {
126
+ const pathname = new URL(rawUrl, 'http://rnx.local').pathname
127
+ return (
128
+ pathname === REPLACEMENT_MODULE_ROUTE ||
129
+ pathname.startsWith(`${REPLACEMENT_RUNTIME_PREFIX}/`)
130
+ )
131
+ } catch {
132
+ return false
133
+ }
134
+ }
135
+
136
+ export async function handleReplacementModuleRequest(
137
+ req: IncomingMessage,
138
+ res: ServerResponse,
139
+ options: ReplacementModuleHandlerOptions = {},
140
+ ): Promise<boolean> {
141
+ const rawUrl = req.url || ''
142
+ let url: URL
143
+ try {
144
+ url = new URL(rawUrl, 'http://rnx.local')
145
+ } catch {
146
+ return false
147
+ }
148
+
149
+ if (url.pathname === `${REPLACEMENT_RUNTIME_PREFIX}/react`) {
150
+ sendJavaScript(req, res, reactRuntimeSource(options.reactBridgeUrl))
151
+ return true
152
+ }
153
+ if (url.pathname === `${REPLACEMENT_RUNTIME_PREFIX}/react-native`) {
154
+ sendJavaScript(req, res, reactNativeRuntimeSource())
155
+ return true
156
+ }
157
+ if (url.pathname !== REPLACEMENT_MODULE_ROUTE) return false
158
+
159
+ const targetPath = url.searchParams.get('path')
160
+ if (!targetPath) {
161
+ res.writeHead(400, { 'Content-Type': 'text/plain; charset=utf-8' })
162
+ res.end('missing path param')
163
+ return true
164
+ }
165
+
166
+ const loader = getReplacementLoader(targetPath)
167
+ if (!loader) {
168
+ res.writeHead(400, { 'Content-Type': 'text/plain; charset=utf-8' })
169
+ res.end('replacement files must be .js, .jsx, .ts, or .tsx')
170
+ return true
171
+ }
172
+
173
+ try {
174
+ await fs.access(targetPath)
175
+ } catch (error) {
176
+ const message = error instanceof Error ? error.message : String(error)
177
+ res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' })
178
+ res.end(`replacement file not found: ${message}`)
179
+ return true
180
+ }
181
+
182
+ try {
183
+ const result = await build({
184
+ entryPoints: [targetPath],
185
+ bundle: true,
186
+ write: false,
187
+ format: 'esm',
188
+ platform: 'browser',
189
+ target: 'es2022',
190
+ jsx: 'transform',
191
+ jsxFactory: 'React.createElement',
192
+ jsxFragment: 'React.Fragment',
193
+ tsconfigRaw: { compilerOptions: { jsx: 'react' } },
194
+ sourcemap: 'inline',
195
+ logLevel: 'silent',
196
+ external: ['react', 'react-native'],
197
+ })
198
+ const bundledCode = result.outputFiles[0]?.text ?? ''
199
+ const hasReactBinding =
200
+ /\bimport\s+(?:\*\s+as\s+React|React(?:\s*,|\s+from)|\{[^}]*\bdefault\s+as\s+React\b)/.test(
201
+ bundledCode,
202
+ )
203
+ const reactImport =
204
+ /\bReact\.(?:createElement|Fragment)\b/.test(bundledCode) && !hasReactBinding
205
+ ? `import * as React from '${REPLACEMENT_RUNTIME_PREFIX}/react';\n`
206
+ : ''
207
+ const runtimeCode = (reactImport + bundledCode)
208
+ .replace(
209
+ /from\s*["']react-native["']/g,
210
+ `from '${REPLACEMENT_RUNTIME_PREFIX}/react-native'`,
211
+ )
212
+ .replace(/from\s*["']react["']/g, `from '${REPLACEMENT_RUNTIME_PREFIX}/react'`)
213
+ sendJavaScript(req, res, runtimeCode)
214
+ } catch (error) {
215
+ const message = error instanceof Error ? error.message : String(error)
216
+ res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' })
217
+ res.end(`replacement bundle failed: ${message}`)
218
+ }
219
+ return true
220
+ }
@@ -12,6 +12,7 @@ import path from 'path'
12
12
  import { fileURLToPath } from 'url'
13
13
  import { DEFAULT_SOOTSIM_BRIDGE_PORT } from './bridge-constants'
14
14
  import { isDaemonLockfileFresh, readDaemonLockfile } from './home-paths'
15
+ import { handleReplacementModuleRequest } from './host/replacement-module-handler'
15
16
  import {
16
17
  isRootRuntimeAssetPath,
17
18
  resolveRuntimeFilePath,
@@ -123,6 +124,12 @@ export function rnxPlugin(options: RnxPluginOptions = {}): Plugin {
123
124
  )
124
125
  })
125
126
 
127
+ server.middlewares.use((req, res, next) => {
128
+ void handleReplacementModuleRequest(req, res).then((handled) => {
129
+ if (!handled) next()
130
+ })
131
+ })
132
+
126
133
  server.middlewares.use((req, res, next) => {
127
134
  const url = req.url || ''
128
135
  const pathname = url.split('?')[0]
@@ -1,4 +0,0 @@
1
- /*! rnx v0.1.339 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{a as c}from"./chunk-XIEY6RUY.js";import{a as i}from"./chunk-GGDZMFEK.js";import{a as n}from"./chunk-CIKEBWPF.js";import{createRequire as f}from"node:module";import{createJiti as s}from"jiti";var m=f(import.meta.url);function t(e){return e===void 0||e!==null&&typeof e=="object"&&!Array.isArray(e)}function p(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let o=Reflect.get(e,"runtimeVersion"),r=Reflect.get(e,"network");return(o===void 0||typeof o=="string"&&o===o.trim()&&i(o))&&t(Reflect.get(e,"modules"))&&t(Reflect.get(e,"turboModules"))&&t(Reflect.get(e,"nativeModules"))&&t(Reflect.get(e,"env"))&&t(r)&&t(Reflect.get(e,"settings"))&&t(Reflect.get(e,"initialState"))}async function a(e){if(e?.configPath)try{let r=await s(import.meta.url,{interopDefault:!0,alias:{[`${n.packageName}/config`]:m.resolve(`${n.packageName}/config`)}}).import(e.configPath,{default:!0});if(!p(r))throw new Error("the default export must be an rnx config object");return r}catch(o){let r=o instanceof Error?o.message:String(o);throw new Error(`could not load ${e.configPath}: ${r}`)}}async function R(e=process.cwd()){let o=c(e);return{project:o,config:await a(o)}}export{a,R as b};
@@ -1,4 +0,0 @@
1
- /*! rnx v0.1.339 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{a}from"./chunk-5TECC5CJ.js";import"./chunk-CIKEBWPF.js";import"./chunk-KAO5CST7.js";export{a as getCliVersion};
@@ -1,4 +0,0 @@
1
- /*! rnx v0.1.339 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{a,b,c,d,e,f}from"./chunk-VYMD42C2.js";import"./chunk-IWXDWYP4.js";import"./chunk-4NYMUV5O.js";import"./chunk-QCDZI56P.js";import"./chunk-GFHGRBLQ.js";import"./chunk-3T22NM6B.js";import"./chunk-QLIPEQVL.js";import"./chunk-ZVHDLFW6.js";import"./chunk-AVK2JHMK.js";import"./chunk-M3SKRWFU.js";import"./chunk-KPN5X2PV.js";import"./chunk-CNFXAL6Z.js";import"./chunk-5TECC5CJ.js";import"./chunk-CIKEBWPF.js";import"./chunk-ST4IRWA6.js";import"./chunk-KAO5CST7.js";export{c as daemonInstall,b as getDaemonServiceStatus,a as runDaemon,e as teardownDaemonService,d as teardownLegacyMacDaemonArtifacts,f as teardownSootsimHome};
@@ -1,4 +0,0 @@
1
- /*! rnx v0.1.339 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import"./chunk-QKMCPABX.js";import{a,b,c,d,e,f,g}from"./chunk-RBB3BPRM.js";import"./chunk-VAR4NG7B.js";import"./chunk-SWW36H42.js";import"./chunk-OGSAZBRR.js";import"./chunk-M3SKRWFU.js";import"./chunk-CNFXAL6Z.js";import"./chunk-KAO5CST7.js";export{c as ALL_DRIVERS,g as buildDriverListRows,a as electronDriver,d as getAllDrivers,e as getDriver,b as playwrightDriver,f as resolveDriver};
@@ -1,4 +0,0 @@
1
- /*! rnx v0.1.339 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{c,d,e,f,g,h,i}from"./chunk-2AZOL3UF.js";import"./chunk-7H5BVBSN.js";import"./chunk-Z2RU7GLW.js";import{b as a,c as b}from"./chunk-76QEJTAT.js";import"./chunk-FPQ4EECQ.js";import"./chunk-ROODJ6RF.js";import"./chunk-44PQEV6X.js";import"./chunk-FN3MYVOI.js";import"./chunk-PTDAFVH5.js";import"./chunk-VCYL5IR3.js";import"./chunk-K3JRFYYJ.js";import"./chunk-RBB3BPRM.js";import"./chunk-VAR4NG7B.js";import"./chunk-SWW36H42.js";import"./chunk-7F3ZRIVD.js";import"./chunk-GESUHR5O.js";import"./chunk-UMNOLET5.js";import"./chunk-NG7EAN4Z.js";import"./chunk-XIEY6RUY.js";import"./chunk-PRNSZ6B2.js";import"./chunk-WR3HAW34.js";import"./chunk-76MUKN6C.js";import"./chunk-KTL2LUE5.js";import"./chunk-37CF2HGR.js";import"./chunk-ZE44MQ4K.js";import"./chunk-IWXDWYP4.js";import"./chunk-4NYMUV5O.js";import"./chunk-OGSAZBRR.js";import"./chunk-GGDZMFEK.js";import"./chunk-3T22NM6B.js";import"./chunk-QLIPEQVL.js";import"./chunk-ZVHDLFW6.js";import"./chunk-AVK2JHMK.js";import"./chunk-M3SKRWFU.js";import"./chunk-KPN5X2PV.js";import"./chunk-CNFXAL6Z.js";import"./chunk-CIKEBWPF.js";import"./chunk-KAO5CST7.js";export{f as discoverSootsimUrl,c as getLastFlowPreviewUploadResult,d as getLastFlowTraceSteps,h as hoistLeadingSimFlag,a as parseFlowFile,e as resolveAppFrontmatterTarget,g as runFlowPlayback,i as runMaestroAuthoring,b as validateFlowFile};
@@ -1,4 +0,0 @@
1
- /*! rnx v0.1.339 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{a,b,c}from"./chunk-QCDZI56P.js";import"./chunk-GFHGRBLQ.js";import"./chunk-3T22NM6B.js";import"./chunk-QLIPEQVL.js";import"./chunk-ZVHDLFW6.js";import"./chunk-AVK2JHMK.js";import"./chunk-M3SKRWFU.js";import"./chunk-KPN5X2PV.js";import"./chunk-CNFXAL6Z.js";import"./chunk-5TECC5CJ.js";import"./chunk-CIKEBWPF.js";import"./chunk-ST4IRWA6.js";import"./chunk-KAO5CST7.js";export{c as printCommandHelp,b as printGroupHelp,a as printHelp};
@@ -1,4 +0,0 @@
1
- /*! rnx v0.1.339 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{i as a,j as b}from"./chunk-76QEJTAT.js";import"./chunk-FPQ4EECQ.js";import"./chunk-ROODJ6RF.js";import"./chunk-44PQEV6X.js";import"./chunk-FN3MYVOI.js";import"./chunk-PTDAFVH5.js";import"./chunk-VCYL5IR3.js";import"./chunk-K3JRFYYJ.js";import"./chunk-RBB3BPRM.js";import"./chunk-VAR4NG7B.js";import"./chunk-SWW36H42.js";import"./chunk-UMNOLET5.js";import"./chunk-NG7EAN4Z.js";import"./chunk-XIEY6RUY.js";import"./chunk-PRNSZ6B2.js";import"./chunk-WR3HAW34.js";import"./chunk-76MUKN6C.js";import"./chunk-KTL2LUE5.js";import"./chunk-37CF2HGR.js";import"./chunk-ZE44MQ4K.js";import"./chunk-OGSAZBRR.js";import"./chunk-GGDZMFEK.js";import"./chunk-3T22NM6B.js";import"./chunk-QLIPEQVL.js";import"./chunk-ZVHDLFW6.js";import"./chunk-AVK2JHMK.js";import"./chunk-M3SKRWFU.js";import"./chunk-KPN5X2PV.js";import"./chunk-CNFXAL6Z.js";import"./chunk-CIKEBWPF.js";import"./chunk-KAO5CST7.js";export{a as printShellPerfReport,b as runInspect};
@@ -1,4 +0,0 @@
1
- /*! rnx v0.1.339 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{a}from"./chunk-7WQGK44R.js";import"./chunk-VAR4NG7B.js";import"./chunk-42UB5N4I.js";import"./chunk-KAO5CST7.js";export{a as runInstallDesktop};
@@ -1,4 +0,0 @@
1
- /*! rnx v0.1.339 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{a}from"./chunk-SS6FV24V.js";import"./chunk-WR3HAW34.js";import"./chunk-76MUKN6C.js";import"./chunk-AVK2JHMK.js";import"./chunk-M3SKRWFU.js";import"./chunk-CNFXAL6Z.js";import"./chunk-KAO5CST7.js";export{a as runReset};
@@ -1,4 +0,0 @@
1
- /*! rnx v0.1.339 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{c as a}from"./chunk-IV4EVQFA.js";import"./chunk-K3JRFYYJ.js";import"./chunk-XIEY6RUY.js";import"./chunk-GGDZMFEK.js";import"./chunk-AVK2JHMK.js";import"./chunk-M3SKRWFU.js";import"./chunk-CNFXAL6Z.js";import"./chunk-CIKEBWPF.js";import"./chunk-KAO5CST7.js";export{a as runRuntime};