@vforsh/argus 0.1.12 → 0.1.14

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 (319) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/argus.js +8523 -2060
  3. package/dist/cdp/sendCdpCommand.d.ts +6 -2
  4. package/dist/cdp/sendCdpCommand.d.ts.map +1 -1
  5. package/dist/cdp/sendCdpCommand.js +18 -12
  6. package/dist/cdp/sendCdpCommand.js.map +1 -1
  7. package/dist/cli/defineCommand.d.ts +26 -0
  8. package/dist/cli/defineCommand.d.ts.map +1 -0
  9. package/dist/cli/defineCommand.js +55 -0
  10. package/dist/cli/defineCommand.js.map +1 -0
  11. package/dist/cli/defineWatcherCommand.d.ts +95 -0
  12. package/dist/cli/defineWatcherCommand.d.ts.map +1 -0
  13. package/dist/cli/defineWatcherCommand.js +72 -0
  14. package/dist/cli/defineWatcherCommand.js.map +1 -0
  15. package/dist/cli/plugins/registerPlugins.d.ts.map +1 -1
  16. package/dist/cli/plugins/registerPlugins.js +1 -1
  17. package/dist/cli/plugins/registerPlugins.js.map +1 -1
  18. package/dist/cli/register/domCommandBuilder.d.ts +1 -0
  19. package/dist/cli/register/domCommandBuilder.d.ts.map +1 -1
  20. package/dist/cli/register/domCommandBuilder.js +3 -0
  21. package/dist/cli/register/domCommandBuilder.js.map +1 -1
  22. package/dist/cli/register/index.d.ts.map +1 -1
  23. package/dist/cli/register/index.js +10 -2
  24. package/dist/cli/register/index.js.map +1 -1
  25. package/dist/cli/register/registerAuth.d.ts.map +1 -1
  26. package/dist/cli/register/registerAuth.js +103 -4
  27. package/dist/cli/register/registerAuth.js.map +1 -1
  28. package/dist/cli/register/registerChrome.d.ts.map +1 -1
  29. package/dist/cli/register/registerChrome.js +53 -14
  30. package/dist/cli/register/registerChrome.js.map +1 -1
  31. package/dist/cli/register/registerCode.d.ts.map +1 -1
  32. package/dist/cli/register/registerCode.js +19 -0
  33. package/dist/cli/register/registerCode.js.map +1 -1
  34. package/dist/cli/register/registerDialog.d.ts +3 -0
  35. package/dist/cli/register/registerDialog.d.ts.map +1 -0
  36. package/dist/cli/register/registerDialog.js +45 -0
  37. package/dist/cli/register/registerDialog.js.map +1 -0
  38. package/dist/cli/register/registerDom.d.ts.map +1 -1
  39. package/dist/cli/register/registerDom.js +7 -1
  40. package/dist/cli/register/registerDom.js.map +1 -1
  41. package/dist/cli/register/registerEval.d.ts.map +1 -1
  42. package/dist/cli/register/registerEval.js +8 -1
  43. package/dist/cli/register/registerEval.js.map +1 -1
  44. package/dist/cli/register/registerExtension.d.ts.map +1 -1
  45. package/dist/cli/register/registerExtension.js +12 -0
  46. package/dist/cli/register/registerExtension.js.map +1 -1
  47. package/dist/cli/register/registerFill.d.ts.map +1 -1
  48. package/dist/cli/register/registerFill.js +4 -3
  49. package/dist/cli/register/registerFill.js.map +1 -1
  50. package/dist/cli/register/registerHover.d.ts.map +1 -1
  51. package/dist/cli/register/registerHover.js +2 -1
  52. package/dist/cli/register/registerHover.js.map +1 -1
  53. package/dist/cli/register/registerLocate.d.ts +3 -0
  54. package/dist/cli/register/registerLocate.d.ts.map +1 -0
  55. package/dist/cli/register/registerLocate.js +48 -0
  56. package/dist/cli/register/registerLocate.js.map +1 -0
  57. package/dist/cli/register/registerNet.d.ts.map +1 -1
  58. package/dist/cli/register/registerNet.js +268 -13
  59. package/dist/cli/register/registerNet.js.map +1 -1
  60. package/dist/cli/register/registerPage.d.ts.map +1 -1
  61. package/dist/cli/register/registerPage.js +17 -0
  62. package/dist/cli/register/registerPage.js.map +1 -1
  63. package/dist/cli/register/registerQuickAccess.d.ts.map +1 -1
  64. package/dist/cli/register/registerQuickAccess.js +33 -3
  65. package/dist/cli/register/registerQuickAccess.js.map +1 -1
  66. package/dist/cli/register/registerSnapshot.d.ts.map +1 -1
  67. package/dist/cli/register/registerSnapshot.js +2 -1
  68. package/dist/cli/register/registerSnapshot.js.map +1 -1
  69. package/dist/cli/register/registerStorage.d.ts.map +1 -1
  70. package/dist/cli/register/registerStorage.js +26 -21
  71. package/dist/cli/register/registerStorage.js.map +1 -1
  72. package/dist/cli/register/registerWatcher.d.ts.map +1 -1
  73. package/dist/cli/register/registerWatcher.js +19 -0
  74. package/dist/cli/register/registerWatcher.js.map +1 -1
  75. package/dist/cli/validation.d.ts +1 -0
  76. package/dist/cli/validation.d.ts.map +1 -1
  77. package/dist/cli/validation.js +1 -0
  78. package/dist/cli/validation.js.map +1 -1
  79. package/dist/commands/auth.d.ts +39 -18
  80. package/dist/commands/auth.d.ts.map +1 -1
  81. package/dist/commands/auth.js +104 -122
  82. package/dist/commands/auth.js.map +1 -1
  83. package/dist/commands/authCookieSupport.d.ts +54 -0
  84. package/dist/commands/authCookieSupport.d.ts.map +1 -0
  85. package/dist/commands/authCookieSupport.js +206 -0
  86. package/dist/commands/authCookieSupport.js.map +1 -0
  87. package/dist/commands/authCookies.d.ts +60 -0
  88. package/dist/commands/authCookies.d.ts.map +1 -0
  89. package/dist/commands/authCookies.js +149 -0
  90. package/dist/commands/authCookies.js.map +1 -0
  91. package/dist/commands/chrome/authState.d.ts +23 -0
  92. package/dist/commands/chrome/authState.d.ts.map +1 -0
  93. package/dist/commands/chrome/authState.js +97 -0
  94. package/dist/commands/chrome/authState.js.map +1 -0
  95. package/dist/commands/chromeStart.d.ts +1 -0
  96. package/dist/commands/chromeStart.d.ts.map +1 -1
  97. package/dist/commands/chromeStart.js +28 -3
  98. package/dist/commands/chromeStart.js.map +1 -1
  99. package/dist/commands/code.d.ts.map +1 -1
  100. package/dist/commands/code.js +9 -1
  101. package/dist/commands/code.js.map +1 -1
  102. package/dist/commands/codeEdit.d.ts +9 -0
  103. package/dist/commands/codeEdit.d.ts.map +1 -0
  104. package/dist/commands/codeEdit.js +155 -0
  105. package/dist/commands/codeEdit.js.map +1 -0
  106. package/dist/commands/dialog.d.ts +13 -0
  107. package/dist/commands/dialog.d.ts.map +1 -0
  108. package/dist/commands/dialog.js +53 -0
  109. package/dist/commands/dialog.js.map +1 -0
  110. package/dist/commands/dom/shared.d.ts +5 -1
  111. package/dist/commands/dom/shared.d.ts.map +1 -1
  112. package/dist/commands/dom/shared.js +27 -0
  113. package/dist/commands/dom/shared.js.map +1 -1
  114. package/dist/commands/domClick.d.ts +5 -1
  115. package/dist/commands/domClick.d.ts.map +1 -1
  116. package/dist/commands/domClick.js +87 -69
  117. package/dist/commands/domClick.js.map +1 -1
  118. package/dist/commands/domFill.d.ts +3 -2
  119. package/dist/commands/domFill.d.ts.map +1 -1
  120. package/dist/commands/domFill.js +57 -64
  121. package/dist/commands/domFill.js.map +1 -1
  122. package/dist/commands/domFocus.d.ts +3 -2
  123. package/dist/commands/domFocus.d.ts.map +1 -1
  124. package/dist/commands/domFocus.js +28 -35
  125. package/dist/commands/domFocus.js.map +1 -1
  126. package/dist/commands/domHover.d.ts +3 -2
  127. package/dist/commands/domHover.d.ts.map +1 -1
  128. package/dist/commands/domHover.js +28 -35
  129. package/dist/commands/domHover.js.map +1 -1
  130. package/dist/commands/domInfo.d.ts +2 -1
  131. package/dist/commands/domInfo.d.ts.map +1 -1
  132. package/dist/commands/domInfo.js +6 -5
  133. package/dist/commands/domInfo.js.map +1 -1
  134. package/dist/commands/domRemove.d.ts +1 -1
  135. package/dist/commands/domRemove.d.ts.map +1 -1
  136. package/dist/commands/domRemove.js +25 -34
  137. package/dist/commands/domRemove.js.map +1 -1
  138. package/dist/commands/domScroll.d.ts +1 -1
  139. package/dist/commands/domScroll.d.ts.map +1 -1
  140. package/dist/commands/domScroll.js +1 -1
  141. package/dist/commands/domScroll.js.map +1 -1
  142. package/dist/commands/domSetFile.d.ts +1 -1
  143. package/dist/commands/domSetFile.d.ts.map +1 -1
  144. package/dist/commands/domSetFile.js +24 -33
  145. package/dist/commands/domSetFile.js.map +1 -1
  146. package/dist/commands/domTree.js +2 -2
  147. package/dist/commands/domTree.js.map +1 -1
  148. package/dist/commands/eval.d.ts +2 -0
  149. package/dist/commands/eval.d.ts.map +1 -1
  150. package/dist/commands/eval.js +15 -9
  151. package/dist/commands/eval.js.map +1 -1
  152. package/dist/commands/evalShared.d.ts +11 -0
  153. package/dist/commands/evalShared.d.ts.map +1 -1
  154. package/dist/commands/evalShared.js +21 -0
  155. package/dist/commands/evalShared.js.map +1 -1
  156. package/dist/commands/evalUntil.d.ts +2 -0
  157. package/dist/commands/evalUntil.d.ts.map +1 -1
  158. package/dist/commands/evalUntil.js +14 -8
  159. package/dist/commands/evalUntil.js.map +1 -1
  160. package/dist/commands/extension/resolveExtensionWatcher.d.ts +20 -0
  161. package/dist/commands/extension/resolveExtensionWatcher.d.ts.map +1 -0
  162. package/dist/commands/extension/resolveExtensionWatcher.js +73 -0
  163. package/dist/commands/extension/resolveExtensionWatcher.js.map +1 -0
  164. package/dist/commands/extension/tabs.d.ts +8 -0
  165. package/dist/commands/extension/tabs.d.ts.map +1 -0
  166. package/dist/commands/extension/tabs.js +85 -0
  167. package/dist/commands/extension/tabs.js.map +1 -0
  168. package/dist/commands/locate.d.ts +17 -0
  169. package/dist/commands/locate.d.ts.map +1 -0
  170. package/dist/commands/locate.js +117 -0
  171. package/dist/commands/locate.js.map +1 -0
  172. package/dist/commands/net.d.ts +2 -5
  173. package/dist/commands/net.d.ts.map +1 -1
  174. package/dist/commands/net.js +5 -7
  175. package/dist/commands/net.js.map +1 -1
  176. package/dist/commands/netBody.d.ts +6 -0
  177. package/dist/commands/netBody.d.ts.map +1 -0
  178. package/dist/commands/netBody.js +32 -0
  179. package/dist/commands/netBody.js.map +1 -0
  180. package/dist/commands/netCapture.d.ts +41 -0
  181. package/dist/commands/netCapture.d.ts.map +1 -0
  182. package/dist/commands/netCapture.js +203 -0
  183. package/dist/commands/netCapture.js.map +1 -0
  184. package/dist/commands/netClear.d.ts +5 -0
  185. package/dist/commands/netClear.d.ts.map +1 -0
  186. package/dist/commands/netClear.js +20 -0
  187. package/dist/commands/netClear.js.map +1 -0
  188. package/dist/commands/netExport.d.ts +8 -0
  189. package/dist/commands/netExport.d.ts.map +1 -0
  190. package/dist/commands/netExport.js +124 -0
  191. package/dist/commands/netExport.js.map +1 -0
  192. package/dist/commands/netInspect.d.ts +12 -0
  193. package/dist/commands/netInspect.d.ts.map +1 -0
  194. package/dist/commands/netInspect.js +205 -0
  195. package/dist/commands/netInspect.js.map +1 -0
  196. package/dist/commands/netRequestClient.d.ts +17 -0
  197. package/dist/commands/netRequestClient.d.ts.map +1 -0
  198. package/dist/commands/netRequestClient.js +54 -0
  199. package/dist/commands/netRequestClient.js.map +1 -0
  200. package/dist/commands/netRequestTarget.d.ts +14 -0
  201. package/dist/commands/netRequestTarget.d.ts.map +1 -0
  202. package/dist/commands/netRequestTarget.js +36 -0
  203. package/dist/commands/netRequestTarget.js.map +1 -0
  204. package/dist/commands/netShared.d.ts +40 -0
  205. package/dist/commands/netShared.d.ts.map +1 -0
  206. package/dist/commands/netShared.js +108 -0
  207. package/dist/commands/netShared.js.map +1 -0
  208. package/dist/commands/netShow.d.ts +5 -0
  209. package/dist/commands/netShow.d.ts.map +1 -0
  210. package/dist/commands/netShow.js +28 -0
  211. package/dist/commands/netShow.js.map +1 -0
  212. package/dist/commands/netSse.d.ts +6 -0
  213. package/dist/commands/netSse.d.ts.map +1 -0
  214. package/dist/commands/netSse.js +26 -0
  215. package/dist/commands/netSse.js.map +1 -0
  216. package/dist/commands/netSummary.d.ts +6 -0
  217. package/dist/commands/netSummary.d.ts.map +1 -0
  218. package/dist/commands/netSummary.js +99 -0
  219. package/dist/commands/netSummary.js.map +1 -0
  220. package/dist/commands/netTail.d.ts +2 -5
  221. package/dist/commands/netTail.d.ts.map +1 -1
  222. package/dist/commands/netTail.js +7 -15
  223. package/dist/commands/netTail.js.map +1 -1
  224. package/dist/commands/netWatch.d.ts +6 -0
  225. package/dist/commands/netWatch.d.ts.map +1 -0
  226. package/dist/commands/netWatch.js +55 -0
  227. package/dist/commands/netWatch.js.map +1 -0
  228. package/dist/commands/netWebSocket.d.ts +10 -0
  229. package/dist/commands/netWebSocket.d.ts.map +1 -0
  230. package/dist/commands/netWebSocket.js +58 -0
  231. package/dist/commands/netWebSocket.js.map +1 -0
  232. package/dist/commands/pageVisibility.d.ts +9 -0
  233. package/dist/commands/pageVisibility.d.ts.map +1 -0
  234. package/dist/commands/pageVisibility.js +24 -0
  235. package/dist/commands/pageVisibility.js.map +1 -0
  236. package/dist/commands/reload.d.ts +1 -1
  237. package/dist/commands/reload.d.ts.map +1 -1
  238. package/dist/commands/reload.js +8 -17
  239. package/dist/commands/reload.js.map +1 -1
  240. package/dist/commands/resolveTestId.d.ts +2 -1
  241. package/dist/commands/resolveTestId.d.ts.map +1 -1
  242. package/dist/commands/resolveTestId.js +3 -3
  243. package/dist/commands/resolveTestId.js.map +1 -1
  244. package/dist/commands/screenshot.d.ts +1 -0
  245. package/dist/commands/screenshot.d.ts.map +1 -1
  246. package/dist/commands/screenshot.js +37 -2
  247. package/dist/commands/screenshot.js.map +1 -1
  248. package/dist/commands/snapshot.d.ts +1 -1
  249. package/dist/commands/snapshot.d.ts.map +1 -1
  250. package/dist/commands/snapshot.js +26 -49
  251. package/dist/commands/snapshot.js.map +1 -1
  252. package/dist/commands/start.d.ts +1 -0
  253. package/dist/commands/start.d.ts.map +1 -1
  254. package/dist/commands/start.js +62 -7
  255. package/dist/commands/start.js.map +1 -1
  256. package/dist/commands/storage.d.ts +17 -0
  257. package/dist/commands/storage.d.ts.map +1 -0
  258. package/dist/commands/storage.js +35 -0
  259. package/dist/commands/storage.js.map +1 -0
  260. package/dist/commands/throttle.d.ts +6 -3
  261. package/dist/commands/throttle.d.ts.map +1 -1
  262. package/dist/commands/throttle.js +46 -118
  263. package/dist/commands/throttle.js.map +1 -1
  264. package/dist/commands/watcherNativeHost.d.ts.map +1 -1
  265. package/dist/commands/watcherNativeHost.js +13 -2
  266. package/dist/commands/watcherNativeHost.js.map +1 -1
  267. package/dist/commands/watcherStatus.d.ts.map +1 -1
  268. package/dist/commands/watcherStatus.js +2 -1
  269. package/dist/commands/watcherStatus.js.map +1 -1
  270. package/dist/eval/evalClient.d.ts +1 -0
  271. package/dist/eval/evalClient.d.ts.map +1 -1
  272. package/dist/eval/evalClient.js +2 -0
  273. package/dist/eval/evalClient.js.map +1 -1
  274. package/dist/net/har.d.ts +86 -0
  275. package/dist/net/har.d.ts.map +1 -0
  276. package/dist/net/har.js +125 -0
  277. package/dist/net/har.js.map +1 -0
  278. package/dist/net/summary.d.ts +33 -0
  279. package/dist/net/summary.d.ts.map +1 -0
  280. package/dist/net/summary.js +128 -0
  281. package/dist/net/summary.js.map +1 -0
  282. package/dist/output/accessibility.js +16 -12
  283. package/dist/output/accessibility.js.map +1 -1
  284. package/dist/output/code.d.ts +2 -1
  285. package/dist/output/code.d.ts.map +1 -1
  286. package/dist/output/code.js +10 -0
  287. package/dist/output/code.js.map +1 -1
  288. package/dist/output/dom.d.ts.map +1 -1
  289. package/dist/output/dom.js +2 -1
  290. package/dist/output/dom.js.map +1 -1
  291. package/dist/output/format.d.ts +1 -3
  292. package/dist/output/format.d.ts.map +1 -1
  293. package/dist/output/format.js +0 -8
  294. package/dist/output/format.js.map +1 -1
  295. package/dist/output/locate.d.ts +3 -0
  296. package/dist/output/locate.d.ts.map +1 -0
  297. package/dist/output/locate.js +25 -0
  298. package/dist/output/locate.js.map +1 -0
  299. package/dist/output/net.d.ts +16 -0
  300. package/dist/output/net.d.ts.map +1 -0
  301. package/dist/output/net.js +298 -0
  302. package/dist/output/net.js.map +1 -0
  303. package/dist/watchers/queryParams.d.ts +17 -0
  304. package/dist/watchers/queryParams.d.ts.map +1 -1
  305. package/dist/watchers/queryParams.js +61 -0
  306. package/dist/watchers/queryParams.js.map +1 -1
  307. package/package.json +3 -6
  308. package/dist/cli/register/registerClick.d.ts +0 -3
  309. package/dist/cli/register/registerClick.d.ts.map +0 -1
  310. package/dist/cli/register/registerClick.js +0 -23
  311. package/dist/cli/register/registerClick.js.map +0 -1
  312. package/dist/commands/storageLocal.d.ts +0 -18
  313. package/dist/commands/storageLocal.d.ts.map +0 -1
  314. package/dist/commands/storageLocal.js +0 -92
  315. package/dist/commands/storageLocal.js.map +0 -1
  316. package/dist/plugin.d.ts +0 -29
  317. package/dist/plugin.d.ts.map +0 -1
  318. package/dist/plugin.js +0 -2
  319. package/dist/plugin.js.map +0 -1
