browser-debugger-cli 0.6.1 → 0.6.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 (334) hide show
  1. package/README.md +64 -3
  2. package/dist/__tests__/smoke/error-handling.smoke.test.js +9 -4
  3. package/dist/__tests__/smoke/error-handling.smoke.test.js.map +1 -1
  4. package/dist/__tests__/smoke/session-lifecycle.smoke.test.js +27 -24
  5. package/dist/__tests__/smoke/session-lifecycle.smoke.test.js.map +1 -1
  6. package/dist/__testutils__/daemonHelpers.d.ts +13 -1
  7. package/dist/__testutils__/daemonHelpers.d.ts.map +1 -1
  8. package/dist/__testutils__/daemonHelpers.js +54 -5
  9. package/dist/__testutils__/daemonHelpers.js.map +1 -1
  10. package/dist/cdp/protocol.d.ts.map +1 -1
  11. package/dist/cdp/protocol.js +6 -10
  12. package/dist/cdp/protocol.js.map +1 -1
  13. package/dist/cdp/schema.d.ts.map +1 -1
  14. package/dist/cdp/schema.js +0 -2
  15. package/dist/cdp/schema.js.map +1 -1
  16. package/dist/commands/cdp.d.ts.map +1 -1
  17. package/dist/commands/cdp.js +1 -20
  18. package/dist/commands/cdp.js.map +1 -1
  19. package/dist/commands/cleanup.d.ts.map +1 -1
  20. package/dist/commands/cleanup.js +17 -15
  21. package/dist/commands/cleanup.js.map +1 -1
  22. package/dist/commands/console.d.ts.map +1 -1
  23. package/dist/commands/console.js +0 -5
  24. package/dist/commands/console.js.map +1 -1
  25. package/dist/commands/details.d.ts.map +1 -1
  26. package/dist/commands/details.js +0 -5
  27. package/dist/commands/details.js.map +1 -1
  28. package/dist/commands/dom/a11y.d.ts +18 -0
  29. package/dist/commands/dom/a11y.d.ts.map +1 -0
  30. package/dist/commands/dom/a11y.js +134 -0
  31. package/dist/commands/dom/a11y.js.map +1 -0
  32. package/dist/commands/dom/evalHelpers.d.ts.map +1 -1
  33. package/dist/commands/dom/evalHelpers.js +1 -6
  34. package/dist/commands/dom/evalHelpers.js.map +1 -1
  35. package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
  36. package/dist/commands/dom/formFillHelpers.js +0 -9
  37. package/dist/commands/dom/formFillHelpers.js.map +1 -1
  38. package/dist/commands/dom/formInteraction.d.ts.map +1 -1
  39. package/dist/commands/dom/formInteraction.js +0 -5
  40. package/dist/commands/dom/formInteraction.js.map +1 -1
  41. package/dist/commands/dom/formSubmitHelpers.d.ts.map +1 -1
  42. package/dist/commands/dom/formSubmitHelpers.js +0 -13
  43. package/dist/commands/dom/formSubmitHelpers.js.map +1 -1
  44. package/dist/commands/dom/helpers.d.ts.map +1 -1
  45. package/dist/commands/dom/helpers.js +0 -22
  46. package/dist/commands/dom/helpers.js.map +1 -1
  47. package/dist/commands/dom/index.d.ts.map +1 -1
  48. package/dist/commands/dom/index.js +41 -26
  49. package/dist/commands/dom/index.js.map +1 -1
  50. package/dist/commands/dom/reactEventHelpers.d.ts +3 -3
  51. package/dist/commands/dom/reactEventHelpers.d.ts.map +1 -1
  52. package/dist/commands/dom/reactEventHelpers.js +0 -28
  53. package/dist/commands/dom/reactEventHelpers.js.map +1 -1
  54. package/dist/commands/network.d.ts.map +1 -1
  55. package/dist/commands/network.js +159 -10
  56. package/dist/commands/network.js.map +1 -1
  57. package/dist/commands/peek.d.ts.map +1 -1
  58. package/dist/commands/peek.js +17 -12
  59. package/dist/commands/peek.js.map +1 -1
  60. package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
  61. package/dist/commands/shared/CommandRunner.js +0 -8
  62. package/dist/commands/shared/CommandRunner.js.map +1 -1
  63. package/dist/commands/shared/__tests__/validation.unit.test.d.ts +7 -0
  64. package/dist/commands/shared/__tests__/validation.unit.test.d.ts.map +1 -0
  65. package/dist/commands/shared/__tests__/validation.unit.test.js +141 -0
  66. package/dist/commands/shared/__tests__/validation.unit.test.js.map +1 -0
  67. package/dist/commands/shared/startHelpers.d.ts.map +1 -1
  68. package/dist/commands/shared/startHelpers.js +0 -10
  69. package/dist/commands/shared/startHelpers.js.map +1 -1
  70. package/dist/commands/shared/validation.d.ts +17 -0
  71. package/dist/commands/shared/validation.d.ts.map +1 -1
  72. package/dist/commands/shared/validation.js +105 -5
  73. package/dist/commands/shared/validation.js.map +1 -1
  74. package/dist/commands/start.d.ts.map +1 -1
  75. package/dist/commands/start.js +0 -6
  76. package/dist/commands/start.js.map +1 -1
  77. package/dist/commands/status.d.ts.map +1 -1
  78. package/dist/commands/status.js +0 -2
  79. package/dist/commands/status.js.map +1 -1
  80. package/dist/commands/stop.d.ts.map +1 -1
  81. package/dist/commands/stop.js +11 -13
  82. package/dist/commands/stop.js.map +1 -1
  83. package/dist/commands/tail.d.ts.map +1 -1
  84. package/dist/commands/tail.js +0 -7
  85. package/dist/commands/tail.js.map +1 -1
  86. package/dist/commands/types.d.ts +3 -0
  87. package/dist/commands/types.d.ts.map +1 -1
  88. package/dist/commands.d.ts.map +1 -1
  89. package/dist/commands.js +0 -5
  90. package/dist/commands.js.map +1 -1
  91. package/dist/connection/cdp.d.ts.map +1 -1
  92. package/dist/connection/cdp.js +0 -3
  93. package/dist/connection/cdp.js.map +1 -1
  94. package/dist/connection/diagnostics.d.ts.map +1 -1
  95. package/dist/connection/diagnostics.js +7 -4
  96. package/dist/connection/diagnostics.js.map +1 -1
  97. package/dist/connection/pageReadiness.d.ts.map +1 -1
  98. package/dist/connection/pageReadiness.js +0 -1
  99. package/dist/connection/pageReadiness.js.map +1 -1
  100. package/dist/constants.d.ts +6 -0
  101. package/dist/constants.d.ts.map +1 -1
  102. package/dist/constants.js +6 -0
  103. package/dist/constants.js.map +1 -1
  104. package/dist/daemon/__tests__/commandRegistry.contract.test.js +259 -0
  105. package/dist/daemon/__tests__/commandRegistry.contract.test.js.map +1 -1
  106. package/dist/daemon/__tests__/ipcServer.cleanup.unit.test.d.ts +19 -0
  107. package/dist/daemon/__tests__/ipcServer.cleanup.unit.test.d.ts.map +1 -0
  108. package/dist/daemon/__tests__/ipcServer.cleanup.unit.test.js +212 -0
  109. package/dist/daemon/__tests__/ipcServer.cleanup.unit.test.js.map +1 -0
  110. package/dist/daemon/handlers/BaseHandler.d.ts +75 -0
  111. package/dist/daemon/handlers/BaseHandler.d.ts.map +1 -0
  112. package/dist/daemon/handlers/BaseHandler.js +103 -0
  113. package/dist/daemon/handlers/BaseHandler.js.map +1 -0
  114. package/dist/daemon/handlers/CommandHandlers.d.ts +3 -4
  115. package/dist/daemon/handlers/CommandHandlers.d.ts.map +1 -1
  116. package/dist/daemon/handlers/CommandHandlers.js +14 -52
  117. package/dist/daemon/handlers/CommandHandlers.js.map +1 -1
  118. package/dist/daemon/handlers/QueryHandlers.d.ts +8 -6
  119. package/dist/daemon/handlers/QueryHandlers.d.ts.map +1 -1
  120. package/dist/daemon/handlers/QueryHandlers.js +42 -94
  121. package/dist/daemon/handlers/QueryHandlers.js.map +1 -1
  122. package/dist/daemon/handlers/SessionHandlers.d.ts.map +1 -1
  123. package/dist/daemon/handlers/SessionHandlers.js +0 -15
  124. package/dist/daemon/handlers/SessionHandlers.js.map +1 -1
  125. package/dist/daemon/handlers/requestHandlers.d.ts +5 -1
  126. package/dist/daemon/handlers/requestHandlers.d.ts.map +1 -1
  127. package/dist/daemon/handlers/requestHandlers.js +7 -2
  128. package/dist/daemon/handlers/requestHandlers.js.map +1 -1
  129. package/dist/daemon/handlers/responseHandler.d.ts.map +1 -1
  130. package/dist/daemon/handlers/responseHandler.js +19 -8
  131. package/dist/daemon/handlers/responseHandler.js.map +1 -1
  132. package/dist/daemon/ipcServer.d.ts.map +1 -1
  133. package/dist/daemon/ipcServer.js +4 -11
  134. package/dist/daemon/ipcServer.js.map +1 -1
  135. package/dist/daemon/launcher.d.ts.map +1 -1
  136. package/dist/daemon/launcher.js +2 -19
  137. package/dist/daemon/launcher.js.map +1 -1
  138. package/dist/daemon/lifecycle/cdpSetup.d.ts.map +1 -1
  139. package/dist/daemon/lifecycle/cdpSetup.js +0 -4
  140. package/dist/daemon/lifecycle/cdpSetup.js.map +1 -1
  141. package/dist/daemon/lifecycle/chromeConnection.js +0 -1
  142. package/dist/daemon/lifecycle/chromeConnection.js.map +1 -1
  143. package/dist/daemon/lifecycle/signalHandlers.d.ts.map +1 -1
  144. package/dist/daemon/lifecycle/signalHandlers.js +0 -3
  145. package/dist/daemon/lifecycle/signalHandlers.js.map +1 -1
  146. package/dist/daemon/lifecycle/workerCleanup.d.ts.map +1 -1
  147. package/dist/daemon/lifecycle/workerCleanup.js +1 -8
  148. package/dist/daemon/lifecycle/workerCleanup.js.map +1 -1
  149. package/dist/daemon/lifecycle/workerIpc.d.ts.map +1 -1
  150. package/dist/daemon/lifecycle/workerIpc.js +0 -1
  151. package/dist/daemon/lifecycle/workerIpc.js.map +1 -1
  152. package/dist/daemon/server/JsonlParser.d.ts.map +1 -1
  153. package/dist/daemon/server/JsonlParser.js +0 -2
  154. package/dist/daemon/server/JsonlParser.js.map +1 -1
  155. package/dist/daemon/services/SessionService.js +1 -1
  156. package/dist/daemon/services/SessionService.js.map +1 -1
  157. package/dist/daemon/startSession.d.ts.map +1 -1
  158. package/dist/daemon/startSession.js +0 -15
  159. package/dist/daemon/startSession.js.map +1 -1
  160. package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
  161. package/dist/daemon/worker/commandRegistry.js +34 -1
  162. package/dist/daemon/worker/commandRegistry.js.map +1 -1
  163. package/dist/daemon/worker/plugins.d.ts.map +1 -1
  164. package/dist/daemon/worker/plugins.js +0 -3
  165. package/dist/daemon/worker/plugins.js.map +1 -1
  166. package/dist/daemon/worker.js +0 -9
  167. package/dist/daemon/worker.js.map +1 -1
  168. package/dist/daemon.js +0 -2
  169. package/dist/daemon.js.map +1 -1
  170. package/dist/index.js +0 -14
  171. package/dist/index.js.map +1 -1
  172. package/dist/ipc/__tests__/client.contract.test.js +251 -19
  173. package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
  174. package/dist/ipc/__tests__/jsonl.unit.test.js +19 -1
  175. package/dist/ipc/__tests__/jsonl.unit.test.js.map +1 -1
  176. package/dist/ipc/client.d.ts +47 -1
  177. package/dist/ipc/client.d.ts.map +1 -1
  178. package/dist/ipc/client.js +51 -0
  179. package/dist/ipc/client.js.map +1 -1
  180. package/dist/ipc/index.d.ts.map +1 -1
  181. package/dist/ipc/index.js +0 -6
  182. package/dist/ipc/index.js.map +1 -1
  183. package/dist/ipc/protocol/commands.d.ts +44 -0
  184. package/dist/ipc/protocol/commands.d.ts.map +1 -1
  185. package/dist/ipc/protocol/commands.js +8 -0
  186. package/dist/ipc/protocol/commands.js.map +1 -1
  187. package/dist/ipc/session/queries.d.ts +26 -2
  188. package/dist/ipc/session/queries.d.ts.map +1 -1
  189. package/dist/ipc/transport/index.d.ts.map +1 -1
  190. package/dist/ipc/transport/index.js +0 -1
  191. package/dist/ipc/transport/index.js.map +1 -1
  192. package/dist/ipc/transport/jsonl.d.ts +16 -0
  193. package/dist/ipc/transport/jsonl.d.ts.map +1 -1
  194. package/dist/ipc/transport/jsonl.js +24 -0
  195. package/dist/ipc/transport/jsonl.js.map +1 -1
  196. package/dist/session/chrome.js +2 -2
  197. package/dist/session/chrome.js.map +1 -1
  198. package/dist/session/cleanup.d.ts +21 -0
  199. package/dist/session/cleanup.d.ts.map +1 -1
  200. package/dist/session/cleanup.js +92 -12
  201. package/dist/session/cleanup.js.map +1 -1
  202. package/dist/session/lock.js +1 -1
  203. package/dist/session/lock.js.map +1 -1
  204. package/dist/telemetry/__tests__/a11y.unit.test.d.ts +10 -0
  205. package/dist/telemetry/__tests__/a11y.unit.test.d.ts.map +1 -0
  206. package/dist/telemetry/__tests__/a11y.unit.test.js +265 -0
  207. package/dist/telemetry/__tests__/a11y.unit.test.js.map +1 -0
  208. package/dist/telemetry/__tests__/filters.unit.test.js +119 -1
  209. package/dist/telemetry/__tests__/filters.unit.test.js.map +1 -1
  210. package/dist/telemetry/__tests__/network.contract.test.js +114 -0
  211. package/dist/telemetry/__tests__/network.contract.test.js.map +1 -1
  212. package/dist/telemetry/a11y.d.ts +78 -0
  213. package/dist/telemetry/a11y.d.ts.map +1 -0
  214. package/dist/telemetry/a11y.js +280 -0
  215. package/dist/telemetry/a11y.js.map +1 -0
  216. package/dist/telemetry/dom.d.ts +1 -1
  217. package/dist/telemetry/dom.d.ts.map +1 -1
  218. package/dist/telemetry/dom.js +36 -5
  219. package/dist/telemetry/dom.js.map +1 -1
  220. package/dist/telemetry/filters.d.ts +17 -0
  221. package/dist/telemetry/filters.d.ts.map +1 -1
  222. package/dist/telemetry/filters.js +25 -0
  223. package/dist/telemetry/filters.js.map +1 -1
  224. package/dist/telemetry/har/__tests__/builder.unit.test.d.ts +8 -0
  225. package/dist/telemetry/har/__tests__/builder.unit.test.d.ts.map +1 -0
  226. package/dist/telemetry/har/__tests__/builder.unit.test.js +694 -0
  227. package/dist/telemetry/har/__tests__/builder.unit.test.js.map +1 -0
  228. package/dist/telemetry/har/builder.d.ts +43 -0
  229. package/dist/telemetry/har/builder.d.ts.map +1 -0
  230. package/dist/telemetry/har/builder.js +440 -0
  231. package/dist/telemetry/har/builder.js.map +1 -0
  232. package/dist/telemetry/har/types.d.ts +290 -0
  233. package/dist/telemetry/har/types.d.ts.map +1 -0
  234. package/dist/telemetry/har/types.js +7 -0
  235. package/dist/telemetry/har/types.js.map +1 -0
  236. package/dist/telemetry/network.d.ts.map +1 -1
  237. package/dist/telemetry/network.js +37 -4
  238. package/dist/telemetry/network.js.map +1 -1
  239. package/dist/types.d.ts +108 -0
  240. package/dist/types.d.ts.map +1 -1
  241. package/dist/ui/OutputBuilder.d.ts.map +1 -1
  242. package/dist/ui/OutputBuilder.js +0 -8
  243. package/dist/ui/OutputBuilder.js.map +1 -1
  244. package/dist/ui/errors/CommandError.d.ts.map +1 -1
  245. package/dist/ui/errors/CommandError.js +0 -1
  246. package/dist/ui/errors/CommandError.js.map +1 -1
  247. package/dist/ui/errors/index.d.ts.map +1 -1
  248. package/dist/ui/errors/index.js +0 -2
  249. package/dist/ui/errors/index.js.map +1 -1
  250. package/dist/ui/formatters/__tests__/semantic.unit.test.d.ts +2 -0
  251. package/dist/ui/formatters/__tests__/semantic.unit.test.d.ts.map +1 -0
  252. package/dist/ui/formatters/__tests__/semantic.unit.test.js +111 -0
  253. package/dist/ui/formatters/__tests__/semantic.unit.test.js.map +1 -0
  254. package/dist/ui/formatters/a11y.d.ts +30 -0
  255. package/dist/ui/formatters/a11y.d.ts.map +1 -0
  256. package/dist/ui/formatters/a11y.js +178 -0
  257. package/dist/ui/formatters/a11y.js.map +1 -0
  258. package/dist/ui/formatters/details.d.ts.map +1 -1
  259. package/dist/ui/formatters/details.js +1 -0
  260. package/dist/ui/formatters/details.js.map +1 -1
  261. package/dist/ui/formatters/dom.d.ts.map +1 -1
  262. package/dist/ui/formatters/dom.js +0 -3
  263. package/dist/ui/formatters/dom.js.map +1 -1
  264. package/dist/ui/formatters/index.d.ts +1 -0
  265. package/dist/ui/formatters/index.d.ts.map +1 -1
  266. package/dist/ui/formatters/index.js +1 -0
  267. package/dist/ui/formatters/index.js.map +1 -1
  268. package/dist/ui/formatters/networkHeaders.d.ts +14 -0
  269. package/dist/ui/formatters/networkHeaders.d.ts.map +1 -0
  270. package/dist/ui/formatters/networkHeaders.js +47 -0
  271. package/dist/ui/formatters/networkHeaders.js.map +1 -0
  272. package/dist/ui/formatters/preview.d.ts +2 -0
  273. package/dist/ui/formatters/preview.d.ts.map +1 -1
  274. package/dist/ui/formatters/preview.js +67 -23
  275. package/dist/ui/formatters/preview.js.map +1 -1
  276. package/dist/ui/formatters/semantic.d.ts +36 -0
  277. package/dist/ui/formatters/semantic.d.ts.map +1 -0
  278. package/dist/ui/formatters/semantic.js +98 -0
  279. package/dist/ui/formatters/semantic.js.map +1 -0
  280. package/dist/ui/formatters/status.d.ts.map +1 -1
  281. package/dist/ui/formatters/status.js +1 -12
  282. package/dist/ui/formatters/status.js.map +1 -1
  283. package/dist/ui/formatting.d.ts.map +1 -1
  284. package/dist/ui/formatting.js +0 -6
  285. package/dist/ui/formatting.js.map +1 -1
  286. package/dist/ui/logging/logger.d.ts +1 -1
  287. package/dist/ui/logging/logger.d.ts.map +1 -1
  288. package/dist/ui/logging/logger.js.map +1 -1
  289. package/dist/ui/messages/chrome.d.ts.map +1 -1
  290. package/dist/ui/messages/chrome.js +0 -6
  291. package/dist/ui/messages/chrome.js.map +1 -1
  292. package/dist/ui/messages/commands.d.ts +7 -0
  293. package/dist/ui/messages/commands.d.ts.map +1 -1
  294. package/dist/ui/messages/commands.js +9 -12
  295. package/dist/ui/messages/commands.js.map +1 -1
  296. package/dist/ui/messages/debug.d.ts.map +1 -1
  297. package/dist/ui/messages/debug.js +0 -6
  298. package/dist/ui/messages/debug.js.map +1 -1
  299. package/dist/ui/messages/internal.d.ts.map +1 -1
  300. package/dist/ui/messages/internal.js +0 -3
  301. package/dist/ui/messages/internal.js.map +1 -1
  302. package/dist/ui/messages/preview.d.ts.map +1 -1
  303. package/dist/ui/messages/preview.js +0 -12
  304. package/dist/ui/messages/preview.js.map +1 -1
  305. package/dist/ui/messages/session.d.ts.map +1 -1
  306. package/dist/ui/messages/session.js +0 -3
  307. package/dist/ui/messages/session.js.map +1 -1
  308. package/dist/utils/__tests__/errors.unit.test.d.ts +12 -0
  309. package/dist/utils/__tests__/errors.unit.test.d.ts.map +1 -0
  310. package/dist/utils/__tests__/errors.unit.test.js +255 -0
  311. package/dist/utils/__tests__/errors.unit.test.js.map +1 -0
  312. package/dist/utils/__tests__/http.unit.test.d.ts +12 -0
  313. package/dist/utils/__tests__/http.unit.test.d.ts.map +1 -0
  314. package/dist/utils/__tests__/http.unit.test.js +218 -0
  315. package/dist/utils/__tests__/http.unit.test.js.map +1 -0
  316. package/dist/utils/__tests__/process.unit.test.d.ts +14 -0
  317. package/dist/utils/__tests__/process.unit.test.d.ts.map +1 -0
  318. package/dist/utils/__tests__/process.unit.test.js +124 -0
  319. package/dist/utils/__tests__/process.unit.test.js.map +1 -0
  320. package/dist/utils/__tests__/session.contract.test.js +1 -1
  321. package/dist/utils/__tests__/session.contract.test.js.map +1 -1
  322. package/dist/utils/atomicFile.d.ts.map +1 -1
  323. package/dist/utils/atomicFile.js +9 -6
  324. package/dist/utils/atomicFile.js.map +1 -1
  325. package/dist/utils/exitCodes.d.ts.map +1 -1
  326. package/dist/utils/exitCodes.js +0 -2
  327. package/dist/utils/exitCodes.js.map +1 -1
  328. package/dist/utils/validation.d.ts.map +1 -1
  329. package/dist/utils/validation.js +0 -3
  330. package/dist/utils/validation.js.map +1 -1
  331. package/dist/utils/version.d.ts.map +1 -1
  332. package/dist/utils/version.js +0 -1
  333. package/dist/utils/version.js.map +1 -1
  334. package/package.json +22 -1
