react-native-ai-debugger 2.12.3 → 2.12.4
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 +15 -1
- package/build/__tests__/unit/autoReconnectOptOut.test.js +3 -0
- package/build/__tests__/unit/autoReconnectOptOut.test.js.map +1 -1
- package/build/__tests__/unit/cdpCommand.test.d.ts +2 -0
- package/build/__tests__/unit/cdpCommand.test.d.ts.map +1 -0
- package/build/__tests__/unit/cdpCommand.test.js +84 -0
- package/build/__tests__/unit/cdpCommand.test.js.map +1 -0
- package/build/__tests__/unit/chromium.test.d.ts +2 -0
- package/build/__tests__/unit/chromium.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromium.test.js +118 -0
- package/build/__tests__/unit/chromium.test.js.map +1 -0
- package/build/__tests__/unit/chromiumDevice.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumDevice.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumDevice.test.js +115 -0
- package/build/__tests__/unit/chromiumDevice.test.js.map +1 -0
- package/build/__tests__/unit/chromiumDialogAnswer.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumDialogAnswer.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumDialogAnswer.test.js +71 -0
- package/build/__tests__/unit/chromiumDialogAnswer.test.js.map +1 -0
- package/build/__tests__/unit/chromiumDialogRaces.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumDialogRaces.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumDialogRaces.test.js +100 -0
- package/build/__tests__/unit/chromiumDialogRaces.test.js.map +1 -0
- package/build/__tests__/unit/chromiumDialogs.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumDialogs.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumDialogs.test.js +167 -0
- package/build/__tests__/unit/chromiumDialogs.test.js.map +1 -0
- package/build/__tests__/unit/chromiumDiscovery.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumDiscovery.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumDiscovery.test.js +302 -0
- package/build/__tests__/unit/chromiumDiscovery.test.js.map +1 -0
- package/build/__tests__/unit/chromiumDom.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumDom.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumDom.test.js +119 -0
- package/build/__tests__/unit/chromiumDom.test.js.map +1 -0
- package/build/__tests__/unit/chromiumGate.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumGate.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumGate.test.js +149 -0
- package/build/__tests__/unit/chromiumGate.test.js.map +1 -0
- package/build/__tests__/unit/chromiumInput.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumInput.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumInput.test.js +113 -0
- package/build/__tests__/unit/chromiumInput.test.js.map +1 -0
- package/build/__tests__/unit/chromiumKeys.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumKeys.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumKeys.test.js +26 -0
- package/build/__tests__/unit/chromiumKeys.test.js.map +1 -0
- package/build/__tests__/unit/chromiumScreen.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumScreen.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumScreen.test.js +390 -0
- package/build/__tests__/unit/chromiumScreen.test.js.map +1 -0
- package/build/__tests__/unit/chromiumStaleTarget.test.d.ts +2 -0
- package/build/__tests__/unit/chromiumStaleTarget.test.d.ts.map +1 -0
- package/build/__tests__/unit/chromiumStaleTarget.test.js +26 -0
- package/build/__tests__/unit/chromiumStaleTarget.test.js.map +1 -0
- package/build/__tests__/unit/connectionGaps.test.d.ts +2 -0
- package/build/__tests__/unit/connectionGaps.test.d.ts.map +1 -0
- package/build/__tests__/unit/connectionGaps.test.js +14 -0
- package/build/__tests__/unit/connectionGaps.test.js.map +1 -0
- package/build/__tests__/unit/contextPreambleGlobals.test.d.ts +2 -0
- package/build/__tests__/unit/contextPreambleGlobals.test.d.ts.map +1 -0
- package/build/__tests__/unit/contextPreambleGlobals.test.js +25 -0
- package/build/__tests__/unit/contextPreambleGlobals.test.js.map +1 -0
- package/build/__tests__/unit/deviceResolver.test.js +9 -0
- package/build/__tests__/unit/deviceResolver.test.js.map +1 -1
- package/build/__tests__/unit/electronLaunch.test.d.ts +2 -0
- package/build/__tests__/unit/electronLaunch.test.d.ts.map +1 -0
- package/build/__tests__/unit/electronLaunch.test.js +165 -0
- package/build/__tests__/unit/electronLaunch.test.js.map +1 -0
- package/build/__tests__/unit/fiberRoots.test.d.ts +2 -0
- package/build/__tests__/unit/fiberRoots.test.d.ts.map +1 -0
- package/build/__tests__/unit/fiberRoots.test.js +95 -0
- package/build/__tests__/unit/fiberRoots.test.js.map +1 -0
- package/build/__tests__/unit/fiberRootsDrift.test.d.ts +2 -0
- package/build/__tests__/unit/fiberRootsDrift.test.d.ts.map +1 -0
- package/build/__tests__/unit/fiberRootsDrift.test.js +23 -0
- package/build/__tests__/unit/fiberRootsDrift.test.js.map +1 -0
- package/build/__tests__/unit/hostAddress.test.d.ts +2 -0
- package/build/__tests__/unit/hostAddress.test.d.ts.map +1 -0
- package/build/__tests__/unit/hostAddress.test.js +38 -0
- package/build/__tests__/unit/hostAddress.test.js.map +1 -0
- package/build/__tests__/unit/measureComponent.test.js +1 -1
- package/build/__tests__/unit/measureComponent.test.js.map +1 -1
- package/build/__tests__/unit/networkInterceptorFetchMock.test.d.ts +2 -0
- package/build/__tests__/unit/networkInterceptorFetchMock.test.d.ts.map +1 -0
- package/build/__tests__/unit/networkInterceptorFetchMock.test.js +90 -0
- package/build/__tests__/unit/networkInterceptorFetchMock.test.js.map +1 -0
- package/build/__tests__/unit/networkMockTool.test.js +12 -1
- package/build/__tests__/unit/networkMockTool.test.js.map +1 -1
- package/build/__tests__/unit/pressKeyMobile.test.d.ts +2 -0
- package/build/__tests__/unit/pressKeyMobile.test.d.ts.map +1 -0
- package/build/__tests__/unit/pressKeyMobile.test.js +63 -0
- package/build/__tests__/unit/pressKeyMobile.test.js.map +1 -0
- package/build/__tests__/unit/reloadAppAutoConnect.test.js +4 -1
- package/build/__tests__/unit/reloadAppAutoConnect.test.js.map +1 -1
- package/build/__tests__/unit/tapAndroidSerial.test.js +16 -0
- package/build/__tests__/unit/tapAndroidSerial.test.js.map +1 -1
- package/build/core/android.d.ts +10 -0
- package/build/core/android.d.ts.map +1 -1
- package/build/core/android.js +17 -0
- package/build/core/android.js.map +1 -1
- package/build/core/appContext.d.ts.map +1 -1
- package/build/core/appContext.js +11 -13
- package/build/core/appContext.js.map +1 -1
- package/build/core/appDetection.d.ts.map +1 -1
- package/build/core/appDetection.js +7 -4
- package/build/core/appDetection.js.map +1 -1
- package/build/core/cdpCommand.d.ts +4 -0
- package/build/core/cdpCommand.d.ts.map +1 -0
- package/build/core/cdpCommand.js +58 -0
- package/build/core/cdpCommand.js.map +1 -0
- package/build/core/chromium.d.ts +157 -0
- package/build/core/chromium.d.ts.map +1 -0
- package/build/core/chromium.js +480 -0
- package/build/core/chromium.js.map +1 -0
- package/build/core/chromiumCapabilities.d.ts +11 -0
- package/build/core/chromiumCapabilities.d.ts.map +1 -0
- package/build/core/chromiumCapabilities.js +35 -0
- package/build/core/chromiumCapabilities.js.map +1 -0
- package/build/core/chromiumDialogAnswer.d.ts +11 -0
- package/build/core/chromiumDialogAnswer.d.ts.map +1 -0
- package/build/core/chromiumDialogAnswer.js +61 -0
- package/build/core/chromiumDialogAnswer.js.map +1 -0
- package/build/core/chromiumDialogs.d.ts +46 -0
- package/build/core/chromiumDialogs.d.ts.map +1 -0
- package/build/core/chromiumDialogs.js +88 -0
- package/build/core/chromiumDialogs.js.map +1 -0
- package/build/core/chromiumScreen.d.ts +97 -0
- package/build/core/chromiumScreen.d.ts.map +1 -0
- package/build/core/chromiumScreen.js +498 -0
- package/build/core/chromiumScreen.js.map +1 -0
- package/build/core/componentSearch.d.ts.map +1 -1
- package/build/core/componentSearch.js +7 -26
- package/build/core/componentSearch.js.map +1 -1
- package/build/core/componentSource.d.ts.map +1 -1
- package/build/core/componentSource.js +3 -11
- package/build/core/componentSource.js.map +1 -1
- package/build/core/componentTree.d.ts.map +1 -1
- package/build/core/componentTree.js +4 -18
- package/build/core/componentTree.js.map +1 -1
- package/build/core/connection.d.ts +13 -0
- package/build/core/connection.d.ts.map +1 -1
- package/build/core/connection.js +99 -18
- package/build/core/connection.js.map +1 -1
- package/build/core/connectionState.d.ts +2 -1
- package/build/core/connectionState.d.ts.map +1 -1
- package/build/core/connectionState.js +3 -0
- package/build/core/connectionState.js.map +1 -1
- package/build/core/deviceResolver.d.ts.map +1 -1
- package/build/core/deviceResolver.js +8 -5
- package/build/core/deviceResolver.js.map +1 -1
- package/build/core/electronLaunch.d.ts +25 -0
- package/build/core/electronLaunch.d.ts.map +1 -0
- package/build/core/electronLaunch.js +113 -0
- package/build/core/electronLaunch.js.map +1 -0
- package/build/core/errors.d.ts +1 -1
- package/build/core/errors.d.ts.map +1 -1
- package/build/core/errors.js.map +1 -1
- package/build/core/guides.d.ts.map +1 -1
- package/build/core/guides.js +9 -6
- package/build/core/guides.js.map +1 -1
- package/build/core/hostAddress.d.ts +6 -0
- package/build/core/hostAddress.d.ts.map +1 -0
- package/build/core/hostAddress.js +32 -0
- package/build/core/hostAddress.js.map +1 -0
- package/build/core/injected/fiberRoots.d.ts +2 -0
- package/build/core/injected/fiberRoots.d.ts.map +1 -0
- package/build/core/injected/fiberRoots.js +60 -0
- package/build/core/injected/fiberRoots.js.map +1 -0
- package/build/core/inputTarget.d.ts.map +1 -1
- package/build/core/inputTarget.js +4 -9
- package/build/core/inputTarget.js.map +1 -1
- package/build/core/inspector.d.ts.map +1 -1
- package/build/core/inspector.js +6 -22
- package/build/core/inspector.js.map +1 -1
- package/build/core/ios.d.ts +12 -0
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +32 -0
- package/build/core/ios.js.map +1 -1
- package/build/core/jsExecute.d.ts.map +1 -1
- package/build/core/jsExecute.js +20 -1
- package/build/core/jsExecute.js.map +1 -1
- package/build/core/measureComponent.d.ts.map +1 -1
- package/build/core/measureComponent.js +4 -8
- package/build/core/measureComponent.js.map +1 -1
- package/build/core/metro.d.ts +20 -1
- package/build/core/metro.d.ts.map +1 -1
- package/build/core/metro.js +146 -9
- package/build/core/metro.js.map +1 -1
- package/build/core/mockRules.d.ts +1 -0
- package/build/core/mockRules.d.ts.map +1 -1
- package/build/core/mockRules.js +8 -0
- package/build/core/mockRules.js.map +1 -1
- package/build/core/nativeLogs.js +1 -1
- package/build/core/nativeLogs.js.map +1 -1
- package/build/core/navigation.d.ts.map +1 -1
- package/build/core/navigation.js +4 -18
- package/build/core/navigation.js.map +1 -1
- package/build/core/networkInterceptor.d.ts +2 -2
- package/build/core/networkInterceptor.d.ts.map +1 -1
- package/build/core/networkInterceptor.js +90 -3
- package/build/core/networkInterceptor.js.map +1 -1
- package/build/core/pressables.d.ts.map +1 -1
- package/build/core/pressables.js +6 -13
- package/build/core/pressables.js.map +1 -1
- package/build/core/redux.d.ts.map +1 -1
- package/build/core/redux.js +6 -10
- package/build/core/redux.js.map +1 -1
- package/build/core/register.d.ts.map +1 -1
- package/build/core/register.js +5 -2
- package/build/core/register.js.map +1 -1
- package/build/core/rnGlobalsBootstrap.d.ts.map +1 -1
- package/build/core/rnGlobalsBootstrap.js +3 -1
- package/build/core/rnGlobalsBootstrap.js.map +1 -1
- package/build/core/screenLayout.d.ts.map +1 -1
- package/build/core/screenLayout.js +4 -13
- package/build/core/screenLayout.js.map +1 -1
- package/build/core/screenStaleness.d.ts.map +1 -1
- package/build/core/screenStaleness.js +2 -0
- package/build/core/screenStaleness.js.map +1 -1
- package/build/core/screenState.d.ts.map +1 -1
- package/build/core/screenState.js +4 -11
- package/build/core/screenState.js.map +1 -1
- package/build/core/swipeDiagnosis.d.ts.map +1 -1
- package/build/core/swipeDiagnosis.js +3 -10
- package/build/core/swipeDiagnosis.js.map +1 -1
- package/build/core/textEntry.d.ts +1 -1
- package/build/core/textEntry.d.ts.map +1 -1
- package/build/core/types.d.ts +4 -2
- package/build/core/types.d.ts.map +1 -1
- package/build/pro/chromiumKeys.d.ts +19 -0
- package/build/pro/chromiumKeys.d.ts.map +1 -0
- package/build/pro/chromiumKeys.js +68 -0
- package/build/pro/chromiumKeys.js.map +1 -0
- package/build/pro/chromiumSwipe.d.ts +35 -0
- package/build/pro/chromiumSwipe.d.ts.map +1 -0
- package/build/pro/chromiumSwipe.js +105 -0
- package/build/pro/chromiumSwipe.js.map +1 -0
- package/build/pro/chromiumTap.d.ts +12 -0
- package/build/pro/chromiumTap.d.ts.map +1 -0
- package/build/pro/chromiumTap.js +155 -0
- package/build/pro/chromiumTap.js.map +1 -0
- package/build/pro/tap.d.ts +1 -0
- package/build/pro/tap.d.ts.map +1 -1
- package/build/pro/tap.js +7 -1
- package/build/pro/tap.js.map +1 -1
- package/build/tools/componentTools.d.ts.map +1 -1
- package/build/tools/componentTools.js +31 -3
- package/build/tools/componentTools.js.map +1 -1
- package/build/tools/connectionTools.d.ts.map +1 -1
- package/build/tools/connectionTools.js +66 -28
- package/build/tools/connectionTools.js.map +1 -1
- package/build/tools/deviceTools.d.ts.map +1 -1
- package/build/tools/deviceTools.js +42 -1
- package/build/tools/deviceTools.js.map +1 -1
- package/build/tools/interactionTools.d.ts.map +1 -1
- package/build/tools/interactionTools.js +132 -7
- package/build/tools/interactionTools.js.map +1 -1
- package/build/tools/networkTools.d.ts.map +1 -1
- package/build/tools/networkTools.js +20 -5
- package/build/tools/networkTools.js.map +1 -1
- package/build/tools/screenshotTools.d.ts.map +1 -1
- package/build/tools/screenshotTools.js +452 -373
- package/build/tools/screenshotTools.js.map +1 -1
- package/package.json +1 -1
- package/tools.json +27 -1
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
import sharp from "sharp";
|
|
2
|
+
import { sendCdpCommand, evaluateJson } from "./cdpCommand.js";
|
|
3
|
+
import { FIBER_ROOTS_JS } from "./injected/fiberRoots.js";
|
|
4
|
+
export const CHROMIUM_MAX_DIMENSION = 2000;
|
|
5
|
+
export const CAPTURE_TIMEOUT_MS = 8000;
|
|
6
|
+
export function pxPerCss(vp) {
|
|
7
|
+
const longest = Math.max(vp.w, vp.h);
|
|
8
|
+
return longest * vp.dpr > CHROMIUM_MAX_DIMENSION ? CHROMIUM_MAX_DIMENSION / longest : vp.dpr;
|
|
9
|
+
}
|
|
10
|
+
export const VIEWPORT_JS = "JSON.stringify({ w: innerWidth, h: innerHeight, dpr: devicePixelRatio, hidden: document.visibilityState === \"hidden\" })";
|
|
11
|
+
export function chromiumViewport(app) {
|
|
12
|
+
return evaluateJson(app.ws, VIEWPORT_JS);
|
|
13
|
+
}
|
|
14
|
+
export async function chromiumCapture(app) {
|
|
15
|
+
const viewport = await chromiumViewport(app);
|
|
16
|
+
if (viewport.hidden) {
|
|
17
|
+
throw new Error("The window is hidden (document.visibilityState is \"hidden\"), and a hidden window does not paint, so it cannot be captured. Show the window and retry.");
|
|
18
|
+
}
|
|
19
|
+
let data;
|
|
20
|
+
try {
|
|
21
|
+
({ data } = await sendCdpCommand(app.ws, "Page.captureScreenshot", { format: "png" }, CAPTURE_TIMEOUT_MS));
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
25
|
+
throw new Error(/timed out/.test(msg)
|
|
26
|
+
? `${msg}. A hidden or minimised window may not paint, and Chromium cannot capture what it does not paint: show the window and retry.`
|
|
27
|
+
: msg);
|
|
28
|
+
}
|
|
29
|
+
const k = pxPerCss(viewport);
|
|
30
|
+
const width = Math.round(viewport.w * k);
|
|
31
|
+
const height = Math.round(viewport.h * k);
|
|
32
|
+
const png = Buffer.from(data, "base64");
|
|
33
|
+
const meta = await sharp(png).metadata();
|
|
34
|
+
const img = meta.width === width && meta.height === height ? sharp(png) : sharp(png).resize(width, height, { fit: "fill" });
|
|
35
|
+
return {
|
|
36
|
+
buffer: await img.jpeg({ quality: 85 }).toBuffer(),
|
|
37
|
+
width,
|
|
38
|
+
height,
|
|
39
|
+
scaleFactor: viewport.dpr / k,
|
|
40
|
+
viewport,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export async function chromiumClick(app, x, y, holdMs = 0) {
|
|
44
|
+
const send = (params) => sendCdpCommand(app.ws, "Input.dispatchMouseEvent", params);
|
|
45
|
+
await send({ type: "mouseMoved", x, y });
|
|
46
|
+
await send({ type: "mousePressed", x, y, button: "left", buttons: 1, clickCount: 1 });
|
|
47
|
+
if (holdMs > 0)
|
|
48
|
+
await new Promise((r) => setTimeout(r, holdMs));
|
|
49
|
+
await send({ type: "mouseReleased", x, y, button: "left", buttons: 0, clickCount: 1 });
|
|
50
|
+
}
|
|
51
|
+
export async function chromiumInsertText(app, text) {
|
|
52
|
+
await sendCdpCommand(app.ws, "Input.insertText", { text });
|
|
53
|
+
}
|
|
54
|
+
export function normText(s) {
|
|
55
|
+
return s.split(/\s+/).join(" ").trim();
|
|
56
|
+
}
|
|
57
|
+
export function pickDomTarget(cands, text, index) {
|
|
58
|
+
let pool = cands;
|
|
59
|
+
if (text !== undefined) {
|
|
60
|
+
const want = normText(text);
|
|
61
|
+
const tiers = [
|
|
62
|
+
(c) => c.text === want,
|
|
63
|
+
(c) => c.text.toLowerCase() === want.toLowerCase(),
|
|
64
|
+
() => true,
|
|
65
|
+
];
|
|
66
|
+
pool = tiers.map((t) => cands.filter(t)).find((p) => p.length > 0) ?? [];
|
|
67
|
+
}
|
|
68
|
+
if (index !== undefined)
|
|
69
|
+
return pool[index] ? { kind: "ok", cand: pool[index] } : { kind: "none" };
|
|
70
|
+
if (pool.length === 0)
|
|
71
|
+
return { kind: "none" };
|
|
72
|
+
return pool.length === 1 ? { kind: "ok", cand: pool[0] } : { kind: "ambiguous", matches: pool };
|
|
73
|
+
}
|
|
74
|
+
export function buildDomCollectJs(q) {
|
|
75
|
+
return `(function () {
|
|
76
|
+
${FIBER_ROOTS_JS}
|
|
77
|
+
var q = ${JSON.stringify(q)};
|
|
78
|
+
function norm(s) { return String(s == null ? "" : s).split(/\\s+/).join(" ").trim(); }
|
|
79
|
+
var NOT_TEXT = ["button", "submit", "reset", "checkbox", "radio", "file", "image", "range", "color", "hidden"];
|
|
80
|
+
function isEditable(el) {
|
|
81
|
+
if (!el || !el.tagName) return false;
|
|
82
|
+
if (el.isContentEditable || el.tagName === "TEXTAREA") return true;
|
|
83
|
+
return el.tagName === "INPUT" && NOT_TEXT.indexOf(String(el.type).toLowerCase()) < 0;
|
|
84
|
+
}
|
|
85
|
+
// Every field under a match, so a wrapper around several is reported as
|
|
86
|
+
// ambiguous rather than resolved to whichever field comes first.
|
|
87
|
+
function editablesIn(el) {
|
|
88
|
+
if (isEditable(el)) return [el];
|
|
89
|
+
var inner = el.querySelectorAll ? Array.prototype.slice.call(el.querySelectorAll("input, textarea, [contenteditable]")) : [];
|
|
90
|
+
return inner.filter(isEditable);
|
|
91
|
+
}
|
|
92
|
+
function testIdOf(el) { return el.getAttribute("data-testid") || el.getAttribute("data-test-id") || el.id || null; }
|
|
93
|
+
function labelOf(el) { return norm(el.getAttribute("aria-label") || (el.labels && el.labels[0] ? el.labels[0].innerText : "")) || null; }
|
|
94
|
+
// A password never leaves the page (same rule as chromiumScreen's safeValue).
|
|
95
|
+
function valueOf(el) {
|
|
96
|
+
if (el.isContentEditable) return el.innerText;
|
|
97
|
+
if (el.value == null) return null;
|
|
98
|
+
return String(el.type).toLowerCase() === "password" ? (el.value ? "[password]" : "") : String(el.value);
|
|
99
|
+
}
|
|
100
|
+
function textOf(el) { return el.tagName === "INPUT" ? norm(valueOf(el) || el.getAttribute("aria-label")) : norm(el.innerText || el.getAttribute("aria-label")); }
|
|
101
|
+
function visible(el) { var r = el.getBoundingClientRect(); return r.width > 0 && r.height > 0 && getComputedStyle(el).visibility !== "hidden"; }
|
|
102
|
+
var all = document.body ? Array.prototype.slice.call(document.body.querySelectorAll("*")) : [];
|
|
103
|
+
var els = [];
|
|
104
|
+
var focused = false;
|
|
105
|
+
if (q.testID) {
|
|
106
|
+
els = all.filter(function (el) { return testIdOf(el) === q.testID; });
|
|
107
|
+
} else if (q.component) {
|
|
108
|
+
var wantC = q.component.toLowerCase();
|
|
109
|
+
__eb_fiberRoots(true).forEach(function (root) {
|
|
110
|
+
(function walk(f) {
|
|
111
|
+
for (; f; f = f.sibling) {
|
|
112
|
+
var t = f.type, name = t && (t.displayName || t.name);
|
|
113
|
+
if (typeof name === "string" && name.toLowerCase() === wantC) {
|
|
114
|
+
var h = f;
|
|
115
|
+
while (h && !(h.stateNode instanceof Element)) h = h.child;
|
|
116
|
+
if (h && els.indexOf(h.stateNode) < 0) els.push(h.stateNode);
|
|
117
|
+
}
|
|
118
|
+
walk(f.child);
|
|
119
|
+
}
|
|
120
|
+
})(root.current);
|
|
121
|
+
});
|
|
122
|
+
} else if (q.text) {
|
|
123
|
+
var wantT = norm(q.text).toLowerCase();
|
|
124
|
+
els = all.filter(function (el) {
|
|
125
|
+
// valueOf, not el.value: matching by a password's value would make tap a guessing oracle.
|
|
126
|
+
return norm(el.tagName === "INPUT" ? valueOf(el) : el.textContent).toLowerCase().indexOf(wantT) >= 0 ||
|
|
127
|
+
norm(el.getAttribute("aria-label")).toLowerCase().indexOf(wantT) >= 0;
|
|
128
|
+
});
|
|
129
|
+
// Innermost first, visibility second: textContent includes hidden
|
|
130
|
+
// descendants, so filtering visibility first let a visible container
|
|
131
|
+
// stand in for a hidden match inside it.
|
|
132
|
+
// els is in document order, where an element's descendants directly follow
|
|
133
|
+
// it: if any descendant matched, the next match is one. O(k), not O(k^2).
|
|
134
|
+
els = els.filter(function (el, n) { var next = els[n + 1]; return !(next && el.contains(next)); });
|
|
135
|
+
}
|
|
136
|
+
if (q.mode === "input") {
|
|
137
|
+
if (q.textMatch) {
|
|
138
|
+
var wantM = norm(q.textMatch).toLowerCase();
|
|
139
|
+
els = all.filter(isEditable).filter(function (el) {
|
|
140
|
+
return [el.getAttribute("placeholder"), labelOf(el), valueOf(el)].some(function (s) {
|
|
141
|
+
return norm(s).toLowerCase().indexOf(wantM) >= 0;
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
} else if (q.testID || q.component) {
|
|
145
|
+
els = els.reduce(function (acc, el) { return acc.concat(editablesIn(el)); }, [])
|
|
146
|
+
.filter(function (el, n, a) { return a.indexOf(el) === n; });
|
|
147
|
+
} else {
|
|
148
|
+
var active = document.activeElement;
|
|
149
|
+
focused = isEditable(active);
|
|
150
|
+
els = focused ? [active] : all.filter(isEditable);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
els = els.filter(visible);
|
|
154
|
+
globalThis.__eb_domTargets = els;
|
|
155
|
+
return JSON.stringify({
|
|
156
|
+
viewport: { w: innerWidth, h: innerHeight, dpr: devicePixelRatio, hidden: document.visibilityState === "hidden" },
|
|
157
|
+
focused: focused,
|
|
158
|
+
total: els.length,
|
|
159
|
+
candidates: els.slice(0, 50).map(function (el, n) {
|
|
160
|
+
var r = el.getBoundingClientRect();
|
|
161
|
+
return {
|
|
162
|
+
i: n, tag: el.tagName.toLowerCase(), text: textOf(el).slice(0, 200), testID: testIdOf(el),
|
|
163
|
+
label: labelOf(el), placeholder: el.getAttribute("placeholder"),
|
|
164
|
+
value: isEditable(el) ? valueOf(el) : null,
|
|
165
|
+
rect: { x: r.x, y: r.y, w: r.width, h: r.height }
|
|
166
|
+
};
|
|
167
|
+
})
|
|
168
|
+
});
|
|
169
|
+
})()`;
|
|
170
|
+
}
|
|
171
|
+
export function buildDomPrepareJs(i) {
|
|
172
|
+
return `(function () {
|
|
173
|
+
var el = (globalThis.__eb_domTargets || [])[${i}];
|
|
174
|
+
if (!el || !el.isConnected) return JSON.stringify({ error: "The element left the page between lookup and tap. Retry." });
|
|
175
|
+
var r = el.getBoundingClientRect();
|
|
176
|
+
var cx = r.x + r.width / 2, cy = r.y + r.height / 2;
|
|
177
|
+
var scrolled = false;
|
|
178
|
+
if (cx < 0 || cy < 0 || cx >= innerWidth || cy >= innerHeight) {
|
|
179
|
+
el.scrollIntoView({ block: "center", inline: "center", behavior: "instant" });
|
|
180
|
+
r = el.getBoundingClientRect();
|
|
181
|
+
cx = r.x + r.width / 2;
|
|
182
|
+
cy = r.y + r.height / 2;
|
|
183
|
+
scrolled = true;
|
|
184
|
+
}
|
|
185
|
+
var hit = document.elementFromPoint(cx, cy);
|
|
186
|
+
var covered = hit && hit !== el && !el.contains(hit) && !hit.contains(el)
|
|
187
|
+
? "<" + hit.tagName.toLowerCase() + (hit.id ? "#" + hit.id : "") +
|
|
188
|
+
(hit.getAttribute("data-testid") ? ' data-testid="' + hit.getAttribute("data-testid") + '"' : "") + ">"
|
|
189
|
+
: null;
|
|
190
|
+
return JSON.stringify({ x: cx, y: cy, scrolled: scrolled, covered: covered });
|
|
191
|
+
})()`;
|
|
192
|
+
}
|
|
193
|
+
export function collectDomTargets(app, q) {
|
|
194
|
+
return evaluateJson(app.ws, buildDomCollectJs(q));
|
|
195
|
+
}
|
|
196
|
+
export async function prepareDomTarget(app, i) {
|
|
197
|
+
const r = await evaluateJson(app.ws, buildDomPrepareJs(i));
|
|
198
|
+
if (r.error)
|
|
199
|
+
throw new Error(r.error);
|
|
200
|
+
return r;
|
|
201
|
+
}
|
|
202
|
+
const READBACK_SETTLE_MS = 80;
|
|
203
|
+
export function buildDomFocusJs(i, replace, clearOnly) {
|
|
204
|
+
return `(function () {
|
|
205
|
+
var el = (globalThis.__eb_domTargets || [])[${i}];
|
|
206
|
+
if (!el || !el.isConnected) return JSON.stringify({ error: "The field left the page between lookup and write. Retry." });
|
|
207
|
+
el.scrollIntoView({ block: "nearest", behavior: "instant" });
|
|
208
|
+
el.focus();
|
|
209
|
+
var field = !el.isContentEditable;
|
|
210
|
+
var before = field ? String(el.value) : el.innerText;
|
|
211
|
+
if (field) {
|
|
212
|
+
try {
|
|
213
|
+
if (${replace}) el.select();
|
|
214
|
+
else el.setSelectionRange(el.value.length, el.value.length);
|
|
215
|
+
} catch (e) {}
|
|
216
|
+
} else {
|
|
217
|
+
var range = document.createRange();
|
|
218
|
+
range.selectNodeContents(el);
|
|
219
|
+
if (!${replace}) range.collapse(false);
|
|
220
|
+
var sel = getSelection();
|
|
221
|
+
sel.removeAllRanges();
|
|
222
|
+
sel.addRange(range);
|
|
223
|
+
}
|
|
224
|
+
if (${clearOnly}) document.execCommand("delete");
|
|
225
|
+
return JSON.stringify({
|
|
226
|
+
before: before,
|
|
227
|
+
field: field,
|
|
228
|
+
focused: document.activeElement === el,
|
|
229
|
+
maxLength: field && el.maxLength > 0 ? el.maxLength : null,
|
|
230
|
+
password: field && String(el.type).toLowerCase() === "password"
|
|
231
|
+
});
|
|
232
|
+
})()`;
|
|
233
|
+
}
|
|
234
|
+
export function buildDomReadJs(i) {
|
|
235
|
+
return `(function () {
|
|
236
|
+
var el = (globalThis.__eb_domTargets || [])[${i}];
|
|
237
|
+
if (!el || !el.isConnected) return JSON.stringify({ value: null });
|
|
238
|
+
return JSON.stringify({ value: el.isContentEditable ? el.innerText : String(el.value) });
|
|
239
|
+
})()`;
|
|
240
|
+
}
|
|
241
|
+
export function judgeTextEntry(a) {
|
|
242
|
+
const expected = a.replace ? a.sent : a.before + a.sent;
|
|
243
|
+
if (a.landed === expected)
|
|
244
|
+
return { success: true, verified: true, value: a.landed, path: "cdp" };
|
|
245
|
+
if (a.landed === null)
|
|
246
|
+
return { success: false, error: "the field left the page before it could be read back", sent: expected, landed: null };
|
|
247
|
+
const truncated = a.maxLength !== null && a.landed.length === a.maxLength && expected.startsWith(a.landed);
|
|
248
|
+
return {
|
|
249
|
+
success: false,
|
|
250
|
+
error: truncated
|
|
251
|
+
? `the field's maxLength (${a.maxLength}) cut the text; retrying cannot fit it`
|
|
252
|
+
: "the field does not hold what was sent (a controlled input may have rejected or reformatted it)",
|
|
253
|
+
sent: expected,
|
|
254
|
+
landed: a.landed,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
const maskPw = (v) => `[password, ${v.length} chars]`;
|
|
258
|
+
export function maskPasswordEntry(r) {
|
|
259
|
+
return {
|
|
260
|
+
...r,
|
|
261
|
+
...(typeof r.value === "string" ? { value: maskPw(r.value) } : {}),
|
|
262
|
+
...(typeof r.sent === "string" ? { sent: maskPw(r.sent) } : {}),
|
|
263
|
+
...(typeof r.landed === "string" ? { landed: maskPw(r.landed) } : {}),
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
export async function chromiumInputText(app, a) {
|
|
267
|
+
const replace = a.replace === true;
|
|
268
|
+
const targeted = a.testID !== undefined || a.component !== undefined || a.textMatch !== undefined;
|
|
269
|
+
try {
|
|
270
|
+
const found = await collectDomTargets(app, { mode: "input", testID: a.testID, component: a.component, textMatch: a.textMatch });
|
|
271
|
+
const candidates = found.candidates.map((c, n) => ({
|
|
272
|
+
index: n, component: c.tag, label: c.label, placeholder: c.placeholder, value: c.value, testID: c.testID,
|
|
273
|
+
}));
|
|
274
|
+
if (!targeted && !found.focused) {
|
|
275
|
+
return {
|
|
276
|
+
success: false,
|
|
277
|
+
error: "no field is focused. Pass testID, component or textMatch so this tool can focus one itself.",
|
|
278
|
+
candidates,
|
|
279
|
+
totalInputs: found.total,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
const pick = pickDomTarget(found.candidates, undefined, a.index);
|
|
283
|
+
if (pick.kind === "ambiguous") {
|
|
284
|
+
return { success: false, ambiguous: true, error: `${pick.matches.length} fields match this target`, candidates, totalInputs: found.total };
|
|
285
|
+
}
|
|
286
|
+
if (pick.kind === "none") {
|
|
287
|
+
return {
|
|
288
|
+
success: false,
|
|
289
|
+
error: "no visible editable field matches that target. On chromium, inputs, textareas and contenteditable elements are searched; " +
|
|
290
|
+
"testID matches data-testid / data-test-id / id.",
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
const prep = await evaluateJson(app.ws, buildDomFocusJs(pick.cand.i, replace, replace && a.text === ""));
|
|
294
|
+
if (prep.error)
|
|
295
|
+
return { success: false, error: prep.error };
|
|
296
|
+
if (a.text !== "")
|
|
297
|
+
await chromiumInsertText(app, a.text);
|
|
298
|
+
await new Promise((r) => setTimeout(r, READBACK_SETTLE_MS));
|
|
299
|
+
const { value } = await evaluateJson(app.ws, buildDomReadJs(pick.cand.i));
|
|
300
|
+
const trim = (v) => (prep.field ? v : v.replace(/\n$/, ""));
|
|
301
|
+
const landed = value === null ? null : trim(value);
|
|
302
|
+
const verdict = judgeTextEntry({ before: trim(prep.before), sent: a.text, replace, landed, maxLength: prep.maxLength });
|
|
303
|
+
return prep.password ? maskPasswordEntry(verdict) : verdict;
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
return { success: false, error: err instanceof Error ? err.message : String(err) };
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
export const MOD = { Alt: 1, Control: 2, Meta: 4, Shift: 8 };
|
|
310
|
+
const MOD_KEYS = {
|
|
311
|
+
Alt: { key: "Alt", code: "AltLeft", windowsVirtualKeyCode: 18 },
|
|
312
|
+
Control: { key: "Control", code: "ControlLeft", windowsVirtualKeyCode: 17 },
|
|
313
|
+
Meta: { key: "Meta", code: "MetaLeft", windowsVirtualKeyCode: 91 },
|
|
314
|
+
Shift: { key: "Shift", code: "ShiftLeft", windowsVirtualKeyCode: 16 },
|
|
315
|
+
};
|
|
316
|
+
const MOD_ALIASES = {
|
|
317
|
+
alt: "Alt", option: "Alt", opt: "Alt",
|
|
318
|
+
control: "Control", ctrl: "Control",
|
|
319
|
+
meta: "Meta", cmd: "Meta", command: "Meta",
|
|
320
|
+
shift: "Shift",
|
|
321
|
+
};
|
|
322
|
+
const NAMED_KEYS = [
|
|
323
|
+
{ key: "Enter", code: "Enter", windowsVirtualKeyCode: 13, text: "\r" },
|
|
324
|
+
{ key: "Escape", code: "Escape", windowsVirtualKeyCode: 27 },
|
|
325
|
+
{ key: "Tab", code: "Tab", windowsVirtualKeyCode: 9 },
|
|
326
|
+
{ key: "Backspace", code: "Backspace", windowsVirtualKeyCode: 8 },
|
|
327
|
+
{ key: "Delete", code: "Delete", windowsVirtualKeyCode: 46 },
|
|
328
|
+
{ key: " ", code: "Space", windowsVirtualKeyCode: 32, text: " " },
|
|
329
|
+
{ key: "ArrowUp", code: "ArrowUp", windowsVirtualKeyCode: 38 },
|
|
330
|
+
{ key: "ArrowDown", code: "ArrowDown", windowsVirtualKeyCode: 40 },
|
|
331
|
+
{ key: "ArrowLeft", code: "ArrowLeft", windowsVirtualKeyCode: 37 },
|
|
332
|
+
{ key: "ArrowRight", code: "ArrowRight", windowsVirtualKeyCode: 39 },
|
|
333
|
+
{ key: "Home", code: "Home", windowsVirtualKeyCode: 36 },
|
|
334
|
+
{ key: "End", code: "End", windowsVirtualKeyCode: 35 },
|
|
335
|
+
{ key: "PageUp", code: "PageUp", windowsVirtualKeyCode: 33 },
|
|
336
|
+
{ key: "PageDown", code: "PageDown", windowsVirtualKeyCode: 34 },
|
|
337
|
+
...Array.from({ length: 12 }, (_, i) => ({ key: `F${i + 1}`, code: `F${i + 1}`, windowsVirtualKeyCode: 112 + i })),
|
|
338
|
+
];
|
|
339
|
+
const KEY_ALIASES = {
|
|
340
|
+
esc: "Escape", return: "Enter", space: " ", del: "Delete",
|
|
341
|
+
up: "ArrowUp", down: "ArrowDown", left: "ArrowLeft", right: "ArrowRight",
|
|
342
|
+
};
|
|
343
|
+
export const VALID_KEY_NAMES = "Enter, Escape, Tab, Backspace, Delete, Space, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Home, End, PageUp, PageDown, F1-F12, " +
|
|
344
|
+
"or a single character, optionally after modifiers joined by + (Shift, Control, Alt, Meta): e.g. Shift+Tab, Meta+K";
|
|
345
|
+
function charKey(ch) {
|
|
346
|
+
const lower = ch.toLowerCase();
|
|
347
|
+
if (/^[a-z]$/.test(lower))
|
|
348
|
+
return { key: lower, code: `Key${lower.toUpperCase()}`, windowsVirtualKeyCode: lower.toUpperCase().charCodeAt(0), text: lower };
|
|
349
|
+
if (/^[0-9]$/.test(ch))
|
|
350
|
+
return { key: ch, code: `Digit${ch}`, windowsVirtualKeyCode: ch.charCodeAt(0), text: ch };
|
|
351
|
+
return { key: ch, code: "", windowsVirtualKeyCode: 0, text: ch };
|
|
352
|
+
}
|
|
353
|
+
export function parseKeyCombo(input) {
|
|
354
|
+
const s = input.trim();
|
|
355
|
+
let keyPart;
|
|
356
|
+
let modParts;
|
|
357
|
+
if (s === "+" || s.endsWith("++")) {
|
|
358
|
+
keyPart = "+";
|
|
359
|
+
modParts = s.length > 1 ? s.slice(0, -2).split("+") : [];
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
const parts = s.split("+");
|
|
363
|
+
keyPart = parts.pop() ?? "";
|
|
364
|
+
modParts = parts;
|
|
365
|
+
}
|
|
366
|
+
let mods = 0;
|
|
367
|
+
for (const m of modParts) {
|
|
368
|
+
const name = MOD_ALIASES[m.trim().toLowerCase()];
|
|
369
|
+
if (!name)
|
|
370
|
+
return { error: `Unknown modifier "${m}" in "${input}". Valid: ${VALID_KEY_NAMES}.` };
|
|
371
|
+
mods |= MOD[name];
|
|
372
|
+
}
|
|
373
|
+
const k = keyPart.trim();
|
|
374
|
+
const lower = k.toLowerCase();
|
|
375
|
+
let key;
|
|
376
|
+
if ([...k].length === 1)
|
|
377
|
+
key = charKey(k);
|
|
378
|
+
else {
|
|
379
|
+
const want = (KEY_ALIASES[lower] ?? k).toLowerCase();
|
|
380
|
+
key = NAMED_KEYS.find((d) => d.key.toLowerCase() === want || d.code.toLowerCase() === want);
|
|
381
|
+
}
|
|
382
|
+
if (!key)
|
|
383
|
+
return { error: `Unknown key "${k || input}". Valid: ${VALID_KEY_NAMES}.` };
|
|
384
|
+
if (mods & (MOD.Control | MOD.Alt | MOD.Meta))
|
|
385
|
+
key = { ...key, text: undefined };
|
|
386
|
+
else if (mods & MOD.Shift && key.text && /^[a-z]$/.test(key.text))
|
|
387
|
+
key = { ...key, text: key.text.toUpperCase() };
|
|
388
|
+
return { mods, key };
|
|
389
|
+
}
|
|
390
|
+
export function wheelDelta(direction, distancePx, vp) {
|
|
391
|
+
const vertical = direction === "up" || direction === "down";
|
|
392
|
+
const css = distancePx && distancePx > 0 ? distancePx / pxPerCss(vp) : Math.round(0.33 * (vertical ? vp.h : vp.w));
|
|
393
|
+
const sign = direction === "up" || direction === "left" ? 1 : -1;
|
|
394
|
+
return vertical ? { dx: 0, dy: sign * css } : { dx: sign * css, dy: 0 };
|
|
395
|
+
}
|
|
396
|
+
export function dragPath(start, end, durationMs) {
|
|
397
|
+
const steps = Math.max(5, Math.round(durationMs / 16));
|
|
398
|
+
return Array.from({ length: steps + 1 }, (_, i) => {
|
|
399
|
+
const t = i / steps;
|
|
400
|
+
return i === steps
|
|
401
|
+
? { ...end, at: durationMs }
|
|
402
|
+
: { x: start.x + (end.x - start.x) * t, y: start.y + (end.y - start.y) * t, at: durationMs * t };
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
export function scrollVerdict(before, after, delta) {
|
|
406
|
+
if (before.container === null || after.container === null) {
|
|
407
|
+
return { moved: 0, warning: "no scroll container under the point: nothing there scrolls. Aim startX/startY at the list itself (get_screen_state shows where it is)." };
|
|
408
|
+
}
|
|
409
|
+
const horizontal = Math.abs(delta.dx) > Math.abs(delta.dy);
|
|
410
|
+
const pos = (p) => (horizontal ? p.left : p.top);
|
|
411
|
+
const max = horizontal ? before.maxLeft : before.maxTop;
|
|
412
|
+
const moved = pos(after) - pos(before);
|
|
413
|
+
if (Math.abs(moved) >= 1)
|
|
414
|
+
return { moved };
|
|
415
|
+
if (before.page && after.page) {
|
|
416
|
+
const pageMoved = horizontal ? after.page.left - before.page.left : after.page.top - before.page.top;
|
|
417
|
+
if (Math.abs(pageMoved) >= 1)
|
|
418
|
+
return { moved: pageMoved, chainedTo: "the page" };
|
|
419
|
+
}
|
|
420
|
+
const where = before.container;
|
|
421
|
+
if (max <= 0) {
|
|
422
|
+
return { moved: 0, warning: `${where} is not scrollable ${horizontal ? "horizontally" : "vertically"}: its content fits, or it scrolls on the other axis. Swipe ${horizontal ? "up/down" : "left/right"} instead.` };
|
|
423
|
+
}
|
|
424
|
+
const towardEnd = (horizontal ? delta.dx : delta.dy) > 0;
|
|
425
|
+
if (!towardEnd && pos(before) <= 1)
|
|
426
|
+
return { moved: 0, warning: `${where} is already at the ${horizontal ? "start" : "top"}. Swipe the other direction to move.` };
|
|
427
|
+
if (towardEnd && pos(before) >= max - 1)
|
|
428
|
+
return { moved: 0, warning: `${where} is already at the end (offset ${Math.round(max)}). There is no more content this way.` };
|
|
429
|
+
return { moved: 0, warning: `${where} is at ${Math.round(pos(before))} of ${Math.round(max)} and did not move: something under the pointer took the wheel (a map, a canvas), or scrolling is disabled.` };
|
|
430
|
+
}
|
|
431
|
+
export async function chromiumWheel(app, x, y, dx, dy) {
|
|
432
|
+
await sendCdpCommand(app.ws, "Input.dispatchMouseEvent", { type: "mouseWheel", x, y, deltaX: dx, deltaY: dy });
|
|
433
|
+
}
|
|
434
|
+
export async function chromiumDrag(app, path) {
|
|
435
|
+
const send = (params) => sendCdpCommand(app.ws, "Input.dispatchMouseEvent", params);
|
|
436
|
+
const [first, ...rest] = path;
|
|
437
|
+
const last = path[path.length - 1];
|
|
438
|
+
const t0 = Date.now();
|
|
439
|
+
await send({ type: "mouseMoved", x: first.x, y: first.y });
|
|
440
|
+
await send({ type: "mousePressed", x: first.x, y: first.y, button: "left", buttons: 1, clickCount: 1 });
|
|
441
|
+
for (const p of rest) {
|
|
442
|
+
const wait = t0 + p.at - Date.now();
|
|
443
|
+
if (wait > 0)
|
|
444
|
+
await new Promise((r) => setTimeout(r, wait));
|
|
445
|
+
await send({ type: "mouseMoved", x: p.x, y: p.y, button: "left", buttons: 1 });
|
|
446
|
+
}
|
|
447
|
+
await send({ type: "mouseReleased", x: last.x, y: last.y, button: "left", buttons: 0, clickCount: 1 });
|
|
448
|
+
}
|
|
449
|
+
export async function chromiumKey(app, combo) {
|
|
450
|
+
const send = (params) => sendCdpCommand(app.ws, "Input.dispatchKeyEvent", params);
|
|
451
|
+
const held = Object.keys(MOD).filter((m) => combo.mods & MOD[m]);
|
|
452
|
+
const fields = (d) => ({ key: d.key, code: d.code, windowsVirtualKeyCode: d.windowsVirtualKeyCode, nativeVirtualKeyCode: d.windowsVirtualKeyCode });
|
|
453
|
+
let mods = 0;
|
|
454
|
+
for (const m of held) {
|
|
455
|
+
mods |= MOD[m];
|
|
456
|
+
await send({ type: "rawKeyDown", modifiers: mods, ...fields(MOD_KEYS[m]) });
|
|
457
|
+
}
|
|
458
|
+
const k = combo.key;
|
|
459
|
+
await send({ type: k.text ? "keyDown" : "rawKeyDown", modifiers: mods, ...fields(k), ...(k.text && { text: k.text, unmodifiedText: k.text }) });
|
|
460
|
+
await send({ type: "keyUp", modifiers: mods, ...fields(k) });
|
|
461
|
+
for (const m of held.reverse()) {
|
|
462
|
+
mods &= ~MOD[m];
|
|
463
|
+
await send({ type: "keyUp", modifiers: mods, ...fields(MOD_KEYS[m]) });
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
export function buildDomKeyFocusJs(i) {
|
|
467
|
+
return `(function () {
|
|
468
|
+
var el = (globalThis.__eb_domTargets || [])[${i}];
|
|
469
|
+
if (!el || !el.isConnected) return JSON.stringify({ error: "The element left the page between lookup and focus. Retry." });
|
|
470
|
+
var F = "input, textarea, select, button, a[href], [tabindex], [contenteditable]";
|
|
471
|
+
var f = el.matches(F) ? el : (el.querySelector(F) || el.closest(F));
|
|
472
|
+
if (!f) return JSON.stringify({ error: "The target is not focusable and has no focusable element inside or around it, so keys cannot be sent to it." });
|
|
473
|
+
f.scrollIntoView({ block: "nearest", behavior: "instant" });
|
|
474
|
+
f.focus();
|
|
475
|
+
// Caret at the end, so Backspace deletes what was typed last.
|
|
476
|
+
if (typeof f.value === "string" && f.setSelectionRange) { try { f.setSelectionRange(f.value.length, f.value.length); } catch (e) {} }
|
|
477
|
+
return JSON.stringify({ focused: document.activeElement === f });
|
|
478
|
+
})()`;
|
|
479
|
+
}
|
|
480
|
+
//# sourceMappingURL=chromium.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chromium.js","sourceRoot":"","sources":["../../src/core/chromium.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const CHROMIUM_TOOLS: Set<string>;
|
|
2
|
+
export declare function chromiumGate(toolName: string, platform: string | undefined): {
|
|
3
|
+
content: [{
|
|
4
|
+
type: "text";
|
|
5
|
+
text: string;
|
|
6
|
+
}];
|
|
7
|
+
isError: true;
|
|
8
|
+
_errorMessage: string;
|
|
9
|
+
_failureKind: "platform_mismatch";
|
|
10
|
+
} | null;
|
|
11
|
+
//# sourceMappingURL=chromiumCapabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chromiumCapabilities.d.ts","sourceRoot":"","sources":["../../src/core/chromiumCapabilities.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,CAoBrC,CAAC;AAYH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS;aAOrB,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;;;;SAKrF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const CHROMIUM_TOOLS = new Set([
|
|
2
|
+
"scan_metro", "connect_metro", "disconnect_metro", "ensure_connection",
|
|
3
|
+
"get_connection_status", "get_apps", "get_usage_guide", "list_devices",
|
|
4
|
+
"get_license_status", "activate_license", "delete_account",
|
|
5
|
+
"send_feedback", "reset_telemetry", "get_images", "electron_launch_app",
|
|
6
|
+
"get_logs", "search_logs", "clear_logs", "get_log_details",
|
|
7
|
+
"get_network_requests", "search_network", "get_request_details", "clear_network", "network_replay",
|
|
8
|
+
"network_mock", "network_condition",
|
|
9
|
+
"list_secrets", "http_request", "app_request",
|
|
10
|
+
"execute_in_app", "list_debug_globals", "inspect_global", "redux_get_state", "redux_dispatch",
|
|
11
|
+
"get_component_tree", "find_components", "inspect_component",
|
|
12
|
+
"get_screen_state", "get_screen_layout", "inspect_at_point", "measure",
|
|
13
|
+
"screenshot", "tap", "input_text", "swipe", "press_key", "handle_dialog",
|
|
14
|
+
]);
|
|
15
|
+
const OVERRIDES = {
|
|
16
|
+
navigate: "navigate drives React Navigation and Expo Router only, which a chromium target does not have. " +
|
|
17
|
+
"Use execute_in_app to move the page instead, e.g. `location.hash = '#/settings'` or your router's own API.",
|
|
18
|
+
ios_screenshot: "ios_screenshot captures the iOS simulator, not a chromium window. Use screenshot({ device }) instead: it captures any target, chromium included.",
|
|
19
|
+
android_screenshot: "android_screenshot captures an Android device, not a chromium window. Use screenshot({ device }) instead: it captures any target, chromium included.",
|
|
20
|
+
};
|
|
21
|
+
export function chromiumGate(toolName, platform) {
|
|
22
|
+
if (platform !== "chromium" || CHROMIUM_TOOLS.has(toolName))
|
|
23
|
+
return null;
|
|
24
|
+
const text = OVERRIDES[toolName] ??
|
|
25
|
+
`${toolName} is not supported on chromium targets (Electron / Chrome) yet. ` +
|
|
26
|
+
"Supported there: logs, network capture, replay and mocking, execute_in_app, debug globals, redux, http_request/app_request, component inspection and screen reading (get_component_tree, find_components, inspect_component, get_screen_state, get_screen_layout, inspect_at_point, measure), screenshot, tap, input_text, swipe (wheel scroll and drag), press_key, handle_dialog. " +
|
|
27
|
+
"To run it against a React Native app instead, pass device=<name> (get_apps lists connected targets).";
|
|
28
|
+
return {
|
|
29
|
+
content: [{ type: "text", text }],
|
|
30
|
+
isError: true,
|
|
31
|
+
_errorMessage: `${toolName} not supported on chromium`,
|
|
32
|
+
_failureKind: "platform_mismatch",
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=chromiumCapabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chromiumCapabilities.js","sourceRoot":"","sources":["../../src/core/chromiumCapabilities.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,cAAc,GAAgB,IAAI,GAAG,CAAC;IAE/C,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,mBAAmB;IACtE,uBAAuB,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc;IACtE,oBAAoB,EAAE,kBAAkB,EAAE,gBAAgB;IAC1D,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,qBAAqB;IAEvE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB;IAE1D,sBAAsB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB;IAClG,cAAc,EAAE,mBAAmB;IAEnC,cAAc,EAAE,cAAc,EAAE,aAAa;IAE7C,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB;IAE7F,oBAAoB,EAAE,iBAAiB,EAAE,mBAAmB;IAC5D,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS;IAEtE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe;CAC3E,CAAC,CAAC;AAEH,MAAM,SAAS,GAA2B;IACtC,QAAQ,EACJ,gGAAgG;QAChG,4GAA4G;IAChH,cAAc,EACV,kJAAkJ;IACtJ,kBAAkB,EACd,sJAAsJ;CAC7J,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,QAA4B;IACvE,IAAI,QAAQ,KAAK,UAAU,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACzE,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC;QAC5B,GAAG,QAAQ,iEAAiE;YAC5E,sXAAsX;YACtX,sGAAsG,CAAC;IAC3G,OAAO;QACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAqC;QAC9E,OAAO,EAAE,IAAa;QACtB,aAAa,EAAE,GAAG,QAAQ,4BAA4B;QACtD,YAAY,EAAE,mBAA4B;KAC7C,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ConnectedApp } from "./types.js";
|
|
2
|
+
export declare function findAppWithOpenDialog(): ConnectedApp | null;
|
|
3
|
+
export declare function pickDialogApp(target: ConnectedApp | null, device: string | undefined): ConnectedApp | null;
|
|
4
|
+
export declare function answerDialog(app: ConnectedApp, a: {
|
|
5
|
+
action: "accept" | "dismiss";
|
|
6
|
+
promptText?: string;
|
|
7
|
+
}): Promise<{
|
|
8
|
+
text: string;
|
|
9
|
+
isError: boolean;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=chromiumDialogAnswer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chromiumDialogAnswer.d.ts","sourceRoot":"","sources":["../../src/core/chromiumDialogAnswer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ/C,wBAAgB,qBAAqB,IAAI,YAAY,GAAG,IAAI,CAG3D;AAQD,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,IAAI,CAI1G;AAUD,wBAAsB,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE;IAAE,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAmC3J"}
|