@@ -1,87 +1,105 @@
1
- import { createOutput } from '../output/io.js';
2
- import { requestWatcherAction } from '../watchers/requestWatcher.js';
3
- import { parseWaitDuration, parseXY, writeNoElementFound } from './dom/shared.js';
1
+ import { domClickRequestSchema } from '@vforsh/argus-core';
2
+ import { defineWatcherCommand } from '../cli/defineWatcherCommand.js';
3
+ import { describeElementTarget, parseWaitDuration, parseXY, requireElementTarget, writeNoElementFound } from './dom/shared.js';
4
+ import { resolveTestId } from './resolveTestId.js';
5
+ /** CLI definition for the top-level `argus click` command. */
6
+ export const domClickCommandDefinition = {
7
+ name: 'click',
8
+ description: 'Click at coordinates or on element(s) matching a CSS selector',
9
+ arguments: [{ flags: '[id]', description: 'Watcher id to query' }],
10
+ options: [
11
+ { flags: '--selector <css>', description: 'CSS selector to match element(s)' },
12
+ { flags: '--testid <id>', description: 'Shorthand for --selector "[data-testid=\'<id>\']"' },
13
+ { flags: '--ref <elementRef>', description: 'Stable element ref from snapshot/locate output' },
14
+ { flags: '--pos <x,y>', description: 'Viewport coordinates or offset from element top-left' },
15
+ { flags: '--button <type>', description: 'Mouse button: left, middle, right (default: left)' },
16
+ { flags: '--all', description: 'Allow multiple matches (default: error if >1 match)' },
17
+ { flags: '--text <string>', description: 'Filter by textContent (trimmed). Supports /regex/flags syntax' },
18
+ { flags: '--wait <duration>', description: 'Wait for selector to appear (e.g. 5s, 500ms)' },
19
+ { flags: '--json', description: 'Output JSON for automation' },
20
+ ],
21
+ examples: [
22
+ 'argus click app --pos 100,200',
23
+ 'argus click app --selector "#btn"',
24
+ 'argus click app --testid "submit-btn"',
25
+ 'argus click app --ref e5',
26
+ 'argus click app --selector "#btn" --pos 10,5',
27
+ 'argus click app --selector ".item" --all',
28
+ 'argus click app --selector "#btn" --button right',
29
+ 'argus click app --pos 100,200 --button middle',
30
+ ],
31
+ action: async (id, options) => {
32
+ if (!resolveTestId(options))
33
+ return;
34
+ await runDomClick(id, options);
35
+ },
36
+ };
4
37
  /** Execute the dom click command for a watcher id. */
