rnxsim 0.1.449 → 0.1.451

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 (55) hide show
  1. package/README.md +19 -0
  2. package/cli/commands/control.ts +9 -3
  3. package/dist-lib/agent-daemon-client.cjs +1 -1
  4. package/dist-lib/agent-events.cjs +1 -1
  5. package/dist-lib/agent-identity.cjs +1 -1
  6. package/dist-lib/agent-sessions.cjs +1 -1
  7. package/dist-lib/attached-projects.cjs +1 -1
  8. package/dist-lib/auth/shared-session.cjs +1 -1
  9. package/dist-lib/backend-origin.cjs +1 -1
  10. package/dist-lib/beta.cjs +1 -1
  11. package/dist-lib/beta.mjs +1 -1
  12. package/dist-lib/bridge-constants.cjs +1 -1
  13. package/dist-lib/bridge-contract-input.cjs +1 -1
  14. package/dist-lib/bridge-contract-input.mjs +1 -1
  15. package/dist-lib/bridge-contract.cjs +1 -1
  16. package/dist-lib/bridge-contract.mjs +1 -1
  17. package/dist-lib/capture-contract.cjs +1 -1
  18. package/dist-lib/capture-contract.mjs +1 -1
  19. package/dist-lib/cli-constants.cjs +1 -1
  20. package/dist-lib/cloud-contract.cjs +1 -1
  21. package/dist-lib/cloud-contract.mjs +1 -1
  22. package/dist-lib/cloud.cjs +1 -1
  23. package/dist-lib/cloud.mjs +1 -1
  24. package/dist-lib/config.cjs +1 -1
  25. package/dist-lib/detox/index.cjs +2 -1
  26. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  27. package/dist-lib/home-paths.cjs +1 -1
  28. package/dist-lib/host/bridge-host.cjs +7 -1
  29. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  30. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  31. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  32. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  33. package/dist-lib/host/websocket-proxy.cjs +1 -1
  34. package/dist-lib/index.cjs +1 -1
  35. package/dist-lib/jump-to-source-babel.cjs +1 -1
  36. package/dist-lib/jump-to-source-native.cjs +112 -0
  37. package/dist-lib/menu.cjs +1 -1
  38. package/dist-lib/menu.mjs +1 -1
  39. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  40. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  41. package/dist-lib/metro-production-bundle.cjs +1 -1
  42. package/dist-lib/metro-production-bundle.mjs +1 -1
  43. package/dist-lib/metro.cjs +1 -1
  44. package/dist-lib/profiles.cjs +1 -1
  45. package/dist-lib/public-brand.cjs +1 -1
  46. package/dist-lib/react-native-host-modules.cjs +1 -1
  47. package/dist-lib/react-native-host-modules.mjs +1 -1
  48. package/dist-lib/render-mode.cjs +1 -1
  49. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  50. package/dist-lib/sdk.cjs +1 -1
  51. package/dist-lib/sdk.mjs +1 -1
  52. package/dist-lib/skills.cjs +16 -5
  53. package/dist-lib/vite.cjs +1 -1
  54. package/package.json +8 -1
  55. package/src/jump-to-source-native.ts +102 -0
package/README.md CHANGED
@@ -310,6 +310,25 @@ outside `node_modules`, `dist`, and `build`. Keep it before
310
310
  Apps using `babel-preset-expo` omit the explicit Worklets plugin because the
311
311
  preset configures it automatically.
312
312
 
313
+ For One's Rolldown native bundler, use the native transform in `vite.config.ts`:
314
+
315
+ ```ts
316
+ import { jumpToSourceNativePlugin } from 'rnxsim/jump-to-source-native'
317
+
318
+ one({
319
+ native: {
320
+ bundler: 'vite',
321
+ bundlerOptions: {
322
+ plugins: [jumpToSourceNativePlugin({ include: [import.meta.dirname] })],
323
+ },
324
+ },
325
+ })
326
+ ```
327
+
328
+ This transform uses the same source props and filters without running Babel.
329
+ For One's `nativeTransformModules`, export
330
+ `createJumpToSourceNativeTransform(options)` from a module and pass its module id.
331
+
313
332
  ## CLI
314
333
 
315
334
  The CLI is the primary debugging surface for rnx — use it first for runtime
@@ -181,7 +181,11 @@ export async function ensureBridgeForOpen(
181
181
  ) {
182
182
  return preferredPort
183
183
  }