@@ -28,7 +28,6 @@ export const REACT_FILL_SCRIPT = `
28
28
  };
29
29
  }
30
30
 
31
- // Check if element is fillable
32
31
  const tagName = el.tagName.toLowerCase();
33
32
  const inputType = el.type?.toLowerCase();
34
33
 
@@ -48,16 +47,12 @@ export const REACT_FILL_SCRIPT = `
48
47
  };
49
48
  }
50
49
 
51
- // Focus element first
52
50
  el.focus();
53
51
 
54
- // Handle different input types
55
52
  if (tagName === 'select') {
56
- // For select elements
57
53
  el.value = value;
58
54
  el.dispatchEvent(new Event('change', { bubbles: true }));
59
55
  } else if (inputType === 'checkbox' || inputType === 'radio') {
60
- // For checkbox/radio, value should be "true" or "false"
61
56
  const shouldCheck = value === 'true' || value === true;
62
57
  el.checked = shouldCheck;
63
58
  el.dispatchEvent(new Event('change', { bubbles: true }));
@@ -68,11 +63,9 @@ export const REACT_FILL_SCRIPT = `
68
63
  suggestion: 'Use: bdg cdp DOM.setFileInputFiles --params {\\"files\\":[\\"path\\"]}'
69
64
  };
70
65
  } else if (el.isContentEditable) {
71
- // For contenteditable elements
72
66
  el.textContent = value;
73
67
  el.dispatchEvent(new Event('input', { bubbles: true }));
74
68
  } else {
75
- // For text inputs, use native setter (React compatibility)
76
69
  const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
77
70
  window.HTMLInputElement.prototype,
78
71
  'value'
@@ -93,15 +86,12 @@ export const REACT_FILL_SCRIPT = `
93
86
  el.value = value;
94
87
  }