5
- export const runDomClick = async (id, options) => {
6
- const output = createOutput(options);
7
- const hasSelector = options.selector != null && options.selector.trim() !== '';
8
- const hasPos = options.pos != null;
9
- if (!hasSelector && !hasPos) {
10
- output.writeWarn('--selector or --pos is required');
11
- process.exitCode = 2;
12
- return;
13
- }
14
- let x;
15
- let y;
16
- if (hasPos) {
17
- const point = parseXY(options.pos);
18
- if (!point) {
19
- output.writeWarn('--pos must be in the format "x,y" (e.g. --pos 100,200)');
20
- process.exitCode = 2;
38
+ export const runDomClick = defineWatcherCommand({
39
+ schema: domClickRequestSchema,
40
+ build: (_args, options, output) => buildClickPlan(options, output),
41
+ formatHuman: (response, { output, options }) => {
42
+ const target = hasElementTarget(options) ? { selector: options.selector, ref: options.ref } : null;
43
+ const xy = options.pos ? parseXY(options.pos) : null;
44
+ // Coordinate-only click (no selector/ref): build never set matches/clicked beyond 1.
45
+ if (!target) {
46
+ output.writeHuman(`Clicked at (${xy?.x}, ${xy?.y})`);
21
47
  return;
22
48
  }
23
- x = point.x;
24
- y = point.y;
25
- }
26
- const waitMs = parseWaitDuration(options.wait, output);
27
- if (waitMs == null) {
28
- return;
49
+ if (response.matches === 0) {
50
+ writeNoElementFound(target.selector ?? target.ref, output);
51
+ return;
52
+ }
53
+ const label = response.clicked === 1 ? 'element' : 'elements';
54
+ const desc = describeElementTarget(target);
55
+ const offset = xy ? ` at offset (${xy.x}, ${xy.y})` : '';
56
+ output.writeHuman(`Clicked ${response.clicked} ${label} for ${desc}${offset}`);
57
+ },
58
+ });
59
+ const hasElementTarget = (options) => Boolean(options.selector?.trim() || options.ref?.trim());
60
+ /** Validate options and assemble the `/dom/click` request plan. */
61
+ const buildClickPlan = (options, output) => {
62
+ const target = hasElementTarget(options) ? requireElementTarget({ selector: options.selector, ref: options.ref }, output) : null;
63
+ if (hasElementTarget(options) && !target)
64
+ return null;
65
+ const xy = options.pos != null ? parseXY(options.pos) : undefined;
66
+ if (options.pos != null && !xy) {
67
+ output.writeWarn('--pos must be in the format "x,y" (e.g. --pos 100,200)');
68
+ process.exitCode = 2;
69
+ return null;
29
70
  }
30
- const validButtons = ['left', 'middle', 'right'];
31
- const button = options.button ?? 'left';
32
- if (!validButtons.includes(button)) {
33
- output.writeWarn(`--button must be one of: ${validButtons.join(', ')}`);
71
+ if (!target && !xy) {
72
+ output.writeWarn('--selector, --testid, --ref, or --pos is required');
34
73
  process.exitCode = 2;
35
- return;
74
+ return null;
36
75
  }
76
+ const waitMs = parseWaitDuration(options.wait, output);
77
+ if (waitMs == null)
78
+ return null;
37
79
  const body = {};
38
- if (hasSelector) {
39
- body.selector = options.selector;
80
+ if (target) {
81
+ if (target.selector)
82
+ body.selector = target.selector;
83
+ if (target.ref)
84
+ body.ref = target.ref;
40
85
  body.all = options.all ?? false;
41
- if (options.text != null) {
86
+ if (options.text != null)
42
87
  body.text = options.text;
43
- }
44
- }
45
- if (hasPos) {
46
- body.x = x;
47
- body.y = y;
48
88
  }
49
- if (button !== 'left') {
50
- body.button = button;
89
+ if (xy) {
90
+ body.x = xy.x;
91
+ body.y = xy.y;
51
92
  }
52
- if (waitMs > 0) {
93
+ if (options.button)
94
+ body.button = options.button;
95
+ if (waitMs > 0)
53
96
  body.wait = waitMs;
54
- }
55
- const result = await requestWatcherAction({
56
- id,
97
+ // `wait` may exceed 30s; bump request timeout proportionally so the watcher reply is not cut off.
98
+ return {
57
99
  path: '/dom/click',
58
100
  method: 'POST',
59
101
  body,
60
102
  timeoutMs: Math.max(30_000, waitMs + 5_000),
61
- }, output);
62
- if (!result) {
63
- return;
64
- }
65
- const successResp = result.data;
66
- if (options.json) {
67
- output.writeJson(successResp);
68
- return;
69
- }
70
- // Coordinate-only click
71
- if (!hasSelector) {
72
- output.writeHuman(`Clicked at (${x}, ${y})`);
73
- return;
74
- }
75
- if (successResp.matches === 0) {
76
- writeNoElementFound(options.selector, output);
77
- return;
78
- }
79
- const label = successResp.clicked === 1 ? 'element' : 'elements';
80
- if (hasPos) {
81
- output.writeHuman(`Clicked ${successResp.clicked} ${label} for selector: ${options.selector} at offset (${x}, ${y})`);
82
- }
83
- else {
84
- output.writeHuman(`Clicked ${successResp.clicked} ${label} for selector: ${options.selector}`);
85
- }
103
+ };
86
104
  };
87
105
  //# sourceMappingURL=domClick.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domClick.js","sourceRoot":"","sources":["../../src/commands/domClick.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAajF,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,EAAsB,EAAE,OAAwB,EAAiB,EAAE;IACpG,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAEpC,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;IAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAA;IAElC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAA;QACnD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACP,CAAC;IAED,IAAI,CAAqB,CAAA;IACzB,IAAI,CAAqB,CAAA;IACzB,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAI,CAAC,CAAA;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,MAAM,CAAC,SAAS,CAAC,wDAAwD,CAAC,CAAA;YAC1E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACP,CAAC;QACD,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;QACX,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACtD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACpB,OAAM;IACP,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAA;IACvC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,SAAS,CAAC,4BAA4B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACvE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACP,CAAC;IAED,MAAM,IAAI,GAA4B,EAAE,CAAA;IACxC,IAAI,WAAW,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QAChC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,KAAK,CAAA;QAC/B,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QACzB,CAAC;IACF,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QACV,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;IACX,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACrB,CAAC;IACD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAA;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACxC;QACC,EAAE;QACF,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,MAAM;QACd,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;KAC3C,EACD,MAAM,CACN,CAAA;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAM;IACP,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAA;IAE/B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QAC7B,OAAM;IACP,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5C,OAAM;IACP,CAAC;IAED,IAAI,WAAW,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC/B,mBAAmB,CAAC,OAAO,CAAC,QAAS,EAAE,MAAM,CAAC,CAAA;QAC9C,OAAM;IACP,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IAChE,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,UAAU,CAAC,WAAW,WAAW,CAAC,OAAO,IAAI,KAAK,kBAAkB,OAAO,CAAC,QAAQ,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACtH,CAAC;SAAM,CAAC;QACP,MAAM,CAAC,UAAU,CAAC,WAAW,WAAW,CAAC,OAAO,IAAI,KAAK,kBAAkB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC/F,CAAC;AACF,CAAC,CAAA"}
1
+ {"version":3,"file":"domClick.js","sourceRoot":"","sources":["../../src/commands/domClick.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /** Options for the dom fill command. */
2
2
  export type DomFillOptions = {
3
3
  selector?: string;
4
+ ref?: string;
4
5
  name?: string;
5
6
  valueFile?: string;
6
7
  valueStdin?: boolean;
@@ -9,6 +10,6 @@ export type DomFillOptions = {
9
10
  wait?: string;
10
11
  json?: boolean;
11
12
  };
12
- /** Execute the dom fill command for a watcher id. */
13
- export declare const runDomFill: (id: string | undefined, value: string | undefined, options: DomFillOptions) => Promise<void>;
13
+ /** Execute the dom fill command for a watcher id. The first positional arg is the inline value. */
14
+ export declare const runDomFill: import("../cli/defineWatcherCommand.js").WatcherCommandRunner<[value: string | undefined], DomFillOptions>;
14
15
  //# sourceMappingURL=domFill.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"domFill.d.ts","sourceRoot":"","sources":["../../src/commands/domFill.ts"],"names":[],"mappings":"AASA,wCAAwC;AACxC,MAAM,MAAM,cAAc,GAAG;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAkDD,qDAAqD;AACrD,eAAO,MAAM,UAAU,GAAU,IAAI,MAAM,GAAG,SAAS,EAAE,OAAO,MAAM,GAAG,SAAS,EAAE,SAAS,cAAc,KAAG,OAAO,CAAC,IAAI,CAmEzH,CAAA"}
1
+ {"version":3,"file":"domFill.d.ts","sourceRoot":"","sources":["../../src/commands/domFill.ts"],"names":[],"mappings":"AASA,wCAAwC;AACxC,MAAM,MAAM,cAAc,GAAG;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,mGAAmG;AACnG,eAAO,MAAM,UAAU,4GAWrB,CAAA"}
@@ -1,12 +1,62 @@
1
1
  import { readFile } from 'node:fs/promises';
2
- import { createOutput } from '../output/io.js';
2
+ import { defineWatcherCommand } from '../cli/defineWatcherCommand.js';
3
3
  import { formatError } from '../cli/parse.js';
4
- import { readStdin } from './evalShared.js';
5
4
  import { resolvePath } from '../utils/paths.js';
6
- import { requestWatcherAction } from '../watchers/requestWatcher.js';
7
- import { parseWaitDuration, writeNoElementFound } from './dom/shared.js';
8
- /** Resolve the fill value from inline argument, --value-file, or --value-stdin. Returns null on error. */
9
- const resolveValueInput = async (value, options, output) => {
5
+ import { describeElementTarget, parseWaitDuration, requireElementTarget, writeNoElementFound } from './dom/shared.js';
6
+ import { readStdin } from './evalShared.js';
7
+ /** Execute the dom fill command for a watcher id. The first positional arg is the inline value. */
8
+ export const runDomFill = defineWatcherCommand({
9
+ build: async ([value], options, output) => buildFillPlan(value, options, output),
10
+ formatHuman: (response, { output, options }) => {
11
+ const target = { selector: resolveFillSelector(options), ref: options.ref };
12
+ if (response.matches === 0) {
13
+ writeNoElementFound(target.selector ?? target.ref, output);
14
+ return;
15
+ }
16
+ const elLabel = response.filled === 1 ? '1 element' : `${response.filled} elements`;
17
+ output.writeHuman(`Filled ${elLabel} for ${describeElementTarget(target)}`);
18
+ },
19
+ });
20
+ /** Apply the `--name` shorthand: `--name foo` is equivalent to `--selector '[name="foo"]'`. */
21
+ const resolveFillSelector = (options) => (options.name ? `[name="${options.name}"]` : options.selector);
22
+ /** Resolve `--name` shorthand, the value source, and `--wait` into a `/dom/fill` request plan. */
23
+ const buildFillPlan = async (value, options, output) => {
24
+ if (options.name && (options.selector || options.ref)) {
25
+ output.writeWarn('Cannot use --name with --selector or --ref');
26
+ process.exitCode = 2;
27
+ return null;
28
+ }
29
+ const target = requireElementTarget({ selector: resolveFillSelector(options), ref: options.ref }, output);
30
+ if (!target)
31
+ return null;
32
+ const resolvedValue = await resolveFillValue(value, options, output);
33
+ if (resolvedValue == null) {
34
+ process.exitCode = 2;
35
+ return null;
36
+ }
37
+ const waitMs = parseWaitDuration(options.wait, output);
38
+ if (waitMs == null)
39
+ return null;
40
+ const body = {
41
+ value: resolvedValue,
42
+ all: options.all ?? false,
43
+ text: options.text,
44
+ };
45
+ if (target.selector)
46
+ body.selector = target.selector;
47
+ if (target.ref)
48
+ body.ref = target.ref;
49
+ if (waitMs > 0)
50
+ body.wait = waitMs;
51
+ return {
52
+ path: '/dom/fill',
53
+ method: 'POST',
54
+ body,
55
+ timeoutMs: Math.max(30_000, waitMs + 5_000),
56
+ };
57
+ };
58
+ /** Resolve the fill value from inline arg, --value-file, or --value-stdin. Returns null on error. */
59
+ const resolveFillValue = async (value, options, output) => {
10
60
  const wantsStdin = options.valueStdin === true || value === '-';
11
61
  const hasInline = value != null && value !== '-';
12
62
  const hasFile = options.valueFile != null;
@@ -43,66 +93,9 @@ const resolveValueInput = async (value, options, output) => {
43
93
  return null;
44
94
  }
45
95
  }
46
- if (hasInline) {
96
+ if (hasInline)
47
97
  return value;
48
- }
49
98
  output.writeWarn('Value is required. Provide an inline value, --value-file, or --value-stdin (or pass - as value).');
50
99
  return null;
51
100
  };
52
- /** Execute the dom fill command for a watcher id. */
53
- export const runDomFill = async (id, value, options) => {
54
- const output = createOutput(options);
55
- if (options.name && options.selector) {
56
- output.writeWarn('Cannot use both --name and --selector');
57
- process.exitCode = 2;
58
- return;
59
- }
60
- if (options.name) {
61
- options.selector = `[name="${options.name}"]`;
62
- }
63
- if (!options.selector || options.selector.trim() === '') {
64
- output.writeWarn('--selector, --name, or --testid is required');
65
- process.exitCode = 2;
66
- return;
67
- }
68
- const resolvedValue = await resolveValueInput(value, options, output);
69
- if (resolvedValue == null) {
70
- process.exitCode = 2;
71
- return;
72
- }
73
- const waitMs = parseWaitDuration(options.wait, output);
74
- if (waitMs == null) {
75
- return;
76
- }
77
- const body = {
78
- selector: options.selector,
79
- value: resolvedValue,
80
- all: options.all ?? false,
81
- text: options.text,
82
- };
83
- if (waitMs > 0) {
84
- body.wait = waitMs;
85
- }
86
- const result = await requestWatcherAction({
87
- id,
88
- path: '/dom/fill',
89
- method: 'POST',
90
- body,
91
- timeoutMs: Math.max(30_000, waitMs + 5_000),
92
- }, output);
93
- if (!result) {
94
- return;
95
- }
96
- const successResp = result.data;
97
- if (options.json) {
98
- output.writeJson(successResp);
99
- return;
100
- }
101
- if (successResp.matches === 0) {
102
- writeNoElementFound(options.selector, output);
103
- return;
104
- }
105
- const elLabel = successResp.filled === 1 ? '1 element' : `${successResp.filled} elements`;
106
- output.writeHuman(`Filled ${elLabel} for selector: ${options.selector}`);
107
- };
108
101
  //# sourceMappingURL=domFill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domFill.js","sourceRoot":"","sources":["../../src/commands/domFill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAcxE,0GAA0G;AAC1G,MAAM,iBAAiB,GAAG,KAAK,EAAE,KAAyB,EAAE,OAAuB,EAAE,MAAc,EAA0B,EAAE;IAC9H,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,KAAK,GAAG,CAAA;IAC/D,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,GAAG,CAAA;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAA;IAEzC,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAA;IAC3E,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,SAAS,CAAC,mEAAmE,CAAC,CAAA;QACrF,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACb,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,SAAU,CAAC,EAAE,MAAM,CAAC,CAAA;YACvE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrB,MAAM,CAAC,SAAS,CAAC,kBAAkB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;gBACvD,OAAO,IAAI,CAAA;YACZ,CAAC;YACD,OAAO,OAAO,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,SAAS,CAAC,gCAAgC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACtE,OAAO,IAAI,CAAA;QACZ,CAAC;IACF,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QAChB,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,SAAS,EAAE,CAAA;YACjC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrB,MAAM,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAA;gBACxC,OAAO,IAAI,CAAA;YACZ,CAAC;YACD,OAAO,OAAO,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,SAAS,CAAC,yBAAyB,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAC/D,OAAO,IAAI,CAAA;QACZ,CAAC;IACF,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACf,OAAO,KAAM,CAAA;IACd,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,kGAAkG,CAAC,CAAA;IACpH,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA;AAED,qDAAqD;AACrD,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,EAAsB,EAAE,KAAyB,EAAE,OAAuB,EAAiB,EAAE;IAC7H,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAEpC,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAA;QACzD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACP,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,QAAQ,GAAG,UAAU,OAAO,CAAC,IAAI,IAAI,CAAA;IAC9C,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACzD,MAAM,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAA;QAC/D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACP,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IACrE,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;QAC3B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACP,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACtD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACpB,OAAM;IACP,CAAC;IAED,MAAM,IAAI,GAA4B;QACrC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,aAAa;QACpB,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK;QACzB,IAAI,EAAE,OAAO,CAAC,IAAI;KAClB,CAAA;IACD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAA;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACxC;QACC,EAAE;QACF,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,MAAM;QACd,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;KAC3C,EACD,MAAM,CACN,CAAA;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAM;IACP,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAA;IAE/B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QAC7B,OAAM;IACP,CAAC;IAED,IAAI,WAAW,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC/B,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC7C,OAAM;IACP,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,WAAW,CAAA;IACzF,MAAM,CAAC,UAAU,CAAC,UAAU,OAAO,kBAAkB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;AACzE,CAAC,CAAA"}
1
+ {"version":3,"file":"domFill.js","sourceRoot":"","sources":["../../src/commands/domFill.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  /** Options for the dom focus command. */
2
2
  export type DomFocusOptions = {
3
- selector: string;
3
+ selector?: string;
4
+ ref?: string;
4
5
  all?: boolean;
5
6
  text?: string;
6
7
  json?: boolean;
7
8
  };
8
9
  /** Execute the dom focus command for a watcher id. */
9
- export declare const runDomFocus: (id: string | undefined, options: DomFocusOptions) => Promise<void>;
10
+ export declare const runDomFocus: import("../cli/defineWatcherCommand.js").WatcherCommandRunner<[], DomFocusOptions>;
10
11
  //# sourceMappingURL=domFocus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"domFocus.d.ts","sourceRoot":"","sources":["../../src/commands/domFocus.ts"],"names":[],"mappings":"AAKA,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,sDAAsD;AACtD,eAAO,MAAM,WAAW,GAAU,IAAI,MAAM,GAAG,SAAS,EAAE,SAAS,eAAe,KAAG,OAAO,CAAC,IAAI,CAsChG,CAAA"}
1
+ {"version":3,"file":"domFocus.d.ts","sourceRoot":"","sources":["../../src/commands/domFocus.ts"],"names":[],"mappings":"AAIA,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,sDAAsD;AACtD,eAAO,MAAM,WAAW,oFAyBtB,CAAA"}
@@ -1,37 +1,30 @@
1
- import { createOutput } from '../output/io.js';
2
- import { requestWatcherAction } from '../watchers/requestWatcher.js';
3
- import { requireSelector, writeNoElementFound } from './dom/shared.js';
1
+ import { defineWatcherCommand } from '../cli/defineWatcherCommand.js';
2
+ import { describeElementTarget, requireElementTarget, writeNoElementFound } from './dom/shared.js';
4
3
  /** Execute the dom focus command for a watcher id. */
5
- export const runDomFocus = async (id, options) => {
6
- const output = createOutput(options);
7
- const selector = requireSelector(options, output);
8
- if (!selector) {
9
- return;
10
- }
11
- const result = await requestWatcherAction({
12
- id,
13
- path: '/dom/focus',
14
- method: 'POST',
15
- body: {
16
- selector,
17
- all: options.all ?? false,
18
- text: options.text,
19
- },
20
- timeoutMs: 30_000,
21
- }, output);
22
- if (!result) {
23
- return;
24
- }
25
- const successResp = result.data;
26
- if (options.json) {
27
- output.writeJson(successResp);
28
- return;
29
- }
30
- if (successResp.matches === 0) {
31
- writeNoElementFound(selector, output);
32
- return;
33
- }
34
- const label = successResp.focused === 1 ? 'element' : 'elements';
35
- output.writeHuman(`Focused ${successResp.focused} ${label} for selector: ${selector}`);
36
- };
4
+ export const runDomFocus = defineWatcherCommand({
5
+ build: (_args, options, output) => {
6
+ const target = requireElementTarget({ selector: options.selector, ref: options.ref }, output);
7
+ if (!target)
8
+ return null;
9
+ return {
10
+ path: '/dom/focus',
11
+ method: 'POST',
12
+ body: {
13
+ selector: target.selector,
14
+ ref: target.ref,
15
+ all: options.all ?? false,
16
+ text: options.text,
17
+ },
18
+ };
19
+ },
20
+ formatHuman: (response, { output, options }) => {
21
+ const target = { selector: options.selector, ref: options.ref };
22
+ if (response.matches === 0) {
23
+ writeNoElementFound(target.selector ?? target.ref, output);
24
+ return;
25
+ }
26
+ const label = response.focused === 1 ? 'element' : 'elements';
27
+ output.writeHuman(`Focused ${response.focused} ${label} for ${describeElementTarget(target)}`);
28
+ },
29
+ });
37
30
  //# sourceMappingURL=domFocus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domFocus.js","sourceRoot":"","sources":["../../src/commands/domFocus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAUtE,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,EAAsB,EAAE,OAAwB,EAAiB,EAAE;IACpG,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAM;IACP,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACxC;QACC,EAAE;QACF,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE;YACL,QAAQ;YACR,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK;YACzB,IAAI,EAAE,OAAO,CAAC,IAAI;SAClB;QACD,SAAS,EAAE,MAAM;KACjB,EACD,MAAM,CACN,CAAA;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAM;IACP,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAA;IAE/B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QAC7B,OAAM;IACP,CAAC;IAED,IAAI,WAAW,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC/B,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QACrC,OAAM;IACP,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IAChE,MAAM,CAAC,UAAU,CAAC,WAAW,WAAW,CAAC,OAAO,IAAI,KAAK,kBAAkB,QAAQ,EAAE,CAAC,CAAA;AACvF,CAAC,CAAA"}
1
+ {"version":3,"file":"domFocus.js","sourceRoot":"","sources":["../../src/commands/domFocus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAWlG,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAoC;IAClF,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;QAC7F,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAExB,OAAO;YACN,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK;gBACzB,IAAI,EAAE,OAAO,CAAC,IAAI;aAClB;SACD,CAAA;IACF,CAAC;IACD,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAA;QAC/D,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YAC5B,mBAAmB,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAI,EAAE,MAAM,CAAC,CAAA;YAC3D,OAAM;QACP,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;QAC7D,MAAM,CAAC,UAAU,CAAC,WAAW,QAAQ,CAAC,OAAO,IAAI,KAAK,QAAQ,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC/F,CAAC;CACD,CAAC,CAAA"}
@@ -1,10 +1,11 @@
1
1
  /** Options for the dom hover command. */
2
2
  export type DomHoverOptions = {
3
- selector: string;
3
+ selector?: string;
4
+ ref?: string;
4
5
  all?: boolean;
5
6
  text?: string;
6
7
  json?: boolean;
7
8
  };
8
9
  /** Execute the dom hover command for a watcher id. */
9
- export declare const runDomHover: (id: string | undefined, options: DomHoverOptions) => Promise<void>;
10
+ export declare const runDomHover: import("../cli/defineWatcherCommand.js").WatcherCommandRunner<[], DomHoverOptions>;
10
11
  //# sourceMappingURL=domHover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"domHover.d.ts","sourceRoot":"","sources":["../../src/commands/domHover.ts"],"names":[],"mappings":"AAKA,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,sDAAsD;AACtD,eAAO,MAAM,WAAW,GAAU,IAAI,MAAM,GAAG,SAAS,EAAE,SAAS,eAAe,KAAG,OAAO,CAAC,IAAI,CAsChG,CAAA"}
1
+ {"version":3,"file":"domHover.d.ts","sourceRoot":"","sources":["../../src/commands/domHover.ts"],"names":[],"mappings":"AAIA,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,sDAAsD;AACtD,eAAO,MAAM,WAAW,oFAyBtB,CAAA"}
@@ -1,37 +1,30 @@
1
- import { createOutput } from '../output/io.js';
2
- import { requestWatcherAction } from '../watchers/requestWatcher.js';
3
- import { requireSelector, writeNoElementFound } from './dom/shared.js';
1
+ import { defineWatcherCommand } from '../cli/defineWatcherCommand.js';
2
+ import { describeElementTarget, requireElementTarget, writeNoElementFound } from './dom/shared.js';
4
3
  /** Execute the dom hover command for a watcher id. */
5
- export const runDomHover = async (id, options) => {
6
- const output = createOutput(options);
7
- const selector = requireSelector(options, output);
8
- if (!selector) {
9
- return;
10
- }
11
- const result = await requestWatcherAction({
12
- id,
13
- path: '/dom/hover',
14
- method: 'POST',
15
- body: {
16
- selector,
17
- all: options.all ?? false,
18
- text: options.text,
19
- },
20
- timeoutMs: 30_000,
21
- }, output);
22
- if (!result) {
23
- return;
24
- }
25
- const successResp = result.data;
26
- if (options.json) {
27
- output.writeJson(successResp);
28
- return;
29
- }
30
- if (successResp.matches === 0) {
31
- writeNoElementFound(selector, output);
32
- return;
33
- }
34
- const label = successResp.hovered === 1 ? 'element' : 'elements';
35
- output.writeHuman(`Hovered ${successResp.hovered} ${label} for selector: ${selector}`);
36
- };
4
+ export const runDomHover = defineWatcherCommand({
5
+ build: (_args, options, output) => {
6
+ const target = requireElementTarget({ selector: options.selector, ref: options.ref }, output);
7
+ if (!target)
8
+ return null;
9
+ return {
10
+ path: '/dom/hover',
11
+ method: 'POST',
12
+ body: {
13
+ selector: target.selector,
14
+ ref: target.ref,
15
+ all: options.all ?? false,
16
+ text: options.text,
17
+ },
18
+ };
19
+ },
20
+ formatHuman: (response, { output, options }) => {
21
+ const target = { selector: options.selector, ref: options.ref };
22
+ if (response.matches === 0) {
23
+ writeNoElementFound(target.selector ?? target.ref, output);
24
+ return;
25
+ }
26
+ const label = response.hovered === 1 ? 'element' : 'elements';
27
+ output.writeHuman(`Hovered ${response.hovered} ${label} for ${describeElementTarget(target)}`);
28
+ },
29
+ });
37
30
  //# sourceMappingURL=domHover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domHover.js","sourceRoot":"","sources":["../../src/commands/domHover.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAUtE,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,EAAsB,EAAE,OAAwB,EAAiB,EAAE;IACpG,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAM;IACP,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACxC;QACC,EAAE;QACF,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE;YACL,QAAQ;YACR,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK;YACzB,IAAI,EAAE,OAAO,CAAC,IAAI;SAClB;QACD,SAAS,EAAE,MAAM;KACjB,EACD,MAAM,CACN,CAAA;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAM;IACP,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAA;IAE/B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QAC7B,OAAM;IACP,CAAC;IAED,IAAI,WAAW,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC/B,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QACrC,OAAM;IACP,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IAChE,MAAM,CAAC,UAAU,CAAC,WAAW,WAAW,CAAC,OAAO,IAAI,KAAK,kBAAkB,QAAQ,EAAE,CAAC,CAAA;AACvF,CAAC,CAAA"}
1
+ {"version":3,"file":"domHover.js","sourceRoot":"","sources":["../../src/commands/domHover.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAWlG,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAoC;IAClF,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;QAC7F,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAExB,OAAO;YACN,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK;gBACzB,IAAI,EAAE,OAAO,CAAC,IAAI;aAClB;SACD,CAAA;IACF,CAAC;IACD,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAA;QAC/D,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YAC5B,mBAAmB,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAI,EAAE,MAAM,CAAC,CAAA;YAC3D,OAAM;QACP,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;QAC7D,MAAM,CAAC,UAAU,CAAC,WAAW,QAAQ,CAAC,OAAO,IAAI,KAAK,QAAQ,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC/F,CAAC;CACD,CAAC,CAAA"}
@@ -1,6 +1,7 @@
1
1
  /** Options for the dom info command. */
2
2
  export type DomInfoOptions = {
3
- selector: string;
3
+ selector?: string;
4
+ ref?: string;
4
5
  all?: boolean;
5
6
  outerHtmlMax?: string;
6
7
  text?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"domInfo.d.ts","sourceRoot":"","sources":["../../src/commands/domInfo.ts"],"names":[],"mappings":"AAOA,wCAAwC;AACxC,MAAM,MAAM,cAAc,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,qDAAqD;AACrD,eAAO,MAAM,UAAU,GAAU,IAAI,MAAM,GAAG,SAAS,EAAE,SAAS,cAAc,KAAG,OAAO,CAAC,IAAI,CA8C9F,CAAA"}
1
+ {"version":3,"file":"domInfo.d.ts","sourceRoot":"","sources":["../../src/commands/domInfo.ts"],"names":[],"mappings":"AAOA,wCAAwC;AACxC,MAAM,MAAM,cAAc,GAAG;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,qDAAqD;AACrD,eAAO,MAAM,UAAU,GAAU,IAAI,MAAM,GAAG,SAAS,EAAE,SAAS,cAAc,KAAG,OAAO,CAAC,IAAI,CA+C9F,CAAA"}