184
+ if (explicitPort && preferredWorld !== null) {
185
+ throw new Error(`rnx open: requested bridge port ${preferredPort} is not reachable.`)
186
+ }
184
187
  if (
188
+ !explicitPort &&
185
189
  lock &&
186
190
  isDaemonLockfileFresh(lock) &&
187
191
  (await canConnectToBridge(lock.bridgePort, 500))
@@ -206,15 +210,17 @@ export async function ensureBridgeForOpen(
206
210
  while (Date.now() < deadline) {
207
211
  const nextLock = readDaemonLockfile()
208
212
  assertExplicitBridgeLock(preferredPort, explicitPort, nextLock)
213
+ const selectedPort = explicitPort ? preferredPort : nextLock?.bridgePort
209
214
  if (
210
215
  nextLock &&
211
216
  isDaemonLockfileFresh(nextLock) &&
212
- (await canConnectToBridge(nextLock.bridgePort, 250))
217
+ selectedPort !== undefined &&
218
+ (await canConnectToBridge(selectedPort, 250))
213
219
  ) {
214
220
  console.error(
215
- ` Started a local bridge on port ${nextLock.bridgePort}. Run \`rnx daemon install\` to keep it ready between commands.`,
221
+ ` Started a local bridge on port ${selectedPort}. Run \`rnx daemon install\` to keep it ready between commands.`,
216
222
  )
217
- return nextLock.bridgePort
223
+ return selectedPort
218
224
  }
219
225
  if (childExit) {
220
226
  throw new Error(`rnx bridge exited before becoming ready (exit ${childExit})`)
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_MAX_MS = 5e3;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_DEFAULT_MS = 500;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/capture-contract.ts
4
4
  var RNX_SCREEN_CAPTURE_VERSION = 1;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/cloud-contract.ts
4
4
  var RNX_CLOUD_MAX_ARTIFACT_BYTES = 20 * 1024 * 1024;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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);
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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;
@@ -580,6 +580,7 @@ function gpuChromeArgs(platform = process.platform) {
580
580
  }
581
581
  var PLAYWRIGHT_DISABLED_FEATURES = [
582
582
  "AvoidUnnecessaryBeforeUnloadCheckSync",
583
+ "BlockOriginHeaderModificationOnRedirect",
583
584
  "BoundaryEventDispatchTracksNodeRemoval",
584
585
  "DestroyProfileOnBrowserClose",
585
586
  "DialMediaRouteProvider",
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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;
@@ -2710,6 +2710,12 @@ var init_stub_manifest = __esm({
2710
2710
  runtimeTier: "core",
2711
2711
  buildResolvers: ["vite", "dep-prebundle"]
2712
2712
  },
2713
+ assetSourceResolver: {
2714
+ specifier: "react-native/Libraries/Image/AssetSourceResolver",
2715
+ stubFile: "rn-libraries/AssetSourceResolver.ts",
2716
+ runtimeTier: "core",
2717
+ buildResolvers: ["vite", "dep-prebundle"]
2718
+ },
2713
2719
  resolveAssetSource: {
2714
2720
  specifier: "react-native/Libraries/Image/resolveAssetSource",
2715
2721
  stubFile: "rn-libraries/resolveAssetSource.ts",
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/host/fetch-proxy-overrides.ts
4
4
  var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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;
@@ -0,0 +1,112 @@
1
+ /*! rnx v0.1.451 | (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 __create = Object.create;
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
+ mod
29
+ ));
30
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
31
+
32
+ // src/jump-to-source-native.ts
33
+ var jump_to_source_native_exports = {};
34
+ __export(jump_to_source_native_exports, {
35
+ createJumpToSourceNativeTransform: () => createJumpToSourceNativeTransform,
36
+ default: () => jump_to_source_native_default,
37
+ jumpToSourceNativePlugin: () => jumpToSourceNativePlugin,
38
+ stampJsxSourceLocations: () => stampJsxSourceLocations
39
+ });
40
+ module.exports = __toCommonJS(jump_to_source_native_exports);
41
+ var import_magic_string = __toESM(require("magic-string"), 1);
42
+ var import_oxc_parser = require("oxc-parser");
43
+ function matchesPath(path, matcher) {
44
+ return typeof matcher === "string" ? path.includes(matcher) : matcher.test(path);
45
+ }
46
+ function stampJsxSourceLocations(code, filename, options = {}) {
47
+ if (options.enabled === false || !filename || !code.includes("<")) return null;
48
+ const source = filename.split("?")[0].replace(/\\/g, "/");
49
+ if (source.includes("/node_modules/") || source.includes("/dist/") || source.includes("/build/"))
50
+ return null;
51
+ if (options.exclude?.some((matcher) => matchesPath(source, matcher))) return null;
52
+ if (options.include?.length && !options.include.some((matcher) => matchesPath(source, matcher)))
53
+ return null;
54
+ const { program, errors } = (0, import_oxc_parser.parseSync)(source, code, {
55
+ lang: source.endsWith(".tsx") ? "tsx" : source.endsWith(".ts") ? "ts" : "jsx"
56
+ });
57
+ if (errors.length) return null;
58
+ const attrName = options.attrName || "srcloc";
59
+ const lineStarts = [0];
60
+ for (let i = 0; i < code.length; i++) {
61
+ if (code.charCodeAt(i) === 10) lineStarts.push(i + 1);
62
+ }
63
+ const magic = new import_magic_string.default(code);
64
+ let stamped = false;
65
+ new import_oxc_parser.Visitor({
66
+ JSXOpeningElement(node) {
67
+ const name = node.name;
68
+ if (name.type === "JSXNamespacedName") return;
69
+ if (name.type === "JSXIdentifier" && name.name === "Fragment") return;
70
+ if (name.type === "JSXMemberExpression" && name.property.name === "Fragment") return;
71
+ if (node.attributes.some(
72
+ (attr) => attr.type === "JSXAttribute" && attr.name.type === "JSXIdentifier" && attr.name.name === attrName
73
+ ))
74
+ return;
75
+ let lo = 0;
76
+ let hi = lineStarts.length - 1;
77
+ while (lo < hi) {
78
+ const mid = lo + hi + 1 >> 1;
79
+ if (lineStarts[mid] <= node.start) lo = mid;
80
+ else hi = mid - 1;
81
+ }
82
+ const location = `${source}:${lo + 1}:${node.start - lineStarts[lo] + 1}`;
83
+ magic.appendLeft(
84
+ node.end - (node.selfClosing ? 2 : 1),
85
+ ` ${attrName}={${JSON.stringify(location)}}`
86
+ );
87
+ stamped = true;
88
+ }
89
+ }).visit(program);
90
+ return stamped ? magic.toString() : null;
91
+ }
92
+ function createJumpToSourceNativeTransform(options = {}) {
93
+ return function jumpToSourceNativeTransform(code, ctx) {
94
+ return stampJsxSourceLocations(code, ctx.filename, options);
95
+ };
96
+ }
97
+ function jumpToSourceNativePlugin(options = {}) {
98
+ return {
99
+ name: "sootsim-jump-to-source",
100
+ transform(code, id) {
101
+ const stamped = stampJsxSourceLocations(code, id, options);
102
+ return stamped == null ? null : { code: stamped, map: null };
103
+ }
104
+ };
105
+ }
106
+ var jump_to_source_native_default = createJumpToSourceNativeTransform();
107
+ // Annotate the CommonJS export names for ESM import in node:
108
+ 0 && (module.exports = {
109
+ createJumpToSourceNativeTransform,
110
+ jumpToSourceNativePlugin,
111
+ stampJsxSourceLocations
112
+ });
package/dist-lib/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/public-brand.ts
4
4
  var name = "rnx";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-fingerprint-registry.ts
4
4
  var RNX_METRO_FINGERPRINT_SCHEMA_VERSION = 2;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-production-bundle.ts
4
4
  var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/react-native-host-modules.ts
4
4
  var REACT_NATIVE_PASSTHROUGH_SPECIFIERS = [
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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);
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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;
@@ -525,6 +525,7 @@ var init_reap_browser = __esm({
525
525
  signalShutdownClaimed = false;
526
526
  PLAYWRIGHT_DISABLED_FEATURES = [
527
527
  "AvoidUnnecessaryBeforeUnloadCheckSync",
528
+ "BlockOriginHeaderModificationOnRedirect",
528
529
  "BoundaryEventDispatchTracksNodeRemoval",
529
530
  "DestroyProfileOnBrowserClose",
530
531
  "DialMediaRouteProvider",
@@ -22291,6 +22292,12 @@ var init_stub_manifest = __esm({
22291
22292
  runtimeTier: "core",
22292
22293
  buildResolvers: ["vite", "dep-prebundle"]
22293
22294
  },
22295
+ assetSourceResolver: {
22296
+ specifier: "react-native/Libraries/Image/AssetSourceResolver",
22297
+ stubFile: "rn-libraries/AssetSourceResolver.ts",
22298
+ runtimeTier: "core",
22299
+ buildResolvers: ["vite", "dep-prebundle"]
22300
+ },
22294
22301
  resolveAssetSource: {
22295
22302
  specifier: "react-native/Libraries/Image/resolveAssetSource",
22296
22303
  stubFile: "rn-libraries/resolveAssetSource.ts",
@@ -29442,7 +29449,10 @@ async function ensureBridgeForOpen(preferredPort, explicitPort = false) {
29442
29449
  if ((explicitPort || preferredWorld !== null) && await canConnectToBridge(preferredPort, 250)) {
29443
29450
  return preferredPort;
29444
29451
  }
29445
- if (lock && isDaemonLockfileFresh(lock) && await canConnectToBridge(lock.bridgePort, 500)) {
29452
+ if (explicitPort && preferredWorld !== null) {
29453
+ throw new Error(`rnx open: requested bridge port ${preferredPort} is not reachable.`);
29454
+ }
29455
+ if (!explicitPort && lock && isDaemonLockfileFresh(lock) && await canConnectToBridge(lock.bridgePort, 500)) {
29446
29456
  return lock.bridgePort;
29447
29457
  }
29448
29458
  if (lock && isDaemonLockfileFresh(lock)) {
@@ -29461,11 +29471,12 @@ async function ensureBridgeForOpen(preferredPort, explicitPort = false) {
29461
29471
  while (Date.now() < deadline) {
29462
29472
  const nextLock = readDaemonLockfile();
29463
29473
  assertExplicitBridgeLock(preferredPort, explicitPort, nextLock);
29464
- if (nextLock && isDaemonLockfileFresh(nextLock) && await canConnectToBridge(nextLock.bridgePort, 250)) {
29474
+ const selectedPort = explicitPort ? preferredPort : nextLock?.bridgePort;
29475
+ if (nextLock && isDaemonLockfileFresh(nextLock) && selectedPort !== void 0 && await canConnectToBridge(selectedPort, 250)) {
29465
29476
  console.error(
29466
- ` Started a local bridge on port ${nextLock.bridgePort}. Run \`rnx daemon install\` to keep it ready between commands.`
29477
+ ` Started a local bridge on port ${selectedPort}. Run \`rnx daemon install\` to keep it ready between commands.`
29467
29478
  );
29468
- return nextLock.bridgePort;
29479
+ return selectedPort;
29469
29480
  }
29470
29481
  if (childExit) {
29471
29482
  throw new Error(`rnx bridge exited before becoming ready (exit ${childExit})`);
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.449 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.451 | (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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rnxsim",
3
- "version": "0.1.449",
3
+ "version": "0.1.451",
4
4
  "description": "Vite and Metro plugins, testing drivers, and SDK exports for rnx.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -63,6 +63,11 @@
63
63
  "source": "./src/jump-to-source-babel.ts",
64
64
  "default": "./dist-lib/jump-to-source-babel.cjs"
65
65
  },
66
+ "./jump-to-source-native": {
67
+ "types": "./src/jump-to-source-native.ts",
68
+ "source": "./src/jump-to-source-native.ts",
69
+ "default": "./dist-lib/jump-to-source-native.cjs"
70
+ },
66
71
  "./menu": {
67
72
  "source": "./src/menu.ts",
68
73
  "bun": "./src/menu.ts",
@@ -239,6 +244,8 @@
239
244
  "dependencies": {
240
245
  "@expo/plist": "^0.5.4",
241
246
  "jiti": "2.7.0",
247
+ "magic-string": "^0.30.21",
248
+ "oxc-parser": "^0.112.0",
242
249
  "playwright-core": "1.61.0",
243
250
  "sucrase": "3.35.1",
244
251
  "terser": "^5.49.0",
@@ -0,0 +1,102 @@
1
+ import MagicString from 'magic-string'
2
+ import { parseSync, Visitor } from 'oxc-parser'
3
+ import type { SootsimJumpToSourceBabelOptions } from './jump-to-source-babel'
4
+
5
+ export type JumpToSourceNativeOptions = SootsimJumpToSourceBabelOptions
6
+
7
+ function matchesPath(path: string, matcher: string | RegExp): boolean {
8
+ return typeof matcher === 'string' ? path.includes(matcher) : matcher.test(path)
9
+ }
10
+
11
+ // stamp the same one-based source locations as the babel plugin before native
12
+ // jsx compilation, without running babel in the native bundle pipeline.
13
+ export function stampJsxSourceLocations(
14
+ code: string,
15
+ filename: string,
16
+ options: JumpToSourceNativeOptions = {},
17
+ ): string | null {
18
+ if (options.enabled === false || !filename || !code.includes('<')) return null
19
+ const source = filename.split('?')[0].replace(/\\/g, '/')
20
+ if (
21
+ source.includes('/node_modules/') ||
22
+ source.includes('/dist/') ||
23
+ source.includes('/build/')
24
+ )
25
+ return null
26
+ if (options.exclude?.some((matcher) => matchesPath(source, matcher))) return null
27
+ if (
28
+ options.include?.length &&
29
+ !options.include.some((matcher) => matchesPath(source, matcher))
30
+ )
31
+ return null
32
+
33
+ const { program, errors } = parseSync(source, code, {
34
+ lang: source.endsWith('.tsx') ? 'tsx' : source.endsWith('.ts') ? 'ts' : 'jsx',
35
+ })
36
+ if (errors.length) return null
37
+
38
+ const attrName = options.attrName || 'srcloc'
39
+ const lineStarts = [0]
40
+ for (let i = 0; i < code.length; i++) {
41
+ if (code.charCodeAt(i) === 10) lineStarts.push(i + 1)
42
+ }
43
+ const magic = new MagicString(code)
44
+ let stamped = false
45
+ new Visitor({
46
+ JSXOpeningElement(node) {
47
+ const name = node.name
48
+ if (name.type === 'JSXNamespacedName') return
49
+ if (name.type === 'JSXIdentifier' && name.name === 'Fragment') return
50
+ if (name.type === 'JSXMemberExpression' && name.property.name === 'Fragment') return
51
+ if (
52
+ node.attributes.some(
53
+ (attr) =>
54
+ attr.type === 'JSXAttribute' &&
55
+ attr.name.type === 'JSXIdentifier' &&
56
+ attr.name.name === attrName,
57
+ )
58
+ )
59
+ return
60
+
61
+ // binary search keeps location lookup logarithmic for large source files.
62
+ let lo = 0
63
+ let hi = lineStarts.length - 1
64
+ while (lo < hi) {
65
+ const mid = (lo + hi + 1) >> 1
66
+ if (lineStarts[mid] <= node.start) lo = mid
67
+ else hi = mid - 1
68
+ }
69
+ const location = `${source}:${lo + 1}:${node.start - lineStarts[lo] + 1}`
70
+ // append after spreads, matching babel's precedence. a jsx expression
71
+ // preserves path characters that a quoted jsx attribute would decode.
72
+ magic.appendLeft(
73
+ node.end - (node.selfClosing ? 2 : 1),
74
+ ` ${attrName}={${JSON.stringify(location)}}`,
75
+ )
76
+ stamped = true
77
+ },
78
+ }).visit(program)
79
+ return stamped ? magic.toString() : null
80
+ }
81
+
82
+ // metro's nativeTransformModules accepts module ids; consumers can export an
83
+ // instance of this transform from a module to supply their include filters.
84
+ export function createJumpToSourceNativeTransform(
85
+ options: JumpToSourceNativeOptions = {},
86
+ ) {
87
+ return function jumpToSourceNativeTransform(code: string, ctx: { filename: string }) {
88
+ return stampJsxSourceLocations(code, ctx.filename, options)
89
+ }
90
+ }
91
+
92
+ export function jumpToSourceNativePlugin(options: JumpToSourceNativeOptions = {}) {
93
+ return {
94
+ name: 'sootsim-jump-to-source',
95
+ transform(code: string, id: string) {
96
+ const stamped = stampJsxSourceLocations(code, id, options)
97
+ return stamped == null ? null : { code: stamped, map: null }
98
+ },
99
+ }
100
+ }
101
+
102
+ export default createJumpToSourceNativeTransform()