react-native-ai-debugger 2.2.0 → 2.4.0
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 +4 -3
- package/build/__tests__/unit/overlayGuard.test.d.ts +2 -0
- package/build/__tests__/unit/overlayGuard.test.d.ts.map +1 -0
- package/build/__tests__/unit/overlayGuard.test.js +140 -0
- package/build/__tests__/unit/overlayGuard.test.js.map +1 -0
- package/build/__tests__/unit/screenSpace.test.d.ts +2 -0
- package/build/__tests__/unit/screenSpace.test.d.ts.map +1 -0
- package/build/__tests__/unit/screenSpace.test.js +91 -0
- package/build/__tests__/unit/screenSpace.test.js.map +1 -0
- package/build/__tests__/unit/tap.test.js +2 -2
- package/build/__tests__/unit/tap.test.js.map +1 -1
- package/build/__tests__/unit/visibility.test.js +21 -0
- package/build/__tests__/unit/visibility.test.js.map +1 -1
- package/build/core/guides.d.ts.map +1 -1
- package/build/core/guides.js +18 -4
- package/build/core/guides.js.map +1 -1
- package/build/core/index.d.ts +1 -1
- package/build/core/index.d.ts.map +1 -1
- package/build/core/index.js +1 -1
- package/build/core/index.js.map +1 -1
- package/build/core/injected/visibility.d.ts +14 -1
- package/build/core/injected/visibility.d.ts.map +1 -1
- package/build/core/injected/visibility.js +28 -4
- package/build/core/injected/visibility.js.map +1 -1
- package/build/core/injectedFilters.d.ts +10 -2
- package/build/core/injectedFilters.d.ts.map +1 -1
- package/build/core/injectedFilters.js +10 -2
- package/build/core/injectedFilters.js.map +1 -1
- package/build/core/inspector.d.ts +6 -0
- package/build/core/inspector.d.ts.map +1 -1
- package/build/core/inspector.js +227 -40
- package/build/core/inspector.js.map +1 -1
- package/build/core/ios.d.ts +16 -0
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +48 -4
- package/build/core/ios.js.map +1 -1
- package/build/core/pressables.d.ts +0 -32
- package/build/core/pressables.d.ts.map +1 -1
- package/build/core/pressables.js +5 -1061
- package/build/core/pressables.js.map +1 -1
- package/build/core/screenLayout.d.ts +3 -0
- package/build/core/screenLayout.d.ts.map +1 -1
- package/build/core/screenLayout.js +55 -1
- package/build/core/screenLayout.js.map +1 -1
- package/build/core/screenSpace.d.ts +170 -0
- package/build/core/screenSpace.d.ts.map +1 -0
- package/build/core/screenSpace.js +221 -0
- package/build/core/screenSpace.js.map +1 -0
- package/build/core/screenSpaceDevice.d.ts +15 -0
- package/build/core/screenSpaceDevice.d.ts.map +1 -0
- package/build/core/screenSpaceDevice.js +64 -0
- package/build/core/screenSpaceDevice.js.map +1 -0
- package/build/core/screenState.d.ts +2 -1
- package/build/core/screenState.d.ts.map +1 -1
- package/build/core/screenState.js +315 -48
- package/build/core/screenState.js.map +1 -1
- package/build/pro/overlayGuard.d.ts +65 -0
- package/build/pro/overlayGuard.d.ts.map +1 -0
- package/build/pro/overlayGuard.js +166 -0
- package/build/pro/overlayGuard.js.map +1 -0
- package/build/pro/tap.d.ts.map +1 -1
- package/build/pro/tap.js +104 -25
- package/build/pro/tap.js.map +1 -1
- package/build/tools/componentTools.d.ts.map +1 -1
- package/build/tools/componentTools.js +82 -192
- package/build/tools/componentTools.js.map +1 -1
- package/build/tools/screenshotTools.d.ts.map +1 -1
- package/build/tools/screenshotTools.js +37 -72
- package/build/tools/screenshotTools.js.map +1 -1
- package/package.json +1 -1
- package/tools.json +1 -5
package/build/core/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export type { PassiveConnectionStatus, LogPipelineResult, } from "./connection.j
|
|
|
12
12
|
export { awaitAppDetection } from "./appDetection.js";
|
|
13
13
|
export { hasMetro, detectNativeDevices, buildMetroMissingHint, metroMissingHintIfAbsent, } from "./nativeOnlyHints.js";
|
|
14
14
|
export type { NativeDeviceAvailability, MetroMissingHintOptions } from "./nativeOnlyHints.js";
|
|
15
|
-
export { executeInApp, listDebugGlobals, inspectGlobal, reloadApp, getComponentTree, getScreenLayout, formatScreenLayoutTree,
|
|
15
|
+
export { executeInApp, listDebugGlobals, inspectGlobal, reloadApp, getComponentTree, getScreenLayout, formatScreenLayoutTree, getScreenState, enrichScreenshotWithLayout, inspectComponent, findComponents, pressElement, inspectAtPoint, isInspectorActive, harvestStacksAtPoint, enrichWithSource, } from "./executor.js";
|
|
16
16
|
export { isAdbAvailable, listAndroidDevices, getDefaultAndroidDevice, androidScreenshot, androidInstallApp, androidLaunchApp, androidListPackages, ANDROID_KEY_EVENTS, androidTap, androidLongPress, androidSwipe, androidInputText, androidKeyEvent, androidGetScreenSize, androidGetDensity, androidGetStatusBarHeight, androidDescribeAll, androidDescribePoint, androidTapElement, androidGetUITree, androidFindElement, androidWaitForElement, } from "./android.js";
|
|
17
17
|
export type { AndroidAccessibilityElement, AndroidDescribeResult, AndroidUIElement, FindElementResult, WaitForElementResult, FindElementOptions, } from "./android.js";
|
|
18
18
|
export { isSimctlAvailable, listIOSSimulators, getBootedSimulatorUdid, findSimulatorByName, getActiveOrBootedSimulatorUdid, iosScreenshot, iosInstallApp, iosLaunchApp, iosOpenUrl, iosTerminateApp, iosBootSimulator, isIdbAvailable, isAxeAvailable, isUiDriverAvailable, getUiDriverInstallHint, iosTap, iosTapElement, iosSwipe, iosInputText, iosButton, iosKeyEvent, iosKeySequence, iosDescribeAll, iosDescribePoint, detectIOSSystemOverlay, formatIOSSystemOverlayWarning, IOS_BUTTON_TYPES, iosGetUITree, iosFindElement, iosWaitForElement, getDevicePixelRatio, getIOSSafeAreaTop, } from "./ios.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EAEd,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EAEnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,SAAS,EACT,cAAc,EACd,UAAU,EACV,OAAO,EACP,UAAU,EACV,aAAa,GACd,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG/E,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,EAC1B,4BAA4B,EAC5B,6BAA6B,EAC7B,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAG9F,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,SAAS,EAET,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
package/build/core/index.js
CHANGED
|
@@ -24,7 +24,7 @@ export { hasMetro, detectNativeDevices, buildMetroMissingHint, metroMissingHintI
|
|
|
24
24
|
// Executor
|
|
25
25
|
export { executeInApp, listDebugGlobals, inspectGlobal, reloadApp,
|
|
26
26
|
// React Component Inspection
|
|
27
|
-
getComponentTree, getScreenLayout, formatScreenLayoutTree,
|
|
27
|
+
getComponentTree, getScreenLayout, formatScreenLayoutTree, getScreenState, enrichScreenshotWithLayout, inspectComponent, findComponents, pressElement,
|
|
28
28
|
// Coordinate-based inspection
|
|
29
29
|
inspectAtPoint, isInspectorActive, harvestStacksAtPoint, enrichWithSource, } from "./executor.js";
|
|
30
30
|
// Android (ADB)
|
package/build/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,8BAA8B;AAC9B,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,cAAc;AACd,0BAA0B;AAC1B,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB;AACnB,+CAA+C;AAC/C,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,QAAQ;AACR,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO;AACP,OAAO,EACL,SAAS,EACT,cAAc,EACd,UAAU,EACV,OAAO,EACP,UAAU,EACV,aAAa,GACd,MAAM,WAAW,CAAC;AAEnB,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,UAAU;AACV,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,QAAQ;AACR,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAC;AAIpB,aAAa;AACb,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,EAC1B,4BAA4B,EAC5B,6BAA6B,EAC7B,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,kGAAkG;AAClG,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAG9B,WAAW;AACX,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,SAAS;AACT,6BAA6B;AAC7B,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,20 @@
|
|
|
12
12
|
* props (aria-hidden, display:none, etc.).
|
|
13
13
|
*/
|
|
14
14
|
export declare function isHiddenNavigationScene(name: string | null, props: any): boolean;
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* A single style object that makes its subtree invisible.
|
|
17
|
+
*
|
|
18
|
+
* `opacity: 0` matters because a closed react-navigation drawer leaves its scrim
|
|
19
|
+
* mounted full-screen: it surfaced as a tappable `<Overlay />` covering the middle of
|
|
20
|
+
* every screen. Only a literal numeric 0 counts — an Animated opacity is a node object,
|
|
21
|
+
* and treating that as 0 would prune whole subtrees mid-animation.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isHiddenStyle(s: any): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* JS source defining the visibility helpers for injection into an IIFE expression.
|
|
26
|
+
* `isHiddenStyle` must be emitted too — `isHiddenNavigationScene` calls it, and a missing
|
|
27
|
+
* definition would throw inside Hermes rather than fail here.
|
|
28
|
+
*/
|
|
16
29
|
export declare const VISIBILITY_HELPERS_JS: string;
|
|
17
30
|
/** Native-presented sheets whose measureInWindow geometry is untrustworthy. `openMarkers`
|
|
18
31
|
* are host component names that appear only while the sheet is actually presented. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visibility.d.ts","sourceRoot":"","sources":["../../../src/core/injected/visibility.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAmBhF;AAED,
|
|
1
|
+
{"version":3,"file":"visibility.d.ts","sourceRoot":"","sources":["../../../src/core/injected/visibility.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAmBhF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAK7C;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAGtB,CAAC;AAEb;uFACuF;AACvF,eAAO,MAAM,qBAAqB,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,EAE9F,CAAC;AAEF,6FAA6F;AAC7F,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQpG;AAED,2FAA2F;AAC3F,eAAO,MAAM,0BAA0B,QAAgE,CAAC"}
|
|
@@ -34,18 +34,42 @@ export function isHiddenNavigationScene(name, props) {
|
|
|
34
34
|
if (props.importantForAccessibility === "no-hide-descendants")
|
|
35
35
|
return true;
|
|
36
36
|
var s = props.style;
|
|
37
|
-
if (s && !Array.isArray(s) && s
|
|
37
|
+
if (s && !Array.isArray(s) && isHiddenStyle(s))
|
|
38
38
|
return true;
|
|
39
39
|
if (Array.isArray(s)) {
|
|
40
40
|
for (var i = 0; i < s.length; i++) {
|
|
41
|
-
if (s[i] && s[i]
|
|
41
|
+
if (s[i] && isHiddenStyle(s[i]))
|
|
42
42
|
return true;
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
return false;
|
|
46
46
|
}
|
|
47
|
-
/**
|
|
48
|
-
|
|
47
|
+
/**
|
|
48
|
+
* A single style object that makes its subtree invisible.
|
|
49
|
+
*
|
|
50
|
+
* `opacity: 0` matters because a closed react-navigation drawer leaves its scrim
|
|
51
|
+
* mounted full-screen: it surfaced as a tappable `<Overlay />` covering the middle of
|
|
52
|
+
* every screen. Only a literal numeric 0 counts — an Animated opacity is a node object,
|
|
53
|
+
* and treating that as 0 would prune whole subtrees mid-animation.
|
|
54
|
+
*/
|
|
55
|
+
export function isHiddenStyle(s) {
|
|
56
|
+
if (!s)
|
|
57
|
+
return false;
|
|
58
|
+
if (s.display === "none")
|
|
59
|
+
return true;
|
|
60
|
+
if (typeof s.opacity === "number" && s.opacity === 0)
|
|
61
|
+
return true;
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* JS source defining the visibility helpers for injection into an IIFE expression.
|
|
66
|
+
* `isHiddenStyle` must be emitted too — `isHiddenNavigationScene` calls it, and a missing
|
|
67
|
+
* definition would throw inside Hermes rather than fail here.
|
|
68
|
+
*/
|
|
69
|
+
export const VISIBILITY_HELPERS_JS = [
|
|
70
|
+
`var isHiddenStyle = ${isHiddenStyle.toString()};`,
|
|
71
|
+
`var isHiddenNavigationScene = ${isHiddenNavigationScene.toString()};`
|
|
72
|
+
].join("\n");
|
|
49
73
|
/** Native-presented sheets whose measureInWindow geometry is untrustworthy. `openMarkers`
|
|
50
74
|
* are host component names that appear only while the sheet is actually presented. */
|
|
51
75
|
export const NATIVE_SHEET_REGISTRY = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visibility.js","sourceRoot":"","sources":["../../../src/core/injected/visibility.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,uFAAuF;AACvF,4EAA4E;AAE5E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAmB,EAAE,KAAU;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAC7E,IAAI,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACjE,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACtE,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IACxC,CAAC;IACD,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,KAAK,CAAC,2BAA2B,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5D,IAAI,KAAK,CAAC,yBAAyB,KAAK,qBAAqB;QAAE,OAAO,IAAI,CAAC;IAC3E,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"visibility.js","sourceRoot":"","sources":["../../../src/core/injected/visibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,14 @@
|
|
|
18
18
|
*/
|
|
19
19
|
/** Internal/framework wrappers that must never be reported as an element's name. */
|
|
20
20
|
export declare const RN_PRIMITIVES_SRC = "/^(Animated\\(.*|withAnimated.*|AnimatedComponent.*|ForwardRef.*|memo\\(.*|Context\\.Consumer|Context\\.Provider|ScrollViewContext(Base)?|VirtualizedListContext(Resetter)?|TextInputContext|KeyboardAvoidingViewContext|RCT.*|RNS.*|RNC.*|ViewManagerAdapter_.*|VirtualizedList.*|CellRenderer.*|FrameSizeProvider.*|MaybeScreenContainer|MaybeScreen|Navigation.*|Screen$|ScreenStack|ScreenContainer|ScreenContentWrapper|SceneView|DelayedFreeze|Freeze|Suspender|DebugContainer|StaticContainer|SafeAreaProvider.*|SafeAreaFrameContext|SafeAreaInsetsContext|ExpoRoot|ExpoRootComponent|GestureHandler.*|NativeViewGestureHandler|GestureDetector|PanGestureHandler|Reanimated.*|BottomTabNavigator|TabLayout|RouteNode|Route$|KeyboardProvider|PortalProviderComponent|BottomSheetModalProviderWrapper|ThemeContext|ThemeProvider|TextAncestorContext|PressabilityDebugView|TouchableHighlightImpl|StatusBarOverlay|BottomSheetHostingContainerComponent|BottomSheetGestureHandlersProvider|BottomSheetBackdropContainerComponent|BottomSheetContainerComponent|BottomSheetDraggableViewComponent|BottomSheetHandleContainerComponent|BottomSheetBackgroundContainerComponent|DebuggingOverlay|InspectorDeferred|Inspector|InspectorOverlay|InspectorPanel|StyleInspector|BoxInspector|BoxContainer|ElementBox|BorderBox|InspectorPanelButton)$/";
|
|
21
|
-
/** Names too generic to identify anything — keep climbing past these.
|
|
22
|
-
|
|
21
|
+
/** Names too generic to identify anything — keep climbing past these.
|
|
22
|
+
*
|
|
23
|
+
* Scroll/list containers belong here: they are layout, not identity. Without them a
|
|
24
|
+
* climb out of a plain `<Pressable>` inside a `<ScrollView>` stopped on the scroll
|
|
25
|
+
* container, so every button on such a screen was reported as `<ScrollView />`
|
|
26
|
+
* ("Submit", "Cancel", "Отправить" all came back with that tag). Callers that find
|
|
27
|
+
* nothing meaningful above a pressable must fall back to naming the pressable itself
|
|
28
|
+
* rather than climbing further — the next non-generic ancestor is typically the whole
|
|
29
|
+
* screen component, which is a worse answer than "Pressable". */
|
|
30
|
+
export declare const GENERIC_COMPONENT_SRC = "/^(View|TouchableOpacity|TouchableHighlight|TouchableWithoutFeedback|Pressable|TouchableNativeFeedback|Text|RCTView|RCTText|ScrollView|FlatList|SectionList|VirtualizedList|KeyboardAvoidingView|SafeAreaView|Unknown)$/";
|
|
23
31
|
//# sourceMappingURL=injectedFilters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectedFilters.d.ts","sourceRoot":"","sources":["../../src/core/injectedFilters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,4xCAC+vC,CAAC;AAE9xC
|
|
1
|
+
{"version":3,"file":"injectedFilters.d.ts","sourceRoot":"","sources":["../../src/core/injectedFilters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,4xCAC+vC,CAAC;AAE9xC;;;;;;;;kEAQkE;AAClE,eAAO,MAAM,qBAAqB,6NAC4L,CAAC"}
|
|
@@ -18,6 +18,14 @@
|
|
|
18
18
|
*/
|
|
19
19
|
/** Internal/framework wrappers that must never be reported as an element's name. */
|
|
20
20
|
export const RN_PRIMITIVES_SRC = "/^(Animated\\(.*|withAnimated.*|AnimatedComponent.*|ForwardRef.*|memo\\(.*|Context\\.Consumer|Context\\.Provider|ScrollViewContext(Base)?|VirtualizedListContext(Resetter)?|TextInputContext|KeyboardAvoidingViewContext|RCT.*|RNS.*|RNC.*|ViewManagerAdapter_.*|VirtualizedList.*|CellRenderer.*|FrameSizeProvider.*|MaybeScreenContainer|MaybeScreen|Navigation.*|Screen$|ScreenStack|ScreenContainer|ScreenContentWrapper|SceneView|DelayedFreeze|Freeze|Suspender|DebugContainer|StaticContainer|SafeAreaProvider.*|SafeAreaFrameContext|SafeAreaInsetsContext|ExpoRoot|ExpoRootComponent|GestureHandler.*|NativeViewGestureHandler|GestureDetector|PanGestureHandler|Reanimated.*|BottomTabNavigator|TabLayout|RouteNode|Route$|KeyboardProvider|PortalProviderComponent|BottomSheetModalProviderWrapper|ThemeContext|ThemeProvider|TextAncestorContext|PressabilityDebugView|TouchableHighlightImpl|StatusBarOverlay|BottomSheetHostingContainerComponent|BottomSheetGestureHandlersProvider|BottomSheetBackdropContainerComponent|BottomSheetContainerComponent|BottomSheetDraggableViewComponent|BottomSheetHandleContainerComponent|BottomSheetBackgroundContainerComponent|DebuggingOverlay|InspectorDeferred|Inspector|InspectorOverlay|InspectorPanel|StyleInspector|BoxInspector|BoxContainer|ElementBox|BorderBox|InspectorPanelButton)$/";
|
|
21
|
-
/** Names too generic to identify anything — keep climbing past these.
|
|
22
|
-
|
|
21
|
+
/** Names too generic to identify anything — keep climbing past these.
|
|
22
|
+
*
|
|
23
|
+
* Scroll/list containers belong here: they are layout, not identity. Without them a
|
|
24
|
+
* climb out of a plain `<Pressable>` inside a `<ScrollView>` stopped on the scroll
|
|
25
|
+
* container, so every button on such a screen was reported as `<ScrollView />`
|
|
26
|
+
* ("Submit", "Cancel", "Отправить" all came back with that tag). Callers that find
|
|
27
|
+
* nothing meaningful above a pressable must fall back to naming the pressable itself
|
|
28
|
+
* rather than climbing further — the next non-generic ancestor is typically the whole
|
|
29
|
+
* screen component, which is a worse answer than "Pressable". */
|
|
30
|
+
export const GENERIC_COMPONENT_SRC = "/^(View|TouchableOpacity|TouchableHighlight|TouchableWithoutFeedback|Pressable|TouchableNativeFeedback|Text|RCTView|RCTText|ScrollView|FlatList|SectionList|VirtualizedList|KeyboardAvoidingView|SafeAreaView|Unknown)$/";
|
|
23
31
|
//# sourceMappingURL=injectedFilters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectedFilters.js","sourceRoot":"","sources":["../../src/core/injectedFilters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAC1B,yxCAAyxC,CAAC;AAE9xC
|
|
1
|
+
{"version":3,"file":"injectedFilters.js","sourceRoot":"","sources":["../../src/core/injectedFilters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAC1B,yxCAAyxC,CAAC;AAE9xC;;;;;;;;kEAQkE;AAClE,MAAM,CAAC,MAAM,qBAAqB,GAC9B,0NAA0N,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ExecutionResult } from "./types.js";
|
|
2
2
|
import type { RawComponentStack } from "./componentSource.js";
|
|
3
|
+
import { type ScreenSpaceMetrics } from "./screenSpace.js";
|
|
3
4
|
/**
|
|
4
5
|
* Check if the Element Inspector overlay is currently active.
|
|
5
6
|
*/
|
|
@@ -25,6 +26,11 @@ export declare function inspectAtPoint(x: number, y: number, options?: {
|
|
|
25
26
|
includeProps?: boolean;
|
|
26
27
|
includeFrame?: boolean;
|
|
27
28
|
device?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Top inset used to lift raw measurements into screen space. Omit (or pass a zero
|
|
31
|
+
* inset) to hit-test in raw fiber space — the pre-normalisation behaviour.
|
|
32
|
+
*/
|
|
33
|
+
screenSpace?: ScreenSpaceMetrics;
|
|
28
34
|
}): Promise<ExecutionResult>;
|
|
29
35
|
/**
|
|
30
36
|
* Harvests raw _debugStack strings for whatever sits at (x, y). Returns an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/core/inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/core/inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMnF;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCzE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,cAAc,CAChC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,OAAO,GAAE;IACL,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAC/B,GACP,OAAO,CAAC,eAAe,CAAC,CA0Y1B;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACtC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAc9B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,EAAE,iBAAiB,EAAE,GAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUlC"}
|
package/build/core/inspector.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { executeInApp } from "./jsExecute.js";
|
|
2
2
|
import { resolveStacksToSource, buildDebugStackHarvestExpression } from "./componentSource.js";
|
|
3
|
+
import { RN_PRIMITIVES_SRC, GENERIC_COMPONENT_SRC } from "./injectedFilters.js";
|
|
4
|
+
import { SCREEN_SPACE_HELPER_JS } from "./screenSpace.js";
|
|
3
5
|
// ============================================================================
|
|
4
6
|
// Coordinate-Based Element Inspection (via DevTools Inspector API)
|
|
5
7
|
// ============================================================================
|
|
@@ -61,7 +63,8 @@ export async function isInspectorActive(device) {
|
|
|
61
63
|
* that window by construction.
|
|
62
64
|
*/
|
|
63
65
|
export async function inspectAtPoint(x, y, options = {}) {
|
|
64
|
-
const { includeProps = true, includeFrame = true, device } = options;
|
|
66
|
+
const { includeProps = true, includeFrame = true, device, screenSpace } = options;
|
|
67
|
+
const metrics = screenSpace ?? { platform: "ios", topInset: 0 };
|
|
65
68
|
const expression = `
|
|
66
69
|
new Promise(function(resolve) {
|
|
67
70
|
var hook = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;
|
|
@@ -107,13 +110,28 @@ export async function inspectAtPoint(x, y, options = {}) {
|
|
|
107
110
|
return null;
|
|
108
111
|
}
|
|
109
112
|
|
|
113
|
+
// Collection bounds. These exist only to stop a pathological/cyclic tree from
|
|
114
|
+
// hanging the runtime — they must NOT bite on real screens. The previous values
|
|
115
|
+
// (500 hosts / depth 250) did: on a mid-size Expo app 45% of measurable hosts fell
|
|
116
|
+
// outside them (914 -> 500), and because the hit-test then silently ran against the
|
|
117
|
+
// survivors, inspect_at_point returned components from the screen *underneath* an
|
|
118
|
+
// open modal. Real measurements: test-app 200 hosts / depth 255, gifted 201 / 252,
|
|
119
|
+
// Boardwise 914 / 281. Anything that trips these limits now reports it.
|
|
120
|
+
var MAX_HOSTS = 20000;
|
|
121
|
+
var MAX_DEPTH = 2000;
|
|
122
|
+
var truncatedByCount = false;
|
|
123
|
+
var truncatedByDepth = false;
|
|
124
|
+
|
|
110
125
|
var hostFibers = [];
|
|
111
126
|
function walkFibers(fiber, depth) {
|
|
112
127
|
var cur = fiber;
|
|
113
128
|
while (cur) {
|
|
114
|
-
if (hostFibers.length >=
|
|
129
|
+
if (hostFibers.length >= MAX_HOSTS) { truncatedByCount = true; return; }
|
|
115
130
|
if (typeof cur.type === 'string' && getMeasurable(cur)) hostFibers.push(cur);
|
|
116
|
-
if (cur.child
|
|
131
|
+
if (cur.child) {
|
|
132
|
+
if (depth < MAX_DEPTH) walkFibers(cur.child, depth + 1);
|
|
133
|
+
else truncatedByDepth = true;
|
|
134
|
+
}
|
|
117
135
|
cur = cur.sibling;
|
|
118
136
|
}
|
|
119
137
|
}
|
|
@@ -121,9 +139,14 @@ export async function inspectAtPoint(x, y, options = {}) {
|
|
|
121
139
|
|
|
122
140
|
if (hostFibers.length === 0) return resolve({ error: 'No measurable host components found. App may not be fully rendered.' });
|
|
123
141
|
|
|
142
|
+
// Index fibers so the named element's own frame can be resolved later.
|
|
143
|
+
var hostIndex = new Map();
|
|
144
|
+
for (var hi = 0; hi < hostFibers.length; hi++) hostIndex.set(hostFibers[hi], hi);
|
|
145
|
+
|
|
124
146
|
var measurements = new Array(hostFibers.length).fill(null);
|
|
125
147
|
var pending = hostFibers.length;
|
|
126
148
|
var settled = false;
|
|
149
|
+
var timedOut = false;
|
|
127
150
|
|
|
128
151
|
function done() {
|
|
129
152
|
if (settled) return;
|
|
@@ -131,6 +154,9 @@ export async function inspectAtPoint(x, y, options = {}) {
|
|
|
131
154
|
resolve(buildResult(hostFibers, measurements));
|
|
132
155
|
}
|
|
133
156
|
|
|
157
|
+
${SCREEN_SPACE_HELPER_JS}
|
|
158
|
+
var SCREEN_SPACE = ${JSON.stringify(metrics)};
|
|
159
|
+
|
|
134
160
|
hostFibers.forEach(function(fiber, i) {
|
|
135
161
|
try {
|
|
136
162
|
getMeasurable(fiber).measureInWindow(function(fx, fy, fw, fh) {
|
|
@@ -145,12 +171,49 @@ export async function inspectAtPoint(x, y, options = {}) {
|
|
|
145
171
|
});
|
|
146
172
|
|
|
147
173
|
// Fallback: some measureInWindow callbacks never fire (off-screen Fabric leaves,
|
|
148
|
-
// detached ScrollView content).
|
|
149
|
-
|
|
174
|
+
// detached ScrollView content). Scale the budget with the node count so lifting the
|
|
175
|
+
// 500-host cap doesn't just convert a truncation into a timeout — a flat 300ms was
|
|
176
|
+
// ample for 200 nodes but is not for 900+. Still far below the 8s outer timeout.
|
|
177
|
+
var measureBudgetMs = Math.min(3000, 400 + hostFibers.length * 2);
|
|
178
|
+
setTimeout(function() { timedOut = true; done(); }, measureBudgetMs);
|
|
150
179
|
|
|
151
180
|
function buildResult(fibers, measurements) {
|
|
152
|
-
|
|
153
|
-
|
|
181
|
+
// The caller speaks canonical delivered pixels; measureInWindow speaks
|
|
182
|
+
// points/dp. Hit-testing stays in point space (that is where the
|
|
183
|
+
// measurements and the inset correction live) and only the emitted frames
|
|
184
|
+
// are scaled back out, so the probe cannot drift from the geometry.
|
|
185
|
+
var PX = scaleOf(SCREEN_SPACE);
|
|
186
|
+
var inputX = ${x};
|
|
187
|
+
var inputY = ${y};
|
|
188
|
+
var targetX = inputX / PX;
|
|
189
|
+
var targetY = inputY / PX;
|
|
190
|
+
|
|
191
|
+
// Lift measurements into screen space once, before anything reads them, so the
|
|
192
|
+
// hit-test, the element frame, hitFrame and the hierarchy all share the caller's
|
|
193
|
+
// coordinate space.
|
|
194
|
+
//
|
|
195
|
+
// Root containers are exempt. The band rule ("a y above the safe-area inset means
|
|
196
|
+
// this node measured from a modal's container") holds for leaf elements — which is
|
|
197
|
+
// all the screenshot formatters ever fed it — but a full-screen root legitimately
|
|
198
|
+
// starts at y=0, and shifting it produced NativeStackView at (0,59) with height 912,
|
|
199
|
+
// running 59pt off the bottom of a 912pt screen. A node at y=0 that is as tall as the
|
|
200
|
+
// tallest thing measured is the root, not modal content.
|
|
201
|
+
if (SCREEN_SPACE.topInset > 0) {
|
|
202
|
+
// hostFibers[0] is the first host reached from the fiber root — the app's root
|
|
203
|
+
// view — so its height is the screen height. Deriving it from the tallest
|
|
204
|
+
// measurement instead does not work: scrollable content routinely exceeds the
|
|
205
|
+
// screen, which lifts the threshold above every real root and exempts nothing.
|
|
206
|
+
var screenH = (measurements[0] && measurements[0].height) || 0;
|
|
207
|
+
// 0.9 rather than (screenH - inset): the app container sits a little inside the
|
|
208
|
+
// window (measured 844 against a 912 screen) and must still count as a root.
|
|
209
|
+
var rootMinH = screenH > 0 ? screenH * 0.9 : Infinity;
|
|
210
|
+
for (var ms = 0; ms < measurements.length; ms++) {
|
|
211
|
+
var mm2 = measurements[ms];
|
|
212
|
+
if (!mm2) continue;
|
|
213
|
+
if (mm2.y === 0 && mm2.height >= rootMinH) continue;
|
|
214
|
+
mm2.y = toScreenSpaceY(mm2.y, SCREEN_SPACE);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
154
217
|
|
|
155
218
|
var hits = [];
|
|
156
219
|
for (var i = 0; i < measurements.length; i++) {
|
|
@@ -163,33 +226,112 @@ export async function inspectAtPoint(x, y, options = {}) {
|
|
|
163
226
|
}
|
|
164
227
|
|
|
165
228
|
if (hits.length === 0) {
|
|
166
|
-
return { point: { x:
|
|
229
|
+
return { point: { x: inputX, y: inputY }, error: 'No component found at this point. Coordinates may be outside the app bounds or over a native-only element.' };
|
|
167
230
|
}
|
|
168
231
|
|
|
169
232
|
// Smallest area = innermost (most specific) component
|
|
170
233
|
hits.sort(function(a, b) { return (a.width * a.height) - (b.width * b.height); });
|
|
171
234
|
var best = hits[0];
|
|
172
235
|
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
|
|
236
|
+
// Shared with screenState/inputTarget via injectedFilters.ts. This file used to carry
|
|
237
|
+
// its own divergent copy that listed Pressable/TextInput/View as skippable, so the
|
|
238
|
+
// climb walked straight past the very components holding onPress/testID and landed on
|
|
239
|
+
// a context provider — reporting ScrollViewContext with props {value:{horizontal:false}}
|
|
240
|
+
// for a button. Keep these imported; do not re-inline them.
|
|
241
|
+
var RN_PRIMITIVES = ${RN_PRIMITIVES_SRC};
|
|
242
|
+
var GENERIC_COMPONENT = ${GENERIC_COMPONENT_SRC};
|
|
176
243
|
|
|
177
|
-
function
|
|
178
|
-
var
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
244
|
+
function isInteractive(fiber) {
|
|
245
|
+
var p = fiber.memoizedProps;
|
|
246
|
+
if (!p || typeof p !== 'object') return false;
|
|
247
|
+
return typeof p.onPress === 'function'
|
|
248
|
+
|| typeof p.onLongPress === 'function'
|
|
249
|
+
|| typeof p.onChangeText === 'function'
|
|
250
|
+
|| p.testID !== undefined
|
|
251
|
+
|| p.accessibilityRole === 'button';
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Pick the component a human would say they touched.
|
|
255
|
+
//
|
|
256
|
+
// Priority: the nearest interactive fiber (onPress/testID/...), then — because the
|
|
257
|
+
// handler usually lives on a generic TouchableOpacity inside a meaningful wrapper —
|
|
258
|
+
// keep climbing a few levels for a custom component that owns it. That yields
|
|
259
|
+
// ListItemRow over TouchableOpacity in a component-driven app, while still yielding
|
|
260
|
+
// Pressable (not a far-away screen component) in an app built from bare primitives.
|
|
261
|
+
var CUSTOM_LOOKAHEAD = 6;
|
|
262
|
+
function isCustomName(name) {
|
|
263
|
+
return !RN_PRIMITIVES.test(name) && !GENERIC_COMPONENT.test(name);
|
|
264
|
+
}
|
|
265
|
+
function namedOf(fiber) {
|
|
266
|
+
if (!fiber || !fiber.type || typeof fiber.type === 'string') return null;
|
|
267
|
+
var n = fiber.type.displayName || fiber.type.name;
|
|
268
|
+
return n ? { name: n, fiber: fiber } : null;
|
|
269
|
+
}
|
|
270
|
+
function pickElement(startFiber) {
|
|
271
|
+
var cur = startFiber;
|
|
272
|
+
var interactive = null;
|
|
273
|
+
var firstCustom = null;
|
|
274
|
+
var anyNamed = null;
|
|
275
|
+
var steps = 0;
|
|
276
|
+
while (cur && steps < 40) {
|
|
277
|
+
var nd = namedOf(cur);
|
|
278
|
+
if (nd) {
|
|
279
|
+
if (!anyNamed) anyNamed = nd;
|
|
280
|
+
if (!firstCustom && isCustomName(nd.name)) firstCustom = nd;
|
|
281
|
+
if (!interactive && isInteractive(cur)) { interactive = nd; break; }
|
|
189
282
|
}
|
|
190
283
|
cur = cur.return;
|
|
284
|
+
steps++;
|
|
191
285
|
}
|
|
192
|
-
|
|
286
|
+
|
|
287
|
+
if (interactive) {
|
|
288
|
+
// The handler usually sits on a generic TouchableOpacity/Pressable inside the
|
|
289
|
+
// component that gives it meaning. Climb from the interactive node (NOT from
|
|
290
|
+
// the hit node) for that owner: searching from the hit node instead would
|
|
291
|
+
// latch onto an unrelated custom child on the way up — e.g. picking the
|
|
292
|
+
// ThemedText label rather than the RoleButton that owns the press.
|
|
293
|
+
var up = interactive.fiber;
|
|
294
|
+
var upSteps = 0;
|
|
295
|
+
while (up && upSteps <= CUSTOM_LOOKAHEAD) {
|
|
296
|
+
var und = namedOf(up);
|
|
297
|
+
if (und && isCustomName(und.name)) return und;
|
|
298
|
+
up = up.return;
|
|
299
|
+
upSteps++;
|
|
300
|
+
}
|
|
301
|
+
return interactive;
|
|
302
|
+
}
|
|
303
|
+
return firstCustom || anyNamed;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// Frame of the named element itself = its nearest measured host descendant.
|
|
307
|
+
// Previously the reported frame was the innermost hit host while the element name and
|
|
308
|
+
// props came from an ancestor, so the two described different boxes and any tap target
|
|
309
|
+
// computed from the frame was wrong.
|
|
310
|
+
// The component's own box: its nearest measured host descendant.
|
|
311
|
+
//
|
|
312
|
+
// Look the fiber up by identity OR by its alternate. React double-buffers fibers, so
|
|
313
|
+
// a re-render between the collection walk and this descent leaves the subtree mixed:
|
|
314
|
+
// bailed-out nodes keep the same object and hit, re-rendered ones are new objects and
|
|
315
|
+
// miss. An identity-only lookup therefore skipped a 128x48 button box and reported
|
|
316
|
+
// the 20x20 icon nested inside it as the button's frame.
|
|
317
|
+
//
|
|
318
|
+
// Not a union of the subtree: for a screen component that spans its scrollable
|
|
319
|
+
// content, which reported a 5289pt-tall "frame" for a 912pt screen.
|
|
320
|
+
function measurementFor(f) {
|
|
321
|
+
var idx = hostIndex.get(f);
|
|
322
|
+
if (idx === undefined && f.alternate) idx = hostIndex.get(f.alternate);
|
|
323
|
+
return idx !== undefined ? measurements[idx] : null;
|
|
324
|
+
}
|
|
325
|
+
function frameOfNamed(namedFiber) {
|
|
326
|
+
var found = null;
|
|
327
|
+
(function down(f, d) {
|
|
328
|
+
if (found || !f || d > 40) return;
|
|
329
|
+
var m = measurementFor(f);
|
|
330
|
+
if (m && m.width > 0 && m.height > 0) { found = m; return; }
|
|
331
|
+
var c = f.child;
|
|
332
|
+
while (c && !found) { down(c, d + 1); c = c.sibling; }
|
|
333
|
+
})(namedFiber, 0);
|
|
334
|
+
return found;
|
|
193
335
|
}
|
|
194
336
|
|
|
195
337
|
function buildPath(fiber) {
|
|
@@ -207,18 +349,34 @@ export async function inspectAtPoint(x, y, options = {}) {
|
|
|
207
349
|
return path.slice(-8).join(' > ');
|
|
208
350
|
}
|
|
209
351
|
|
|
210
|
-
//
|
|
211
|
-
//
|
|
212
|
-
var named =
|
|
352
|
+
// Start at the hit fiber itself, not its parent: the hit host can be the interactive
|
|
353
|
+
// node, and starting at .return made that unreachable.
|
|
354
|
+
var named = pickElement(best.fiber);
|
|
213
355
|
var result = {
|
|
214
|
-
point: { x:
|
|
356
|
+
point: { x: inputX, y: inputY },
|
|
215
357
|
element: named ? named.name : best.fiber.type,
|
|
216
358
|
nativeElement: best.fiber.type,
|
|
217
359
|
path: buildPath(best.fiber)
|
|
218
360
|
};
|
|
219
361
|
|
|
220
362
|
if (${includeFrame}) {
|
|
221
|
-
|
|
363
|
+
var namedFrame = named ? frameOfNamed(named.fiber) : null;
|
|
364
|
+
var elFrame = namedFrame || best;
|
|
365
|
+
result.frame = { x: elFrame.x, y: elFrame.y, width: elFrame.width, height: elFrame.height };
|
|
366
|
+
// The innermost host actually hit, when it differs from the element's own box.
|
|
367
|
+
if (namedFrame && (namedFrame.x !== best.x || namedFrame.y !== best.y ||
|
|
368
|
+
namedFrame.width !== best.width || namedFrame.height !== best.height)) {
|
|
369
|
+
result.hitFrame = { x: best.x, y: best.y, width: best.width, height: best.height };
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
if (truncatedByCount || truncatedByDepth || (timedOut && pending > 0)) {
|
|
374
|
+
result.incomplete = {
|
|
375
|
+
reason: truncatedByCount ? 'host-limit' : (truncatedByDepth ? 'depth-limit' : 'measure-timeout'),
|
|
376
|
+
hostsCollected: hostFibers.length,
|
|
377
|
+
measurementsMissing: pending > 0 ? pending : 0,
|
|
378
|
+
note: 'Result may be inaccurate: some on-screen nodes were not measured, so the hit-test could resolve to an outer or occluded element.'
|
|
379
|
+
};
|
|
222
380
|
}
|
|
223
381
|
|
|
224
382
|
if (${includeProps} && named && named.fiber.memoizedProps) {
|
|
@@ -246,27 +404,56 @@ export async function inspectAtPoint(x, y, options = {}) {
|
|
|
246
404
|
if (Object.keys(props).length > 0) result.props = props;
|
|
247
405
|
}
|
|
248
406
|
|
|
249
|
-
// Hierarchy:
|
|
407
|
+
// Hierarchy: the hit element's real ancestor chain, innermost→outermost.
|
|
408
|
+
//
|
|
409
|
+
// This used to be built from *other hits* — every measured node containing the point,
|
|
410
|
+
// each mapped to its nearest named component. Those hits are not necessarily
|
|
411
|
+
// ancestors of the element: with a modal open, nodes from the screen underneath also
|
|
412
|
+
// contain the point, so the chain interleaved ancestors from two different screens.
|
|
413
|
+
// Walking .return keeps it to genuine ancestors.
|
|
250
414
|
var hierarchy = [];
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
415
|
+
var seenNames = {};
|
|
416
|
+
var hcur = named ? named.fiber : best.fiber;
|
|
417
|
+
while (hcur && hierarchy.length < 15) {
|
|
418
|
+
if (hcur.type && typeof hcur.type !== 'string') {
|
|
419
|
+
var hname = hcur.type.displayName || hcur.type.name;
|
|
420
|
+
if (hname && !RN_PRIMITIVES.test(hname) && !seenNames[hname]) {
|
|
421
|
+
seenNames[hname] = true;
|
|
422
|
+
var hframe = frameOfNamed(hcur);
|
|
423
|
+
hierarchy.push(hframe
|
|
424
|
+
? { name: hname, frame: { x: hframe.x, y: hframe.y, width: hframe.width, height: hframe.height } }
|
|
425
|
+
: { name: hname });
|
|
426
|
+
}
|
|
258
427
|
}
|
|
428
|
+
hcur = hcur.return;
|
|
259
429
|
}
|
|
260
430
|
if (hierarchy.length > 1) result.hierarchy = hierarchy;
|
|
261
431
|
|
|
432
|
+
// Point space -> canonical delivered pixels, once, on the way out. Every frame
|
|
433
|
+
// the caller sees goes through here, so frame, hitFrame and each ancestor in
|
|
434
|
+
// hierarchy stay in the same space as get_screen_state and tap().
|
|
435
|
+
if (PX !== 1) {
|
|
436
|
+
var scaleFrame = function(f) {
|
|
437
|
+
if (!f) return;
|
|
438
|
+
f.x = Math.round(f.x * PX);
|
|
439
|
+
f.y = Math.round(f.y * PX);
|
|
440
|
+
f.width = Math.round(f.width * PX);
|
|
441
|
+
f.height = Math.round(f.height * PX);
|
|
442
|
+
};
|
|
443
|
+
scaleFrame(result.frame);
|
|
444
|
+
scaleFrame(result.hitFrame);
|
|
445
|
+
for (var hi = 0; hi < hierarchy.length; hi++) scaleFrame(hierarchy[hi].frame);
|
|
446
|
+
}
|
|
447
|
+
|
|
262
448
|
return result;
|
|
263
449
|
}
|
|
264
450
|
})
|
|
265
451
|
`;
|
|
266
452
|
// awaitPromise:true so CDP Runtime.evaluate returns the resolved value.
|
|
267
|
-
//
|
|
268
|
-
// measure paths without letting a hung Hermes
|
|
269
|
-
|
|
453
|
+
// 8000ms outer timeout sits above the inner measure budget (up to 3000ms on very large
|
|
454
|
+
// screens) with headroom for slow Fabric measure paths, without letting a hung Hermes
|
|
455
|
+
// runtime stall the tool.
|
|
456
|
+
return executeInApp(expression, true, { timeoutMs: 8000, originatingToolName: "inspect_at_point" }, device);
|
|
270
457
|
}
|
|
271
458
|
/**
|
|
272
459
|
* Harvests raw _debugStack strings for whatever sits at (x, y). Returns an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/core/inspector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/core/inspector.ts"],"names":[],"mappings":"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"}
|