browser-debugger-cli 0.2.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (554) hide show
  1. package/README.md +137 -126
  2. package/dist/__tests__/fixtures/schema-v0.2.1.golden.json +47 -0
  3. package/dist/__tests__/schema.contract.test.d.ts +19 -0
  4. package/dist/__tests__/schema.contract.test.d.ts.map +1 -0
  5. package/dist/__tests__/schema.contract.test.js +236 -0
  6. package/dist/__tests__/schema.contract.test.js.map +1 -0
  7. package/dist/__tests__/smoke/error-handling.smoke.test.d.ts +8 -0
  8. package/dist/__tests__/smoke/error-handling.smoke.test.d.ts.map +1 -0
  9. package/dist/__tests__/smoke/error-handling.smoke.test.js +106 -0
  10. package/dist/__tests__/smoke/error-handling.smoke.test.js.map +1 -0
  11. package/dist/__tests__/smoke/session-lifecycle.smoke.test.d.ts +8 -0
  12. package/dist/__tests__/smoke/session-lifecycle.smoke.test.d.ts.map +1 -0
  13. package/dist/__tests__/smoke/session-lifecycle.smoke.test.js +109 -0
  14. package/dist/__tests__/smoke/session-lifecycle.smoke.test.js.map +1 -0
  15. package/dist/__testutils__/commandRunner.d.ts +45 -0
  16. package/dist/__testutils__/commandRunner.d.ts.map +1 -0
  17. package/dist/__testutils__/commandRunner.js +108 -0
  18. package/dist/__testutils__/commandRunner.js.map +1 -0
  19. package/dist/__testutils__/daemonHelpers.d.ts +81 -0
  20. package/dist/__testutils__/daemonHelpers.d.ts.map +1 -0
  21. package/dist/__testutils__/daemonHelpers.js +206 -0
  22. package/dist/__testutils__/daemonHelpers.js.map +1 -0
  23. package/dist/__testutils__/index.d.ts +1 -0
  24. package/dist/__testutils__/index.d.ts.map +1 -1
  25. package/dist/__testutils__/index.js +1 -0
  26. package/dist/__testutils__/index.js.map +1 -1
  27. package/dist/__testutils__/testCleanup.d.ts +45 -0
  28. package/dist/__testutils__/testCleanup.d.ts.map +1 -0
  29. package/dist/__testutils__/testCleanup.js +87 -0
  30. package/dist/__testutils__/testCleanup.js.map +1 -0
  31. package/dist/__testutils__/testHome.d.ts +26 -0
  32. package/dist/__testutils__/testHome.d.ts.map +1 -0
  33. package/dist/__testutils__/testHome.js +57 -0
  34. package/dist/__testutils__/testHome.js.map +1 -0
  35. package/dist/__testutils__/testProcess.d.ts.map +1 -1
  36. package/dist/__testutils__/testProcess.js +11 -3
  37. package/dist/__testutils__/testProcess.js.map +1 -1
  38. package/dist/cli/commands/__tests__/start.unit.test.d.ts +2 -0
  39. package/dist/cli/commands/__tests__/start.unit.test.d.ts.map +1 -0
  40. package/dist/cli/commands/__tests__/start.unit.test.js +131 -0
  41. package/dist/cli/commands/__tests__/start.unit.test.js.map +1 -0
  42. package/dist/cli/commands/cleanup.d.ts +1 -0
  43. package/dist/cli/commands/cleanup.d.ts.map +1 -1
  44. package/dist/cli/commands/cleanup.js +80 -61
  45. package/dist/cli/commands/cleanup.js.map +1 -1
  46. package/dist/cli/commands/details.d.ts +2 -1
  47. package/dist/cli/commands/details.d.ts.map +1 -1
  48. package/dist/cli/commands/details.js +104 -52
  49. package/dist/cli/commands/details.js.map +1 -1
  50. package/dist/cli/commands/peek.d.ts +2 -1
  51. package/dist/cli/commands/peek.d.ts.map +1 -1
  52. package/dist/cli/commands/peek.js +22 -67
  53. package/dist/cli/commands/peek.js.map +1 -1
  54. package/dist/cli/commands/query.d.ts +9 -0
  55. package/dist/cli/commands/query.d.ts.map +1 -0
  56. package/dist/cli/commands/query.js +125 -0
  57. package/dist/cli/commands/query.js.map +1 -0
  58. package/dist/cli/commands/start.d.ts +74 -0
  59. package/dist/cli/commands/start.d.ts.map +1 -1
  60. package/dist/cli/commands/start.js +147 -38
  61. package/dist/cli/commands/start.js.map +1 -1
  62. package/dist/cli/commands/status.d.ts.map +1 -1
  63. package/dist/cli/commands/status.js +37 -49
  64. package/dist/cli/commands/status.js.map +1 -1
  65. package/dist/cli/commands/stop.d.ts +1 -0
  66. package/dist/cli/commands/stop.d.ts.map +1 -1
  67. package/dist/cli/commands/stop.js +106 -120
  68. package/dist/cli/commands/stop.js.map +1 -1
  69. package/dist/cli/formatters/detailsFormatter.d.ts +1 -1
  70. package/dist/cli/formatters/previewFormatter.d.ts +7 -7
  71. package/dist/cli/formatters/previewFormatter.d.ts.map +1 -1
  72. package/dist/cli/formatters/previewFormatter.js +5 -10
  73. package/dist/cli/formatters/previewFormatter.js.map +1 -1
  74. package/dist/cli/formatters/statusFormatter.d.ts +13 -10
  75. package/dist/cli/formatters/statusFormatter.d.ts.map +1 -1
  76. package/dist/cli/formatters/statusFormatter.js +26 -53
  77. package/dist/cli/formatters/statusFormatter.js.map +1 -1
  78. package/dist/cli/handlers/ChromeBootstrap.d.ts +24 -0
  79. package/dist/cli/handlers/ChromeBootstrap.d.ts.map +1 -0
  80. package/dist/cli/handlers/ChromeBootstrap.js +50 -0
  81. package/dist/cli/handlers/ChromeBootstrap.js.map +1 -0
  82. package/dist/cli/handlers/OutputBuilder.d.ts +2 -3
  83. package/dist/cli/handlers/OutputBuilder.d.ts.map +1 -1
  84. package/dist/cli/handlers/OutputBuilder.js +2 -4
  85. package/dist/cli/handlers/OutputBuilder.js.map +1 -1
  86. package/dist/cli/handlers/OutputWriter.d.ts +15 -0
  87. package/dist/cli/handlers/OutputWriter.d.ts.map +1 -0
  88. package/dist/cli/handlers/OutputWriter.js +34 -0
  89. package/dist/cli/handlers/OutputWriter.js.map +1 -0
  90. package/dist/cli/handlers/PreviewWriter.d.ts +52 -0
  91. package/dist/cli/handlers/PreviewWriter.d.ts.map +1 -0
  92. package/dist/cli/handlers/PreviewWriter.js +118 -0
  93. package/dist/cli/handlers/PreviewWriter.js.map +1 -0
  94. package/dist/cli/handlers/SessionLock.d.ts +16 -0
  95. package/dist/cli/handlers/SessionLock.d.ts.map +1 -0
  96. package/dist/cli/handlers/SessionLock.js +35 -0
  97. package/dist/cli/handlers/SessionLock.js.map +1 -0
  98. package/dist/cli/handlers/SessionLoop.d.ts +19 -0
  99. package/dist/cli/handlers/SessionLoop.d.ts.map +1 -0
  100. package/dist/cli/handlers/SessionLoop.js +47 -0
  101. package/dist/cli/handlers/SessionLoop.js.map +1 -0
  102. package/dist/cli/handlers/ShutdownController.d.ts +41 -0
  103. package/dist/cli/handlers/ShutdownController.d.ts.map +1 -0
  104. package/dist/cli/handlers/ShutdownController.js +94 -0
  105. package/dist/cli/handlers/ShutdownController.js.map +1 -0
  106. package/dist/cli/handlers/SignalHandler.d.ts +35 -0
  107. package/dist/cli/handlers/SignalHandler.d.ts.map +1 -0
  108. package/dist/cli/handlers/SignalHandler.js +81 -0
  109. package/dist/cli/handlers/SignalHandler.js.map +1 -0
  110. package/dist/cli/handlers/TargetSetup.d.ts +42 -0
  111. package/dist/cli/handlers/TargetSetup.d.ts.map +1 -0
  112. package/dist/cli/handlers/TargetSetup.js +87 -0
  113. package/dist/cli/handlers/TargetSetup.js.map +1 -0
  114. package/dist/cli/handlers/sessionController.d.ts +41 -0
  115. package/dist/cli/handlers/sessionController.d.ts.map +1 -1
  116. package/dist/cli/handlers/sessionController.js +266 -5
  117. package/dist/cli/handlers/sessionController.js.map +1 -1
  118. package/dist/cli/registry.d.ts +2 -2
  119. package/dist/cli/registry.d.ts.map +1 -1
  120. package/dist/cli/registry.js +12 -37
  121. package/dist/cli/registry.js.map +1 -1
  122. package/dist/collectors/console.d.ts +1 -1
  123. package/dist/collectors/console.js +2 -2
  124. package/dist/collectors/console.js.map +1 -1
  125. package/dist/collectors/dom.d.ts +1 -1
  126. package/dist/collectors/network.d.ts +1 -2
  127. package/dist/collectors/network.d.ts.map +1 -1
  128. package/dist/collectors/network.js +3 -3
  129. package/dist/collectors/network.js.map +1 -1
  130. package/dist/commands/__tests__/cdp.contract.test.d.ts.map +1 -1
  131. package/dist/commands/__tests__/cdp.contract.test.js +0 -1
  132. package/dist/commands/__tests__/cdp.contract.test.js.map +1 -1
  133. package/dist/commands/__tests__/domEval.contract.test.d.ts +17 -0
  134. package/dist/commands/__tests__/domEval.contract.test.d.ts.map +1 -0
  135. package/dist/commands/__tests__/domEval.contract.test.js +231 -0
  136. package/dist/commands/__tests__/domEval.contract.test.js.map +1 -0
  137. package/dist/commands/cdp.js +1 -1
  138. package/dist/commands/cdp.js.map +1 -1
  139. package/dist/commands/cleanup.d.ts.map +1 -1
  140. package/dist/commands/cleanup.js +51 -13
  141. package/dist/commands/cleanup.js.map +1 -1
  142. package/dist/commands/console.d.ts.map +1 -1
  143. package/dist/commands/console.js +8 -8
  144. package/dist/commands/console.js.map +1 -1
  145. package/dist/commands/details.js +2 -2
  146. package/dist/commands/details.js.map +1 -1
  147. package/dist/commands/dom.d.ts.map +1 -1
  148. package/dist/commands/dom.js +114 -128
  149. package/dist/commands/dom.js.map +1 -1
  150. package/dist/commands/domEvalHelpers.d.ts +7 -11
  151. package/dist/commands/domEvalHelpers.d.ts.map +1 -1
  152. package/dist/commands/domEvalHelpers.js +67 -22
  153. package/dist/commands/domEvalHelpers.js.map +1 -1
  154. package/dist/commands/domOptionsBuilder.d.ts +32 -0
  155. package/dist/commands/domOptionsBuilder.d.ts.map +1 -1
  156. package/dist/commands/domOptionsBuilder.js +35 -0
  157. package/dist/commands/domOptionsBuilder.js.map +1 -1
  158. package/dist/commands/machineReadableHelp.d.ts +98 -0
  159. package/dist/commands/machineReadableHelp.d.ts.map +1 -0
  160. package/dist/commands/machineReadableHelp.js +137 -0
  161. package/dist/commands/machineReadableHelp.js.map +1 -0
  162. package/dist/commands/network.d.ts.map +1 -1
  163. package/dist/commands/network.js +2 -4
  164. package/dist/commands/network.js.map +1 -1
  165. package/dist/commands/peek.d.ts.map +1 -1
  166. package/dist/commands/peek.js +3 -2
  167. package/dist/commands/peek.js.map +1 -1
  168. package/dist/commands/shared/CommandRunner.d.ts +4 -2
  169. package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
  170. package/dist/commands/shared/CommandRunner.js +18 -3
  171. package/dist/commands/shared/CommandRunner.js.map +1 -1
  172. package/dist/commands/shared/OutputBuilder.js +1 -1
  173. package/dist/commands/shared/OutputBuilder.js.map +1 -1
  174. package/dist/commands/shared/commonOptions.d.ts.map +1 -1
  175. package/dist/commands/shared/commonOptions.js +10 -3
  176. package/dist/commands/shared/commonOptions.js.map +1 -1
  177. package/dist/commands/shared/daemonSessionController.d.ts +2 -0
  178. package/dist/commands/shared/daemonSessionController.d.ts.map +1 -1
  179. package/dist/commands/shared/daemonSessionController.js +13 -16
  180. package/dist/commands/shared/daemonSessionController.js.map +1 -1
  181. package/dist/commands/shared/sessionController.d.ts.map +1 -1
  182. package/dist/commands/shared/sessionController.js +8 -9
  183. package/dist/commands/shared/sessionController.js.map +1 -1
  184. package/dist/commands/start.d.ts.map +1 -1
  185. package/dist/commands/start.js +16 -1
  186. package/dist/commands/start.js.map +1 -1
  187. package/dist/commands/status.d.ts.map +1 -1
  188. package/dist/commands/status.js +72 -54
  189. package/dist/commands/status.js.map +1 -1
  190. package/dist/commands/stop.d.ts.map +1 -1
  191. package/dist/commands/stop.js +16 -28
  192. package/dist/commands/stop.js.map +1 -1
  193. package/dist/commands/tail.d.ts +11 -0
  194. package/dist/commands/tail.d.ts.map +1 -0
  195. package/dist/commands/tail.js +114 -0
  196. package/dist/commands/tail.js.map +1 -0
  197. package/dist/commands.d.ts.map +1 -1
  198. package/dist/commands.js +2 -0
  199. package/dist/commands.js.map +1 -1
  200. package/dist/connection/__tests__/cdp.contract.test.d.ts.map +1 -1
  201. package/dist/connection/__tests__/cdp.contract.test.js +0 -1
  202. package/dist/connection/__tests__/cdp.contract.test.js.map +1 -1
  203. package/dist/connection/cdp.d.ts +46 -2
  204. package/dist/connection/cdp.d.ts.map +1 -1
  205. package/dist/connection/cdp.js +71 -5
  206. package/dist/connection/cdp.js.map +1 -1
  207. package/dist/connection/diagnostics.d.ts +16 -0
  208. package/dist/connection/diagnostics.d.ts.map +1 -0
  209. package/dist/connection/diagnostics.js +37 -0
  210. package/dist/connection/diagnostics.js.map +1 -0
  211. package/dist/connection/errors.d.ts +74 -0
  212. package/dist/connection/errors.d.ts.map +1 -0
  213. package/dist/connection/errors.js +83 -0
  214. package/dist/connection/errors.js.map +1 -0
  215. package/dist/connection/handlers.d.ts +31 -0
  216. package/dist/connection/handlers.d.ts.map +1 -0
  217. package/dist/connection/handlers.js +38 -0
  218. package/dist/connection/handlers.js.map +1 -0
  219. package/dist/connection/launcher.d.ts +3 -20
  220. package/dist/connection/launcher.d.ts.map +1 -1
  221. package/dist/connection/launcher.js +140 -32
  222. package/dist/connection/launcher.js.map +1 -1
  223. package/dist/connection/pageReadiness.d.ts +46 -0
  224. package/dist/connection/pageReadiness.d.ts.map +1 -0
  225. package/dist/connection/pageReadiness.js +270 -0
  226. package/dist/connection/pageReadiness.js.map +1 -0
  227. package/dist/connection/tabs.d.ts +52 -0
  228. package/dist/connection/tabs.d.ts.map +1 -0
  229. package/dist/connection/tabs.js +227 -0
  230. package/dist/connection/tabs.js.map +1 -0
  231. package/dist/constants.d.ts +20 -40
  232. package/dist/constants.d.ts.map +1 -1
  233. package/dist/constants.js +26 -40
  234. package/dist/constants.js.map +1 -1
  235. package/dist/daemon/ipcServer.d.ts +5 -7
  236. package/dist/daemon/ipcServer.d.ts.map +1 -1
  237. package/dist/daemon/ipcServer.js +178 -143
  238. package/dist/daemon/ipcServer.js.map +1 -1
  239. package/dist/daemon/launcher.js +1 -1
  240. package/dist/daemon/launcher.js.map +1 -1
  241. package/dist/daemon/server/SocketServer.d.ts +22 -0
  242. package/dist/daemon/server/SocketServer.d.ts.map +1 -0
  243. package/dist/daemon/server/SocketServer.js +67 -0
  244. package/dist/daemon/server/SocketServer.js.map +1 -0
  245. package/dist/daemon/server/WorkerManager.d.ts +36 -0
  246. package/dist/daemon/server/WorkerManager.d.ts.map +1 -0
  247. package/dist/daemon/server/WorkerManager.js +98 -0
  248. package/dist/daemon/server/WorkerManager.js.map +1 -0
  249. package/dist/daemon/startSession.d.ts +2 -0
  250. package/dist/daemon/startSession.d.ts.map +1 -1
  251. package/dist/daemon/startSession.js +9 -5
  252. package/dist/daemon/startSession.js.map +1 -1
  253. package/dist/daemon/worker/TelemetryStore.d.ts +18 -0
  254. package/dist/daemon/worker/TelemetryStore.d.ts.map +1 -0
  255. package/dist/daemon/worker/TelemetryStore.js +49 -0
  256. package/dist/daemon/worker/TelemetryStore.js.map +1 -0
  257. package/dist/daemon/worker/collectors.d.ts +8 -0
  258. package/dist/daemon/worker/collectors.d.ts.map +1 -0
  259. package/dist/daemon/worker/collectors.js +19 -0
  260. package/dist/daemon/worker/collectors.js.map +1 -0
  261. package/dist/daemon/worker/commandRegistry.d.ts +10 -0
  262. package/dist/daemon/worker/commandRegistry.d.ts.map +1 -0
  263. package/dist/daemon/worker/commandRegistry.js +289 -0
  264. package/dist/daemon/worker/commandRegistry.js.map +1 -0
  265. package/dist/daemon/worker/plugins.d.ts +21 -0
  266. package/dist/daemon/worker/plugins.d.ts.map +1 -0
  267. package/dist/daemon/worker/plugins.js +71 -0
  268. package/dist/daemon/worker/plugins.js.map +1 -0
  269. package/dist/daemon/worker/types.d.ts +13 -0
  270. package/dist/daemon/worker/types.d.ts.map +1 -0
  271. package/dist/daemon/worker/types.js +2 -0
  272. package/dist/daemon/worker/types.js.map +1 -0
  273. package/dist/daemon/worker.js +232 -484
  274. package/dist/daemon/worker.js.map +1 -1
  275. package/dist/help/machineReadableHelp.d.ts +100 -0
  276. package/dist/help/machineReadableHelp.d.ts.map +1 -0
  277. package/dist/help/machineReadableHelp.js +139 -0
  278. package/dist/help/machineReadableHelp.js.map +1 -0
  279. package/dist/index.js +18 -9
  280. package/dist/index.js.map +1 -1
  281. package/dist/ipc/__tests__/client.contract.test.js +2 -2
  282. package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
  283. package/dist/ipc/client.d.ts +16 -1
  284. package/dist/ipc/client.d.ts.map +1 -1
  285. package/dist/ipc/client.js +40 -11
  286. package/dist/ipc/client.js.map +1 -1
  287. package/dist/ipc/commands.d.ts +20 -0
  288. package/dist/ipc/commands.d.ts.map +1 -1
  289. package/dist/ipc/commands.js +4 -0
  290. package/dist/ipc/commands.js.map +1 -1
  291. package/dist/ipc/types.d.ts +2 -0
  292. package/dist/ipc/types.d.ts.map +1 -1
  293. package/dist/session/BdgSession.d.ts +91 -0
  294. package/dist/session/BdgSession.d.ts.map +1 -0
  295. package/dist/session/BdgSession.js +230 -0
  296. package/dist/session/BdgSession.js.map +1 -0
  297. package/dist/session/cleanup.d.ts.map +1 -1
  298. package/dist/session/cleanup.js +67 -65
  299. package/dist/session/cleanup.js.map +1 -1
  300. package/dist/session/fileOps.d.ts +25 -0
  301. package/dist/session/fileOps.d.ts.map +1 -0
  302. package/dist/session/fileOps.js +39 -0
  303. package/dist/session/fileOps.js.map +1 -0
  304. package/dist/session/metadata.js +2 -2
  305. package/dist/session/metadata.js.map +1 -1
  306. package/dist/session/paths.d.ts +2 -7
  307. package/dist/session/paths.d.ts.map +1 -1
  308. package/dist/session/paths.js +8 -8
  309. package/dist/session/paths.js.map +1 -1
  310. package/dist/session/queryCache.js +1 -1
  311. package/dist/session/queryCache.js.map +1 -1
  312. package/dist/telemetry/__tests__/filters.unit.test.d.ts +2 -0
  313. package/dist/telemetry/__tests__/filters.unit.test.d.ts.map +1 -0
  314. package/dist/telemetry/__tests__/filters.unit.test.js +239 -0
  315. package/dist/telemetry/__tests__/filters.unit.test.js.map +1 -0
  316. package/dist/telemetry/console.d.ts +1 -1
  317. package/dist/telemetry/console.d.ts.map +1 -1
  318. package/dist/telemetry/console.js +5 -3
  319. package/dist/telemetry/console.js.map +1 -1
  320. package/dist/telemetry/dialogs.d.ts +27 -0
  321. package/dist/telemetry/dialogs.d.ts.map +1 -0
  322. package/dist/telemetry/dialogs.js +51 -0
  323. package/dist/telemetry/dialogs.js.map +1 -0
  324. package/dist/telemetry/filters.d.ts +148 -0
  325. package/dist/telemetry/filters.d.ts.map +1 -0
  326. package/dist/telemetry/filters.js +358 -0
  327. package/dist/telemetry/filters.js.map +1 -0
  328. package/dist/telemetry/navigation.d.ts +49 -0
  329. package/dist/telemetry/navigation.d.ts.map +1 -0
  330. package/dist/telemetry/navigation.js +69 -0
  331. package/dist/telemetry/navigation.js.map +1 -0
  332. package/dist/telemetry/network.d.ts +1 -0
  333. package/dist/telemetry/network.d.ts.map +1 -1
  334. package/dist/telemetry/network.js +23 -34
  335. package/dist/telemetry/network.js.map +1 -1
  336. package/dist/types.d.ts +26 -0
  337. package/dist/types.d.ts.map +1 -1
  338. package/dist/ui/errors/CommandError.d.ts +39 -0
  339. package/dist/ui/errors/CommandError.d.ts.map +1 -0
  340. package/dist/ui/errors/CommandError.js +48 -0
  341. package/dist/ui/errors/CommandError.js.map +1 -0
  342. package/dist/ui/errors/SystemErrors.d.ts +22 -0
  343. package/dist/ui/errors/SystemErrors.d.ts.map +1 -0
  344. package/dist/ui/errors/SystemErrors.js +23 -0
  345. package/dist/ui/errors/SystemErrors.js.map +1 -0
  346. package/dist/ui/errors/index.d.ts +9 -0
  347. package/dist/ui/errors/index.d.ts.map +1 -0
  348. package/dist/ui/errors/index.js +12 -0
  349. package/dist/ui/errors/index.js.map +1 -0
  350. package/dist/ui/errors/utils.d.ts +24 -0
  351. package/dist/ui/errors/utils.d.ts.map +1 -0
  352. package/dist/ui/errors/utils.js +28 -0
  353. package/dist/ui/errors/utils.js.map +1 -0
  354. package/dist/ui/errors.d.ts +39 -0
  355. package/dist/ui/errors.d.ts.map +1 -0
  356. package/dist/ui/errors.js +48 -0
  357. package/dist/ui/errors.js.map +1 -0
  358. package/dist/ui/formatters/cookies.d.ts.map +1 -1
  359. package/dist/ui/formatters/cookies.js +18 -21
  360. package/dist/ui/formatters/cookies.js.map +1 -1
  361. package/dist/ui/formatters/details.d.ts.map +1 -1
  362. package/dist/ui/formatters/details.js +34 -36
  363. package/dist/ui/formatters/details.js.map +1 -1
  364. package/dist/ui/formatters/dom.d.ts +135 -0
  365. package/dist/ui/formatters/dom.d.ts.map +1 -0
  366. package/dist/ui/formatters/dom.js +193 -0
  367. package/dist/ui/formatters/dom.js.map +1 -0
  368. package/dist/ui/formatters/index.d.ts +1 -0
  369. package/dist/ui/formatters/index.d.ts.map +1 -1
  370. package/dist/ui/formatters/index.js +1 -0
  371. package/dist/ui/formatters/index.js.map +1 -1
  372. package/dist/ui/formatters/preview.js +43 -38
  373. package/dist/ui/formatters/preview.js.map +1 -1
  374. package/dist/ui/formatters/status.d.ts.map +1 -1
  375. package/dist/ui/formatters/status.js +45 -45
  376. package/dist/ui/formatters/status.js.map +1 -1
  377. package/dist/ui/formatting.d.ts +104 -1
  378. package/dist/ui/formatting.d.ts.map +1 -1
  379. package/dist/ui/formatting.js +138 -2
  380. package/dist/ui/formatting.js.map +1 -1
  381. package/dist/ui/logging/index.d.ts +7 -0
  382. package/dist/ui/logging/index.d.ts.map +1 -0
  383. package/dist/ui/logging/index.js +7 -0
  384. package/dist/ui/logging/index.js.map +1 -0
  385. package/dist/ui/logging/logger.d.ts +98 -0
  386. package/dist/ui/logging/logger.d.ts.map +1 -0
  387. package/dist/ui/logging/logger.js +93 -0
  388. package/dist/ui/logging/logger.js.map +1 -0
  389. package/dist/ui/messages/chrome.d.ts +120 -1
  390. package/dist/ui/messages/chrome.d.ts.map +1 -1
  391. package/dist/ui/messages/chrome.js +168 -0
  392. package/dist/ui/messages/chrome.js.map +1 -1
  393. package/dist/ui/messages/debug.d.ts +4 -2
  394. package/dist/ui/messages/debug.d.ts.map +1 -1
  395. package/dist/ui/messages/debug.js +31 -29
  396. package/dist/ui/messages/debug.js.map +1 -1
  397. package/dist/ui/messages/deprecation.d.ts +30 -0
  398. package/dist/ui/messages/deprecation.d.ts.map +1 -0
  399. package/dist/ui/messages/deprecation.js +49 -0
  400. package/dist/ui/messages/deprecation.js.map +1 -0
  401. package/dist/ui/messages/errors.d.ts +11 -0
  402. package/dist/ui/messages/errors.d.ts.map +1 -1
  403. package/dist/ui/messages/errors.js +13 -0
  404. package/dist/ui/messages/errors.js.map +1 -1
  405. package/dist/ui/messages/preview.d.ts +24 -0
  406. package/dist/ui/messages/preview.d.ts.map +1 -1
  407. package/dist/ui/messages/preview.js +32 -1
  408. package/dist/ui/messages/preview.js.map +1 -1
  409. package/dist/ui/messages/session.d.ts.map +1 -1
  410. package/dist/ui/messages/session.js +21 -7
  411. package/dist/ui/messages/session.js.map +1 -1
  412. package/dist/ui/messages/validation.d.ts +14 -0
  413. package/dist/ui/messages/validation.d.ts.map +1 -1
  414. package/dist/ui/messages/validation.js +16 -0
  415. package/dist/ui/messages/validation.js.map +1 -1
  416. package/dist/utils/__tests__/session.contract.test.js +15 -1
  417. package/dist/utils/__tests__/session.contract.test.js.map +1 -1
  418. package/dist/utils/filters.d.ts +40 -0
  419. package/dist/utils/filters.d.ts.map +1 -1
  420. package/dist/utils/filters.js +55 -1
  421. package/dist/utils/filters.js.map +1 -1
  422. package/dist/utils/pageReadiness.d.ts +9 -14
  423. package/dist/utils/pageReadiness.d.ts.map +1 -1
  424. package/dist/utils/pageReadiness.js +40 -41
  425. package/dist/utils/pageReadiness.js.map +1 -1
  426. package/dist/utils/session.d.ts +200 -0
  427. package/dist/utils/session.d.ts.map +1 -0
  428. package/dist/utils/session.js +498 -0
  429. package/dist/utils/session.js.map +1 -0
  430. package/dist/utils/url.d.ts +58 -6
  431. package/dist/utils/url.d.ts.map +1 -1
  432. package/dist/utils/url.js +137 -20
  433. package/dist/utils/url.js.map +1 -1
  434. package/dist/utils/validation.d.ts +12 -0
  435. package/dist/utils/validation.d.ts.map +1 -0
  436. package/dist/utils/validation.js +20 -0
  437. package/dist/utils/validation.js.map +1 -0
  438. package/package.json +3 -5
  439. package/dist/cli/commands/__tests__/cdp.contract.test.d.ts +0 -24
  440. package/dist/cli/commands/__tests__/cdp.contract.test.d.ts.map +0 -1
  441. package/dist/cli/commands/__tests__/cdp.contract.test.js +0 -467
  442. package/dist/cli/commands/__tests__/cdp.contract.test.js.map +0 -1
  443. package/dist/cli/commands/cdp.d.ts +0 -8
  444. package/dist/cli/commands/cdp.d.ts.map +0 -1
  445. package/dist/cli/commands/cdp.js +0 -45
  446. package/dist/cli/commands/cdp.js.map +0 -1
  447. package/dist/cli/commands/console.d.ts +0 -8
  448. package/dist/cli/commands/console.d.ts.map +0 -1
  449. package/dist/cli/commands/console.js +0 -97
  450. package/dist/cli/commands/console.js.map +0 -1
  451. package/dist/cli/commands/dom/helpers/domCache.d.ts +0 -36
  452. package/dist/cli/commands/dom/helpers/domCache.d.ts.map +0 -1
  453. package/dist/cli/commands/dom/helpers/domCache.js +0 -65
  454. package/dist/cli/commands/dom/helpers/domCache.js.map +0 -1
  455. package/dist/cli/commands/dom/helpers/domQuery.d.ts +0 -48
  456. package/dist/cli/commands/dom/helpers/domQuery.d.ts.map +0 -1
  457. package/dist/cli/commands/dom/helpers/domQuery.js +0 -104
  458. package/dist/cli/commands/dom/helpers/domQuery.js.map +0 -1
  459. package/dist/cli/commands/dom/helpers/errorHandler.d.ts +0 -45
  460. package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +0 -1
  461. package/dist/cli/commands/dom/helpers/errorHandler.js +0 -71
  462. package/dist/cli/commands/dom/helpers/errorHandler.js.map +0 -1
  463. package/dist/cli/commands/dom/helpers/evalHelpers.d.ts +0 -52
  464. package/dist/cli/commands/dom/helpers/evalHelpers.d.ts.map +0 -1
  465. package/dist/cli/commands/dom/helpers/evalHelpers.js +0 -75
  466. package/dist/cli/commands/dom/helpers/evalHelpers.js.map +0 -1
  467. package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts +0 -35
  468. package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts.map +0 -1
  469. package/dist/cli/commands/dom/helpers/optionsBuilder.js +0 -51
  470. package/dist/cli/commands/dom/helpers/optionsBuilder.js.map +0 -1
  471. package/dist/cli/commands/dom/helpers/selectorParser.d.ts +0 -20
  472. package/dist/cli/commands/dom/helpers/selectorParser.d.ts.map +0 -1
  473. package/dist/cli/commands/dom/helpers/selectorParser.js +0 -20
  474. package/dist/cli/commands/dom/helpers/selectorParser.js.map +0 -1
  475. package/dist/cli/commands/dom/index.d.ts +0 -8
  476. package/dist/cli/commands/dom/index.d.ts.map +0 -1
  477. package/dist/cli/commands/dom/index.js +0 -257
  478. package/dist/cli/commands/dom/index.js.map +0 -1
  479. package/dist/cli/commands/dom.d.ts +0 -8
  480. package/dist/cli/commands/dom.d.ts.map +0 -1
  481. package/dist/cli/commands/dom.js +0 -257
  482. package/dist/cli/commands/dom.js.map +0 -1
  483. package/dist/cli/commands/domErrorHandler.d.ts +0 -45
  484. package/dist/cli/commands/domErrorHandler.d.ts.map +0 -1
  485. package/dist/cli/commands/domErrorHandler.js +0 -71
  486. package/dist/cli/commands/domErrorHandler.js.map +0 -1
  487. package/dist/cli/commands/domEvalHelpers.d.ts +0 -52
  488. package/dist/cli/commands/domEvalHelpers.d.ts.map +0 -1
  489. package/dist/cli/commands/domEvalHelpers.js +0 -76
  490. package/dist/cli/commands/domEvalHelpers.js.map +0 -1
  491. package/dist/cli/commands/domOptionsBuilder.d.ts +0 -35
  492. package/dist/cli/commands/domOptionsBuilder.d.ts.map +0 -1
  493. package/dist/cli/commands/domOptionsBuilder.js +0 -51
  494. package/dist/cli/commands/domOptionsBuilder.js.map +0 -1
  495. package/dist/cli/commands/domSelectorParser.d.ts +0 -20
  496. package/dist/cli/commands/domSelectorParser.d.ts.map +0 -1
  497. package/dist/cli/commands/domSelectorParser.js +0 -20
  498. package/dist/cli/commands/domSelectorParser.js.map +0 -1
  499. package/dist/cli/commands/network.d.ts +0 -8
  500. package/dist/cli/commands/network.d.ts.map +0 -1
  501. package/dist/cli/commands/network.js +0 -43
  502. package/dist/cli/commands/network.js.map +0 -1
  503. package/dist/cli/handlers/CommandRunner.d.ts +0 -60
  504. package/dist/cli/handlers/CommandRunner.d.ts.map +0 -1
  505. package/dist/cli/handlers/CommandRunner.js +0 -81
  506. package/dist/cli/handlers/CommandRunner.js.map +0 -1
  507. package/dist/cli/handlers/commonOptions.d.ts +0 -54
  508. package/dist/cli/handlers/commonOptions.d.ts.map +0 -1
  509. package/dist/cli/handlers/commonOptions.js +0 -64
  510. package/dist/cli/handlers/commonOptions.js.map +0 -1
  511. package/dist/cli/handlers/daemonSessionController.d.ts +0 -23
  512. package/dist/cli/handlers/daemonSessionController.d.ts.map +0 -1
  513. package/dist/cli/handlers/daemonSessionController.js +0 -79
  514. package/dist/cli/handlers/daemonSessionController.js.map +0 -1
  515. package/dist/cli/handlers/landingPage.d.ts +0 -8
  516. package/dist/cli/handlers/landingPage.d.ts.map +0 -1
  517. package/dist/cli/handlers/landingPage.js +0 -8
  518. package/dist/cli/handlers/landingPage.js.map +0 -1
  519. package/dist/collectors/__tests__/network.contract.test.d.ts +0 -28
  520. package/dist/collectors/__tests__/network.contract.test.d.ts.map +0 -1
  521. package/dist/collectors/__tests__/network.contract.test.js +0 -540
  522. package/dist/collectors/__tests__/network.contract.test.js.map +0 -1
  523. package/dist/commandRegistry.d.ts +0 -11
  524. package/dist/commandRegistry.d.ts.map +0 -1
  525. package/dist/commandRegistry.js +0 -45
  526. package/dist/commandRegistry.js.map +0 -1
  527. package/dist/commands/domErrorHandler.d.ts +0 -45
  528. package/dist/commands/domErrorHandler.d.ts.map +0 -1
  529. package/dist/commands/domErrorHandler.js +0 -71
  530. package/dist/commands/domErrorHandler.js.map +0 -1
  531. package/dist/dom/cache.d.ts +0 -36
  532. package/dist/dom/cache.d.ts.map +0 -1
  533. package/dist/dom/cache.js +0 -65
  534. package/dist/dom/cache.js.map +0 -1
  535. package/dist/dom/index.d.ts +0 -9
  536. package/dist/dom/index.d.ts.map +0 -1
  537. package/dist/dom/index.js +0 -9
  538. package/dist/dom/index.js.map +0 -1
  539. package/dist/dom/query.d.ts +0 -48
  540. package/dist/dom/query.d.ts.map +0 -1
  541. package/dist/dom/query.js +0 -104
  542. package/dist/dom/query.js.map +0 -1
  543. package/dist/utils/formatters/network.d.ts +0 -23
  544. package/dist/utils/formatters/network.d.ts.map +0 -1
  545. package/dist/utils/formatters/network.js +0 -35
  546. package/dist/utils/formatters/network.js.map +0 -1
  547. package/dist/utils/ui.d.ts +0 -36
  548. package/dist/utils/ui.d.ts.map +0 -1
  549. package/dist/utils/ui.js +0 -47
  550. package/dist/utils/ui.js.map +0 -1
  551. package/dist/utils/url/safeParseUrl.d.ts +0 -63
  552. package/dist/utils/url/safeParseUrl.d.ts.map +0 -1
  553. package/dist/utils/url/safeParseUrl.js +0 -84
  554. package/dist/utils/url/safeParseUrl.js.map +0 -1
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Error handling smoke tests.
3
+ *
4
+ * Tests error paths and user-facing error messages.
5
+ * WHY: Errors are high-risk areas - tests ensure helpful messages and proper exit codes.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=error-handling.smoke.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handling.smoke.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/smoke/error-handling.smoke.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Error handling smoke tests.
3
+ *
4
+ * Tests error paths and user-facing error messages.
5
+ * WHY: Errors are high-risk areas - tests ensure helpful messages and proper exit codes.
6
+ */
7
+ import * as assert from 'node:assert/strict';
8
+ import { describe, it, afterEach } from 'node:test';
9
+ import { runCommand } from '../../__testutils__/commandRunner.js';
10
+ import { cleanupAllSessions, isDaemonRunning, killDaemon, waitForDaemon, } from '../../__testutils__/daemonHelpers.js';
11
+ import { EXIT_CODES } from '../../utils/exitCodes.js';
12
+ void describe('Error Handling Smoke Tests', () => {
13
+ afterEach(async () => {
14
+ // Cleanup after each test (no beforeEach needed if this works properly)
15
+ await cleanupAllSessions();
16
+ });
17
+ void it('should fail with helpful message when daemon not running', async () => {
18
+ // Try to peek without daemon running
19
+ // Note: peek auto-starts daemon, so it returns 83 after starting daemon
20
+ const result = await runCommand('peek', [], { timeout: 5000 });
21
+ // Should fail with resource not found (no session)
22
+ assert.equal(result.exitCode, EXIT_CODES.RESOURCE_NOT_FOUND);
23
+ // Should provide helpful error message about no session
24
+ assert.ok(/no.*session|session.*not.*found/i.test(result.stderr));
25
+ });
26
+ void it('should fail with helpful message when trying to stop without session', async () => {
27
+ // Try to stop without session
28
+ const result = await runCommand('stop', [], { timeout: 5000 });
29
+ // Should fail
30
+ assert.notEqual(result.exitCode, 0);
31
+ // Should provide helpful error message
32
+ assert.ok(result.stderr.includes('daemon'));
33
+ });
34
+ void it('should handle invalid URL gracefully', async () => {
35
+ // Note: URL validation is permissive - "not-a-valid-url" becomes "http://not-a-valid-url/"
36
+ // This test verifies error handling, not URL validation
37
+ const result = await runCommand('http://example.com', ['--port', '9229', '--headless'], {
38
+ timeout: 10000,
39
+ });
40
+ // Should succeed (URL is valid, session starts)
41
+ assert.equal(result.exitCode, 0);
42
+ // Should provide session started message
43
+ assert.ok(/session started|target:/i.test(result.stderr));
44
+ });
45
+ void it('should handle daemon crash during session', async () => {
46
+ // Start session with unique port
47
+ await runCommand('http://example.com', ['--port', '9230', '--headless'], { timeout: 10000 });
48
+ await waitForDaemon(5000);
49
+ // Kill daemon forcefully (simulate crash)
50
+ await killDaemon('SIGKILL');
51
+ // Wait for process to fully die
52
+ await new Promise((resolve) => setTimeout(resolve, 1000));
53
+ // Try to peek (should fail)
54
+ const peekResult = await runCommand('peek', [], { timeout: 5000 });
55
+ // Should fail
56
+ assert.notEqual(peekResult.exitCode, 0);
57
+ // Should provide helpful error message
58
+ assert.ok(peekResult.stderr.includes('daemon'));
59
+ // Daemon should not be running
60
+ assert.equal(isDaemonRunning(), false);
61
+ });
62
+ void it('should provide helpful error when Chrome fails to launch', async () => {
63
+ // Try to start with invalid Chrome path and unique port
64
+ const result = await runCommand('http://example.com', ['--port', '9231', '--headless'], {
65
+ timeout: 10000,
66
+ env: {
67
+ CHROME_PATH: '/nonexistent/chrome',
68
+ },
69
+ });
70
+ // Should fail (exit code 104 is acceptable for worker errors)
71
+ assert.notEqual(result.exitCode, 0);
72
+ // Should provide helpful error message mentioning Chrome
73
+ assert.ok(/chrome|browser|launch|binary/i.test(result.stderr));
74
+ });
75
+ void it('should cleanup stale sessions automatically', async () => {
76
+ // Start session with unique port
77
+ await runCommand('http://example.com', ['--port', '9232', '--headless'], { timeout: 10000 });
78
+ await waitForDaemon(5000);
79
+ // Kill daemon without cleanup (simulate crash)
80
+ await killDaemon('SIGKILL');
81
+ // Kill Chrome on port 9232 (simulating what happens when daemon crashes)
82
+ try {
83
+ const { execSync } = await import('child_process');
84
+ execSync(`lsof -ti:9232 | xargs kill -9 2>/dev/null || true`, { stdio: 'ignore' });
85
+ }
86
+ catch {
87
+ // Ignore errors if no process on port
88
+ }
89
+ // Wait for processes to fully die and port to be released
90
+ await new Promise((resolve) => setTimeout(resolve, 2000));
91
+ // Try to start new session (should cleanup stale and succeed)
92
+ const result = await runCommand('http://example.com', ['--port', '9232', '--headless'], {
93
+ timeout: 10000,
94
+ });
95
+ // Should succeed after cleanup
96
+ if (result.exitCode !== 0) {
97
+ console.error('Exit code:', result.exitCode);
98
+ console.error('Stderr:', result.stderr);
99
+ console.error('Stdout:', result.stdout);
100
+ }
101
+ assert.equal(result.exitCode, 0);
102
+ // New daemon should be running
103
+ assert.equal(isDaemonRunning(), true);
104
+ });
105
+ });
106
+ //# sourceMappingURL=error-handling.smoke.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handling.smoke.test.js","sourceRoot":"","sources":["../../../src/__tests__/smoke/error-handling.smoke.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Session lifecycle smoke tests.
3
+ *
4
+ * Tests the complete user flow: start → collect data → stop → verify output.
5
+ * WHY: Highest-risk path with 0% coverage despite being critical user flow.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=session-lifecycle.smoke.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-lifecycle.smoke.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/smoke/session-lifecycle.smoke.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Session lifecycle smoke tests.
3
+ *
4
+ * Tests the complete user flow: start → collect data → stop → verify output.
5
+ * WHY: Highest-risk path with 0% coverage despite being critical user flow.
6
+ */
7
+ import * as assert from 'node:assert/strict';
8
+ import { describe, it, afterEach } from 'node:test';
9
+ import { runCommand, runCommandJSON } from '../../__testutils__/commandRunner.js';
10
+ import { cleanupAllSessions, isDaemonRunning, isSessionActive, readSessionOutput, waitForDaemon, } from '../../__testutils__/daemonHelpers.js';
11
+ void describe('Session Lifecycle Smoke Tests', () => {
12
+ afterEach(async () => {
13
+ // Cleanup after each test (no beforeEach needed if this works properly)
14
+ await cleanupAllSessions();
15
+ });
16
+ void it('should start session and create daemon', async () => {
17
+ // Start session with a simple URL using a unique port to avoid conflicts
18
+ const result = await runCommand('http://example.com', ['--port', '9223', '--headless'], {
19
+ timeout: 10000,
20
+ });
21
+ // Should succeed
22
+ assert.equal(result.exitCode, 0);
23
+ // Daemon should be running
24
+ assert.equal(isDaemonRunning(), true);
25
+ // Session should be active
26
+ assert.equal(isSessionActive(), true);
27
+ });
28
+ void it('should collect data during session', async () => {
29
+ // Start session with unique port
30
+ const startResult = await runCommand('http://example.com', ['--port', '9224', '--headless'], {
31
+ timeout: 10000,
32
+ });
33
+ assert.equal(startResult.exitCode, 0, `Session start failed: ${startResult.stderr}`);
34
+ // Wait for daemon to be ready
35
+ await waitForDaemon(5000);
36
+ // Give Chrome time to navigate and collect some data
37
+ await new Promise((resolve) => setTimeout(resolve, 2000));
38
+ // Peek at collected data
39
+ const peekResult = await runCommandJSON('peek', [
40
+ '--json',
41
+ ]);
42
+ // Should have collected some data
43
+ assert.ok(peekResult);
44
+ assert.ok(typeof peekResult === 'object');
45
+ assert.ok('preview' in peekResult);
46
+ assert.ok('data' in peekResult.preview);
47
+ // Stop session to clean up
48
+ const stopResult = await runCommand('stop', [], { timeout: 10000 });
49
+ assert.equal(stopResult.exitCode, 0, `Stop failed: ${stopResult.stderr}`);
50
+ });
51
+ void it('should write output on stop', async () => {
52
+ // Start session with unique port
53
+ const startResult = await runCommand('http://example.com', ['--port', '9225', '--headless'], {
54
+ timeout: 10000,
55
+ });
56
+ assert.equal(startResult.exitCode, 0, `Session start failed: ${startResult.stderr}`);
57
+ await waitForDaemon(5000);
58
+ // Give Chrome time to collect data
59
+ await new Promise((resolve) => setTimeout(resolve, 2000));
60
+ // Stop session
61
+ const stopResult = await runCommand('stop', [], { timeout: 10000 });
62
+ // Should succeed
63
+ assert.equal(stopResult.exitCode, 0, `Stop failed: ${stopResult.stderr}`);
64
+ // Give filesystem time to write the file (increased for test stability)
65
+ await new Promise((resolve) => setTimeout(resolve, 2000));
66
+ // Output file should exist
67
+ const output = readSessionOutput();
68
+ assert.ok(output, 'Session output file should exist after stop');
69
+ assert.ok(typeof output === 'object');
70
+ // Output should have expected structure
71
+ assert.ok('version' in output);
72
+ assert.ok('success' in output);
73
+ assert.equal(output.success, true);
74
+ assert.ok('timestamp' in output);
75
+ assert.ok('data' in output);
76
+ assert.ok('target' in output);
77
+ });
78
+ void it('should cleanup daemon on stop', async () => {
79
+ // Start session with unique port
80
+ await runCommand('http://example.com', ['--port', '9226', '--headless'], { timeout: 10000 });
81
+ await waitForDaemon(5000);
82
+ // Stop session
83
+ await runCommand('stop', [], { timeout: 10000 });
84
+ // Wait for cleanup
85
+ await new Promise((resolve) => setTimeout(resolve, 1000));
86
+ // Daemon should no longer be running
87
+ assert.equal(isDaemonRunning(), false);
88
+ // Session should no longer be active
89
+ assert.equal(isSessionActive(), false);
90
+ });
91
+ void it('should handle concurrent session attempts gracefully', async () => {
92
+ // Start first session with unique port
93
+ const firstResult = await runCommand('http://example.com', ['--port', '9227', '--headless'], {
94
+ timeout: 10000,
95
+ });
96
+ assert.equal(firstResult.exitCode, 0, `First session start failed: ${firstResult.stderr}`);
97
+ await waitForDaemon(5000);
98
+ // Try to start second session (should fail)
99
+ const secondResult = await runCommand('http://another.com', ['--port', '9228', '--headless'], {
100
+ timeout: 10000,
101
+ });
102
+ // Should fail with daemon already running error
103
+ assert.notEqual(secondResult.exitCode, 0);
104
+ assert.ok(secondResult.stderr.includes('daemon') || secondResult.stderr.includes('already'), `Expected error about daemon, got: ${secondResult.stderr}`);
105
+ // First session should still be running
106
+ assert.equal(isDaemonRunning(), true);
107
+ });
108
+ });
109
+ //# sourceMappingURL=session-lifecycle.smoke.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-lifecycle.smoke.test.js","sourceRoot":"","sources":["../../../src/__tests__/smoke/session-lifecycle.smoke.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Command runner for smoke tests.
3
+ *
4
+ * Executes bdg CLI commands in a subprocess and captures output.
5
+ * WHY: Enables end-to-end testing of CLI commands without mocking.
6
+ */
7
+ export interface CommandResult {
8
+ exitCode: number;
9
+ stdout: string;
10
+ stderr: string;
11
+ error?: Error;
12
+ }
13
+ /**
14
+ * Run a bdg CLI command in a subprocess.
15
+ *
16
+ * @param command - Command name (e.g., 'start', 'stop', 'peek')
17
+ * @param args - Command arguments
18
+ * @param options - Execution options
19
+ * @returns Promise resolving to command result
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const result = await runCommand('start', ['http://localhost:3000']);
24
+ * assert.equal(result.exitCode, 0);
25
+ * ```
26
+ */
27
+ export declare function runCommand(command: string, args?: string[], options?: {
28
+ timeout?: number;
29
+ env?: Record<string, string>;
30
+ }): Promise<CommandResult>;
31
+ /**
32
+ * Run command and parse JSON output from stdout.
33
+ *
34
+ * @param command - Command name
35
+ * @param args - Command arguments
36
+ * @returns Parsed JSON output
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * const data = await runCommandJSON('peek');
41
+ * assert.ok(data.data.network.length > 0);
42
+ * ```
43
+ */
44
+ export declare function runCommandJSON<T = unknown>(command: string, args?: string[]): Promise<T>;
45
+ //# sourceMappingURL=commandRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandRunner.d.ts","sourceRoot":"","sources":["../../src/__testutils__/commandRunner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzB,GACL,OAAO,CAAC,aAAa,CAAC,CAiExB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,GAClB,OAAO,CAAC,CAAC,CAAC,CAYZ"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Command runner for smoke tests.
3
+ *
4
+ * Executes bdg CLI commands in a subprocess and captures output.
5
+ * WHY: Enables end-to-end testing of CLI commands without mocking.
6
+ */
7
+ import { spawn } from 'child_process';
8
+ import * as path from 'path';
9
+ import { fileURLToPath } from 'url';
10
+ import { ensureTestSessionDir, getTestHomeDir } from './testHome.js';
11
+ /**
12
+ * Run a bdg CLI command in a subprocess.
13
+ *
14
+ * @param command - Command name (e.g., 'start', 'stop', 'peek')
15
+ * @param args - Command arguments
16
+ * @param options - Execution options
17
+ * @returns Promise resolving to command result
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const result = await runCommand('start', ['http://localhost:3000']);
22
+ * assert.equal(result.exitCode, 0);
23
+ * ```
24
+ */
25
+ export async function runCommand(command, args = [], options = {}) {
26
+ const { timeout = 30000, env = {} } = options;
27
+ // Path to compiled CLI entry point (ESM module compatibility)
28
+ const currentFileDir = path.dirname(fileURLToPath(import.meta.url));
29
+ const cliPath = path.resolve(currentFileDir, '../../dist/index.js');
30
+ const testSessionDir = ensureTestSessionDir();
31
+ const testHomeDir = getTestHomeDir();
32
+ return new Promise((resolve) => {
33
+ let stdout = '';
34
+ let stderr = '';
35
+ let timedOut = false;
36
+ const child = spawn('node', [cliPath, command, ...args], {
37
+ env: {
38
+ ...process.env,
39
+ BDG_SESSION_DIR: testSessionDir,
40
+ HOME: testHomeDir,
41
+ ...env,
42
+ },
43
+ stdio: ['ignore', 'pipe', 'pipe'],
44
+ });
45
+ const timeoutId = setTimeout(() => {
46
+ timedOut = true;
47
+ child.kill('SIGKILL');
48
+ }, timeout);
49
+ child.stdout?.on('data', (chunk) => {
50
+ stdout += chunk.toString();
51
+ });
52
+ child.stderr?.on('data', (chunk) => {
53
+ stderr += chunk.toString();
54
+ });
55
+ child.on('error', (error) => {
56
+ clearTimeout(timeoutId);
57
+ resolve({
58
+ exitCode: 1,
59
+ stdout,
60
+ stderr,
61
+ error,
62
+ });
63
+ });
64
+ child.on('close', (code) => {
65
+ clearTimeout(timeoutId);
66
+ if (timedOut) {
67
+ resolve({
68
+ exitCode: 124, // Timeout exit code
69
+ stdout,
70
+ stderr: stderr + '\nCommand timed out',
71
+ });
72
+ }
73
+ else {
74
+ resolve({
75
+ exitCode: code ?? 1,
76
+ stdout,
77
+ stderr,
78
+ });
79
+ }
80
+ });
81
+ });
82
+ }
83
+ /**
84
+ * Run command and parse JSON output from stdout.
85
+ *
86
+ * @param command - Command name
87
+ * @param args - Command arguments
88
+ * @returns Parsed JSON output
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * const data = await runCommandJSON('peek');
93
+ * assert.ok(data.data.network.length > 0);
94
+ * ```
95
+ */
96
+ export async function runCommandJSON(command, args = []) {
97
+ const result = await runCommand(command, args);
98
+ if (result.exitCode !== 0) {
99
+ throw new Error(`Command failed: ${result.stderr}`);
100
+ }
101
+ try {
102
+ return JSON.parse(result.stdout);
103
+ }
104
+ catch {
105
+ throw new Error(`Failed to parse JSON: ${result.stdout}`);
106
+ }
107
+ }
108
+ //# sourceMappingURL=commandRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandRunner.js","sourceRoot":"","sources":["../../src/__testutils__/commandRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Daemon helper utilities for smoke tests.
3
+ *
4
+ * Provides functions to check daemon status and manage session state.
5
+ * WHY: Enables testing daemon lifecycle without exposing internals.
6
+ */
7
+ /**
8
+ * Check if daemon is currently running.
9
+ *
10
+ * @returns True if daemon process is alive
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * await runCommand('http://localhost:3000', []);
15
+ * assert.ok(await isDaemonRunning());
16
+ * ```
17
+ */
18
+ export declare function isDaemonRunning(): boolean;
19
+ /**
20
+ * Check if session is currently active.
21
+ *
22
+ * @returns True if session process is alive
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * await runCommand('http://localhost:3000', []);
27
+ * assert.ok(await isSessionActive());
28
+ * ```
29
+ */
30
+ export declare function isSessionActive(): boolean;
31
+ /**
32
+ * Kill daemon process forcefully.
33
+ *
34
+ * @param signal - Kill signal (default: SIGTERM)
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * await killDaemon('SIGKILL'); // Simulate crash
39
+ * ```
40
+ */
41
+ export declare function killDaemon(signal?: NodeJS.Signals): Promise<void>;
42
+ /**
43
+ * Clean up all session files forcefully.
44
+ *
45
+ * WHY: Ensures clean state between tests.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * afterEach(async () => {
50
+ * await cleanupAllSessions();
51
+ * });
52
+ * ```
53
+ */
54
+ export declare function cleanupAllSessions(): Promise<void>;
55
+ /**
56
+ * Read session output file.
57
+ *
58
+ * @returns Parsed session output or null if not exists
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * await runCommand('stop', []);
63
+ * const output = readSessionOutput();
64
+ * assert.equal(output.success, true);
65
+ * ```
66
+ */
67
+ export declare function readSessionOutput(): unknown;
68
+ /**
69
+ * Wait for daemon to start (with timeout).
70
+ *
71
+ * @param timeoutMs - Timeout in milliseconds (default: 5000)
72
+ * @returns True if daemon started, false if timeout
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * runCommand('start', ['http://localhost:3000']); // Don't await
77
+ * assert.ok(await waitForDaemon(5000));
78
+ * ```
79
+ */
80
+ export declare function waitForDaemon(timeoutMs?: number): Promise<boolean>;
81
+ //# sourceMappingURL=daemonHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemonHelpers.d.ts","sourceRoot":"","sources":["../../src/__testutils__/daemonHelpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAmBzC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAYzC;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAAC,MAAM,GAAE,MAAM,CAAC,OAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BlF;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiDxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAW9E"}