execbro 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.
Files changed (266) hide show
  1. package/README.md +15 -1
  2. package/build/__tests__/unit/autoReconnectOptOut.test.js +3 -0
  3. package/build/__tests__/unit/autoReconnectOptOut.test.js.map +1 -1
  4. package/build/__tests__/unit/cdpCommand.test.d.ts +2 -0
  5. package/build/__tests__/unit/cdpCommand.test.d.ts.map +1 -0
  6. package/build/__tests__/unit/cdpCommand.test.js +84 -0
  7. package/build/__tests__/unit/cdpCommand.test.js.map +1 -0
  8. package/build/__tests__/unit/chromium.test.d.ts +2 -0
  9. package/build/__tests__/unit/chromium.test.d.ts.map +1 -0
  10. package/build/__tests__/unit/chromium.test.js +118 -0
  11. package/build/__tests__/unit/chromium.test.js.map +1 -0
  12. package/build/__tests__/unit/chromiumDevice.test.d.ts +2 -0
  13. package/build/__tests__/unit/chromiumDevice.test.d.ts.map +1 -0
  14. package/build/__tests__/unit/chromiumDevice.test.js +115 -0
  15. package/build/__tests__/unit/chromiumDevice.test.js.map +1 -0
  16. package/build/__tests__/unit/chromiumDialogAnswer.test.d.ts +2 -0
  17. package/build/__tests__/unit/chromiumDialogAnswer.test.d.ts.map +1 -0
  18. package/build/__tests__/unit/chromiumDialogAnswer.test.js +71 -0
  19. package/build/__tests__/unit/chromiumDialogAnswer.test.js.map +1 -0
  20. package/build/__tests__/unit/chromiumDialogRaces.test.d.ts +2 -0
  21. package/build/__tests__/unit/chromiumDialogRaces.test.d.ts.map +1 -0
  22. package/build/__tests__/unit/chromiumDialogRaces.test.js +100 -0
  23. package/build/__tests__/unit/chromiumDialogRaces.test.js.map +1 -0
  24. package/build/__tests__/unit/chromiumDialogs.test.d.ts +2 -0
  25. package/build/__tests__/unit/chromiumDialogs.test.d.ts.map +1 -0
  26. package/build/__tests__/unit/chromiumDialogs.test.js +167 -0
  27. package/build/__tests__/unit/chromiumDialogs.test.js.map +1 -0
  28. package/build/__tests__/unit/chromiumDiscovery.test.d.ts +2 -0
  29. package/build/__tests__/unit/chromiumDiscovery.test.d.ts.map +1 -0
  30. package/build/__tests__/unit/chromiumDiscovery.test.js +302 -0
  31. package/build/__tests__/unit/chromiumDiscovery.test.js.map +1 -0
  32. package/build/__tests__/unit/chromiumDom.test.d.ts +2 -0
  33. package/build/__tests__/unit/chromiumDom.test.d.ts.map +1 -0
  34. package/build/__tests__/unit/chromiumDom.test.js +119 -0
  35. package/build/__tests__/unit/chromiumDom.test.js.map +1 -0
  36. package/build/__tests__/unit/chromiumGate.test.d.ts +2 -0
  37. package/build/__tests__/unit/chromiumGate.test.d.ts.map +1 -0
  38. package/build/__tests__/unit/chromiumGate.test.js +149 -0
  39. package/build/__tests__/unit/chromiumGate.test.js.map +1 -0
  40. package/build/__tests__/unit/chromiumInput.test.d.ts +2 -0
  41. package/build/__tests__/unit/chromiumInput.test.d.ts.map +1 -0
  42. package/build/__tests__/unit/chromiumInput.test.js +113 -0
  43. package/build/__tests__/unit/chromiumInput.test.js.map +1 -0
  44. package/build/__tests__/unit/chromiumKeys.test.d.ts +2 -0
  45. package/build/__tests__/unit/chromiumKeys.test.d.ts.map +1 -0
  46. package/build/__tests__/unit/chromiumKeys.test.js +26 -0
  47. package/build/__tests__/unit/chromiumKeys.test.js.map +1 -0
  48. package/build/__tests__/unit/chromiumScreen.test.d.ts +2 -0
  49. package/build/__tests__/unit/chromiumScreen.test.d.ts.map +1 -0
  50. package/build/__tests__/unit/chromiumScreen.test.js +390 -0
  51. package/build/__tests__/unit/chromiumScreen.test.js.map +1 -0
  52. package/build/__tests__/unit/chromiumStaleTarget.test.d.ts +2 -0
  53. package/build/__tests__/unit/chromiumStaleTarget.test.d.ts.map +1 -0
  54. package/build/__tests__/unit/chromiumStaleTarget.test.js +26 -0
  55. package/build/__tests__/unit/chromiumStaleTarget.test.js.map +1 -0
  56. package/build/__tests__/unit/connectionGaps.test.d.ts +2 -0
  57. package/build/__tests__/unit/connectionGaps.test.d.ts.map +1 -0
  58. package/build/__tests__/unit/connectionGaps.test.js +14 -0
  59. package/build/__tests__/unit/connectionGaps.test.js.map +1 -0
  60. package/build/__tests__/unit/contextPreambleGlobals.test.d.ts +2 -0
  61. package/build/__tests__/unit/contextPreambleGlobals.test.d.ts.map +1 -0
  62. package/build/__tests__/unit/contextPreambleGlobals.test.js +25 -0
  63. package/build/__tests__/unit/contextPreambleGlobals.test.js.map +1 -0
  64. package/build/__tests__/unit/deviceResolver.test.js +9 -0
  65. package/build/__tests__/unit/deviceResolver.test.js.map +1 -1
  66. package/build/__tests__/unit/electronLaunch.test.d.ts +2 -0
  67. package/build/__tests__/unit/electronLaunch.test.d.ts.map +1 -0
  68. package/build/__tests__/unit/electronLaunch.test.js +165 -0
  69. package/build/__tests__/unit/electronLaunch.test.js.map +1 -0
  70. package/build/__tests__/unit/fiberRoots.test.d.ts +2 -0
  71. package/build/__tests__/unit/fiberRoots.test.d.ts.map +1 -0
  72. package/build/__tests__/unit/fiberRoots.test.js +95 -0
  73. package/build/__tests__/unit/fiberRoots.test.js.map +1 -0
  74. package/build/__tests__/unit/fiberRootsDrift.test.d.ts +2 -0
  75. package/build/__tests__/unit/fiberRootsDrift.test.d.ts.map +1 -0
  76. package/build/__tests__/unit/fiberRootsDrift.test.js +23 -0
  77. package/build/__tests__/unit/fiberRootsDrift.test.js.map +1 -0
  78. package/build/__tests__/unit/hostAddress.test.d.ts +2 -0
  79. package/build/__tests__/unit/hostAddress.test.d.ts.map +1 -0
  80. package/build/__tests__/unit/hostAddress.test.js +38 -0
  81. package/build/__tests__/unit/hostAddress.test.js.map +1 -0
  82. package/build/__tests__/unit/measureComponent.test.js +1 -1
  83. package/build/__tests__/unit/measureComponent.test.js.map +1 -1
  84. package/build/__tests__/unit/networkInterceptorFetchMock.test.d.ts +2 -0
  85. package/build/__tests__/unit/networkInterceptorFetchMock.test.d.ts.map +1 -0
  86. package/build/__tests__/unit/networkInterceptorFetchMock.test.js +90 -0
  87. package/build/__tests__/unit/networkInterceptorFetchMock.test.js.map +1 -0
  88. package/build/__tests__/unit/networkMockTool.test.js +12 -1
  89. package/build/__tests__/unit/networkMockTool.test.js.map +1 -1
  90. package/build/__tests__/unit/pressKeyMobile.test.d.ts +2 -0
  91. package/build/__tests__/unit/pressKeyMobile.test.d.ts.map +1 -0
  92. package/build/__tests__/unit/pressKeyMobile.test.js +63 -0
  93. package/build/__tests__/unit/pressKeyMobile.test.js.map +1 -0
  94. package/build/__tests__/unit/reloadAppAutoConnect.test.js +4 -1
  95. package/build/__tests__/unit/reloadAppAutoConnect.test.js.map +1 -1
  96. package/build/__tests__/unit/tapAndroidSerial.test.js +16 -0
  97. package/build/__tests__/unit/tapAndroidSerial.test.js.map +1 -1
  98. package/build/core/android.d.ts +10 -0
  99. package/build/core/android.d.ts.map +1 -1
  100. package/build/core/android.js +17 -0
  101. package/build/core/android.js.map +1 -1
  102. package/build/core/appContext.d.ts.map +1 -1
  103. package/build/core/appContext.js +11 -13
  104. package/build/core/appContext.js.map +1 -1
  105. package/build/core/appDetection.d.ts.map +1 -1
  106. package/build/core/appDetection.js +7 -4
  107. package/build/core/appDetection.js.map +1 -1
  108. package/build/core/cdpCommand.d.ts +4 -0
  109. package/build/core/cdpCommand.d.ts.map +1 -0
  110. package/build/core/cdpCommand.js +58 -0
  111. package/build/core/cdpCommand.js.map +1 -0
  112. package/build/core/chromium.d.ts +157 -0
  113. package/build/core/chromium.d.ts.map +1 -0
  114. package/build/core/chromium.js +480 -0
  115. package/build/core/chromium.js.map +1 -0
  116. package/build/core/chromiumCapabilities.d.ts +11 -0
  117. package/build/core/chromiumCapabilities.d.ts.map +1 -0
  118. package/build/core/chromiumCapabilities.js +35 -0
  119. package/build/core/chromiumCapabilities.js.map +1 -0
  120. package/build/core/chromiumDialogAnswer.d.ts +11 -0
  121. package/build/core/chromiumDialogAnswer.d.ts.map +1 -0
  122. package/build/core/chromiumDialogAnswer.js +61 -0
  123. package/build/core/chromiumDialogAnswer.js.map +1 -0
  124. package/build/core/chromiumDialogs.d.ts +46 -0
  125. package/build/core/chromiumDialogs.d.ts.map +1 -0
  126. package/build/core/chromiumDialogs.js +88 -0
  127. package/build/core/chromiumDialogs.js.map +1 -0
  128. package/build/core/chromiumScreen.d.ts +97 -0
  129. package/build/core/chromiumScreen.d.ts.map +1 -0
  130. package/build/core/chromiumScreen.js +498 -0
  131. package/build/core/chromiumScreen.js.map +1 -0
  132. package/build/core/componentSearch.d.ts.map +1 -1
  133. package/build/core/componentSearch.js +7 -26
  134. package/build/core/componentSearch.js.map +1 -1
  135. package/build/core/componentSource.d.ts.map +1 -1
  136. package/build/core/componentSource.js +3 -11
  137. package/build/core/componentSource.js.map +1 -1
  138. package/build/core/componentTree.d.ts.map +1 -1
  139. package/build/core/componentTree.js +4 -18
  140. package/build/core/componentTree.js.map +1 -1
  141. package/build/core/connection.d.ts +13 -0
  142. package/build/core/connection.d.ts.map +1 -1
  143. package/build/core/connection.js +99 -18
  144. package/build/core/connection.js.map +1 -1
  145. package/build/core/connectionState.d.ts +2 -1
  146. package/build/core/connectionState.d.ts.map +1 -1
  147. package/build/core/connectionState.js +3 -0
  148. package/build/core/connectionState.js.map +1 -1
  149. package/build/core/deviceResolver.d.ts.map +1 -1
  150. package/build/core/deviceResolver.js +8 -5
  151. package/build/core/deviceResolver.js.map +1 -1
  152. package/build/core/electronLaunch.d.ts +25 -0
  153. package/build/core/electronLaunch.d.ts.map +1 -0
  154. package/build/core/electronLaunch.js +113 -0
  155. package/build/core/electronLaunch.js.map +1 -0
  156. package/build/core/errors.d.ts +1 -1
  157. package/build/core/errors.d.ts.map +1 -1
  158. package/build/core/errors.js.map +1 -1
  159. package/build/core/guides.d.ts.map +1 -1
  160. package/build/core/guides.js +9 -6
  161. package/build/core/guides.js.map +1 -1
  162. package/build/core/hostAddress.d.ts +6 -0
  163. package/build/core/hostAddress.d.ts.map +1 -0
  164. package/build/core/hostAddress.js +32 -0
  165. package/build/core/hostAddress.js.map +1 -0
  166. package/build/core/injected/fiberRoots.d.ts +2 -0
  167. package/build/core/injected/fiberRoots.d.ts.map +1 -0
  168. package/build/core/injected/fiberRoots.js +60 -0
  169. package/build/core/injected/fiberRoots.js.map +1 -0
  170. package/build/core/inputTarget.d.ts.map +1 -1
  171. package/build/core/inputTarget.js +4 -9
  172. package/build/core/inputTarget.js.map +1 -1
  173. package/build/core/inspector.d.ts.map +1 -1
  174. package/build/core/inspector.js +6 -22
  175. package/build/core/inspector.js.map +1 -1
  176. package/build/core/ios.d.ts +12 -0
  177. package/build/core/ios.d.ts.map +1 -1
  178. package/build/core/ios.js +32 -0
  179. package/build/core/ios.js.map +1 -1
  180. package/build/core/jsExecute.d.ts.map +1 -1
  181. package/build/core/jsExecute.js +20 -1
  182. package/build/core/jsExecute.js.map +1 -1
  183. package/build/core/measureComponent.d.ts.map +1 -1
  184. package/build/core/measureComponent.js +4 -8
  185. package/build/core/measureComponent.js.map +1 -1
  186. package/build/core/metro.d.ts +20 -1
  187. package/build/core/metro.d.ts.map +1 -1
  188. package/build/core/metro.js +146 -9
  189. package/build/core/metro.js.map +1 -1
  190. package/build/core/mockRules.d.ts +1 -0
  191. package/build/core/mockRules.d.ts.map +1 -1
  192. package/build/core/mockRules.js +8 -0
  193. package/build/core/mockRules.js.map +1 -1
  194. package/build/core/nativeLogs.js +1 -1
  195. package/build/core/nativeLogs.js.map +1 -1
  196. package/build/core/navigation.d.ts.map +1 -1
  197. package/build/core/navigation.js +4 -18
  198. package/build/core/navigation.js.map +1 -1
  199. package/build/core/networkInterceptor.d.ts +2 -2
  200. package/build/core/networkInterceptor.d.ts.map +1 -1
  201. package/build/core/networkInterceptor.js +90 -3
  202. package/build/core/networkInterceptor.js.map +1 -1
  203. package/build/core/pressables.d.ts.map +1 -1
  204. package/build/core/pressables.js +6 -13
  205. package/build/core/pressables.js.map +1 -1
  206. package/build/core/redux.d.ts.map +1 -1
  207. package/build/core/redux.js +6 -10
  208. package/build/core/redux.js.map +1 -1
  209. package/build/core/register.d.ts.map +1 -1
  210. package/build/core/register.js +5 -2
  211. package/build/core/register.js.map +1 -1
  212. package/build/core/rnGlobalsBootstrap.d.ts.map +1 -1
  213. package/build/core/rnGlobalsBootstrap.js +3 -1
  214. package/build/core/rnGlobalsBootstrap.js.map +1 -1
  215. package/build/core/screenLayout.d.ts.map +1 -1
  216. package/build/core/screenLayout.js +4 -13
  217. package/build/core/screenLayout.js.map +1 -1
  218. package/build/core/screenStaleness.d.ts.map +1 -1
  219. package/build/core/screenStaleness.js +2 -0
  220. package/build/core/screenStaleness.js.map +1 -1
  221. package/build/core/screenState.d.ts.map +1 -1
  222. package/build/core/screenState.js +4 -11
  223. package/build/core/screenState.js.map +1 -1
  224. package/build/core/swipeDiagnosis.d.ts.map +1 -1
  225. package/build/core/swipeDiagnosis.js +3 -10
  226. package/build/core/swipeDiagnosis.js.map +1 -1
  227. package/build/core/textEntry.d.ts +1 -1
  228. package/build/core/textEntry.d.ts.map +1 -1
  229. package/build/core/types.d.ts +4 -2
  230. package/build/core/types.d.ts.map +1 -1
  231. package/build/pro/chromiumKeys.d.ts +19 -0
  232. package/build/pro/chromiumKeys.d.ts.map +1 -0
  233. package/build/pro/chromiumKeys.js +68 -0
  234. package/build/pro/chromiumKeys.js.map +1 -0
  235. package/build/pro/chromiumSwipe.d.ts +35 -0
  236. package/build/pro/chromiumSwipe.d.ts.map +1 -0
  237. package/build/pro/chromiumSwipe.js +105 -0
  238. package/build/pro/chromiumSwipe.js.map +1 -0
  239. package/build/pro/chromiumTap.d.ts +12 -0
  240. package/build/pro/chromiumTap.d.ts.map +1 -0
  241. package/build/pro/chromiumTap.js +155 -0
  242. package/build/pro/chromiumTap.js.map +1 -0
  243. package/build/pro/tap.d.ts +1 -0
  244. package/build/pro/tap.d.ts.map +1 -1
  245. package/build/pro/tap.js +7 -1
  246. package/build/pro/tap.js.map +1 -1
  247. package/build/tools/componentTools.d.ts.map +1 -1
  248. package/build/tools/componentTools.js +31 -3
  249. package/build/tools/componentTools.js.map +1 -1
  250. package/build/tools/connectionTools.d.ts.map +1 -1
  251. package/build/tools/connectionTools.js +66 -28
  252. package/build/tools/connectionTools.js.map +1 -1
  253. package/build/tools/deviceTools.d.ts.map +1 -1
  254. package/build/tools/deviceTools.js +42 -1
  255. package/build/tools/deviceTools.js.map +1 -1
  256. package/build/tools/interactionTools.d.ts.map +1 -1
  257. package/build/tools/interactionTools.js +132 -7
  258. package/build/tools/interactionTools.js.map +1 -1
  259. package/build/tools/networkTools.d.ts.map +1 -1
  260. package/build/tools/networkTools.js +20 -5
  261. package/build/tools/networkTools.js.map +1 -1
  262. package/build/tools/screenshotTools.d.ts.map +1 -1
  263. package/build/tools/screenshotTools.js +452 -373
  264. package/build/tools/screenshotTools.js.map +1 -1
  265. package/package.json +1 -1
  266. 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"}