rnxsim 0.1.448 → 0.1.450
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 +19 -0
- package/detox/expectations.ts +4 -11
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +1 -1
- package/dist-lib/bridge-contract-input.mjs +1 -1
- package/dist-lib/bridge-contract.cjs +1 -1
- package/dist-lib/bridge-contract.mjs +1 -1
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/cloud.cjs +1 -1
- package/dist-lib/cloud.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +3 -4
- 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 -1
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/jump-to-source-native.cjs +112 -0
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.mjs +1 -1
- package/dist-lib/metro-production-bundle.cjs +1 -1
- package/dist-lib/metro-production-bundle.mjs +1 -1
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/react-native-host-modules.cjs +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +7 -1
- package/dist-lib/vite.cjs +1 -1
- package/package.json +8 -1
- 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
|
package/detox/expectations.ts
CHANGED
|
@@ -39,20 +39,13 @@ function scrollOffsetOf(node: any): { x: number; y: number } {
|
|
|
39
39
|
return { x: node?.scrollOffsetX ?? 0, y: node?.scrollOffsetY ?? 0 }
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
// with the device surface when it builds `visibleFrame`, so that rect is the
|
|
45
|
-
// on-screen area and needs no further clipping here. intersecting it a second
|
|
46
|
-
// time against the interactive viewport (screen minus the home indicator band)
|
|
47
|
-
// used to fail views that were 84% and 93% on screen, because iOS draws the
|
|
48
|
-
// home indicator over app content rather than hiding it, and Detox's own
|
|
49
|
-
// visibility percentage on iOS is computed against the app window.
|
|
42
|
+
// the visible frame is the largest uncovered rectangle used for tapping.
|
|
43
|
+
// visibility includes every exposed region around overlays, not just that rectangle.
|
|
50
44
|
function visibleFraction(node: SootSimNodeInfo | null | undefined): number {
|
|
51
45
|
const totalArea = (node?.layout?.width ?? 0) * (node?.layout?.height ?? 0)
|
|
52
46
|
const frame = node?.visibleFrame
|
|
53
|
-
if (totalArea <= 0 ||
|
|
54
|
-
|
|
55
|
-
return visibleArea / totalArea
|
|
47
|
+
if (totalArea <= 0 || typeof frame?.area !== 'number') return 0
|
|
48
|
+
return frame.area / totalArea
|
|
56
49
|
}
|
|
57
50
|
|
|
58
51
|
export function isNodeVisible(node: SootSimNodeInfo | null | undefined): boolean {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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.450 | (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.450 | (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.450 | (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.450 | (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.450 | (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.450 | (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.
|
|
1
|
+
/*! rnx v0.1.450 | (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.
|
|
1
|
+
/*! rnx v0.1.450 | (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.450 | (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.450 | (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.450 | (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.450 | (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.450 | (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/cloud.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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/cloud.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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);
|
package/dist-lib/config.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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/detox/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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;
|
|
@@ -1181,9 +1181,8 @@ function scrollOffsetOf(node) {
|
|
|
1181
1181
|
function visibleFraction(node) {
|
|
1182
1182
|
const totalArea = (node?.layout?.width ?? 0) * (node?.layout?.height ?? 0);
|
|
1183
1183
|
const frame = node?.visibleFrame;
|
|
1184
|
-
if (totalArea <= 0 ||
|
|
1185
|
-
|
|
1186
|
-
return visibleArea / totalArea;
|
|
1184
|
+
if (totalArea <= 0 || typeof frame?.area !== "number") return 0;
|
|
1185
|
+
return frame.area / totalArea;
|
|
1187
1186
|
}
|
|
1188
1187
|
function isNodeVisible(node) {
|
|
1189
1188
|
return visibleFraction(node) >= DEFAULT_VISIBILITY_THRESHOLD;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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.450 | (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.
|
|
1
|
+
/*! rnx v0.1.450 | (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.450 | (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.450 | (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.
|
|
1
|
+
/*! rnx v0.1.450 | (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.450 | (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/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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.450 | (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.450 | (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.
|
|
1
|
+
/*! rnx v0.1.450 | (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.
|
|
1
|
+
/*! rnx v0.1.450 | (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.450 | (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/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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.450 | (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.450 | (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/render-mode.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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.450 | (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.450 | (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.
|
|
1
|
+
/*! rnx v0.1.450 | (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);
|
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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;
|
|
@@ -22291,6 +22291,12 @@ var init_stub_manifest = __esm({
|
|
|
22291
22291
|
runtimeTier: "core",
|
|
22292
22292
|
buildResolvers: ["vite", "dep-prebundle"]
|
|
22293
22293
|
},
|
|
22294
|
+
assetSourceResolver: {
|
|
22295
|
+
specifier: "react-native/Libraries/Image/AssetSourceResolver",
|
|
22296
|
+
stubFile: "rn-libraries/AssetSourceResolver.ts",
|
|
22297
|
+
runtimeTier: "core",
|
|
22298
|
+
buildResolvers: ["vite", "dep-prebundle"]
|
|
22299
|
+
},
|
|
22294
22300
|
resolveAssetSource: {
|
|
22295
22301
|
specifier: "react-native/Libraries/Image/resolveAssetSource",
|
|
22296
22302
|
stubFile: "rn-libraries/resolveAssetSource.ts",
|
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.450 | (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.
|
|
3
|
+
"version": "0.1.450",
|
|
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()
|