execbro 2.6.1 → 2.7.1
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 +5 -2
- package/build/__tests__/helpers/mock-harness.d.ts +35 -0
- package/build/__tests__/helpers/mock-harness.d.ts.map +1 -0
- package/build/__tests__/helpers/mock-harness.js +83 -0
- package/build/__tests__/helpers/mock-harness.js.map +1 -0
- package/build/__tests__/unit/androidEmulatorAvds.test.js +2 -1
- package/build/__tests__/unit/androidEmulatorAvds.test.js.map +1 -1
- package/build/__tests__/unit/buildToken.test.js +20 -3
- package/build/__tests__/unit/buildToken.test.js.map +1 -1
- package/build/__tests__/unit/commandInjection.test.d.ts +2 -0
- package/build/__tests__/unit/commandInjection.test.d.ts.map +1 -0
- package/build/__tests__/unit/commandInjection.test.js +55 -0
- package/build/__tests__/unit/commandInjection.test.js.map +1 -0
- package/build/__tests__/unit/deviceResolver.test.js +2 -0
- package/build/__tests__/unit/deviceResolver.test.js.map +1 -1
- package/build/__tests__/unit/deviceResolverStaleRetry.test.js +1 -0
- package/build/__tests__/unit/deviceResolverStaleRetry.test.js.map +1 -1
- package/build/__tests__/unit/errorCategorization.test.js +14 -0
- package/build/__tests__/unit/errorCategorization.test.js.map +1 -1
- package/build/__tests__/unit/fingerprint.test.js +2 -2
- package/build/__tests__/unit/fingerprint.test.js.map +1 -1
- package/build/__tests__/unit/inputTarget.test.js +46 -0
- package/build/__tests__/unit/inputTarget.test.js.map +1 -1
- package/build/__tests__/unit/logSourceAndroid.test.js +5 -5
- package/build/__tests__/unit/logSourceAndroid.test.js.map +1 -1
- package/build/__tests__/unit/logSourceIos.test.js +10 -6
- package/build/__tests__/unit/logSourceIos.test.js.map +1 -1
- package/build/__tests__/unit/logStack.test.d.ts +2 -0
- package/build/__tests__/unit/logStack.test.d.ts.map +1 -0
- package/build/__tests__/unit/logStack.test.js +86 -0
- package/build/__tests__/unit/logStack.test.js.map +1 -0
- package/build/__tests__/unit/logSymbolication.test.d.ts +2 -0
- package/build/__tests__/unit/logSymbolication.test.d.ts.map +1 -0
- package/build/__tests__/unit/logSymbolication.test.js +215 -0
- package/build/__tests__/unit/logSymbolication.test.js.map +1 -0
- package/build/__tests__/unit/measureComponentResolution.test.d.ts +2 -0
- package/build/__tests__/unit/measureComponentResolution.test.d.ts.map +1 -0
- package/build/__tests__/unit/measureComponentResolution.test.js +111 -0
- package/build/__tests__/unit/measureComponentResolution.test.js.map +1 -0
- package/build/__tests__/unit/metroIdentity.test.d.ts +2 -0
- package/build/__tests__/unit/metroIdentity.test.d.ts.map +1 -0
- package/build/__tests__/unit/metroIdentity.test.js +41 -0
- package/build/__tests__/unit/metroIdentity.test.js.map +1 -0
- package/build/__tests__/unit/mockRulePush.test.d.ts +2 -0
- package/build/__tests__/unit/mockRulePush.test.d.ts.map +1 -0
- package/build/__tests__/unit/mockRulePush.test.js +65 -0
- package/build/__tests__/unit/mockRulePush.test.js.map +1 -0
- package/build/__tests__/unit/mockRules.test.d.ts +2 -0
- package/build/__tests__/unit/mockRules.test.d.ts.map +1 -0
- package/build/__tests__/unit/mockRules.test.js +111 -0
- package/build/__tests__/unit/mockRules.test.js.map +1 -0
- package/build/__tests__/unit/nativeLogs.test.js +8 -2
- package/build/__tests__/unit/nativeLogs.test.js.map +1 -1
- package/build/__tests__/unit/netInfoPatch.test.d.ts +2 -0
- package/build/__tests__/unit/netInfoPatch.test.d.ts.map +1 -0
- package/build/__tests__/unit/netInfoPatch.test.js +46 -0
- package/build/__tests__/unit/netInfoPatch.test.js.map +1 -0
- package/build/__tests__/unit/networkInterceptorXhr.test.d.ts +2 -0
- package/build/__tests__/unit/networkInterceptorXhr.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkInterceptorXhr.test.js +440 -0
- package/build/__tests__/unit/networkInterceptorXhr.test.js.map +1 -0
- package/build/__tests__/unit/networkMock.test.d.ts +2 -0
- package/build/__tests__/unit/networkMock.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkMock.test.js +183 -0
- package/build/__tests__/unit/networkMock.test.js.map +1 -0
- package/build/__tests__/unit/networkMockRender.test.d.ts +2 -0
- package/build/__tests__/unit/networkMockRender.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkMockRender.test.js +131 -0
- package/build/__tests__/unit/networkMockRender.test.js.map +1 -0
- package/build/__tests__/unit/networkMockTamper.test.d.ts +2 -0
- package/build/__tests__/unit/networkMockTamper.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkMockTamper.test.js +162 -0
- package/build/__tests__/unit/networkMockTamper.test.js.map +1 -0
- package/build/__tests__/unit/networkMockTool.test.d.ts +2 -0
- package/build/__tests__/unit/networkMockTool.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkMockTool.test.js +69 -0
- package/build/__tests__/unit/networkMockTool.test.js.map +1 -0
- package/build/__tests__/unit/networkReplay.test.d.ts +2 -0
- package/build/__tests__/unit/networkReplay.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkReplay.test.js +86 -0
- package/build/__tests__/unit/networkReplay.test.js.map +1 -0
- package/build/__tests__/unit/screenState.test.js +63 -2
- package/build/__tests__/unit/screenState.test.js.map +1 -1
- package/build/__tests__/unit/serialQueue.test.d.ts +2 -0
- package/build/__tests__/unit/serialQueue.test.d.ts.map +1 -0
- package/build/__tests__/unit/serialQueue.test.js +77 -0
- package/build/__tests__/unit/serialQueue.test.js.map +1 -0
- package/build/__tests__/unit/swipeDiagnosis.test.d.ts +2 -0
- package/build/__tests__/unit/swipeDiagnosis.test.d.ts.map +1 -0
- package/build/__tests__/unit/swipeDiagnosis.test.js +47 -0
- package/build/__tests__/unit/swipeDiagnosis.test.js.map +1 -0
- package/build/__tests__/unit/swipeDirection.test.js +30 -0
- package/build/__tests__/unit/swipeDirection.test.js.map +1 -1
- package/build/__tests__/unit/symbolicate.test.js +36 -0
- package/build/__tests__/unit/symbolicate.test.js.map +1 -1
- package/build/__tests__/unit/tap.test.js +0 -48
- package/build/__tests__/unit/tap.test.js.map +1 -1
- package/build/__tests__/unit/textEntry.test.js +53 -0
- package/build/__tests__/unit/textEntry.test.js.map +1 -1
- package/build/__tests__/unit/toolArgInjection.test.d.ts +2 -0
- package/build/__tests__/unit/toolArgInjection.test.d.ts.map +1 -0
- package/build/__tests__/unit/toolArgInjection.test.js +86 -0
- package/build/__tests__/unit/toolArgInjection.test.js.map +1 -0
- package/build/core/android.d.ts.map +1 -1
- package/build/core/android.js +54 -111
- package/build/core/android.js.map +1 -1
- package/build/core/androidForeground.d.ts +4 -0
- package/build/core/androidForeground.d.ts.map +1 -0
- package/build/core/androidForeground.js +34 -0
- package/build/core/androidForeground.js.map +1 -0
- package/build/core/androidSystemBars.d.ts +1 -1
- package/build/core/androidSystemBars.d.ts.map +1 -1
- package/build/core/androidSystemBars.js +5 -5
- package/build/core/androidSystemBars.js.map +1 -1
- package/build/core/appRequest.d.ts +1 -0
- package/build/core/appRequest.d.ts.map +1 -1
- package/build/core/appRequest.js +5 -2
- package/build/core/appRequest.js.map +1 -1
- package/build/core/buildInfo.d.ts +3 -0
- package/build/core/buildInfo.d.ts.map +1 -0
- package/build/core/buildInfo.js +6 -0
- package/build/core/buildInfo.js.map +1 -0
- package/build/core/componentSource.d.ts.map +1 -1
- package/build/core/componentSource.js +1 -1
- package/build/core/componentSource.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 +60 -5
- package/build/core/connection.js.map +1 -1
- package/build/core/deviceResolver.d.ts.map +1 -1
- package/build/core/deviceResolver.js +7 -1
- package/build/core/deviceResolver.js.map +1 -1
- package/build/core/exec.d.ts +5 -0
- package/build/core/exec.d.ts.map +1 -1
- package/build/core/exec.js +34 -1
- package/build/core/exec.js.map +1 -1
- package/build/core/fingerprint.d.ts.map +1 -1
- package/build/core/fingerprint.js +3 -3
- package/build/core/fingerprint.js.map +1 -1
- package/build/core/guides.d.ts.map +1 -1
- package/build/core/guides.js +21 -1
- package/build/core/guides.js.map +1 -1
- package/build/core/inputTarget.d.ts.map +1 -1
- package/build/core/inputTarget.js +42 -2
- package/build/core/inputTarget.js.map +1 -1
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +14 -17
- package/build/core/ios.js.map +1 -1
- package/build/core/jsLogEvents.d.ts.map +1 -1
- package/build/core/jsLogEvents.js +1 -0
- package/build/core/jsLogEvents.js.map +1 -1
- package/build/core/keyboardRaise.d.ts.map +1 -1
- package/build/core/keyboardRaise.js +3 -3
- package/build/core/keyboardRaise.js.map +1 -1
- package/build/core/logEventFormat.d.ts +2 -0
- package/build/core/logEventFormat.d.ts.map +1 -1
- package/build/core/logEventFormat.js +6 -1
- package/build/core/logEventFormat.js.map +1 -1
- package/build/core/logEvents.d.ts +2 -1
- package/build/core/logEvents.d.ts.map +1 -1
- package/build/core/logEvents.js.map +1 -1
- package/build/core/logSourceAndroid.d.ts +1 -1
- package/build/core/logSourceAndroid.d.ts.map +1 -1
- package/build/core/logSourceAndroid.js +9 -9
- package/build/core/logSourceAndroid.js.map +1 -1
- package/build/core/logSourceIos.d.ts +1 -1
- package/build/core/logSourceIos.d.ts.map +1 -1
- package/build/core/logSourceIos.js +9 -9
- package/build/core/logSourceIos.js.map +1 -1
- package/build/core/logStack.d.ts +6 -0
- package/build/core/logStack.d.ts.map +1 -0
- package/build/core/logStack.js +44 -0
- package/build/core/logStack.js.map +1 -0
- package/build/core/logSymbolication.d.ts +11 -0
- package/build/core/logSymbolication.d.ts.map +1 -0
- package/build/core/logSymbolication.js +91 -0
- package/build/core/logSymbolication.js.map +1 -0
- package/build/core/measureComponent.d.ts.map +1 -1
- package/build/core/measureComponent.js +45 -11
- package/build/core/measureComponent.js.map +1 -1
- package/build/core/metroIdentity.d.ts +8 -0
- package/build/core/metroIdentity.d.ts.map +1 -0
- package/build/core/metroIdentity.js +65 -0
- package/build/core/metroIdentity.js.map +1 -0
- package/build/core/mockRules.d.ts +30 -0
- package/build/core/mockRules.d.ts.map +1 -0
- package/build/core/mockRules.js +200 -0
- package/build/core/mockRules.js.map +1 -0
- package/build/core/nativeInputValue.js +6 -6
- package/build/core/nativeInputValue.js.map +1 -1
- package/build/core/nativeLogs.js +2 -2
- package/build/core/nativeLogs.js.map +1 -1
- package/build/core/netInfoPatch.d.ts +5 -0
- package/build/core/netInfoPatch.d.ts.map +1 -0
- package/build/core/netInfoPatch.js +88 -0
- package/build/core/netInfoPatch.js.map +1 -0
- package/build/core/network.d.ts.map +1 -1
- package/build/core/network.js +9 -0
- package/build/core/network.js.map +1 -1
- package/build/core/networkInterceptor.d.ts +6 -0
- package/build/core/networkInterceptor.d.ts.map +1 -1
- package/build/core/networkInterceptor.js +660 -13
- package/build/core/networkInterceptor.js.map +1 -1
- package/build/core/replay.d.ts +14 -0
- package/build/core/replay.d.ts.map +1 -0
- package/build/core/replay.js +14 -0
- package/build/core/replay.js.map +1 -0
- package/build/core/screenSpaceDevice.d.ts +5 -0
- package/build/core/screenSpaceDevice.d.ts.map +1 -1
- package/build/core/screenSpaceDevice.js +18 -0
- package/build/core/screenSpaceDevice.js.map +1 -1
- package/build/core/screenState.d.ts +8 -0
- package/build/core/screenState.d.ts.map +1 -1
- package/build/core/screenState.js +245 -32
- package/build/core/screenState.js.map +1 -1
- package/build/core/serialQueue.d.ts +6 -0
- package/build/core/serialQueue.d.ts.map +1 -0
- package/build/core/serialQueue.js +18 -0
- package/build/core/serialQueue.js.map +1 -0
- package/build/core/swipeDiagnosis.d.ts +17 -0
- package/build/core/swipeDiagnosis.d.ts.map +1 -0
- package/build/core/swipeDiagnosis.js +179 -0
- package/build/core/swipeDiagnosis.js.map +1 -0
- package/build/core/symbolicate.d.ts +2 -2
- package/build/core/symbolicate.d.ts.map +1 -1
- package/build/core/symbolicate.js +2 -2
- package/build/core/symbolicate.js.map +1 -1
- package/build/core/telemetry.d.ts.map +1 -1
- package/build/core/telemetry.js +5 -3
- package/build/core/telemetry.js.map +1 -1
- package/build/core/textEntry.d.ts +2 -0
- package/build/core/textEntry.d.ts.map +1 -1
- package/build/core/textEntry.js +30 -3
- package/build/core/textEntry.js.map +1 -1
- package/build/core/types.d.ts +11 -0
- package/build/core/types.d.ts.map +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +70 -9
- package/build/index.js.map +1 -1
- package/build/pro/tap.d.ts +6 -1
- package/build/pro/tap.d.ts.map +1 -1
- package/build/pro/tap.js +12 -3
- package/build/pro/tap.js.map +1 -1
- package/build/tools/componentTools.d.ts.map +1 -1
- package/build/tools/componentTools.js +12 -4
- package/build/tools/componentTools.js.map +1 -1
- package/build/tools/connectionTools.d.ts.map +1 -1
- package/build/tools/connectionTools.js +18 -0
- package/build/tools/connectionTools.js.map +1 -1
- package/build/tools/deviceTools.d.ts.map +1 -1
- package/build/tools/deviceTools.js +4 -1
- package/build/tools/deviceTools.js.map +1 -1
- package/build/tools/interactionTools.d.ts.map +1 -1
- package/build/tools/interactionTools.js +56 -14
- package/build/tools/interactionTools.js.map +1 -1
- package/build/tools/logTools.d.ts.map +1 -1
- package/build/tools/logTools.js +16 -3
- package/build/tools/logTools.js.map +1 -1
- package/build/tools/networkTools.d.ts.map +1 -1
- package/build/tools/networkTools.js +196 -4
- package/build/tools/networkTools.js.map +1 -1
- package/build/tools/requestTools.d.ts.map +1 -1
- package/build/tools/requestTools.js +93 -26
- package/build/tools/requestTools.js.map +1 -1
- package/package.json +3 -3
- package/tools.json +37 -1
- package/build/__tests__/helpers/fake-cdp-server.d.ts +0 -53
- package/build/__tests__/helpers/fake-cdp-server.d.ts.map +0 -1
- package/build/__tests__/helpers/fake-cdp-server.js +0 -116
- package/build/__tests__/helpers/fake-cdp-server.js.map +0 -1
- package/build/__tests__/helpers/tap-test-helpers.d.ts +0 -13
- package/build/__tests__/helpers/tap-test-helpers.d.ts.map +0 -1
- package/build/__tests__/helpers/tap-test-helpers.js +0 -103
- package/build/__tests__/helpers/tap-test-helpers.js.map +0 -1
- package/build/__tests__/integration/auto-reconnect.test.d.ts +0 -2
- package/build/__tests__/integration/auto-reconnect.test.d.ts.map +0 -1
- package/build/__tests__/integration/auto-reconnect.test.js +0 -108
- package/build/__tests__/integration/auto-reconnect.test.js.map +0 -1
- package/build/__tests__/integration/connection-health.test.d.ts +0 -2
- package/build/__tests__/integration/connection-health.test.d.ts.map +0 -1
- package/build/__tests__/integration/connection-health.test.js +0 -155
- package/build/__tests__/integration/connection-health.test.js.map +0 -1
- package/build/__tests__/integration/execute-in-app.test.d.ts +0 -2
- package/build/__tests__/integration/execute-in-app.test.d.ts.map +0 -1
- package/build/__tests__/integration/execute-in-app.test.js +0 -114
- package/build/__tests__/integration/execute-in-app.test.js.map +0 -1
- package/build/__tests__/integration/native-logs.test.d.ts +0 -2
- package/build/__tests__/integration/native-logs.test.d.ts.map +0 -1
- package/build/__tests__/integration/native-logs.test.js +0 -34
- package/build/__tests__/integration/native-logs.test.js.map +0 -1
- package/build/__tests__/integration/per-call-timeout.test.d.ts +0 -2
- package/build/__tests__/integration/per-call-timeout.test.d.ts.map +0 -1
- package/build/__tests__/integration/per-call-timeout.test.js +0 -99
- package/build/__tests__/integration/per-call-timeout.test.js.map +0 -1
- package/build/__tests__/integration/socket-close-midflight.test.d.ts +0 -2
- package/build/__tests__/integration/socket-close-midflight.test.d.ts.map +0 -1
- package/build/__tests__/integration/socket-close-midflight.test.js +0 -96
- package/build/__tests__/integration/socket-close-midflight.test.js.map +0 -1
- package/build/__tests__/integration/stale-target-probe.test.d.ts +0 -2
- package/build/__tests__/integration/stale-target-probe.test.d.ts.map +0 -1
- package/build/__tests__/integration/stale-target-probe.test.js +0 -70
- package/build/__tests__/integration/stale-target-probe.test.js.map +0 -1
- package/build/__tests__/integration/tap-strategies.test.d.ts +0 -2
- package/build/__tests__/integration/tap-strategies.test.d.ts.map +0 -1
- package/build/__tests__/integration/tap-strategies.test.js +0 -296
- package/build/__tests__/integration/tap-strategies.test.js.map +0 -1
- package/build/__tests__/integration/text-input.test.d.ts +0 -2
- package/build/__tests__/integration/text-input.test.d.ts.map +0 -1
- package/build/__tests__/integration/text-input.test.js +0 -142
- package/build/__tests__/integration/text-input.test.js.map +0 -1
- package/build/__tests__/integration/tools.test.d.ts +0 -2
- package/build/__tests__/integration/tools.test.d.ts.map +0 -1
- package/build/__tests__/integration/tools.test.js +0 -221
- package/build/__tests__/integration/tools.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networkInterceptor.js","sourceRoot":"","sources":["../../src/core/networkInterceptor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"networkInterceptor.js","sourceRoot":"","sources":["../../src/core/networkInterceptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { NetworkBuffer } from "./network.js";
|
|
2
|
+
export interface ReplayArgs {
|
|
3
|
+
method: string;
|
|
4
|
+
url: string;
|
|
5
|
+
headers: Record<string, string>;
|
|
6
|
+
body?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function buildReplayArgs(buffer: NetworkBuffer, requestId: string, overrides: {
|
|
9
|
+
method?: string;
|
|
10
|
+
url?: string;
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
body?: string;
|
|
13
|
+
}): ReplayArgs;
|
|
14
|
+
//# sourceMappingURL=replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/core/replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AASD,wBAAgB,eAAe,CAC3B,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,GACF,UAAU,CAcZ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { UserInputError } from "./errors.js";
|
|
2
|
+
export function buildReplayArgs(buffer, requestId, overrides) {
|
|
3
|
+
const entry = buffer.get(requestId);
|
|
4
|
+
if (!entry) {
|
|
5
|
+
throw new UserInputError(`No captured request "${requestId}". Ids come from get_network_requests and are valid until the buffer rolls over or clear_network runs.`, "replay_unknown_request");
|
|
6
|
+
}
|
|
7
|
+
return {
|
|
8
|
+
method: overrides.method ?? entry.method,
|
|
9
|
+
url: overrides.url ?? entry.url,
|
|
10
|
+
headers: overrides.headers ?? entry.headers,
|
|
11
|
+
body: overrides.body ?? entry.postData
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/core/replay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgB7C,MAAM,UAAU,eAAe,CAC3B,MAAqB,EACrB,SAAiB,EACjB,SAKC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,cAAc,CACpB,wBAAwB,SAAS,wGAAwG,EACzI,wBAAwB,CAC3B,CAAC;IACN,CAAC;IACD,OAAO;QACH,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;QACxC,GAAG,EAAE,SAAS,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG;QAC/B,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;QAC3C,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ;KACzC,CAAC;AACN,CAAC"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { ScreenSpaceMetrics } from "./screenSpace.js";
|
|
2
|
+
export declare function resolveDeliveredScaleFactor(opts: {
|
|
3
|
+
platform: "ios" | "android";
|
|
4
|
+
udid?: string;
|
|
5
|
+
deviceId?: string;
|
|
6
|
+
}): Promise<number | undefined>;
|
|
2
7
|
export declare function resolveScreenSpaceMetrics(opts: {
|
|
3
8
|
platform: "ios" | "android";
|
|
4
9
|
udid?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenSpaceDevice.d.ts","sourceRoot":"","sources":["../../src/core/screenSpaceDevice.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"screenSpaceDevice.d.ts","sourceRoot":"","sources":["../../src/core/screenSpaceDevice.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AA6C3D,wBAAsB,2BAA2B,CAAC,IAAI,EAAE;IACpD,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkB9B;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE;IAClD,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAC;IAE5B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAiC9B"}
|
|
@@ -8,6 +8,24 @@ function pixelScaleFrom(deviceScale, pixelSize) {
|
|
|
8
8
|
return undefined;
|
|
9
9
|
return deviceScale / computeDeliveredDownscale(pixelSize.width, pixelSize.height);
|
|
10
10
|
}
|
|
11
|
+
export async function resolveDeliveredScaleFactor(opts) {
|
|
12
|
+
try {
|
|
13
|
+
const pixelSize = opts.platform === "ios"
|
|
14
|
+
? await getIOSScreenPixelSize(opts.udid).catch(() => null)
|
|
15
|
+
: await androidGetScreenSize(opts.deviceId)
|
|
16
|
+
.then((s) => (s && s.success && s.width && s.height ? { width: s.width, height: s.height } : null))
|
|
17
|
+
.catch(() => null);
|
|
18
|
+
if (!pixelSize)
|
|
19
|
+
return undefined;
|
|
20
|
+
const downscale = computeDeliveredDownscale(pixelSize.width, pixelSize.height);
|
|
21
|
+
if (!downscale || downscale <= 0)
|
|
22
|
+
return undefined;
|
|
23
|
+
return downscale;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
11
29
|
export async function resolveScreenSpaceMetrics(opts) {
|
|
12
30
|
if (opts.platform === "ios") {
|
|
13
31
|
const [inset, dpr, pixelSize] = await Promise.all([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenSpaceDevice.js","sourceRoot":"","sources":["../../src/core/screenSpaceDevice.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EACH,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,EACvB,MAAM,cAAc,CAAC;AAGtB,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAazC,SAAS,cAAc,CACnB,WAA0B,EAC1B,SAAmD;IAEnD,IAAI,CAAC,WAAW,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACrE,OAAO,WAAW,GAAG,yBAAyB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAM/C;IACG,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAG1B,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC9C,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC3C,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YAChD,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SACrD,CAAC,CAAC;QACH,OAAO;YACH,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK,IAAI,yBAAyB;YAC5C,UAAU,EAAE,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC;SAC7C,CAAC;IACN,CAAC;IACD,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1C,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QAC1D,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QAClD,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;KACxD,CAAC,CAAC;IAGH,MAAM,YAAY,GAAG,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;QAC9D,CAAC,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG;QACvB,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM;QAC/D,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;QAC5C,CAAC,CAAC,IAAI,CAAC;IACX,OAAO;QACH,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,6BAA6B;QAC5E,UAAU,EAAE,cAAc,CAAC,YAAY,EAAE,SAAS,CAAC;KACtD,CAAC;AACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"screenSpaceDevice.js","sourceRoot":"","sources":["../../src/core/screenSpaceDevice.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ export interface ScreenStatePressable {
|
|
|
21
21
|
nearbyText?: string | null;
|
|
22
22
|
blockedByOverlay?: boolean;
|
|
23
23
|
onPressHint?: string | null;
|
|
24
|
+
transformNote?: string | null;
|
|
24
25
|
}
|
|
25
26
|
export interface ScreenStateText {
|
|
26
27
|
text: string;
|
|
@@ -35,6 +36,7 @@ export interface ScreenStateText {
|
|
|
35
36
|
height: number;
|
|
36
37
|
};
|
|
37
38
|
blockedByOverlay?: boolean;
|
|
39
|
+
transformNote?: string | null;
|
|
38
40
|
}
|
|
39
41
|
export interface ScreenStateImage {
|
|
40
42
|
src?: string | null;
|
|
@@ -50,6 +52,7 @@ export interface ScreenStateImage {
|
|
|
50
52
|
height: number;
|
|
51
53
|
};
|
|
52
54
|
blockedByOverlay?: boolean;
|
|
55
|
+
transformNote?: string | null;
|
|
53
56
|
}
|
|
54
57
|
export interface ScreenStateOverlay {
|
|
55
58
|
type: "BottomSheet" | "Modal" | "Alert" | "ActionSheet" | "Unknown";
|
|
@@ -123,9 +126,14 @@ export declare function partitionByKeyboard<T extends {
|
|
|
123
126
|
blocked: T[];
|
|
124
127
|
};
|
|
125
128
|
export declare function formatInputState(p: ScreenStatePressable): string;
|
|
129
|
+
export declare function formatRouteParams(params: Record<string, unknown> | null | undefined, fullParams: boolean): string | null;
|
|
130
|
+
export declare function formatTransformTag(el: {
|
|
131
|
+
transformNote?: string | null;
|
|
132
|
+
}): string;
|
|
126
133
|
export declare function formatScreenStateSummary(ss: ScreenState, convert?: ItemCoordConverter, opts?: {
|
|
127
134
|
pressablesOnly?: boolean;
|
|
128
135
|
fullText?: boolean;
|
|
136
|
+
fullParams?: boolean;
|
|
129
137
|
keyboard?: KeyboardState;
|
|
130
138
|
pixelScale?: number;
|
|
131
139
|
}): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenState.d.ts","sourceRoot":"","sources":["../../src/core/screenState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,MAAM,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,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,OAAO,CAAC,EAAE,OAAO,CAAC;IAMlB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"screenState.d.ts","sourceRoot":"","sources":["../../src/core/screenState.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,13 +40,13 @@ function truncate(s, max) {
|
|
|
40
40
|
export function formatTextEntry(t, convert = identityCoords, opts = {}) {
|
|
41
41
|
const { center, frame } = convert(t);
|
|
42
42
|
const body = opts.fullText ? t.text : truncate(t.text, TEXT_DISPLAY_MAX);
|
|
43
|
-
return ` (${center.x}, ${center.y}) 📝 "${body}" frame:(${frame.x},${frame.y} ${frame.width}x${frame.height})`;
|
|
43
|
+
return ` (${center.x}, ${center.y}) 📝 "${body}" frame:(${frame.x},${frame.y} ${frame.width}x${frame.height})${formatTransformTag(t)}`;
|
|
44
44
|
}
|
|
45
45
|
export function formatImageEntry(img, convert = identityCoords) {
|
|
46
46
|
const { center, frame } = convert(img);
|
|
47
47
|
const src = img.src ? ` src="${truncate(img.src, IMAGE_SRC_DISPLAY_MAX)}"` : "";
|
|
48
48
|
const alt = img.alt ? ` alt="${img.alt}"` : "";
|
|
49
|
-
return ` (${center.x}, ${center.y}) 🖼 Image ${frame.width}x${frame.height}${src}${alt} frame:(${frame.x},${frame.y} ${frame.width}x${frame.height})`;
|
|
49
|
+
return ` (${center.x}, ${center.y}) 🖼 Image ${frame.width}x${frame.height}${src}${alt} frame:(${frame.x},${frame.y} ${frame.width}x${frame.height})${formatTransformTag(img)}`;
|
|
50
50
|
}
|
|
51
51
|
const TEXT_CAP = 60;
|
|
52
52
|
const IMAGE_CAP = 40;
|
|
@@ -82,14 +82,30 @@ export function formatInputState(p) {
|
|
|
82
82
|
? ` [input] empty, placeholder:${JSON.stringify(p.inputPlaceholder)}`
|
|
83
83
|
: " [input] empty";
|
|
84
84
|
}
|
|
85
|
+
export function formatRouteParams(params, fullParams) {
|
|
86
|
+
if (!params)
|
|
87
|
+
return null;
|
|
88
|
+
const keys = Object.keys(params);
|
|
89
|
+
if (keys.length === 0)
|
|
90
|
+
return null;
|
|
91
|
+
if (!fullParams) {
|
|
92
|
+
return ` route params: ${keys.join(", ")} (values: fullParams=true)`;
|
|
93
|
+
}
|
|
94
|
+
const json = JSON.stringify(params);
|
|
95
|
+
return ` route params: ${json.length > 600 ? json.slice(0, 600) + "…" : json}`;
|
|
96
|
+
}
|
|
97
|
+
export function formatTransformTag(el) {
|
|
98
|
+
if (!el.transformNote)
|
|
99
|
+
return "";
|
|
100
|
+
return ` ⚠transformed(${el.transformNote}) — frame is pre-transform, verify before tapping`;
|
|
101
|
+
}
|
|
85
102
|
export function formatScreenStateSummary(ss, convert = identityCoords, opts = {}) {
|
|
86
103
|
const lines = [];
|
|
87
104
|
if (ss.route) {
|
|
88
105
|
lines.push(`📍 Currently focused screen: "${ss.route.name}" [navigation stack: ${ss.route.stack.join(" > ")}]`);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
lines.push(
|
|
92
|
-
}
|
|
106
|
+
const paramLine = formatRouteParams(ss.route.params, opts.fullParams === true);
|
|
107
|
+
if (paramLine)
|
|
108
|
+
lines.push(paramLine);
|
|
93
109
|
}
|
|
94
110
|
else {
|
|
95
111
|
lines.push("📍 Currently focused screen: unknown (no React Navigation / Expo Router detected)");
|
|
@@ -114,7 +130,7 @@ export function formatScreenStateSummary(ss, convert = identityCoords, opts = {}
|
|
|
114
130
|
return ` (${center.x}, ${center.y})${marker}${p.component ? ` <${p.component} />` : ""} ${p.label ? `"${p.label}"` : "(unlabeled)"}` +
|
|
115
131
|
`${p.nearbyText ? ` near "${p.nearbyText}"` : ""}${p.onPressHint ? ` ${p.onPressHint}` : ""}` +
|
|
116
132
|
`${p.testID ? ` testID="${p.testID}"` : ""}${formatInputState(p)}` +
|
|
117
|
-
` frame:(${frame.x},${frame.y} ${frame.width}x${frame.height})`;
|
|
133
|
+
` frame:(${frame.x},${frame.y} ${frame.width}x${frame.height})${formatTransformTag(p)}`;
|
|
118
134
|
};
|
|
119
135
|
const renderGroup = (pressables, texts, images) => {
|
|
120
136
|
const out = [];
|
|
@@ -553,6 +569,106 @@ export async function getScreenState(options = {}) {
|
|
|
553
569
|
return typeof s === 'object' ? s : null;
|
|
554
570
|
}
|
|
555
571
|
|
|
572
|
+
// RN's own sticky-header implementation. It leaves the header at its natural layout
|
|
573
|
+
// position — far above the viewport once the list is scrolled — and pins it purely with
|
|
574
|
+
// translateY, so its measured frame is never where it is drawn. An exact marker, unlike
|
|
575
|
+
// "is animated", which is true of half the tab bars in existence.
|
|
576
|
+
var STICKY_OWNER = /^ScrollViewStickyHeader$/;
|
|
577
|
+
|
|
578
|
+
/** The current value of an Animated node, or null when it is not one / cannot be read. */
|
|
579
|
+
function animatedValueOf(v) {
|
|
580
|
+
if (!v || typeof v !== 'object') return null;
|
|
581
|
+
if (typeof v.__getValue !== 'function') return null;
|
|
582
|
+
try {
|
|
583
|
+
var got = v.__getValue();
|
|
584
|
+
return typeof got === 'number' && isFinite(got) ? got : null;
|
|
585
|
+
} catch (e) { return null; }
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
/** True for an Animated node handed to the native driver, whose JS value may be stale. */
|
|
589
|
+
function isNativeDriven(v) {
|
|
590
|
+
return !!(v && typeof v === 'object' && v.__isNative === true);
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
/**
|
|
594
|
+
* Resolve the transform chain above this fiber, up to the fiber root.
|
|
595
|
+
*
|
|
596
|
+
* Returns null when there is no transform at all, else { dx, dy, uncertain, label }:
|
|
597
|
+
* dx/dy are the best available composed translation, and the uncertain flag says
|
|
598
|
+
* whether that number can be trusted.
|
|
599
|
+
*
|
|
600
|
+
* The hard case is a native-driven transform. measureInWindow and getBoundingClientRect
|
|
601
|
+
* both read the shadow tree, so neither sees one — verified on RN 0.83/Fabric, where a
|
|
602
|
+
* pinned sticky header sat at y=132pt on screen while both APIs reported y=-1698pt. The
|
|
603
|
+
* JS-side style holds whatever was last committed, which for that header is translateY:0
|
|
604
|
+
* forever. So there is no way to be exactly right; the goal is to be exactly honest.
|
|
605
|
+
*
|
|
606
|
+
* Reading Animated nodes with __getValue() is what keeps this quiet enough to be worth
|
|
607
|
+
* reading: a resting tab bar composes to 0 and says nothing, instead of tagging every
|
|
608
|
+
* tab item on every screen and training the reader to ignore the tag.
|
|
609
|
+
*/
|
|
610
|
+
function transformStateOf(fiber) {
|
|
611
|
+
var dx = 0, dy = 0;
|
|
612
|
+
var uncertain = false;
|
|
613
|
+
var sticky = false;
|
|
614
|
+
var label = null;
|
|
615
|
+
var sawTransform = false;
|
|
616
|
+
var cur = fiber;
|
|
617
|
+
var steps = 0;
|
|
618
|
+
while (cur && steps < 30) {
|
|
619
|
+
var ownerName = getComponentName(cur);
|
|
620
|
+
if (ownerName && STICKY_OWNER.test(ownerName)) sticky = true;
|
|
621
|
+
|
|
622
|
+
var st = flattenStyle(cur.memoizedProps && cur.memoizedProps.style);
|
|
623
|
+
var t = st && st.transform;
|
|
624
|
+
if (t) {
|
|
625
|
+
sawTransform = true;
|
|
626
|
+
if (Array.isArray(t)) {
|
|
627
|
+
for (var i = 0; i < t.length; i++) {
|
|
628
|
+
var op = t[i];
|
|
629
|
+
if (!op || typeof op !== 'object') continue;
|
|
630
|
+
for (var key in op) {
|
|
631
|
+
var raw = op[key];
|
|
632
|
+
var val = typeof raw === 'number' && isFinite(raw) ? raw : animatedValueOf(raw);
|
|
633
|
+
if (val === null) {
|
|
634
|
+
// An opaque value: not a number and not a readable node.
|
|
635
|
+
uncertain = true;
|
|
636
|
+
if (!label) label = key + ':<unreadable>';
|
|
637
|
+
continue;
|
|
638
|
+
}
|
|
639
|
+
if (isNativeDriven(raw)) uncertain = true;
|
|
640
|
+
if (key === 'translateX') {
|
|
641
|
+
dx += val;
|
|
642
|
+
if (!label && val !== 0) label = 'translateX:' + val;
|
|
643
|
+
} else if (key === 'translateY') {
|
|
644
|
+
dy += val;
|
|
645
|
+
if (!label && val !== 0) label = 'translateY:' + val;
|
|
646
|
+
} else if (val !== 0 && !(key === 'scale' && val === 1) &&
|
|
647
|
+
!(key === 'scaleX' && val === 1) && !(key === 'scaleY' && val === 1)) {
|
|
648
|
+
// scale / rotate / skew / matrix at a non-identity value: a real
|
|
649
|
+
// geometric effect this does not model. Say so rather than
|
|
650
|
+
// presenting the untouched frame as exact.
|
|
651
|
+
uncertain = true;
|
|
652
|
+
if (!label) label = key + ':' + val;
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
} else {
|
|
657
|
+
uncertain = true;
|
|
658
|
+
if (!label) label = 'transform:<opaque>';
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
cur = cur.return;
|
|
662
|
+
steps++;
|
|
663
|
+
}
|
|
664
|
+
if (sticky && sawTransform) {
|
|
665
|
+
uncertain = true;
|
|
666
|
+
label = 'sticky header';
|
|
667
|
+
}
|
|
668
|
+
if (!sawTransform) return null;
|
|
669
|
+
return { dx: dx, dy: dy, uncertain: uncertain, label: label || 'transformed' };
|
|
670
|
+
}
|
|
671
|
+
|
|
556
672
|
// "Opaque enough to hide what is behind it." Colours reach the fiber either as CSS
|
|
557
673
|
// strings or, on Fabric, as processed ARGB integers; both carry the alpha that decides
|
|
558
674
|
// whether this is a cover or just a tint. A translucent scrim is deliberately NOT a
|
|
@@ -926,7 +1042,7 @@ export async function getScreenState(options = {}) {
|
|
|
926
1042
|
var hostIdx = hostFibers.length;
|
|
927
1043
|
hostFibers.push(hostFiber);
|
|
928
1044
|
var pressFn = (typeof pProps.onPress === 'function' && pProps.onPress) || (typeof hProps.onPress === 'function' && hProps.onPress) || null;
|
|
929
|
-
fiberMeta.push({ label: label, testID: testID, hostIdx: hostIdx, icon: icon, overlayIdx: ovIdx, component: resolveComponentName(pressableFiber), hasOwnLabel: !!baseLabel, handler: pressFn ? handlerHint(pressFn) : null, propHandlers: collectPropHandlers(pressableFiber, pressFn) });
|
|
1045
|
+
fiberMeta.push({ label: label, testID: testID, hostIdx: hostIdx, icon: icon, overlayIdx: ovIdx, component: resolveComponentName(pressableFiber), hasOwnLabel: !!baseLabel, handler: pressFn ? handlerHint(pressFn) : null, propHandlers: collectPropHandlers(pressableFiber, pressFn), transform: transformStateOf(hostFiber) });
|
|
930
1046
|
}
|
|
931
1047
|
return;
|
|
932
1048
|
}
|
|
@@ -950,7 +1066,7 @@ export async function getScreenState(options = {}) {
|
|
|
950
1066
|
}
|
|
951
1067
|
var hostIdx2 = hostFibers.length;
|
|
952
1068
|
hostFibers.push(hosts3[0]);
|
|
953
|
-
fiberMeta.push({ label: label2, testID: testID2, hostIdx: hostIdx2, icon: icon2, overlayIdx: ovIdx, component: resolveComponentName(fiber), hasOwnLabel: !!baseLabel2, handler: handlerHint(props.onPress), propHandlers: collectPropHandlers(fiber, props.onPress) });
|
|
1069
|
+
fiberMeta.push({ label: label2, testID: testID2, hostIdx: hostIdx2, icon: icon2, overlayIdx: ovIdx, component: resolveComponentName(fiber), hasOwnLabel: !!baseLabel2, handler: handlerHint(props.onPress), propHandlers: collectPropHandlers(fiber, props.onPress), transform: transformStateOf(hosts3[0]) });
|
|
954
1070
|
}
|
|
955
1071
|
}
|
|
956
1072
|
|
|
@@ -980,7 +1096,7 @@ export async function getScreenState(options = {}) {
|
|
|
980
1096
|
var iconI = baseLabelI ? null : findMeaningfulChildName(fiber);
|
|
981
1097
|
var hostIdxI = hostFibers.length;
|
|
982
1098
|
hostFibers.push(hostsI[0]);
|
|
983
|
-
fiberMeta.push({ label: labelI, testID: testIDI, hostIdx: hostIdxI, icon: iconI, overlayIdx: ovIdx, component: resolveComponentName(fiber), isInput: true, hasOwnLabel: !!baseLabelI, inputValue: valueI, inputPlaceholder: placeholderI });
|
|
1099
|
+
fiberMeta.push({ label: labelI, testID: testIDI, hostIdx: hostIdxI, icon: iconI, overlayIdx: ovIdx, component: resolveComponentName(fiber), isInput: true, hasOwnLabel: !!baseLabelI, inputValue: valueI, inputPlaceholder: placeholderI, transform: transformStateOf(hostsI[0]) });
|
|
984
1100
|
}
|
|
985
1101
|
}
|
|
986
1102
|
|
|
@@ -1000,6 +1116,7 @@ export async function getScreenState(options = {}) {
|
|
|
1000
1116
|
var textFibers = [];
|
|
1001
1117
|
var textContents = [];
|
|
1002
1118
|
var textOverlayIdx = [];
|
|
1119
|
+
var textTransforms = [];
|
|
1003
1120
|
|
|
1004
1121
|
function extractTextString(fiber) {
|
|
1005
1122
|
var p = fiber.memoizedProps;
|
|
@@ -1074,6 +1191,7 @@ export async function getScreenState(options = {}) {
|
|
|
1074
1191
|
textFibers.push(measurableT);
|
|
1075
1192
|
textContents.push(str);
|
|
1076
1193
|
textOverlayIdx.push(ovIdx);
|
|
1194
|
+
textTransforms.push(transformStateOf(measurableT));
|
|
1077
1195
|
}
|
|
1078
1196
|
}
|
|
1079
1197
|
}
|
|
@@ -1132,7 +1250,8 @@ export async function getScreenState(options = {}) {
|
|
|
1132
1250
|
imageMeta.push({
|
|
1133
1251
|
src: imageSource(props),
|
|
1134
1252
|
alt: (props && typeof props.accessibilityLabel === 'string') ? props.accessibilityLabel.slice(0, 80) : null,
|
|
1135
|
-
overlayIdx: ovIdx
|
|
1253
|
+
overlayIdx: ovIdx,
|
|
1254
|
+
transform: transformStateOf(measurableI)
|
|
1136
1255
|
});
|
|
1137
1256
|
}
|
|
1138
1257
|
}
|
|
@@ -1198,6 +1317,7 @@ export async function getScreenState(options = {}) {
|
|
|
1198
1317
|
globalThis.__screenStateTextContents = textContents;
|
|
1199
1318
|
globalThis.__screenStateTextMeasurements = new Array(textFibers.length).fill(null);
|
|
1200
1319
|
globalThis.__screenStateTextOverlayIdx = textOverlayIdx;
|
|
1320
|
+
globalThis.__screenStateTextTransforms = textTransforms;
|
|
1201
1321
|
globalThis.__screenStateImageMeta = imageMeta;
|
|
1202
1322
|
globalThis.__screenStateImageMeasurements = new Array(imageFibers.length).fill(null);
|
|
1203
1323
|
|
|
@@ -1239,19 +1359,23 @@ export async function getScreenState(options = {}) {
|
|
|
1239
1359
|
} catch(e) {}
|
|
1240
1360
|
}
|
|
1241
1361
|
|
|
1242
|
-
return { count: hostFibers.length, overlayCount: overlayFiberMeta.length };
|
|
1362
|
+
return { count: hostFibers.length + textFibers.length + imageFibers.length, overlayCount: overlayFiberMeta.length };
|
|
1243
1363
|
})()
|
|
1244
1364
|
`;
|
|
1245
1365
|
const dispatchResult = await executeInApp(dispatchExpression, false, { timeoutMs: 30000, originatingToolName: "get_screen_state" }, device);
|
|
1246
1366
|
if (!dispatchResult.success)
|
|
1247
1367
|
return dispatchResult;
|
|
1368
|
+
let dispatchedNodes = 0;
|
|
1248
1369
|
try {
|
|
1249
1370
|
const dp = JSON.parse(dispatchResult.result || "{}");
|
|
1250
1371
|
if (dp.error)
|
|
1251
1372
|
return { success: false, error: dp.error };
|
|
1373
|
+
if (typeof dp.count === "number")
|
|
1374
|
+
dispatchedNodes = dp.count;
|
|
1252
1375
|
}
|
|
1253
1376
|
catch { }
|
|
1254
|
-
|
|
1377
|
+
const measureBudgetMs = Math.min(3000, 400 + dispatchedNodes * 2);
|
|
1378
|
+
await delay(measureBudgetMs);
|
|
1255
1379
|
const resolveExpression = `
|
|
1256
1380
|
(function() {
|
|
1257
1381
|
var hostFibers = globalThis.__screenStateFibers;
|
|
@@ -1264,6 +1388,7 @@ export async function getScreenState(options = {}) {
|
|
|
1264
1388
|
var textContents = globalThis.__screenStateTextContents || [];
|
|
1265
1389
|
var textMeasurements = globalThis.__screenStateTextMeasurements || [];
|
|
1266
1390
|
var textOverlayIdx = globalThis.__screenStateTextOverlayIdx || [];
|
|
1391
|
+
var textTransforms = globalThis.__screenStateTextTransforms || [];
|
|
1267
1392
|
var imageMeta = globalThis.__screenStateImageMeta || [];
|
|
1268
1393
|
var imageMeasurements = globalThis.__screenStateImageMeasurements || [];
|
|
1269
1394
|
var nativeMarkers = globalThis.__screenStateNativeMarkers || [];
|
|
@@ -1271,6 +1396,7 @@ export async function getScreenState(options = {}) {
|
|
|
1271
1396
|
globalThis.__screenStateTextContents = null;
|
|
1272
1397
|
globalThis.__screenStateTextMeasurements = null;
|
|
1273
1398
|
globalThis.__screenStateTextOverlayIdx = null;
|
|
1399
|
+
globalThis.__screenStateTextTransforms = null;
|
|
1274
1400
|
globalThis.__screenStateImageMeta = null;
|
|
1275
1401
|
globalThis.__screenStateImageMeasurements = null;
|
|
1276
1402
|
globalThis.__screenStateFibers = null;
|
|
@@ -1363,15 +1489,66 @@ export async function getScreenState(options = {}) {
|
|
|
1363
1489
|
overlays.push({ origIdx: oi, type: om.type, title: om.title, blockBounds: blockBounds, contentBounds: contentBounds, hasContent: cValid && !geometric, geometric: geometric, enterIdx: om.enterIdx, pressables: [] });
|
|
1364
1490
|
}
|
|
1365
1491
|
|
|
1492
|
+
// A measurement callback that never fired leaves null here. Counting those is the
|
|
1493
|
+
// difference between "there is nothing there" and "we did not find out" — the second
|
|
1494
|
+
// used to render as the first, and silence reads as evidence.
|
|
1495
|
+
var unmeasuredCount = 0;
|
|
1496
|
+
|
|
1497
|
+
/** Outside the viewport by the frame given. */
|
|
1498
|
+
function offViewport(m) {
|
|
1499
|
+
if (m.x + m.width < 0 || m.y + m.height < 0) return true;
|
|
1500
|
+
if (m.x > viewportW || m.y > viewportH) return true;
|
|
1501
|
+
return false;
|
|
1502
|
+
}
|
|
1503
|
+
|
|
1504
|
+
/**
|
|
1505
|
+
* Fold the composed translation into the measured frame, and decide whether the result
|
|
1506
|
+
* is worth warning about.
|
|
1507
|
+
*
|
|
1508
|
+
* The tag is deliberately NOT raised for every uncertain transform. An Animated value
|
|
1509
|
+
* that currently reads 0 on an element that measures on screen is almost certainly
|
|
1510
|
+
* exactly where it says it is; tagging those buries the one case that matters. Even a
|
|
1511
|
+
* sticky header is at its measured position while the list sits at the top — it only
|
|
1512
|
+
* starts lying once it is pinned, and then it measures off-screen.
|
|
1513
|
+
*
|
|
1514
|
+
* So what earns a tag is a transform that is visibly doing something: a non-zero
|
|
1515
|
+
* composed offset, or a frame that lands off-screen — the exact shape that used to make
|
|
1516
|
+
* pinned headers disappear from the listing. The cost is a narrow blind spot mid-
|
|
1517
|
+
* animation, where an element is displaced but still measures on screen; the gain is
|
|
1518
|
+
* that a tag, when it appears, means something.
|
|
1519
|
+
*/
|
|
1520
|
+
function withTransform(m, tf) {
|
|
1521
|
+
if (!tf) return { m: m, unreliable: false, note: null };
|
|
1522
|
+
var moved = { x: m.x + tf.dx, y: m.y + tf.dy, width: m.width, height: m.height };
|
|
1523
|
+
var displaced = tf.dx !== 0 || tf.dy !== 0;
|
|
1524
|
+
var worthWarning = tf.uncertain && (displaced || offViewport(moved));
|
|
1525
|
+
return { m: moved, unreliable: worthWarning, note: worthWarning ? tf.label : null };
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
/**
|
|
1529
|
+
* Should this element be listed?
|
|
1530
|
+
*
|
|
1531
|
+
* An element whose frame is pre-transform must NOT be viewport-filtered on that frame.
|
|
1532
|
+
* A pinned sticky header measures hundreds of points above the screen while sitting in
|
|
1533
|
+
* plain sight, and dropping it made whole blocks — title, tab bar, search field —
|
|
1534
|
+
* vanish from the listing with no indication anything had been omitted.
|
|
1535
|
+
*/
|
|
1536
|
+
function keepElement(m, unreliable) {
|
|
1537
|
+
if (m.width <= 0 || m.height <= 0) return false;
|
|
1538
|
+
return unreliable || !offViewport(m);
|
|
1539
|
+
}
|
|
1540
|
+
|
|
1366
1541
|
// Build pressable list
|
|
1367
1542
|
var allPressables = [];
|
|
1368
1543
|
for (var i = 0; i < meta.length; i++) {
|
|
1369
1544
|
if (i === rootIdx) continue;
|
|
1370
|
-
var
|
|
1371
|
-
if (!
|
|
1372
|
-
|
|
1373
|
-
|
|
1545
|
+
var m0 = measurements[i];
|
|
1546
|
+
if (!m0) { unmeasuredCount++; continue; }
|
|
1547
|
+
var tr = withTransform(m0, meta[i].transform);
|
|
1548
|
+
var m = tr.m;
|
|
1549
|
+
if (!keepElement(m, tr.unreliable)) continue;
|
|
1374
1550
|
allPressables.push({
|
|
1551
|
+
transformNote: tr.note,
|
|
1375
1552
|
// Position in the DFS collection order == paint order. Kept so occlusion can
|
|
1376
1553
|
// ask "was this drawn before the overlay?" rather than only "is it inside it?".
|
|
1377
1554
|
paintIdx: i,
|
|
@@ -1395,11 +1572,12 @@ export async function getScreenState(options = {}) {
|
|
|
1395
1572
|
// Row siblings first (checkbox labels), center distance as fallback.
|
|
1396
1573
|
var textBoxes = [];
|
|
1397
1574
|
for (var tmi = 0; tmi < textMeasurements.length; tmi++) {
|
|
1398
|
-
var
|
|
1575
|
+
var tm0 = textMeasurements[tmi];
|
|
1399
1576
|
var tc = textContents[tmi];
|
|
1400
|
-
if (!
|
|
1401
|
-
|
|
1402
|
-
|
|
1577
|
+
if (!tm0 || !tc) continue;
|
|
1578
|
+
var ttr = withTransform(tm0, textTransforms[tmi]);
|
|
1579
|
+
var tm = ttr.m;
|
|
1580
|
+
if (!keepElement(tm, ttr.unreliable)) continue;
|
|
1403
1581
|
textBoxes.push({ text: tc, x: tm.x, y: tm.y, width: tm.width, height: tm.height, cx: tm.x + tm.width / 2, cy: tm.y + tm.height / 2 });
|
|
1404
1582
|
}
|
|
1405
1583
|
for (var ni = 0; ni < allPressables.length; ni++) {
|
|
@@ -1528,20 +1706,24 @@ export async function getScreenState(options = {}) {
|
|
|
1528
1706
|
}
|
|
1529
1707
|
|
|
1530
1708
|
for (var ti = 0; ti < textContents.length; ti++) {
|
|
1531
|
-
var
|
|
1532
|
-
if (!
|
|
1533
|
-
|
|
1534
|
-
|
|
1709
|
+
var tmA = textMeasurements[ti];
|
|
1710
|
+
if (!tmA) { unmeasuredCount++; continue; }
|
|
1711
|
+
var tTr = withTransform(tmA, textTransforms[ti]);
|
|
1712
|
+
var tm2 = tTr.m;
|
|
1713
|
+
if (!keepElement(tm2, tTr.unreliable)) continue;
|
|
1535
1714
|
pushClassified({ text: textContents[ti],
|
|
1536
|
-
|
|
1537
|
-
|
|
1715
|
+
transformNote: tTr.note,
|
|
1716
|
+
center: { x: Math.round(tm2.x + tm2.width/2), y: Math.round(tm2.y + tm2.height/2) },
|
|
1717
|
+
bounds: { x: Math.round(tm2.x), y: Math.round(tm2.y), width: Math.round(tm2.width), height: Math.round(tm2.height) } }, 'texts', textOverlayIdx[ti]);
|
|
1538
1718
|
}
|
|
1539
1719
|
for (var ii = 0; ii < imageMeta.length; ii++) {
|
|
1540
|
-
var
|
|
1541
|
-
if (!
|
|
1542
|
-
|
|
1543
|
-
|
|
1720
|
+
var imA = imageMeasurements[ii];
|
|
1721
|
+
if (!imA) { unmeasuredCount++; continue; }
|
|
1722
|
+
var iTr = withTransform(imA, imageMeta[ii].transform);
|
|
1723
|
+
var im = iTr.m;
|
|
1724
|
+
if (!keepElement(im, iTr.unreliable)) continue;
|
|
1544
1725
|
pushClassified({ src: imageMeta[ii].src, alt: imageMeta[ii].alt,
|
|
1726
|
+
transformNote: iTr.note,
|
|
1545
1727
|
center: { x: Math.round(im.x + im.width/2), y: Math.round(im.y + im.height/2) },
|
|
1546
1728
|
bounds: { x: Math.round(im.x), y: Math.round(im.y), width: Math.round(im.width), height: Math.round(im.height) } }, 'images', imageMeta[ii].overlayIdx);
|
|
1547
1729
|
}
|
|
@@ -1566,17 +1748,35 @@ export async function getScreenState(options = {}) {
|
|
|
1566
1748
|
return { type: o.type, title: o.title, pressables: o.pressables, texts: o.texts, images: o.images };
|
|
1567
1749
|
});
|
|
1568
1750
|
|
|
1569
|
-
|
|
1751
|
+
// Everything the caller needs to judge how complete this snapshot is. Both counts used
|
|
1752
|
+
// to be invisible: an unmeasured node and a node that genuinely is not there produced
|
|
1753
|
+
// exactly the same output — nothing.
|
|
1754
|
+
var transformedCount = 0;
|
|
1755
|
+
function countTransformed(list) {
|
|
1756
|
+
for (var q = 0; q < list.length; q++) if (list[q] && list[q].transformNote) transformedCount++;
|
|
1757
|
+
}
|
|
1758
|
+
countTransformed(rootPressables); countTransformed(rootTexts); countTransformed(rootImages);
|
|
1759
|
+
for (var co = 0; co < overlays.length; co++) {
|
|
1760
|
+
countTransformed(overlays[co].pressables);
|
|
1761
|
+
countTransformed(overlays[co].texts || []);
|
|
1762
|
+
countTransformed(overlays[co].images || []);
|
|
1763
|
+
}
|
|
1764
|
+
|
|
1765
|
+
return { route: route, overlays: cleanOverlays, pressables: rootPressables, texts: rootTexts, images: rootImages, nativeMarkers: nativeMarkers,
|
|
1766
|
+
unmeasuredCount: unmeasuredCount, transformedCount: transformedCount,
|
|
1767
|
+
dispatchedCount: meta.length + textContents.length + imageMeta.length };
|
|
1570
1768
|
})()
|
|
1571
1769
|
`;
|
|
1572
1770
|
const resolveResult = await executeInApp(resolveExpression, false, { timeoutMs: 15000, originatingToolName: "get_screen_state" }, device);
|
|
1573
1771
|
if (!resolveResult.success)
|
|
1574
1772
|
return resolveResult;
|
|
1575
1773
|
let screenState;
|
|
1774
|
+
let counts = {};
|
|
1576
1775
|
try {
|
|
1577
1776
|
const parsed = JSON.parse(resolveResult.result || "{}");
|
|
1578
1777
|
if (parsed.error)
|
|
1579
1778
|
return { success: false, error: parsed.error };
|
|
1779
|
+
counts = parsed;
|
|
1580
1780
|
screenState = parseScreenStateResponse(parsed) ?? undefined;
|
|
1581
1781
|
}
|
|
1582
1782
|
catch {
|
|
@@ -1584,6 +1784,19 @@ export async function getScreenState(options = {}) {
|
|
|
1584
1784
|
}
|
|
1585
1785
|
if (!screenState)
|
|
1586
1786
|
return { success: false, error: "Empty screen state response" };
|
|
1787
|
+
const completenessNotes = [];
|
|
1788
|
+
if ((counts.unmeasuredCount ?? 0) > 0) {
|
|
1789
|
+
completenessNotes.push(`${counts.unmeasuredCount} element(s) did not return a measurement within ${measureBudgetMs}ms and are NOT listed below. ` +
|
|
1790
|
+
`This is a timing miss, not an empty screen — call get_screen_state again, or take a screenshot, before concluding anything is absent.`);
|
|
1791
|
+
}
|
|
1792
|
+
if ((counts.transformedCount ?? 0) > 0) {
|
|
1793
|
+
completenessNotes.push(`${counts.transformedCount} element(s) are marked ⚠transformed. Their frames come from the layout tree, which does not include ` +
|
|
1794
|
+
`native-driven transforms (sticky headers, collapsing toolbars, animating sheets), so the coordinates may not be where the element ` +
|
|
1795
|
+
`is drawn. Confirm against a screenshot before tapping those.`);
|
|
1796
|
+
}
|
|
1797
|
+
if (completenessNotes.length > 0) {
|
|
1798
|
+
screenState.notes = [...(screenState.notes ?? []), ...completenessNotes];
|
|
1799
|
+
}
|
|
1587
1800
|
const dedupPressables = (list) => {
|
|
1588
1801
|
const seen = new Set();
|
|
1589
1802
|
return list.filter((p) => {
|