95
88
 
96
- // Dispatch events that React/Vue/Angular listen for
97
89
  el.dispatchEvent(new Event('input', { bubbles: true }));
98
90
  el.dispatchEvent(new Event('change', { bubbles: true }));
99
91
  }
100
92
 
101
- // Blur if requested (triggers validation in many forms)
102
93
  if (options.blur !== false) {
103
94
  el.blur();
104
- // Dispatch focusout event for React/framework validation handlers
105
95
  el.dispatchEvent(new FocusEvent('focusout', { bubbles: true }));
106
96
  }
107
97
 
@@ -126,7 +116,6 @@ export const CLICK_ELEMENT_SCRIPT = `
126
116
  (function(selector) {
127
117
  let el = document.querySelector(selector);
128
118
 
129
- // If not found, return error
130
119
  if (!el) {
131
120
  return {
132
121
  success: false,
@@ -135,25 +124,17 @@ export const CLICK_ELEMENT_SCRIPT = `
135
124
  };
136
125
  }
137
126
 
138
- // Check if there are multiple matches and pick the visible one
139
127
  const allMatches = document.querySelectorAll(selector);
140
128
  if (allMatches.length > 1) {
141
- // Find first visible element using bounding rect and computed styles
142
129
  for (const candidate of allMatches) {
143
130
  const style = window.getComputedStyle(candidate);
144
131
  const rect = candidate.getBoundingClientRect();
145
132
 
146
- // Check if element is actually visible:
147
- // - Must have dimensions (non-zero width/height)
148
- // - Must not be display:none or visibility:hidden
149
- // - Opacity check (but allow semi-transparent elements)
150
- // - offsetParent check (but position:fixed elements have null offsetParent, so also check position)
151
133
  const hasSize = rect.width > 0 && rect.height > 0;
152
134
  const isDisplayed = style.display !== 'none' && style.visibility !== 'hidden';
153
135
  const isOpaque = parseFloat(style.opacity) > 0;
154
136
  const isPositioned = candidate.offsetParent !== null || style.position === 'fixed';
155
137
 
156
- // Don't filter out elements without text - icon buttons, inputs, etc. are valid
157
138
  const isVisible = hasSize && isDisplayed && isOpaque && isPositioned;
158
139
 
159
140
  if (isVisible) {
@@ -163,7 +144,6 @@ export const CLICK_ELEMENT_SCRIPT = `
163
144
  }
164
145
  }
165
146
 
166
- // Check if element is clickable (has click handler or is a button/link)
167
147
  const tagName = el.tagName.toLowerCase();
168
148
  const isClickable = (
169
149
  tagName === 'button' ||
@@ -178,10 +158,8 @@ export const CLICK_ELEMENT_SCRIPT = `
178
158
  console.warn('Warning: Element may not be clickable:', el);
179
159
  }
180
160
 
181
- // Scroll element into view first
182
161
  el.scrollIntoView({ behavior: 'auto', block: 'center' });
183
162
 
184
- // Click the element
185
163
  el.click();
186
164
 
187
165
  return {
@@ -222,24 +200,19 @@ export const GET_ELEMENT_BY_INDEX_SCRIPT = `
222
200
  };
223
201
  }
224
202
 
225
- // Return element info (we'll use this to build a more specific selector)
226
203
  const el = elements[index - 1]; // Convert to 0-based
227
204
 
228
- // Build a truly unique selector by constructing a scoped DOM path
229
205
  function buildUniquePath(element: Element): string {
230
- // If element has an ID, that's unique enough
231
206
  if (element.id) {
232
207
  return \`#\${CSS.escape(element.id)}\`;
233
208
  }
234
209
 
235
- // Build path from root using nth-of-type for each ancestor
236
210
  const path: string[] = [];
237
211
  let current: Element | null = element;
238
212
 
239
213
  while (current && current !== document.documentElement) {
240
214
  let selector = current.tagName.toLowerCase();
241
215
 
242
- // Use nth-of-type to ensure uniqueness within parent
243
216
  if (current.parentElement) {
244
217
  const siblings = Array.from(current.parentElement.children);
245
218
  const sameTagSiblings = siblings.filter(
@@ -256,7 +229,6 @@ export const GET_ELEMENT_BY_INDEX_SCRIPT = `
256
229
  current = current.parentElement;
257
230
  }
258
231
 
259
- // Prefix with html to anchor to document root
260
232
  return 'html > ' + path.join(' > ');
261
233
  }
262
234
 
@@ -1 +1 @@
1
- {"version":3,"file":"reactEventHelpers.js","sourceRoot":"","sources":["../../../src/commands/dom/reactEventHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkGhC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEnC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwE1C,CAAC"}
1
+ {"version":3,"file":"reactEventHelpers.js","sourceRoot":"","sources":["../../../src/commands/dom/reactEventHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwFhC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDnC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkE1C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqC9D"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwJzC;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmG9D"}
@@ -1,8 +1,114 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
1
3
  import { runCommand } from '../commands/shared/CommandRunner.js';
2
4
  import { jsonOption } from '../commands/shared/commonOptions.js';
3
- import { callCDP } from '../ipc/client.js';
5
+ import { getHARData, callCDP, getNetworkHeaders } from '../ipc/client.js';
4
6
  import { validateIPCResponse } from '../ipc/index.js';
5
- import { formatCookies } from '../ui/formatters/index.js';
7
+ import { getSessionFilePath } from '../session/paths.js';
8
+ import { buildHAR } from '../telemetry/har/builder.js';
9
+ import { isDaemonConnectionError } from '../ui/errors/utils.js';
10
+ import { formatCookies, formatNetworkHeaders } from '../ui/formatters/index.js';
11
+ import { AtomicFileWriter } from '../utils/atomicFile.js';
12
+ import { EXIT_CODES } from '../utils/exitCodes.js';
13
+ import { VERSION } from '../utils/version.js';
14
+ /**
15
+ * Generate timestamped filename for HAR export in ~/.bdg/ directory.
16
+ *
17
+ * @returns Full path to HAR file in ~/.bdg/capture-YYYY-MM-DD-HHMMSS.har
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * generateHARFilename(); // "~/.bdg/capture-2025-11-19-143045.har"
22
+ * ```
23
+ */
24
+ function generateHARFilename() {
25
+ const now = new Date();
26
+ const year = now.getFullYear();
27
+ const month = String(now.getMonth() + 1).padStart(2, '0');
28
+ const day = String(now.getDate()).padStart(2, '0');
29
+ const hours = String(now.getHours()).padStart(2, '0');
30
+ const minutes = String(now.getMinutes()).padStart(2, '0');
31
+ const seconds = String(now.getSeconds()).padStart(2, '0');
32
+ const filename = `capture-${year}-${month}-${day}-${hours}${minutes}${seconds}.har`;
33
+ const sessionDir = path.dirname(getSessionFilePath('OUTPUT'));
34
+ return path.join(sessionDir, filename);
35
+ }
36
+ /**
37
+ * Fetch network requests from live daemon session.
38
+ *
39
+ * @returns Network requests array
40
+ * @throws Error if daemon connection fails or no network data available
41
+ */
42
+ async function fetchFromLiveSession() {
43
+ const response = await getHARData();
44
+ validateIPCResponse(response);
45
+ if (!response.data?.requests) {
46
+ throw new Error('No network data in response');
47
+ }
48
+ return response.data.requests;
49
+ }
50
+ /**
51
+ * Fetch network requests from offline session.json file.
52
+ *
53
+ * @returns Network requests array
54
+ * @throws Error if session file not found or no network data available
55
+ */
56
+ function fetchFromOfflineSession() {
57
+ const sessionPath = getSessionFilePath('OUTPUT');
58
+ if (!fs.existsSync(sessionPath)) {
59
+ throw new Error('No active session or session.json found. Start a session with: bdg <url>', {
60
+ cause: { code: EXIT_CODES.RESOURCE_NOT_FOUND },
61
+ });
62
+ }
63
+ const sessionData = JSON.parse(fs.readFileSync(sessionPath, 'utf-8'));
64
+ if (!sessionData.data?.network) {
65
+ throw new Error('No network data in session file', {
66
+ cause: { code: EXIT_CODES.RESOURCE_NOT_FOUND },
67
+ });
68
+ }
69
+ return sessionData.data.network;
70
+ }
71
+ /**
72
+ * Check if error indicates daemon is unavailable.
73
+ *
74
+ * @param error - Error to check
75
+ * @returns True if error indicates no active session or daemon connection failure
76
+ */
77
+ function isDaemonUnavailable(error) {
78
+ if (isDaemonConnectionError(error)) {
79
+ return true;
80
+ }
81
+ const errorMessage = error instanceof Error ? error.message : String(error);
82
+ return errorMessage.includes('No active session');
83
+ }
84
+ /**
85
+ * Get network requests from live session or session.json.
86
+ *
87
+ * Tries live daemon first, falls back to offline session file.
88
+ *
89
+ * @returns Network requests array
90
+ * @throws Error if no session available (live or offline)
91
+ */
92
+ async function getNetworkRequests() {
93
+ try {
94
+ return await fetchFromLiveSession();
95
+ }
96
+ catch (error) {
97
+ if (isDaemonUnavailable(error)) {
98
+ return fetchFromOfflineSession();
99
+ }
100
+ throw error;
101
+ }
102
+ }
103
+ /**
104
+ * Format HAR export success message for human output.
105
+ *
106
+ * @param data - HAR export result data
107
+ * @returns Formatted success message
108
+ */
109
+ function formatHARExport(data) {
110
+ return `✓ Exported ${data.entries} requests to ${data.file}`;
111
+ }
6
112
  /**
7
113
  * Register network commands.
8
114
  *
@@ -10,7 +116,31 @@ import { formatCookies } from '../ui/formatters/index.js';
10
116
  */
11
117
  export function registerNetworkCommands(program) {
12
118
  const networkCmd = program.command('network').description('Inspect network state and resources');
13
- // bdg network getCookies
119
+ networkCmd
120
+ .command('har [output-file]')
121
+ .description('Export network data as HAR 1.2 format')
122
+ .addOption(jsonOption)
123
+ .action(async (outputFile, options) => {
124
+ await runCommand(async () => {
125
+ const requests = await getNetworkRequests();
126
+ const outputPath = outputFile ?? generateHARFilename();
127
+ const dir = path.dirname(outputPath);
128
+ if (dir !== '.' && !fs.existsSync(dir)) {
129
+ fs.mkdirSync(dir, { recursive: true });
130
+ }
131
+ const har = buildHAR(requests, {
132
+ version: VERSION,
133
+ });
134
+ await AtomicFileWriter.writeAsync(outputPath, JSON.stringify(har, null, 2));
135
+ return {
136
+ success: true,
137
+ data: {
138
+ file: outputPath,
139
+ entries: har.log.entries.length,
140
+ },
141
+ };
142
+ }, options, formatHARExport);
143
+ });
14
144
  networkCmd
15
145
  .command('getCookies')
16
146
  .description('List cookies from the current page')
@@ -18,24 +148,43 @@ export function registerNetworkCommands(program) {
18
148
  .addOption(jsonOption)
19
149
  .action(async (options) => {
20
150
  await runCommand(async (opts) => {
21
- // Build CDP method parameters
22
151
  const params = {};
23
152
  if (opts.url) {
24
153
  params['urls'] = [opts.url];
25
154
  }
26
- // Call CDP Network.getCookies
27
155
  const response = await callCDP('Network.getCookies', params);
28
- // Validate IPC response (throws on error)
29
156
  validateIPCResponse(response);
30
- // Extract cookies from CDP response
31
157
  const cookies = response.data?.result?.cookies ?? [];
32
158
  return {
33
159
  success: true,
34
160
  data: cookies,
35
161
  };
36
- }, options,
37
- // Human-readable formatter
38
- formatCookies);
162
+ }, options, formatCookies);
163
+ });
164
+ networkCmd
165
+ .command('headers [id]')
166
+ .description('Show HTTP headers (defaults to main page navigation)')
167
+ .option('--header <name>', 'Filter to specific header name')
168
+ .addOption(jsonOption)
169
+ .action(async (id, options) => {
170
+ await runCommand(async (opts) => {
171
+ const response = await getNetworkHeaders({
172
+ ...(id && { id }),
173
+ ...(opts.header && { headerName: opts.header }),
174
+ });
175
+ validateIPCResponse(response);
176
+ if (!response.data) {
177
+ return {
178
+ success: false,
179
+ error: 'No data returned from worker',
180
+ exitCode: EXIT_CODES.RESOURCE_NOT_FOUND,
181
+ };
182
+ }
183
+ return {
184
+ success: true,
185
+ data: response.data,
186
+ };
187
+ }, options, formatNetworkHeaders);
39
188
  });
40
189
  }
41
190
  //# sourceMappingURL=network.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAUzD;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAC;IAEjG,yBAAyB;IACzB,UAAU;SACP,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,aAAa,EAAE,uBAAuB,CAAC;SAC9C,SAAS,CAAC,UAAU,CAAC;SACrB,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QAC3C,MAAM,UAAU,CACd,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,8BAA8B;YAC9B,MAAM,MAAM,GAA4B,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;YAED,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;YAE7D,0CAA0C;YAC1C,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAE9B,oCAAoC;YACpC,MAAM,OAAO,GAAI,QAAQ,CAAC,IAAI,EAAE,MAAiC,EAAE,OAAO,IAAI,EAAE,CAAC;YAEjF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,OAAO;aACd,CAAC;QACJ,CAAC,EACD,OAAO;QACP,2BAA2B;QAC3B,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"peek.d.ts","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBzC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2G1D"}
1
+ {"version":3,"file":"peek.d.ts","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBzC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoH1D"}
@@ -1,8 +1,9 @@
1
1
  import { jsonOption } from '../commands/shared/commonOptions.js';
2
2
  import { handleDaemonConnectionError } from '../commands/shared/daemonErrorHandler.js';
3
- import { positiveIntRule } from '../commands/shared/validation.js';
3
+ import { positiveIntRule, resourceTypeRule } from '../commands/shared/validation.js';
4
4
  import { getPeek } from '../ipc/client.js';
5
5
  import { validateIPCResponse } from '../ipc/index.js';
6
+ import { filterByResourceType } from '../telemetry/filters.js';
6
7
  import { formatPreview } from '../ui/formatters/preview.js';
7
8
  import { followingPreviewMessage, stoppedFollowingPreviewMessage } from '../ui/messages/preview.js';
8
9
  import { EXIT_CODES } from '../utils/exitCodes.js';
@@ -19,31 +20,32 @@ export function registerPeekCommand(program) {
19
20
  .option('-v, --verbose', 'Use verbose output with full URLs and formatting', false)
20
21
  .option('-n, --network', 'Show only network requests', false)
21
22
  .option('-c, --console', 'Show only console messages', false)
23
+ .option('-d, --dom', 'Show DOM/A11y tree data', false)
22
24
  .option('-f, --follow', 'Watch for updates (like tail -f)', false)
23
25
  .option('--last <count>', 'Show last N items (network requests + console messages)', '10')
26
+ .option('--type <types>', 'Filter network requests by resource type (comma-separated: Document,XHR,Fetch,etc.)')
24
27
  .action(async (options) => {
25
- // Validate --last option using validation layer
26
28
  const lastRule = positiveIntRule({ min: 1, max: 1000, default: 10 });
27
29
  const lastN = lastRule.validate(options.last);
30
+ const typeRule = resourceTypeRule();
31
+ const resourceTypes = typeRule.validate(options.type);
28
32
  const previewBase = {
29
33
  json: options.json,
30
34
  network: options.network,
31
35
  console: options.console,
36
+ dom: options.dom,
32
37
  last: lastN,
33
38
  verbose: options.verbose,
34
39
  follow: options.follow,
35
40
  };
36
41
  const showPreview = async () => {
37
42
  try {
38
- // Fetch preview data via IPC from daemon
39
43
  const response = await getPeek();
40
- // Validate IPC response (will throw on error)
41
44
  try {
42
45
  validateIPCResponse(response);
43
46
  }
44
47
  catch {
45
48
  const errorMsg = response.error ?? 'Unknown error';
46
- // No active session - use RESOURCE_NOT_FOUND
47
49
  const exitCode = errorMsg.includes('No active session')
48
50
  ? EXIT_CODES.RESOURCE_NOT_FOUND
49
51
  : EXIT_CODES.SESSION_FILE_ERROR;
@@ -58,7 +60,6 @@ export function registerPeekCommand(program) {
58
60
  }
59
61
  return;
60
62
  }
61
- // Extract preview data from response
62
63
  const output = response.data?.preview;
63
64
  if (!output) {
64
65
  const result = handleDaemonConnectionError('No preview data in response', {
@@ -72,15 +73,22 @@ export function registerPeekCommand(program) {
72
73
  }
73
74
  return;
74
75
  }
75
- // Clear screen before rendering to prevent stacked outputs in follow mode
76
76
  if (options.follow) {
77
77
  console.clear();
78
78
  }
79
- // Add current view timestamp for follow mode to show refresh time
80
79
  const previewOptions = previewBase.follow
81
80
  ? { ...previewBase, viewedAt: new Date() }
82
81
  : previewBase;
83
- console.log(formatPreview(output, previewOptions));
82
+ const filteredOutput = {
83
+ ...output,
84
+ data: {
85
+ ...output.data,
86
+ ...(output.data.network && {
87
+ network: filterByResourceType(output.data.network, resourceTypes),
88
+ }),
89
+ },
90
+ };
91
+ console.log(formatPreview(filteredOutput, previewOptions));
84
92
  }
85
93
  catch {
86
94
  const result = handleDaemonConnectionError('Daemon not running', {
@@ -94,13 +102,11 @@ export function registerPeekCommand(program) {
94
102
  }
95
103
  };
96
104
  if (options.follow) {
97
- // Follow mode: update every second
98
105
  console.error(followingPreviewMessage());
99
106
  await showPreview();
100
107
  const followInterval = setInterval(() => {
101
108
  void showPreview();
102
109
  }, 1000);
103
- // Handle Ctrl+C gracefully
104
110
  process.on('SIGINT', () => {
105
111
  clearInterval(followInterval);
106
112
  console.error(stoppedFollowingPreviewMessage());
@@ -108,7 +114,6 @@ export function registerPeekCommand(program) {
108
114
  });
109
115
  }
110
116
  else {
111
- // One-time preview
112
117
  await showPreview();
113
118
  }
114
119
  });
@@ -1 +1 @@
1
- {"version":3,"file":"peek.js","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"peek.js","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CommandRunner.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/CommandRunner.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,kBAAkB,EAAE,OAAO,GAAG,OAAO,IAAI,CACnF,OAAO,EAAE,QAAQ,KACd,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAErC;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,UAAU,CAAC,QAAQ,SAAS,kBAAkB,EAAE,OAAO,GAAG,OAAO,EACrF,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC1C,OAAO,EAAE,QAAQ,EACjB,SAAS,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CAyFf"}
1
+ {"version":3,"file":"CommandRunner.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/CommandRunner.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,kBAAkB,EAAE,OAAO,GAAG,OAAO,IAAI,CACnF,OAAO,EAAE,QAAQ,KACd,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAErC;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,UAAU,CAAC,QAAQ,SAAS,kBAAkB,EAAE,OAAO,GAAG,OAAO,EACrF,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC1C,OAAO,EAAE,QAAQ,EACjB,SAAS,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CAiFf"}
@@ -33,7 +33,6 @@ export async function runCommand(handler, options, formatter) {
33
33
  try {
34
34
  const result = await handler(options);
35
35
  if (!result.success) {
36
- // Error result from handler
37
36
  if (options.json) {
38
37
  const errorData = {
39
38
  ...(result.exitCode !== undefined && { exitCode: result.exitCode }),
@@ -43,7 +42,6 @@ export async function runCommand(handler, options, formatter) {
43
42
  }
44
43
  else {
45
44
  console.error(result.error ? genericError(result.error) : unknownError());
46
- // Show errorContext suggestions in human-readable mode
47
45
  if (result.errorContext && typeof result.errorContext === 'object') {
48
46
  for (const value of Object.values(result.errorContext)) {
49
47
  if (typeof value === 'string') {
@@ -54,7 +52,6 @@ export async function runCommand(handler, options, formatter) {
54
52
  }
55
53
  process.exit(result.exitCode ?? EXIT_CODES.UNHANDLED_EXCEPTION);
56
54
  }
57
- // Success - output data
58
55
  if (options.json) {
59
56
  console.log(JSON.stringify(result.data, null, 2));
60
57
  }
@@ -63,20 +60,17 @@ export async function runCommand(handler, options, formatter) {
63
60
  console.log(formattedOutput);
64
61
  }
65
62
  else {
66
- // Fallback: JSON output if no formatter provided
67
63
  console.log(JSON.stringify(result.data, null, 2));
68
64
  }
69
65
  process.exit(EXIT_CODES.SUCCESS);
70
66
  }
71
67
  catch (error) {
72
- // Handle CommandError with metadata and custom exit code
73
68
  if (error instanceof CommandError) {
74
69
  if (options.json) {
75
70
  console.log(JSON.stringify(OutputBuilder.buildJsonError(error.message, error.metadata), null, 2));
76
71
  }
77
72
  else {
78
73
  console.error(genericError(error.message));
79
- // Output metadata as additional help text
80
74
  for (const value of Object.values(error.metadata)) {
81
75
  console.error(value);
82
76
  }
@@ -84,7 +78,6 @@ export async function runCommand(handler, options, formatter) {
84
78
  process.exit(error.exitCode);
85
79
  }
86
80
  const errorMessage = getErrorMessage(error);
87
- // Detect daemon connection errors
88
81
  if (isDaemonConnectionError(error)) {
89
82
  if (options.json) {
90
83
  console.log(JSON.stringify(OutputBuilder.buildJsonError('Daemon not running', {
@@ -96,7 +89,6 @@ export async function runCommand(handler, options, formatter) {
96
89
  }
97
90
  process.exit(EXIT_CODES.RESOURCE_NOT_FOUND);
98
91
  }
99
- // Generic error
100
92
  if (options.json) {
101
93
  console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMessage), null, 2));
102
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CommandRunner.js","sourceRoot":"","sources":["../../../src/commands/shared/CommandRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CommandRunner.js","sourceRoot":"","sources":["../../../src/commands/shared/CommandRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Validation unit tests
3
+ *
4
+ * Tests validation rules following the testing philosophy: "Test the contract, not the implementation"
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=validation.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.unit.test.d.ts","sourceRoot":"","sources":["../../../../src/commands/shared/__tests__/validation.unit.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}