execbro 2.1.2 → 2.3.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__/integration/text-input.test.d.ts +2 -0
- package/build/__tests__/integration/text-input.test.d.ts.map +1 -0
- package/build/__tests__/integration/text-input.test.js +181 -0
- package/build/__tests__/integration/text-input.test.js.map +1 -0
- package/build/__tests__/unit/focusedInputTools.test.js +19 -6
- package/build/__tests__/unit/focusedInputTools.test.js.map +1 -1
- package/build/__tests__/unit/inputTarget.test.d.ts +2 -0
- package/build/__tests__/unit/inputTarget.test.d.ts.map +1 -0
- package/build/__tests__/unit/inputTarget.test.js +144 -0
- package/build/__tests__/unit/inputTarget.test.js.map +1 -0
- package/build/__tests__/unit/inputTargetTools.test.d.ts +2 -0
- package/build/__tests__/unit/inputTargetTools.test.d.ts.map +1 -0
- package/build/__tests__/unit/inputTargetTools.test.js +46 -0
- package/build/__tests__/unit/inputTargetTools.test.js.map +1 -0
- package/build/__tests__/unit/inputTextTool.test.d.ts +2 -0
- package/build/__tests__/unit/inputTextTool.test.d.ts.map +1 -0
- package/build/__tests__/unit/inputTextTool.test.js +120 -0
- package/build/__tests__/unit/inputTextTool.test.js.map +1 -0
- package/build/__tests__/unit/keyboardMetrics.test.d.ts +2 -0
- package/build/__tests__/unit/keyboardMetrics.test.d.ts.map +1 -0
- package/build/__tests__/unit/keyboardMetrics.test.js +58 -0
- package/build/__tests__/unit/keyboardMetrics.test.js.map +1 -0
- package/build/__tests__/unit/keyboardRaise.test.d.ts +2 -0
- package/build/__tests__/unit/keyboardRaise.test.d.ts.map +1 -0
- package/build/__tests__/unit/keyboardRaise.test.js +74 -0
- package/build/__tests__/unit/keyboardRaise.test.js.map +1 -0
- package/build/__tests__/unit/nativeInputValue.test.d.ts +2 -0
- package/build/__tests__/unit/nativeInputValue.test.d.ts.map +1 -0
- package/build/__tests__/unit/nativeInputValue.test.js +67 -0
- package/build/__tests__/unit/nativeInputValue.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 +58 -0
- package/build/__tests__/unit/screenSpace.test.js.map +1 -0
- package/build/__tests__/unit/screenStateInputValue.test.d.ts +2 -0
- package/build/__tests__/unit/screenStateInputValue.test.d.ts.map +1 -0
- package/build/__tests__/unit/screenStateInputValue.test.js +49 -0
- package/build/__tests__/unit/screenStateInputValue.test.js.map +1 -0
- package/build/__tests__/unit/screenStateKeyboard.test.d.ts +2 -0
- package/build/__tests__/unit/screenStateKeyboard.test.d.ts.map +1 -0
- package/build/__tests__/unit/screenStateKeyboard.test.js +99 -0
- package/build/__tests__/unit/screenStateKeyboard.test.js.map +1 -0
- package/build/__tests__/unit/textEntry.test.d.ts +2 -0
- package/build/__tests__/unit/textEntry.test.d.ts.map +1 -0
- package/build/__tests__/unit/textEntry.test.js +291 -0
- package/build/__tests__/unit/textEntry.test.js.map +1 -0
- package/build/__tests__/unit/visibility.test.js +21 -0
- package/build/__tests__/unit/visibility.test.js.map +1 -1
- package/build/core/focusedInputTools.d.ts.map +1 -1
- package/build/core/focusedInputTools.js +13 -35
- package/build/core/focusedInputTools.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 +31 -0
- package/build/core/injectedFilters.d.ts.map +1 -0
- package/build/core/injectedFilters.js +31 -0
- package/build/core/injectedFilters.js.map +1 -0
- package/build/core/inputTarget.d.ts +85 -0
- package/build/core/inputTarget.d.ts.map +1 -0
- package/build/core/inputTarget.js +364 -0
- package/build/core/inputTarget.js.map +1 -0
- package/build/core/inputTargetTools.d.ts +12 -0
- package/build/core/inputTargetTools.d.ts.map +1 -0
- package/build/core/inputTargetTools.js +26 -0
- package/build/core/inputTargetTools.js.map +1 -0
- package/build/core/inspector.d.ts +6 -0
- package/build/core/inspector.d.ts.map +1 -1
- package/build/core/inspector.js +200 -36
- package/build/core/inspector.js.map +1 -1
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +7 -1
- package/build/core/ios.js.map +1 -1
- package/build/core/keyboardMetrics.d.ts +11 -0
- package/build/core/keyboardMetrics.d.ts.map +1 -0
- package/build/core/keyboardMetrics.js +40 -0
- package/build/core/keyboardMetrics.js.map +1 -0
- package/build/core/keyboardRaise.d.ts +22 -0
- package/build/core/keyboardRaise.d.ts.map +1 -0
- package/build/core/keyboardRaise.js +74 -0
- package/build/core/keyboardRaise.js.map +1 -0
- package/build/core/nativeInputValue.d.ts +48 -0
- package/build/core/nativeInputValue.d.ts.map +1 -0
- package/build/core/nativeInputValue.js +113 -0
- package/build/core/nativeInputValue.js.map +1 -0
- 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 +32 -0
- package/build/core/screenLayout.js.map +1 -1
- package/build/core/screenSpace.d.ts +75 -0
- package/build/core/screenSpace.d.ts.map +1 -0
- package/build/core/screenSpace.js +84 -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 +24 -0
- package/build/core/screenSpaceDevice.js.map +1 -0
- package/build/core/screenState.d.ts +39 -0
- package/build/core/screenState.d.ts.map +1 -1
- package/build/core/screenState.js +200 -16
- package/build/core/screenState.js.map +1 -1
- package/build/core/textEntry.d.ts +75 -0
- package/build/core/textEntry.d.ts.map +1 -0
- package/build/core/textEntry.js +252 -0
- package/build/core/textEntry.js.map +1 -0
- package/build/tools/componentTools.d.ts.map +1 -1
- package/build/tools/componentTools.js +63 -188
- package/build/tools/componentTools.js.map +1 -1
- package/build/tools/interactionTools.d.ts +13 -0
- package/build/tools/interactionTools.d.ts.map +1 -1
- package/build/tools/interactionTools.js +112 -2
- package/build/tools/interactionTools.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 +10 -4
- package/build/__tests__/unit/focusedInput.test.d.ts +0 -2
- package/build/__tests__/unit/focusedInput.test.d.ts.map +0 -1
- package/build/__tests__/unit/focusedInput.test.js +0 -58
- package/build/__tests__/unit/focusedInput.test.js.map +0 -1
- package/build/core/focusedInput.d.ts +0 -27
- package/build/core/focusedInput.d.ts.map +0 -1
- package/build/core/focusedInput.js +0 -110
- package/build/core/focusedInput.js.map +0 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ExecutionResult } from "./types.js";
|
|
2
|
+
import { type InputOp, type InputQuery, type InputResult } from "./inputTarget.js";
|
|
3
|
+
export type ExecuteFn = (expression: string, device?: string) => Promise<ExecutionResult>;
|
|
4
|
+
/**
|
|
5
|
+
* Runs one resolver operation and normalises every failure — executor error,
|
|
6
|
+
* unparseable output, app-side miss — into { found: false, reason }.
|
|
7
|
+
*
|
|
8
|
+
* Callers get exactly one shape to branch on and never have to catch, which is
|
|
9
|
+
* what lets the orchestration above read as a straight line.
|
|
10
|
+
*/
|
|
11
|
+
export declare function runInputOp(op: InputOp, query?: InputQuery, device?: string, execute?: ExecuteFn): Promise<InputResult>;
|
|
12
|
+
//# sourceMappingURL=inputTargetTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputTargetTools.d.ts","sourceRoot":"","sources":["../../src/core/inputTargetTools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAwB,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzG,MAAM,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;AAK1F;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC5B,EAAE,EAAE,OAAO,EACX,KAAK,CAAC,EAAE,UAAU,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,SAA0B,GACpC,OAAO,CAAC,WAAW,CAAC,CAetB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { executeInApp } from "./executor.js";
|
|
2
|
+
import { buildInputExpression } from "./inputTarget.js";
|
|
3
|
+
const defaultExecute = (expression, device) => executeInApp(expression, true, { originatingToolName: "input_text" }, device);
|
|
4
|
+
/**
|
|
5
|
+
* Runs one resolver operation and normalises every failure — executor error,
|
|
6
|
+
* unparseable output, app-side miss — into { found: false, reason }.
|
|
7
|
+
*
|
|
8
|
+
* Callers get exactly one shape to branch on and never have to catch, which is
|
|
9
|
+
* what lets the orchestration above read as a straight line.
|
|
10
|
+
*/
|
|
11
|
+
export async function runInputOp(op, query, device, execute = defaultExecute) {
|
|
12
|
+
const exec = await execute(buildInputExpression(op, query), device);
|
|
13
|
+
if (!exec.success) {
|
|
14
|
+
return { found: false, reason: exec.error ?? "executor failed" };
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
return JSON.parse(exec.result ?? "");
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return {
|
|
21
|
+
found: false,
|
|
22
|
+
reason: `could not parse resolver output: ${String(exec.result).slice(0, 200)}`
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=inputTargetTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputTargetTools.js","sourceRoot":"","sources":["../../src/core/inputTargetTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,oBAAoB,EAAmD,MAAM,kBAAkB,CAAC;AAIzG,MAAM,cAAc,GAAc,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,CACrD,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;AAElF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC5B,EAAW,EACX,KAAkB,EAClB,MAAe,EACf,UAAqB,cAAc;IAEnC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAEpE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,iBAAiB,EAAE,CAAC;IACrE,CAAC;IAED,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAgB,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO;YACH,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,oCAAoC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SAClF,CAAC;IACN,CAAC;AACL,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,CAmX1B;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,13 +171,43 @@ 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
181
|
var targetX = ${x};
|
|
153
182
|
var targetY = ${y};
|
|
154
183
|
|
|
184
|
+
// Lift measurements into screen space once, before anything reads them, so the
|
|
185
|
+
// hit-test, the element frame, hitFrame and the hierarchy all share the caller's
|
|
186
|
+
// coordinate space.
|
|
187
|
+
//
|
|
188
|
+
// Root containers are exempt. The band rule ("a y above the safe-area inset means
|
|
189
|
+
// this node measured from a modal's container") holds for leaf elements — which is
|
|
190
|
+
// all the screenshot formatters ever fed it — but a full-screen root legitimately
|
|
191
|
+
// starts at y=0, and shifting it produced NativeStackView at (0,59) with height 912,
|
|
192
|
+
// running 59pt off the bottom of a 912pt screen. A node at y=0 that is as tall as the
|
|
193
|
+
// tallest thing measured is the root, not modal content.
|
|
194
|
+
if (SCREEN_SPACE.topInset > 0) {
|
|
195
|
+
// hostFibers[0] is the first host reached from the fiber root — the app's root
|
|
196
|
+
// view — so its height is the screen height. Deriving it from the tallest
|
|
197
|
+
// measurement instead does not work: scrollable content routinely exceeds the
|
|
198
|
+
// screen, which lifts the threshold above every real root and exempts nothing.
|
|
199
|
+
var screenH = (measurements[0] && measurements[0].height) || 0;
|
|
200
|
+
// 0.9 rather than (screenH - inset): the app container sits a little inside the
|
|
201
|
+
// window (measured 844 against a 912 screen) and must still count as a root.
|
|
202
|
+
var rootMinH = screenH > 0 ? screenH * 0.9 : Infinity;
|
|
203
|
+
for (var ms = 0; ms < measurements.length; ms++) {
|
|
204
|
+
var mm2 = measurements[ms];
|
|
205
|
+
if (!mm2) continue;
|
|
206
|
+
if (mm2.y === 0 && mm2.height >= rootMinH) continue;
|
|
207
|
+
mm2.y = toScreenSpaceY(mm2.y, SCREEN_SPACE);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
155
211
|
var hits = [];
|
|
156
212
|
for (var i = 0; i < measurements.length; i++) {
|
|
157
213
|
var m = measurements[i];
|
|
@@ -170,26 +226,105 @@ export async function inspectAtPoint(x, y, options = {}) {
|
|
|
170
226
|
hits.sort(function(a, b) { return (a.width * a.height) - (b.width * b.height); });
|
|
171
227
|
var best = hits[0];
|
|
172
228
|
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
|
|
229
|
+
// Shared with screenState/inputTarget via injectedFilters.ts. This file used to carry
|
|
230
|
+
// its own divergent copy that listed Pressable/TextInput/View as skippable, so the
|
|
231
|
+
// climb walked straight past the very components holding onPress/testID and landed on
|
|
232
|
+
// a context provider — reporting ScrollViewContext with props {value:{horizontal:false}}
|
|
233
|
+
// for a button. Keep these imported; do not re-inline them.
|
|
234
|
+
var RN_PRIMITIVES = ${RN_PRIMITIVES_SRC};
|
|
235
|
+
var GENERIC_COMPONENT = ${GENERIC_COMPONENT_SRC};
|
|
176
236
|
|
|
177
|
-
function
|
|
178
|
-
var
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
237
|
+
function isInteractive(fiber) {
|
|
238
|
+
var p = fiber.memoizedProps;
|
|
239
|
+
if (!p || typeof p !== 'object') return false;
|
|
240
|
+
return typeof p.onPress === 'function'
|
|
241
|
+
|| typeof p.onLongPress === 'function'
|
|
242
|
+
|| typeof p.onChangeText === 'function'
|
|
243
|
+
|| p.testID !== undefined
|
|
244
|
+
|| p.accessibilityRole === 'button';
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Pick the component a human would say they touched.
|
|
248
|
+
//
|
|
249
|
+
// Priority: the nearest interactive fiber (onPress/testID/...), then — because the
|
|
250
|
+
// handler usually lives on a generic TouchableOpacity inside a meaningful wrapper —
|
|
251
|
+
// keep climbing a few levels for a custom component that owns it. That yields
|
|
252
|
+
// ListItemRow over TouchableOpacity in a component-driven app, while still yielding
|
|
253
|
+
// Pressable (not a far-away screen component) in an app built from bare primitives.
|
|
254
|
+
var CUSTOM_LOOKAHEAD = 6;
|
|
255
|
+
function isCustomName(name) {
|
|
256
|
+
return !RN_PRIMITIVES.test(name) && !GENERIC_COMPONENT.test(name);
|
|
257
|
+
}
|
|
258
|
+
function namedOf(fiber) {
|
|
259
|
+
if (!fiber || !fiber.type || typeof fiber.type === 'string') return null;
|
|
260
|
+
var n = fiber.type.displayName || fiber.type.name;
|
|
261
|
+
return n ? { name: n, fiber: fiber } : null;
|
|
262
|
+
}
|
|
263
|
+
function pickElement(startFiber) {
|
|
264
|
+
var cur = startFiber;
|
|
265
|
+
var interactive = null;
|
|
266
|
+
var firstCustom = null;
|
|
267
|
+
var anyNamed = null;
|
|
268
|
+
var steps = 0;
|
|
269
|
+
while (cur && steps < 40) {
|
|
270
|
+
var nd = namedOf(cur);
|
|
271
|
+
if (nd) {
|
|
272
|
+
if (!anyNamed) anyNamed = nd;
|
|
273
|
+
if (!firstCustom && isCustomName(nd.name)) firstCustom = nd;
|
|
274
|
+
if (!interactive && isInteractive(cur)) { interactive = nd; break; }
|
|
189
275
|
}
|
|
190
276
|
cur = cur.return;
|
|
277
|
+
steps++;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (interactive) {
|
|
281
|
+
// The handler usually sits on a generic TouchableOpacity/Pressable inside the
|
|
282
|
+
// component that gives it meaning. Climb from the interactive node (NOT from
|
|
283
|
+
// the hit node) for that owner: searching from the hit node instead would
|
|
284
|
+
// latch onto an unrelated custom child on the way up — e.g. picking the
|
|
285
|
+
// ThemedText label rather than the RoleButton that owns the press.
|
|
286
|
+
var up = interactive.fiber;
|
|
287
|
+
var upSteps = 0;
|
|
288
|
+
while (up && upSteps <= CUSTOM_LOOKAHEAD) {
|
|
289
|
+
var und = namedOf(up);
|
|
290
|
+
if (und && isCustomName(und.name)) return und;
|
|
291
|
+
up = up.return;
|
|
292
|
+
upSteps++;
|
|
293
|
+
}
|
|
294
|
+
return interactive;
|
|
191
295
|
}
|
|
192
|
-
return
|
|
296
|
+
return firstCustom || anyNamed;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// Frame of the named element itself = its nearest measured host descendant.
|
|
300
|
+
// Previously the reported frame was the innermost hit host while the element name and
|
|
301
|
+
// props came from an ancestor, so the two described different boxes and any tap target
|
|
302
|
+
// computed from the frame was wrong.
|
|
303
|
+
// The component's own box: its nearest measured host descendant.
|
|
304
|
+
//
|
|
305
|
+
// Look the fiber up by identity OR by its alternate. React double-buffers fibers, so
|
|
306
|
+
// a re-render between the collection walk and this descent leaves the subtree mixed:
|
|
307
|
+
// bailed-out nodes keep the same object and hit, re-rendered ones are new objects and
|
|
308
|
+
// miss. An identity-only lookup therefore skipped a 128x48 button box and reported
|
|
309
|
+
// the 20x20 icon nested inside it as the button's frame.
|
|
310
|
+
//
|
|
311
|
+
// Not a union of the subtree: for a screen component that spans its scrollable
|
|
312
|
+
// content, which reported a 5289pt-tall "frame" for a 912pt screen.
|
|
313
|
+
function measurementFor(f) {
|
|
314
|
+
var idx = hostIndex.get(f);
|
|
315
|
+
if (idx === undefined && f.alternate) idx = hostIndex.get(f.alternate);
|
|
316
|
+
return idx !== undefined ? measurements[idx] : null;
|
|
317
|
+
}
|
|
318
|
+
function frameOfNamed(namedFiber) {
|
|
319
|
+
var found = null;
|
|
320
|
+
(function down(f, d) {
|
|
321
|
+
if (found || !f || d > 40) return;
|
|
322
|
+
var m = measurementFor(f);
|
|
323
|
+
if (m && m.width > 0 && m.height > 0) { found = m; return; }
|
|
324
|
+
var c = f.child;
|
|
325
|
+
while (c && !found) { down(c, d + 1); c = c.sibling; }
|
|
326
|
+
})(namedFiber, 0);
|
|
327
|
+
return found;
|
|
193
328
|
}
|
|
194
329
|
|
|
195
330
|
function buildPath(fiber) {
|
|
@@ -207,9 +342,9 @@ export async function inspectAtPoint(x, y, options = {}) {
|
|
|
207
342
|
return path.slice(-8).join(' > ');
|
|
208
343
|
}
|
|
209
344
|
|
|
210
|
-
//
|
|
211
|
-
//
|
|
212
|
-
var named =
|
|
345
|
+
// Start at the hit fiber itself, not its parent: the hit host can be the interactive
|
|
346
|
+
// node, and starting at .return made that unreachable.
|
|
347
|
+
var named = pickElement(best.fiber);
|
|
213
348
|
var result = {
|
|
214
349
|
point: { x: targetX, y: targetY },
|
|
215
350
|
element: named ? named.name : best.fiber.type,
|
|
@@ -218,7 +353,23 @@ export async function inspectAtPoint(x, y, options = {}) {
|
|
|
218
353
|
};
|
|
219
354
|
|
|
220
355
|
if (${includeFrame}) {
|
|
221
|
-
|
|
356
|
+
var namedFrame = named ? frameOfNamed(named.fiber) : null;
|
|
357
|
+
var elFrame = namedFrame || best;
|
|
358
|
+
result.frame = { x: elFrame.x, y: elFrame.y, width: elFrame.width, height: elFrame.height };
|
|
359
|
+
// The innermost host actually hit, when it differs from the element's own box.
|
|
360
|
+
if (namedFrame && (namedFrame.x !== best.x || namedFrame.y !== best.y ||
|
|
361
|
+
namedFrame.width !== best.width || namedFrame.height !== best.height)) {
|
|
362
|
+
result.hitFrame = { x: best.x, y: best.y, width: best.width, height: best.height };
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
if (truncatedByCount || truncatedByDepth || (timedOut && pending > 0)) {
|
|
367
|
+
result.incomplete = {
|
|
368
|
+
reason: truncatedByCount ? 'host-limit' : (truncatedByDepth ? 'depth-limit' : 'measure-timeout'),
|
|
369
|
+
hostsCollected: hostFibers.length,
|
|
370
|
+
measurementsMissing: pending > 0 ? pending : 0,
|
|
371
|
+
note: 'Result may be inaccurate: some on-screen nodes were not measured, so the hit-test could resolve to an outer or occluded element.'
|
|
372
|
+
};
|
|
222
373
|
}
|
|
223
374
|
|
|
224
375
|
if (${includeProps} && named && named.fiber.memoizedProps) {
|
|
@@ -246,16 +397,28 @@ export async function inspectAtPoint(x, y, options = {}) {
|
|
|
246
397
|
if (Object.keys(props).length > 0) result.props = props;
|
|
247
398
|
}
|
|
248
399
|
|
|
249
|
-
// Hierarchy:
|
|
400
|
+
// Hierarchy: the hit element's real ancestor chain, innermost→outermost.
|
|
401
|
+
//
|
|
402
|
+
// This used to be built from *other hits* — every measured node containing the point,
|
|
403
|
+
// each mapped to its nearest named component. Those hits are not necessarily
|
|
404
|
+
// ancestors of the element: with a modal open, nodes from the screen underneath also
|
|
405
|
+
// contain the point, so the chain interleaved ancestors from two different screens.
|
|
406
|
+
// Walking .return keeps it to genuine ancestors.
|
|
250
407
|
var hierarchy = [];
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
408
|
+
var seenNames = {};
|
|
409
|
+
var hcur = named ? named.fiber : best.fiber;
|
|
410
|
+
while (hcur && hierarchy.length < 15) {
|
|
411
|
+
if (hcur.type && typeof hcur.type !== 'string') {
|
|
412
|
+
var hname = hcur.type.displayName || hcur.type.name;
|
|
413
|
+
if (hname && !RN_PRIMITIVES.test(hname) && !seenNames[hname]) {
|
|
414
|
+
seenNames[hname] = true;
|
|
415
|
+
var hframe = frameOfNamed(hcur);
|
|
416
|
+
hierarchy.push(hframe
|
|
417
|
+
? { name: hname, frame: { x: hframe.x, y: hframe.y, width: hframe.width, height: hframe.height } }
|
|
418
|
+
: { name: hname });
|
|
419
|
+
}
|
|
258
420
|
}
|
|
421
|
+
hcur = hcur.return;
|
|
259
422
|
}
|
|
260
423
|
if (hierarchy.length > 1) result.hierarchy = hierarchy;
|
|
261
424
|
|
|
@@ -264,9 +427,10 @@ export async function inspectAtPoint(x, y, options = {}) {
|
|
|
264
427
|
})
|
|
265
428
|
`;
|
|
266
429
|
// awaitPromise:true so CDP Runtime.evaluate returns the resolved value.
|
|
267
|
-
//
|
|
268
|
-
// measure paths without letting a hung Hermes
|
|
269
|
-
|
|
430
|
+
// 8000ms outer timeout sits above the inner measure budget (up to 3000ms on very large
|
|
431
|
+
// screens) with headroom for slow Fabric measure paths, without letting a hung Hermes
|
|
432
|
+
// runtime stall the tool.
|
|
433
|
+
return executeInApp(expression, true, { timeoutMs: 8000, originatingToolName: "inspect_at_point" }, device);
|
|
270
434
|
}
|
|
271
435
|
/**
|
|
272
436
|
* 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":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAC;AAE/F,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAA2B,MAAM,kBAAkB,CAAC;AAEnF,+EAA+E;AAC/E,mEAAmE;AACnE,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAe;IACnD,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6BlB,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7G,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,CAAS,EACT,CAAS,EACT,UASI,EAAE;IAEN,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAClF,MAAM,OAAO,GAAuB,WAAW,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAEpF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAyFT,sBAAsB;iCACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;gCAuBxB,CAAC;gCACD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAoDC,iBAAiB;sCACb,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAwHzC,YAAY;;;;;;;;;;;;;;;;;;;;kBAoBZ,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAqDzB,CAAC;IAEF,wEAAwE;IACxE,uFAAuF;IACvF,sFAAsF;IACtF,0BAA0B;IAC1B,OAAO,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,EAAE,MAAM,CAAC,CAAC;AAChH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,CAAS,EACT,CAAS,EACT,MAAe;IAEf,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,YAAY,CAC1B,gCAAgC,CAAC,CAAC,EAAE,CAAC,CAAC,EACtC,IAAI,EACJ,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,EAC5D,MAAM,CACT,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAqC,CAAC;QAC1E,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,OAAgC,EAChC,MAA2B;IAE3B,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClF,CAAC;QACD,OAAO,EAAE,GAAG,OAAO,EAAE,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,IAAI,SAAS,EAAE,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,GAAG,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC;IAClE,CAAC;AACL,CAAC"}
|
package/build/core/ios.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../../src/core/ios.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../../src/core/ios.ts"],"names":[],"mappings":"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"}
|
package/build/core/ios.js
CHANGED
|
@@ -816,7 +816,13 @@ export async function iosInputText(text, udid) {
|
|
|
816
816
|
return preflight.error;
|
|
817
817
|
const { driver, targetUdid } = preflight;
|
|
818
818
|
if (driver === "axe") {
|
|
819
|
-
|
|
819
|
+
// Submit one HID event per chunk instead of AXe's default 200. Text
|
|
820
|
+
// arriving out of order has been observed on device ("Alice" landing as
|
|
821
|
+
// "Aicel", "CASEB" as "CSEBA" — in both cases the second keystroke last),
|
|
822
|
+
// and a single large submission is the plausible cause. Measured at the
|
|
823
|
+
// same latency as plain `axe type` (1432ms vs 1519ms for 19 chars), so
|
|
824
|
+
// the serialisation is free.
|
|
825
|
+
await runAxe("batch", "--udid", targetUdid, "--type-chunk-size", "1", "--step", `type '${text.replace(/'/g, "'\\''")}'`);
|
|
820
826
|
}
|
|
821
827
|
else {
|
|
822
828
|
const { stderr } = await runIdb("ui", "text", "--udid", targetUdid, text);
|