react-native-ai-devtools 2.21.1 → 2.23.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 +2 -2
- package/build/__tests__/unit/captureOrientationCache.test.d.ts +2 -0
- package/build/__tests__/unit/captureOrientationCache.test.d.ts.map +1 -0
- package/build/__tests__/unit/captureOrientationCache.test.js +37 -0
- package/build/__tests__/unit/captureOrientationCache.test.js.map +1 -0
- package/build/__tests__/unit/decisionTree.test.d.ts +2 -0
- package/build/__tests__/unit/decisionTree.test.d.ts.map +1 -0
- package/build/__tests__/unit/decisionTree.test.js +22 -0
- package/build/__tests__/unit/decisionTree.test.js.map +1 -0
- package/build/__tests__/unit/deviceResolver.test.js +44 -0
- package/build/__tests__/unit/deviceResolver.test.js.map +1 -1
- package/build/__tests__/unit/inputTextTool.test.js +23 -1
- package/build/__tests__/unit/inputTextTool.test.js.map +1 -1
- package/build/__tests__/unit/jsExecuteSplit.test.d.ts +2 -0
- package/build/__tests__/unit/jsExecuteSplit.test.d.ts.map +1 -0
- package/build/__tests__/unit/jsExecuteSplit.test.js +26 -0
- package/build/__tests__/unit/jsExecuteSplit.test.js.map +1 -0
- package/build/__tests__/unit/metroGateReconnect.test.js +71 -2
- package/build/__tests__/unit/metroGateReconnect.test.js.map +1 -1
- package/build/__tests__/unit/moduleRegistry.test.js +33 -7
- package/build/__tests__/unit/moduleRegistry.test.js.map +1 -1
- package/build/__tests__/unit/navigateUnmounted.test.d.ts +2 -0
- package/build/__tests__/unit/navigateUnmounted.test.d.ts.map +1 -0
- package/build/__tests__/unit/navigateUnmounted.test.js +63 -0
- package/build/__tests__/unit/navigateUnmounted.test.js.map +1 -0
- package/build/__tests__/unit/pressablesPrunedRoute.test.d.ts +2 -0
- package/build/__tests__/unit/pressablesPrunedRoute.test.d.ts.map +1 -0
- package/build/__tests__/unit/pressablesPrunedRoute.test.js +68 -0
- package/build/__tests__/unit/pressablesPrunedRoute.test.js.map +1 -0
- package/build/__tests__/unit/reloadAppStateNote.test.d.ts +2 -0
- package/build/__tests__/unit/reloadAppStateNote.test.d.ts.map +1 -0
- package/build/__tests__/unit/reloadAppStateNote.test.js +65 -0
- package/build/__tests__/unit/reloadAppStateNote.test.js.map +1 -0
- package/build/__tests__/unit/screenStateMeasureWait.test.d.ts +2 -0
- package/build/__tests__/unit/screenStateMeasureWait.test.d.ts.map +1 -0
- package/build/__tests__/unit/screenStateMeasureWait.test.js +49 -0
- package/build/__tests__/unit/screenStateMeasureWait.test.js.map +1 -0
- package/build/__tests__/unit/tapTestIdSettle.test.d.ts +2 -0
- package/build/__tests__/unit/tapTestIdSettle.test.d.ts.map +1 -0
- package/build/__tests__/unit/tapTestIdSettle.test.js +136 -0
- package/build/__tests__/unit/tapTestIdSettle.test.js.map +1 -0
- package/build/__tests__/unit/waitForMeasurements.test.js +16 -1
- package/build/__tests__/unit/waitForMeasurements.test.js.map +1 -1
- package/build/core/connection.d.ts +6 -0
- package/build/core/connection.d.ts.map +1 -1
- package/build/core/connection.js +42 -1
- package/build/core/connection.js.map +1 -1
- package/build/core/debugGlobals.d.ts +1 -0
- package/build/core/debugGlobals.d.ts.map +1 -1
- package/build/core/debugGlobals.js +5 -31
- package/build/core/debugGlobals.js.map +1 -1
- package/build/core/deviceResolver.d.ts.map +1 -1
- package/build/core/deviceResolver.js +17 -1
- package/build/core/deviceResolver.js.map +1 -1
- package/build/core/guides.d.ts.map +1 -1
- package/build/core/guides.js +7 -1
- package/build/core/guides.js.map +1 -1
- package/build/core/ios.d.ts +1 -1
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +2 -2
- package/build/core/ios.js.map +1 -1
- package/build/core/jsExecute.d.ts.map +1 -1
- package/build/core/jsExecute.js +31 -1
- package/build/core/jsExecute.js.map +1 -1
- package/build/core/measureWait.d.ts +14 -0
- package/build/core/measureWait.d.ts.map +1 -0
- package/build/core/measureWait.js +35 -0
- package/build/core/measureWait.js.map +1 -0
- package/build/core/moduleRegistry.d.ts.map +1 -1
- package/build/core/moduleRegistry.js +19 -6
- package/build/core/moduleRegistry.js.map +1 -1
- package/build/core/nativeOnlyHints.d.ts +5 -1
- package/build/core/nativeOnlyHints.d.ts.map +1 -1
- package/build/core/nativeOnlyHints.js +22 -4
- package/build/core/nativeOnlyHints.js.map +1 -1
- package/build/core/navigate.d.ts +1 -0
- package/build/core/navigate.d.ts.map +1 -1
- package/build/core/navigate.js +44 -4
- package/build/core/navigate.js.map +1 -1
- package/build/core/navigation.d.ts.map +1 -1
- package/build/core/navigation.js +17 -2
- package/build/core/navigation.js.map +1 -1
- package/build/core/netInfoPatch.d.ts.map +1 -1
- package/build/core/netInfoPatch.js +2 -1
- package/build/core/netInfoPatch.js.map +1 -1
- package/build/core/pressables.d.ts +0 -12
- package/build/core/pressables.d.ts.map +1 -1
- package/build/core/pressables.js +28 -35
- package/build/core/pressables.js.map +1 -1
- package/build/core/screenLayout.d.ts.map +1 -1
- package/build/core/screenLayout.js +9 -1
- package/build/core/screenLayout.js.map +1 -1
- package/build/core/screenState.d.ts.map +1 -1
- package/build/core/screenState.js +18 -2
- package/build/core/screenState.js.map +1 -1
- package/build/pro/tap.d.ts +1 -0
- package/build/pro/tap.d.ts.map +1 -1
- package/build/pro/tap.js +56 -23
- package/build/pro/tap.js.map +1 -1
- package/build/pro/verifyAction.js +1 -1
- package/build/pro/verifyAction.js.map +1 -1
- package/build/tools/interactionTools.d.ts +10 -0
- package/build/tools/interactionTools.d.ts.map +1 -1
- package/build/tools/interactionTools.js +14 -2
- package/build/tools/interactionTools.js.map +1 -1
- package/build/tools/navigationTools.d.ts.map +1 -1
- package/build/tools/navigationTools.js +2 -0
- package/build/tools/navigationTools.js.map +1 -1
- package/package.json +1 -1
- package/tools.json +1 -0
|
@@ -17,31 +17,44 @@ var __eb_require = (function () {
|
|
|
17
17
|
cache = entries;
|
|
18
18
|
return cache;
|
|
19
19
|
}
|
|
20
|
+
var EXT = /\\.(jsx?|tsx?)$/;
|
|
20
21
|
return function (name) {
|
|
21
22
|
var entries = index();
|
|
22
23
|
if (!entries) {
|
|
23
|
-
|
|
24
|
+
throw new Error('Metro module registry is unavailable (globalThis.__r missing or has no getModules). Only pre-existing globals are reachable.');
|
|
24
25
|
}
|
|
25
26
|
if (entries.length === 0) {
|
|
26
|
-
|
|
27
|
+
throw new Error('Metro module registry exposed no module names (verboseName absent, likely a minified bundle). Only pre-existing globals are reachable.');
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
+
// './src/a' and '../src/a' name the registry's 'src/a.ts' or 'src/a/index.ts'.
|
|
30
|
+
var needle = String(name).replace(/^(\\.\\.?\\/)+/, '');
|
|
31
|
+
var base = needle.replace(EXT, '');
|
|
32
|
+
var wanted = [needle];
|
|
33
|
+
var exts = ['.ts', '.tsx', '.js', '.jsx'];
|
|
34
|
+
for (var x = 0; x < exts.length; x++) wanted.push(base + exts[x], base + '/index' + exts[x]);
|
|
29
35
|
var exact = [];
|
|
30
36
|
var partial = [];
|
|
31
37
|
for (var i = 0; i < entries.length; i++) {
|
|
32
38
|
var n = entries[i].name;
|
|
33
|
-
if (n
|
|
39
|
+
if (wanted.indexOf(n) !== -1) exact.push(entries[i]);
|
|
34
40
|
else if (n.indexOf(needle) !== -1) partial.push(entries[i]);
|
|
35
41
|
}
|
|
36
42
|
var hits = exact.length ? exact : partial;
|
|
37
43
|
if (hits.length === 0) {
|
|
38
|
-
|
|
44
|
+
var last = base.split('/').pop().toLowerCase();
|
|
45
|
+
var near = [];
|
|
46
|
+
for (var j = 0; j < entries.length && near.length < 5; j++) {
|
|
47
|
+
if (entries[j].name.replace(EXT, '').split('/').pop().toLowerCase() === last) near.push(entries[j].name);
|
|
48
|
+
}
|
|
49
|
+
throw new Error('require: no module matching "' + needle + '". ' +
|
|
50
|
+
(near.length ? 'Did you mean: ' + near.join(', ') + '? ' : 'Try a longer path fragment; ') +
|
|
51
|
+
entries.length + ' modules are loaded.');
|
|
39
52
|
}
|
|
40
53
|
hits.sort(function (a, b) { return a.name.length - b.name.length; });
|
|
41
54
|
try {
|
|
42
55
|
return globalThis.__r(hits[0].id);
|
|
43
56
|
} catch (e) {
|
|
44
|
-
|
|
57
|
+
throw new Error('require: module "' + hits[0].name + '" failed to evaluate: ' + String(e && e.message ? e.message : e));
|
|
45
58
|
}
|
|
46
59
|
};
|
|
47
60
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moduleRegistry.js","sourceRoot":"","sources":["../../src/core/moduleRegistry.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,kBAAkB;IAC9B,OAAO
|
|
1
|
+
{"version":3,"file":"moduleRegistry.js","sourceRoot":"","sources":["../../src/core/moduleRegistry.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,kBAAkB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DV,CAAC,IAAI,EAAE,CAAC;AACT,CAAC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import type { AutoConnectOutcome } from "./connection.js";
|
|
1
2
|
export declare function hasMetro(): boolean;
|
|
3
|
+
export declare function takeLastAutoConnect(): AutoConnectOutcome | null;
|
|
2
4
|
export declare function reconnectingDeviceNames(): string[];
|
|
3
5
|
export declare function awaitMetro(options?: {
|
|
4
6
|
timeoutMs?: number;
|
|
5
7
|
sleep?: (ms: number) => Promise<void>;
|
|
8
|
+
connect?: () => Promise<AutoConnectOutcome>;
|
|
6
9
|
}): Promise<boolean>;
|
|
7
10
|
export type NativeDeviceAvailability = {
|
|
8
11
|
ios: boolean;
|
|
@@ -14,7 +17,8 @@ export type MetroMissingHintOptions = {
|
|
|
14
17
|
toolName: string;
|
|
15
18
|
devices?: NativeDeviceAvailability;
|
|
16
19
|
reconnecting?: string[];
|
|
20
|
+
autoConnect?: AutoConnectOutcome;
|
|
17
21
|
};
|
|
18
|
-
export declare function buildMetroMissingHint({ toolName, devices, reconnecting }: MetroMissingHintOptions): string;
|
|
22
|
+
export declare function buildMetroMissingHint({ toolName, devices, reconnecting, autoConnect }: MetroMissingHintOptions): string;
|
|
19
23
|
export declare function metroMissingHintIfAbsent(toolName: string): Promise<string>;
|
|
20
24
|
//# sourceMappingURL=nativeOnlyHints.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeOnlyHints.d.ts","sourceRoot":"","sources":["../../src/core/nativeOnlyHints.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"nativeOnlyHints.d.ts","sourceRoot":"","sources":["../../src/core/nativeOnlyHints.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAcD,wBAAgB,mBAAmB,IAAI,kBAAkB,GAAG,IAAI,CAI/D;AAGD,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAKlD;AAYD,wBAAsB,UAAU,CAAC,OAAO,GAAE;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC1C,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBxB;AAED,MAAM,MAAM,wBAAwB,GAAG;IACnC,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAQ7E;AAcD,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,wBAAwB,CAAC;IAEnC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,WAAW,CAAC,EAAE,kBAAkB,CAAC;CACpC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,uBAAuB,GAAG,MAAM,CAoCvH;AAID,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhF"}
|
|
@@ -7,6 +7,12 @@ export function hasMetro() {
|
|
|
7
7
|
}
|
|
8
8
|
const METRO_WAIT_POLL_MS = 100;
|
|
9
9
|
const METRO_WAIT_BUDGET_MS = 2000;
|
|
10
|
+
let lastAutoConnect = null;
|
|
11
|
+
export function takeLastAutoConnect() {
|
|
12
|
+
const outcome = lastAutoConnect;
|
|
13
|
+
lastAutoConnect = null;
|
|
14
|
+
return outcome;
|
|
15
|
+
}
|
|
10
16
|
export function reconnectingDeviceNames() {
|
|
11
17
|
return pendingReconnectionKeys().map((key) => {
|
|
12
18
|
const meta = getConnectionMetadata(key);
|
|
@@ -14,10 +20,14 @@ export function reconnectingDeviceNames() {
|
|
|
14
20
|
});
|
|
15
21
|
}
|
|
16
22
|
export async function awaitMetro(options = {}) {
|
|
23
|
+
lastAutoConnect = null;
|
|
17
24
|
if (hasMetro())
|
|
18
25
|
return true;
|
|
19
|
-
if (pendingReconnectionKeys().length === 0)
|
|
20
|
-
|
|
26
|
+
if (pendingReconnectionKeys().length === 0) {
|
|
27
|
+
const connect = options.connect ?? (async () => (await import("./connection.js")).autoConnectAllMetro());
|
|
28
|
+
lastAutoConnect = await connect();
|
|
29
|
+
return hasMetro();
|
|
30
|
+
}
|
|
21
31
|
const budget = options.timeoutMs ?? METRO_WAIT_BUDGET_MS;
|
|
22
32
|
const sleep = options.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
|
|
23
33
|
for (let waited = 0; waited < budget; waited += METRO_WAIT_POLL_MS) {
|
|
@@ -45,7 +55,7 @@ const NATIVE_FALLBACKS = {
|
|
|
45
55
|
get_request_details: [],
|
|
46
56
|
get_screen_layout: [],
|
|
47
57
|
};
|
|
48
|
-
export function buildMetroMissingHint({ toolName, devices, reconnecting }) {
|
|
58
|
+
export function buildMetroMissingHint({ toolName, devices, reconnecting, autoConnect }) {
|
|
49
59
|
const fallbacks = NATIVE_FALLBACKS[toolName] ?? [];
|
|
50
60
|
const lines = [];
|
|
51
61
|
lines.push("[NO METRO] This tool reads data from the JS runtime, which requires an attached debugger.");
|
|
@@ -53,6 +63,13 @@ export function buildMetroMissingHint({ toolName, devices, reconnecting }) {
|
|
|
53
63
|
lines.push(`${reconnecting.join(", ")} dropped its debugger connection and is reconnecting — it did not come back within the wait budget. ` +
|
|
54
64
|
`Retry this call in a moment; if it keeps failing, the app is crashing or reloading repeatedly (check get_connection_status).`);
|
|
55
65
|
}
|
|
66
|
+
else if (autoConnect && autoConnect.ports.length === 0) {
|
|
67
|
+
lines.push("Scanned Metro ports 8081 to 8090: nothing is listening. If Metro runs on another port, call connect_metro({ port }). Otherwise start Metro and the app, then call scan_metro.");
|
|
68
|
+
}
|
|
69
|
+
else if (autoConnect) {
|
|
70
|
+
const { ports, failures } = autoConnect;
|
|
71
|
+
lines.push(`Found Metro on port ${ports.join(", ")}, but no app attached: ${failures.join("; ")}. Right after a launch the bundle may still be loading: ensure_connection({ waitMs: 60000 }) waits for the app. Otherwise call scan_metro.`);
|
|
72
|
+
}
|
|
56
73
|
else if (devices?.any) {
|
|
57
74
|
const platformsSeen = [];
|
|
58
75
|
if (devices.ios)
|
|
@@ -71,10 +88,11 @@ export function buildMetroMissingHint({ toolName, devices, reconnecting }) {
|
|
|
71
88
|
return lines.join("\n");
|
|
72
89
|
}
|
|
73
90
|
export async function metroMissingHintIfAbsent(toolName) {
|
|
91
|
+
const autoConnect = takeLastAutoConnect() ?? undefined;
|
|
74
92
|
if (hasMetro())
|
|
75
93
|
return "";
|
|
76
94
|
const reconnecting = reconnectingDeviceNames();
|
|
77
95
|
const devices = await detectNativeDevices();
|
|
78
|
-
return "\n\n" + buildMetroMissingHint({ toolName, devices, reconnecting });
|
|
96
|
+
return "\n\n" + buildMetroMissingHint({ toolName, devices, reconnecting, autoConnect });
|
|
79
97
|
}
|
|
80
98
|
//# sourceMappingURL=nativeOnlyHints.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeOnlyHints.js","sourceRoot":"","sources":["../../src/core/nativeOnlyHints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,8BAA8B,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"nativeOnlyHints.js","sourceRoot":"","sources":["../../src/core/nativeOnlyHints.ts"],"names":[],"mappings":"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"}
|
package/build/core/navigate.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../src/core/navigate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAKH,KAAK,SAAS,EACjB,MAAM,iBAAiB,CAAC;AAYzB,eAAO,MAAM,cAAc,UAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../src/core/navigate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAKH,KAAK,SAAS,EACjB,MAAM,iBAAiB,CAAC;AAYzB,eAAO,MAAM,cAAc,UAAuB,CAAC;AAKnD,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CAC1B;AAOD,wBAAgB,yBAAyB,CACrC,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,OAAO,EAAE,OAAO,GACjB,iBAAiB,CAGnB;AAED,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,SAAS,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAwED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoHjG"}
|
package/build/core/navigate.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { executeInApp } from "./jsExecute.js";
|
|
2
2
|
import { buildNavHandlesSource, buildRouteTableSource, buildNearestRoutesSource, buildNavigateSource } from "./navigation.js";
|
|
3
3
|
export const POLL_DELAYS_MS = [150, 350, 600, 900];
|
|
4
|
+
const PARENT_POLL_DELAYS_MS = [150, 350, 600];
|
|
4
5
|
export function classifyNavigationOutcome(before, after, settled) {
|
|
5
6
|
if (!settled)
|
|
6
7
|
return { changed: false, indeterminate: true };
|
|
@@ -31,6 +32,36 @@ function readStateExpression() {
|
|
|
31
32
|
return JSON.stringify({ current: t.current, currentId: t.currentId, stack: stack, all: t.all });
|
|
32
33
|
})()`;
|
|
33
34
|
}
|
|
35
|
+
function performSource(action, to, params) {
|
|
36
|
+
return `(function(){ ${preamble()}
|
|
37
|
+
return JSON.stringify(${buildNavigateSource(action, to, params ?? null)});
|
|
38
|
+
})()`;
|
|
39
|
+
}
|
|
40
|
+
async function readCurrentRoute(device) {
|
|
41
|
+
const read = await executeInApp(readStateExpression(), false, { originatingToolName: "navigate" }, device);
|
|
42
|
+
if (!read.success)
|
|
43
|
+
return null;
|
|
44
|
+
try {
|
|
45
|
+
return JSON.parse(String(read.result)).current;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async function navigateThroughParent(to, params, parents, device) {
|
|
52
|
+
const nested = params ? { screen: to, params } : { screen: to };
|
|
53
|
+
for (const parent of parents) {
|
|
54
|
+
const performed = await executeInApp(performSource("navigate", parent, nested), false, { originatingToolName: "navigate" }, device);
|
|
55
|
+
if (!performed.success)
|
|
56
|
+
continue;
|
|
57
|
+
for (const delay of PARENT_POLL_DELAYS_MS) {
|
|
58
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
59
|
+
if (await readCurrentRoute(device) === to)
|
|
60
|
+
return parent;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
34
65
|
export async function performNavigation(opts) {
|
|
35
66
|
const { action, to = null, params, device, includeRouteTable } = opts;
|
|
36
67
|
if (action !== "back" && action !== "reset" && !to && includeRouteTable === true) {
|
|
@@ -50,10 +81,7 @@ export async function performNavigation(opts) {
|
|
|
50
81
|
}
|
|
51
82
|
}
|
|
52
83
|
}
|
|
53
|
-
const
|
|
54
|
-
return JSON.stringify(${buildNavigateSource(action, to, params ?? null)});
|
|
55
|
-
})()`;
|
|
56
|
-
const performed = await executeInApp(perform, false, { originatingToolName: "navigate" }, device);
|
|
84
|
+
const performed = await executeInApp(performSource(action, to, params), false, { originatingToolName: "navigate" }, device);
|
|
57
85
|
if (!performed.success) {
|
|
58
86
|
return {
|
|
59
87
|
success: false, kind: null, action, to,
|
|
@@ -73,6 +101,18 @@ export async function performNavigation(opts) {
|
|
|
73
101
|
};
|
|
74
102
|
}
|
|
75
103
|
const before = head.before ?? null;
|
|
104
|
+
if (!head.ok && action === "navigate" && to && head.parents && head.parents.length > 0) {
|
|
105
|
+
const via = await navigateThroughParent(to, params, head.parents, device);
|
|
106
|
+
if (via) {
|
|
107
|
+
return {
|
|
108
|
+
success: true, kind: head.kind, action, to,
|
|
109
|
+
route: { before, after: to }, changed: true, indeterminate: false, via
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
if (before)
|
|
113
|
+
await executeInApp(performSource("navigate", before, undefined), false, { originatingToolName: "navigate" }, device);
|
|
114
|
+
head.error = `${head.error ?? "Navigation failed"} Tried: ${head.parents.join(", ")}${before ? ` (navigated back to ${before})` : ""}.`;
|
|
115
|
+
}
|
|
76
116
|
if (!head.ok) {
|
|
77
117
|
const routes = head.routes ?? [];
|
|
78
118
|
const shown = routes.slice(0, 12);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../src/core/navigate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EAEtB,MAAM,iBAAiB,CAAC;AAYzB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../src/core/navigate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/core/navigation.ts"],"names":[],"mappings":"AA0BA,wBAAgB,qBAAqB,IAAI,MAAM,CAqH9C;AAeD,wBAAgB,qBAAqB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/core/navigation.ts"],"names":[],"mappings":"AA0BA,wBAAgB,qBAAqB,IAAI,MAAM,CAqH9C;AAeD,wBAAgB,qBAAqB,IAAI,MAAM,CAyC9C;AAeD,wBAAgB,wBAAwB,IAAI,MAAM,CAwCjD;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAa3E,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,GAAG,IAAI,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACvC,MAAM,CA6FR"}
|
package/build/core/navigation.js
CHANGED
|
@@ -121,7 +121,7 @@ var __eb_nav = (function () {
|
|
|
121
121
|
export function buildRouteTableSource() {
|
|
122
122
|
return `
|
|
123
123
|
function __eb_routeTable() {
|
|
124
|
-
var out = { levels: [], all: [], paths: {}, current: null, currentId: null };
|
|
124
|
+
var out = { levels: [], all: [], paths: {}, mounted: {}, current: null, currentId: null };
|
|
125
125
|
var reader = __eb_nav && __eb_nav.stateReader;
|
|
126
126
|
if (!reader || typeof reader.getRootState !== 'function') return out;
|
|
127
127
|
var root;
|
|
@@ -140,7 +140,10 @@ function __eb_routeTable() {
|
|
|
140
140
|
}
|
|
141
141
|
if (st.routes) {
|
|
142
142
|
for (var j = 0; j < st.routes.length; j++) {
|
|
143
|
-
if (st.routes[j] && st.routes[j].state)
|
|
143
|
+
if (st.routes[j] && st.routes[j].state) {
|
|
144
|
+
out.mounted[st.routes[j].name] = 1;
|
|
145
|
+
collect(st.routes[j].state, d + 1, chain.concat([st.routes[j].name]));
|
|
146
|
+
}
|
|
144
147
|
}
|
|
145
148
|
}
|
|
146
149
|
}
|
|
@@ -233,10 +236,22 @@ export function buildNavigateSource(action, to, params) {
|
|
|
233
236
|
? 'Did you mean: ' + suggestions.join(', ') + (extra > 0 ? ' (' + extra + ' other routes registered)' : '')
|
|
234
237
|
: 'Registered: ' + table.all.slice(0, 40).join(', ') + (table.all.length > 40 ? ' (+' + (table.all.length - 40) + ' more)' : '') + '.' +
|
|
235
238
|
' Screens of a navigator that has not mounted yet (a tab not visited since launch) are not listed: navigate to its parent route first.';
|
|
239
|
+
// A navigator that has not mounted carries no nested state, so its
|
|
240
|
+
// screens are missing from the table. These routes may hold the destination:
|
|
241
|
+
// nearest name first, then table order.
|
|
242
|
+
var parents = [];
|
|
243
|
+
for (var q = 0; q < table.all.length; q++) {
|
|
244
|
+
var pn = table.all[q];
|
|
245
|
+
if (pn !== before && !table.mounted[pn]) parents.push({ name: pn, d: __eb_editDistance(String(to).toLowerCase(), pn.toLowerCase()), i: q });
|
|
246
|
+
}
|
|
247
|
+
parents.sort(function (x, y) { return x.d - y.d || x.i - y.i; });
|
|
248
|
+
var parentNames = [];
|
|
249
|
+
for (var r = 0; r < parents.length && r < 8; r++) parentNames.push(parents[r].name);
|
|
236
250
|
return {
|
|
237
251
|
ok: false,
|
|
238
252
|
kind: nav.kind,
|
|
239
253
|
before: before,
|
|
254
|
+
parents: parentNames,
|
|
240
255
|
error: 'No route named "' + to + '" is registered. ' + hint +
|
|
241
256
|
' (React Navigation takes route NAMES, not paths - a path here is silently ignored.)'
|
|
242
257
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/core/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAyB1D,MAAM,UAAU,qBAAqB;IACjC,OAAO;EACT,kBAAkB,EAAE;EACpB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiHf,CAAC,IAAI,EAAE,CAAC;AACT,CAAC;AAeD,MAAM,UAAU,qBAAqB;IACjC,OAAO
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/core/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAyB1D,MAAM,UAAU,qBAAqB;IACjC,OAAO;EACT,kBAAkB,EAAE;EACpB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiHf,CAAC,IAAI,EAAE,CAAC;AACT,CAAC;AAeD,MAAM,UAAU,qBAAqB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCV,CAAC,IAAI,EAAE,CAAC;AACT,CAAC;AAeD,MAAM,UAAU,wBAAwB;IACpC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCV,CAAC,IAAI,EAAE,CAAC;AACT,CAAC;AAeD,MAAM,UAAU,mBAAmB,CAC/B,MAAc,EACd,EAAiB,EACjB,MAAsC;IAEtC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAEzC,OAAO;mBACQ,SAAS;eACb,KAAK;mBACD,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoFvB,CAAC;AACN,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"netInfoPatch.d.ts","sourceRoot":"","sources":["../../src/core/netInfoPatch.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,oBAAoB,GAAG,eAAe,GAAG,SAAS,CAAC;AAoB5F,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"netInfoPatch.d.ts","sourceRoot":"","sources":["../../src/core/netInfoPatch.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,oBAAoB,GAAG,eAAe,GAAG,SAAS,CAAC;AAoB5F,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAoDhE;AASD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAqB/D;AAGD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAetE"}
|
|
@@ -19,7 +19,8 @@ ${buildRequireSource()}
|
|
|
19
19
|
if (s && s.isConnected === state.isConnected) probeFired = true;
|
|
20
20
|
});
|
|
21
21
|
|
|
22
|
-
var DEE =
|
|
22
|
+
var DEE = null;
|
|
23
|
+
try { DEE = __eb_require('react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js'); } catch (e) {}
|
|
23
24
|
var emitter = DEE && (DEE.default || DEE);
|
|
24
25
|
if (emitter && typeof emitter.emit === 'function') {
|
|
25
26
|
try { emitter.emit('netInfo.networkStatusDidChange', state); } catch (e) {}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"netInfoPatch.js","sourceRoot":"","sources":["../../src/core/netInfoPatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAuBzD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACpD,MAAM,KAAK,GAAG,OAAO;QACjB,CAAC,CAAC,iFAAiF;QACnF,CAAC,CAAC,kFAAkF,CAAC;IAEzF,OAAO;EACT,kBAAkB,EAAE;;;;;;gBAMN,KAAK
|
|
1
|
+
{"version":3,"file":"netInfoPatch.js","sourceRoot":"","sources":["../../src/core/netInfoPatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAuBzD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACpD,MAAM,KAAK,GAAG,OAAO;QACjB,CAAC,CAAC,iFAAiF;QACnF,CAAC,CAAC,kFAAkF,CAAC;IAEzF,OAAO;EACT,kBAAkB,EAAE;;;;;;gBAMN,KAAK;;;;;;;;;;;;;;;;;;;;QAoBb,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;;;;;;;;;;;;;;;;;;;0EAmBwC,CAAC;AAC3E,CAAC;AASD,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC3C,MAAM,KAAK,GAAqB,CAAC,SAAS,EAAE,oBAAoB,EAAE,eAAe,CAAC,CAAC;IACnF,IAAI,KAAK,GAAY,GAAG,CAAC;IAGzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,MAAM;QACrC,IAAI,CAAC;YACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,KAAK,GAAI,KAAiC,CAAC,OAAO,CAAC;QACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnE,OAAO,KAAuB,CAAC;QACnC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAGD,MAAM,UAAU,sBAAsB,CAAC,OAAuB;IAC1D,QAAQ,OAAO,EAAE,CAAC;QACd,KAAK,SAAS;YACV,OAAO,sFAAsF,CAAC;QAClG,KAAK,oBAAoB;YACrB,OAAO,CACH,wFAAwF;gBACxF,kFAAkF;gBAClF,gCAAgC,CACnC,CAAC;QACN,KAAK,eAAe;YAChB,OAAO,+GAA+G,CAAC;QAC3H;YACI,OAAO,6HAA6H,CAAC;IAC7I,CAAC;AACL,CAAC"}
|
|
@@ -1,16 +1,4 @@
|
|
|
1
1
|
import type { ExecutionResult } from "./types.js";
|
|
2
|
-
export declare const MEASURE_POLL_SCHEDULE_MS: number[];
|
|
3
|
-
export declare const MEASURE_POLL_DEADLINE_MS = 300;
|
|
4
|
-
export declare function waitForMeasurements(args: {
|
|
5
|
-
evaluatePending: () => Promise<number | null>;
|
|
6
|
-
now?: () => number;
|
|
7
|
-
sleep?: (ms: number) => Promise<void>;
|
|
8
|
-
}): Promise<{
|
|
9
|
-
pending: number | null;
|
|
10
|
-
polls: number;
|
|
11
|
-
waitedMs: number;
|
|
12
|
-
}>;
|
|
13
|
-
export declare function buildPendingMeasurementExpression(globalNames: string[]): string;
|
|
14
2
|
export declare function pressElement(options: {
|
|
15
3
|
text?: string;
|
|
16
4
|
testID?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pressables.d.ts","sourceRoot":"","sources":["../../src/core/pressables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"pressables.d.ts","sourceRoot":"","sources":["../../src/core/pressables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA0ClD,wBAAsB,YAAY,CAAC,OAAO,EAAE;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAKhB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,eAAe,CAAC,CAwxB3B"}
|
package/build/core/pressables.js
CHANGED
|
@@ -1,41 +1,10 @@
|
|
|
1
|
-
import { executeInApp
|
|
1
|
+
import { executeInApp } from "./jsExecute.js";
|
|
2
|
+
import { waitForMeasurements, buildPendingMeasurementExpression } from "./measureWait.js";
|
|
2
3
|
import { VISIBILITY_HELPERS_JS } from "./injected/visibility.js";
|
|
3
4
|
import { RN_PRIMITIVES_SRC } from "./injectedFilters.js";
|
|
4
5
|
import { SHEET_HELPERS_JS } from "./injected/sheetOffset.js";
|
|
5
6
|
import { FIBER_ROOTS_JS } from "./injected/fiberRoots.js";
|
|
6
7
|
import { SECURE_VALUE_JS } from "./injected/secureValue.js";
|
|
7
|
-
export const MEASURE_POLL_SCHEDULE_MS = [20, 40, 60, 100, 140];
|
|
8
|
-
export const MEASURE_POLL_DEADLINE_MS = 300;
|
|
9
|
-
export async function waitForMeasurements(args) {
|
|
10
|
-
const now = args.now ?? (() => Date.now());
|
|
11
|
-
const sleep = args.sleep ?? delay;
|
|
12
|
-
const start = now();
|
|
13
|
-
let pending = null;
|
|
14
|
-
let polls = 0;
|
|
15
|
-
for (const step of MEASURE_POLL_SCHEDULE_MS) {
|
|
16
|
-
await sleep(step);
|
|
17
|
-
pending = await args.evaluatePending();
|
|
18
|
-
polls++;
|
|
19
|
-
if (pending === null || pending === 0)
|
|
20
|
-
break;
|
|
21
|
-
if (now() - start >= MEASURE_POLL_DEADLINE_MS)
|
|
22
|
-
break;
|
|
23
|
-
}
|
|
24
|
-
return { pending, polls, waitedMs: now() - start };
|
|
25
|
-
}
|
|
26
|
-
export function buildPendingMeasurementExpression(globalNames) {
|
|
27
|
-
const list = globalNames.map((n) => `globalThis.${n}`).join(", ");
|
|
28
|
-
return `(function() {
|
|
29
|
-
var arrays = [${list}];
|
|
30
|
-
var pending = 0;
|
|
31
|
-
for (var a = 0; a < arrays.length; a++) {
|
|
32
|
-
var m = arrays[a];
|
|
33
|
-
if (!m) continue;
|
|
34
|
-
for (var i = 0; i < m.length; i++) { if (!m[i]) pending++; }
|
|
35
|
-
}
|
|
36
|
-
return pending;
|
|
37
|
-
})()`;
|
|
38
|
-
}
|
|
39
8
|
async function awaitMeasurements(globalNames, toolName, device) {
|
|
40
9
|
await waitForMeasurements({
|
|
41
10
|
evaluatePending: async () => {
|
|
@@ -251,6 +220,22 @@ export async function pressElement(options) {
|
|
|
251
220
|
|
|
252
221
|
var hostFibers = [];
|
|
253
222
|
var tapMeta = [];
|
|
223
|
+
// A testID inside a hidden scene: the route that holds it, so a miss can
|
|
224
|
+
// say "navigate there first" instead of looking like a typo.
|
|
225
|
+
var prunedRoute = null;
|
|
226
|
+
function routeHolding(fiber, routeName, d) {
|
|
227
|
+
if (!fiber || d > 400) return null;
|
|
228
|
+
var rp = fiber.memoizedProps;
|
|
229
|
+
if (rp && rp.route && typeof rp.route.name === 'string') routeName = rp.route.name;
|
|
230
|
+
if (rp && (rp.testID === searchTestID || rp.nativeID === searchTestID)) return routeName;
|
|
231
|
+
var rc = fiber.child;
|
|
232
|
+
while (rc) {
|
|
233
|
+
var hit = routeHolding(rc, routeName, d + 1);
|
|
234
|
+
if (hit) return hit;
|
|
235
|
+
rc = rc.sibling;
|
|
236
|
+
}
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
254
239
|
|
|
255
240
|
// Phase 1: Walk the entire tree, collect all pressable/input elements
|
|
256
241
|
function walkFiber(fiber, depth, path) {
|
|
@@ -258,7 +243,10 @@ export async function pressElement(options) {
|
|
|
258
243
|
var name = getComponentName(fiber);
|
|
259
244
|
var props = fiber.memoizedProps;
|
|
260
245
|
|
|
261
|
-
if (isScreenHidden(name, props))
|
|
246
|
+
if (isScreenHidden(name, props)) {
|
|
247
|
+
if (searchTestID !== null && prunedRoute === null) prunedRoute = routeHolding(fiber, null, 0);
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
262
250
|
|
|
263
251
|
var isPressable = isPressableProps(props) || isSwitchFiber(fiber, props);
|
|
264
252
|
var isInput = !isPressable && props && (typeof props.onChangeText === 'function' || typeof props.onFocus === 'function');
|
|
@@ -576,6 +564,7 @@ export async function pressElement(options) {
|
|
|
576
564
|
// Store host fibers and metadata globally for step 2, dispatch measureInWindow
|
|
577
565
|
globalThis.__tapHostFibers = hostFibers;
|
|
578
566
|
globalThis.__tapMeta = tapMeta;
|
|
567
|
+
globalThis.__tapPrunedRoute = prunedRoute;
|
|
579
568
|
globalThis.__tapMeasurements = new Array(hostFibers.length).fill(null);
|
|
580
569
|
globalThis.__tapSheetIdx = sheetIdxByHost;
|
|
581
570
|
globalThis.__tapSheetMeasurements = new Array(sheetFibers.length).fill(null);
|
|
@@ -638,6 +627,8 @@ export async function pressElement(options) {
|
|
|
638
627
|
var sheetMeasurements = globalThis.__tapSheetMeasurements || [];
|
|
639
628
|
var viewportM = globalThis.__tapViewport;
|
|
640
629
|
globalThis.__tapHostFibers = null;
|
|
630
|
+
var prunedRoute = globalThis.__tapPrunedRoute || null;
|
|
631
|
+
globalThis.__tapPrunedRoute = null;
|
|
641
632
|
globalThis.__tapMeta = null;
|
|
642
633
|
globalThis.__tapMeasurements = null;
|
|
643
634
|
globalThis.__tapSheetIdx = null;
|
|
@@ -763,10 +754,12 @@ export async function pressElement(options) {
|
|
|
763
754
|
existsInTree: true
|
|
764
755
|
};
|
|
765
756
|
}
|
|
766
|
-
|
|
757
|
+
var notFound = {
|
|
767
758
|
error: 'No pressable or focusable elements found matching: ' + criteria.join(', ') + '. The element is not present in the React tree on the current screen.',
|
|
768
759
|
existsInTree: false
|
|
769
760
|
};
|
|
761
|
+
if (prunedRoute) notFound.prunedRoute = prunedRoute;
|
|
762
|
+
return notFound;
|
|
770
763
|
}
|
|
771
764
|
|
|
772
765
|
if (targetIndex >= matches.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pressables.js","sourceRoot":"","sources":["../../src/core/pressables.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"pressables.js","sourceRoot":"","sources":["../../src/core/pressables.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenLayout.d.ts","sourceRoot":"","sources":["../../src/core/screenLayout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"screenLayout.d.ts","sourceRoot":"","sources":["../../src/core/screenLayout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAInF,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAM1F;AAMD,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAyND,wBAAgB,sBAAsB,CAClC,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,GAAE,OAAe,EACzB,SAAS,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACrE,MAAM,CAuCR;AAcD,wBAAsB,eAAe,CACjC,OAAO,GAAE;IACL,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAC/B,GACP,OAAO,CAAC,eAAe,GAAG;IACzB,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC,CA6nBD;AAoDD,wBAAsB,0BAA0B,CAC5C,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,MAAM,EAC7B,MAAM,CAAC,EAAE,MAAM,EACf,iBAAiB,GAAE,MAAU,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmDxB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { executeInApp, delay } from "./jsExecute.js";
|
|
2
|
+
import { waitForMeasurements, buildPendingMeasurementExpression } from "./measureWait.js";
|
|
2
3
|
import { VISIBILITY_HELPERS_JS } from "./injected/visibility.js";
|
|
3
4
|
import { SCREEN_SPACE_HELPER_JS } from "./screenSpace.js";
|
|
4
5
|
import { SHEET_HELPERS_JS } from "./injected/sheetOffset.js";
|
|
@@ -225,6 +226,7 @@ function formatOffScreenLine(names, position) {
|
|
|
225
226
|
const shown = names.slice(0, CAP).join(", ");
|
|
226
227
|
return `[... ${total} components ${position}: ${shown}, ... +${total - CAP} more]`;
|
|
227
228
|
}
|
|
229
|
+
const LAYOUT_PENDING_EXPR = buildPendingMeasurementExpression(["__layoutMeasurements", "__layoutSheetMeasurements"]);
|
|
228
230
|
export async function getScreenLayout(options = {}) {
|
|
229
231
|
const { extended = false, summary = false, device, raw = false, timeoutMs } = options;
|
|
230
232
|
const screenSpace = options.screenSpace ?? { platform: "ios", topInset: 0 };
|
|
@@ -507,7 +509,13 @@ export async function getScreenLayout(options = {}) {
|
|
|
507
509
|
}
|
|
508
510
|
if (dispatchError)
|
|
509
511
|
return { success: false, error: dispatchError };
|
|
510
|
-
await
|
|
512
|
+
await waitForMeasurements({
|
|
513
|
+
evaluatePending: async () => {
|
|
514
|
+
const r = await executeInApp(LAYOUT_PENDING_EXPR, false, { timeoutMs: 2000, maxRetries: 0, originatingToolName: "get_screen_layout" }, device);
|
|
515
|
+
const n = r.success ? Number(r.result) : NaN;
|
|
516
|
+
return Number.isFinite(n) ? n : null;
|
|
517
|
+
},
|
|
518
|
+
});
|
|
511
519
|
const resolveExpression = `
|
|
512
520
|
(function() {
|
|
513
521
|
var fibers = globalThis.__layoutFibers;
|