browser-debugger-cli 0.3.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 (484) hide show
  1. package/README.md +137 -126
  2. package/dist/__tests__/smoke/error-handling.smoke.test.d.ts +8 -0
  3. package/dist/__tests__/smoke/error-handling.smoke.test.d.ts.map +1 -0
  4. package/dist/__tests__/smoke/error-handling.smoke.test.js +106 -0
  5. package/dist/__tests__/smoke/error-handling.smoke.test.js.map +1 -0
  6. package/dist/__tests__/smoke/session-lifecycle.smoke.test.d.ts +8 -0
  7. package/dist/__tests__/smoke/session-lifecycle.smoke.test.d.ts.map +1 -0
  8. package/dist/__tests__/smoke/session-lifecycle.smoke.test.js +109 -0
  9. package/dist/__tests__/smoke/session-lifecycle.smoke.test.js.map +1 -0
  10. package/dist/__testutils__/commandRunner.d.ts +45 -0
  11. package/dist/__testutils__/commandRunner.d.ts.map +1 -0
  12. package/dist/__testutils__/commandRunner.js +108 -0
  13. package/dist/__testutils__/commandRunner.js.map +1 -0
  14. package/dist/__testutils__/daemonHelpers.d.ts +81 -0
  15. package/dist/__testutils__/daemonHelpers.d.ts.map +1 -0
  16. package/dist/__testutils__/daemonHelpers.js +206 -0
  17. package/dist/__testutils__/daemonHelpers.js.map +1 -0
  18. package/dist/__testutils__/index.d.ts +1 -0
  19. package/dist/__testutils__/index.d.ts.map +1 -1
  20. package/dist/__testutils__/index.js +1 -0
  21. package/dist/__testutils__/index.js.map +1 -1
  22. package/dist/__testutils__/testCleanup.d.ts +45 -0
  23. package/dist/__testutils__/testCleanup.d.ts.map +1 -0
  24. package/dist/__testutils__/testCleanup.js +87 -0
  25. package/dist/__testutils__/testCleanup.js.map +1 -0
  26. package/dist/__testutils__/testHome.d.ts +26 -0
  27. package/dist/__testutils__/testHome.d.ts.map +1 -0
  28. package/dist/__testutils__/testHome.js +57 -0
  29. package/dist/__testutils__/testHome.js.map +1 -0
  30. package/dist/__testutils__/testProcess.d.ts.map +1 -1
  31. package/dist/__testutils__/testProcess.js +11 -3
  32. package/dist/__testutils__/testProcess.js.map +1 -1
  33. package/dist/cli/commands/__tests__/start.unit.test.d.ts +2 -0
  34. package/dist/cli/commands/__tests__/start.unit.test.d.ts.map +1 -0
  35. package/dist/cli/commands/__tests__/start.unit.test.js +131 -0
  36. package/dist/cli/commands/__tests__/start.unit.test.js.map +1 -0
  37. package/dist/cli/commands/cleanup.d.ts +1 -0
  38. package/dist/cli/commands/cleanup.d.ts.map +1 -1
  39. package/dist/cli/commands/cleanup.js +80 -61
  40. package/dist/cli/commands/cleanup.js.map +1 -1
  41. package/dist/cli/commands/details.d.ts +2 -1
  42. package/dist/cli/commands/details.d.ts.map +1 -1
  43. package/dist/cli/commands/details.js +104 -52
  44. package/dist/cli/commands/details.js.map +1 -1
  45. package/dist/cli/commands/peek.d.ts +2 -1
  46. package/dist/cli/commands/peek.d.ts.map +1 -1
  47. package/dist/cli/commands/peek.js +22 -67
  48. package/dist/cli/commands/peek.js.map +1 -1
  49. package/dist/cli/commands/query.d.ts +9 -0
  50. package/dist/cli/commands/query.d.ts.map +1 -0
  51. package/dist/cli/commands/query.js +125 -0
  52. package/dist/cli/commands/query.js.map +1 -0
  53. package/dist/cli/commands/start.d.ts +74 -0
  54. package/dist/cli/commands/start.d.ts.map +1 -1
  55. package/dist/cli/commands/start.js +147 -38
  56. package/dist/cli/commands/start.js.map +1 -1
  57. package/dist/cli/commands/status.d.ts.map +1 -1
  58. package/dist/cli/commands/status.js +37 -49
  59. package/dist/cli/commands/status.js.map +1 -1
  60. package/dist/cli/commands/stop.d.ts +1 -0
  61. package/dist/cli/commands/stop.d.ts.map +1 -1
  62. package/dist/cli/commands/stop.js +106 -120
  63. package/dist/cli/commands/stop.js.map +1 -1
  64. package/dist/cli/formatters/detailsFormatter.d.ts +1 -1
  65. package/dist/cli/formatters/previewFormatter.d.ts +7 -7
  66. package/dist/cli/formatters/previewFormatter.d.ts.map +1 -1
  67. package/dist/cli/formatters/previewFormatter.js +5 -10
  68. package/dist/cli/formatters/previewFormatter.js.map +1 -1
  69. package/dist/cli/formatters/statusFormatter.d.ts +13 -10
  70. package/dist/cli/formatters/statusFormatter.d.ts.map +1 -1
  71. package/dist/cli/formatters/statusFormatter.js +26 -53
  72. package/dist/cli/formatters/statusFormatter.js.map +1 -1
  73. package/dist/cli/handlers/ChromeBootstrap.d.ts +24 -0
  74. package/dist/cli/handlers/ChromeBootstrap.d.ts.map +1 -0
  75. package/dist/cli/handlers/ChromeBootstrap.js +50 -0
  76. package/dist/cli/handlers/ChromeBootstrap.js.map +1 -0
  77. package/dist/cli/handlers/OutputBuilder.d.ts +2 -3
  78. package/dist/cli/handlers/OutputBuilder.d.ts.map +1 -1
  79. package/dist/cli/handlers/OutputBuilder.js +2 -4
  80. package/dist/cli/handlers/OutputBuilder.js.map +1 -1
  81. package/dist/cli/handlers/OutputWriter.d.ts +15 -0
  82. package/dist/cli/handlers/OutputWriter.d.ts.map +1 -0
  83. package/dist/cli/handlers/OutputWriter.js +34 -0
  84. package/dist/cli/handlers/OutputWriter.js.map +1 -0
  85. package/dist/cli/handlers/PreviewWriter.d.ts +52 -0
  86. package/dist/cli/handlers/PreviewWriter.d.ts.map +1 -0
  87. package/dist/cli/handlers/PreviewWriter.js +118 -0
  88. package/dist/cli/handlers/PreviewWriter.js.map +1 -0
  89. package/dist/cli/handlers/SessionLock.d.ts +16 -0
  90. package/dist/cli/handlers/SessionLock.d.ts.map +1 -0
  91. package/dist/cli/handlers/SessionLock.js +35 -0
  92. package/dist/cli/handlers/SessionLock.js.map +1 -0
  93. package/dist/cli/handlers/SessionLoop.d.ts +19 -0
  94. package/dist/cli/handlers/SessionLoop.d.ts.map +1 -0
  95. package/dist/cli/handlers/SessionLoop.js +47 -0
  96. package/dist/cli/handlers/SessionLoop.js.map +1 -0
  97. package/dist/cli/handlers/ShutdownController.d.ts +41 -0
  98. package/dist/cli/handlers/ShutdownController.d.ts.map +1 -0
  99. package/dist/cli/handlers/ShutdownController.js +94 -0
  100. package/dist/cli/handlers/ShutdownController.js.map +1 -0
  101. package/dist/cli/handlers/SignalHandler.d.ts +35 -0
  102. package/dist/cli/handlers/SignalHandler.d.ts.map +1 -0
  103. package/dist/cli/handlers/SignalHandler.js +81 -0
  104. package/dist/cli/handlers/SignalHandler.js.map +1 -0
  105. package/dist/cli/handlers/TargetSetup.d.ts +42 -0
  106. package/dist/cli/handlers/TargetSetup.d.ts.map +1 -0
  107. package/dist/cli/handlers/TargetSetup.js +87 -0
  108. package/dist/cli/handlers/TargetSetup.js.map +1 -0
  109. package/dist/cli/handlers/sessionController.d.ts +41 -0
  110. package/dist/cli/handlers/sessionController.d.ts.map +1 -1
  111. package/dist/cli/handlers/sessionController.js +266 -5
  112. package/dist/cli/handlers/sessionController.js.map +1 -1
  113. package/dist/cli/registry.d.ts +2 -2
  114. package/dist/cli/registry.d.ts.map +1 -1
  115. package/dist/cli/registry.js +12 -37
  116. package/dist/cli/registry.js.map +1 -1
  117. package/dist/collectors/console.d.ts +1 -1
  118. package/dist/collectors/console.js +2 -2
  119. package/dist/collectors/console.js.map +1 -1
  120. package/dist/collectors/dom.d.ts +1 -1
  121. package/dist/collectors/network.d.ts +1 -2
  122. package/dist/collectors/network.d.ts.map +1 -1
  123. package/dist/collectors/network.js +3 -3
  124. package/dist/collectors/network.js.map +1 -1
  125. package/dist/commands/cdp.js +1 -1
  126. package/dist/commands/cdp.js.map +1 -1
  127. package/dist/commands/cleanup.d.ts.map +1 -1
  128. package/dist/commands/cleanup.js +12 -15
  129. package/dist/commands/cleanup.js.map +1 -1
  130. package/dist/commands/dom.d.ts.map +1 -1
  131. package/dist/commands/dom.js +13 -19
  132. package/dist/commands/dom.js.map +1 -1
  133. package/dist/commands/domEvalHelpers.d.ts +1 -1
  134. package/dist/commands/domEvalHelpers.d.ts.map +1 -1
  135. package/dist/commands/domEvalHelpers.js +56 -7
  136. package/dist/commands/domEvalHelpers.js.map +1 -1
  137. package/dist/commands/domOptionsBuilder.d.ts +32 -0
  138. package/dist/commands/domOptionsBuilder.d.ts.map +1 -1
  139. package/dist/commands/domOptionsBuilder.js +35 -0
  140. package/dist/commands/domOptionsBuilder.js.map +1 -1
  141. package/dist/commands/machineReadableHelp.d.ts +98 -0
  142. package/dist/commands/machineReadableHelp.d.ts.map +1 -0
  143. package/dist/commands/machineReadableHelp.js +137 -0
  144. package/dist/commands/machineReadableHelp.js.map +1 -0
  145. package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
  146. package/dist/commands/shared/CommandRunner.js +2 -3
  147. package/dist/commands/shared/CommandRunner.js.map +1 -1
  148. package/dist/commands/shared/OutputBuilder.js +1 -1
  149. package/dist/commands/shared/OutputBuilder.js.map +1 -1
  150. package/dist/commands/shared/commonOptions.d.ts.map +1 -1
  151. package/dist/commands/shared/commonOptions.js +9 -3
  152. package/dist/commands/shared/commonOptions.js.map +1 -1
  153. package/dist/commands/shared/daemonSessionController.d.ts +2 -0
  154. package/dist/commands/shared/daemonSessionController.d.ts.map +1 -1
  155. package/dist/commands/shared/daemonSessionController.js +13 -16
  156. package/dist/commands/shared/daemonSessionController.js.map +1 -1
  157. package/dist/commands/shared/sessionController.js +1 -1
  158. package/dist/commands/shared/sessionController.js.map +1 -1
  159. package/dist/commands/start.d.ts.map +1 -1
  160. package/dist/commands/start.js +16 -1
  161. package/dist/commands/start.js.map +1 -1
  162. package/dist/commands/status.d.ts.map +1 -1
  163. package/dist/commands/status.js +72 -55
  164. package/dist/commands/status.js.map +1 -1
  165. package/dist/commands/stop.d.ts.map +1 -1
  166. package/dist/commands/stop.js +11 -25
  167. package/dist/commands/stop.js.map +1 -1
  168. package/dist/commands/tail.d.ts +11 -0
  169. package/dist/commands/tail.d.ts.map +1 -0
  170. package/dist/commands/tail.js +114 -0
  171. package/dist/commands/tail.js.map +1 -0
  172. package/dist/commands.d.ts.map +1 -1
  173. package/dist/commands.js +2 -0
  174. package/dist/commands.js.map +1 -1
  175. package/dist/connection/cdp.d.ts +46 -2
  176. package/dist/connection/cdp.d.ts.map +1 -1
  177. package/dist/connection/cdp.js +71 -5
  178. package/dist/connection/cdp.js.map +1 -1
  179. package/dist/connection/diagnostics.d.ts +16 -0
  180. package/dist/connection/diagnostics.d.ts.map +1 -0
  181. package/dist/connection/diagnostics.js +37 -0
  182. package/dist/connection/diagnostics.js.map +1 -0
  183. package/dist/connection/errors.d.ts +74 -0
  184. package/dist/connection/errors.d.ts.map +1 -0
  185. package/dist/connection/errors.js +83 -0
  186. package/dist/connection/errors.js.map +1 -0
  187. package/dist/connection/handlers.d.ts +31 -0
  188. package/dist/connection/handlers.d.ts.map +1 -0
  189. package/dist/connection/handlers.js +38 -0
  190. package/dist/connection/handlers.js.map +1 -0
  191. package/dist/connection/launcher.d.ts +3 -20
  192. package/dist/connection/launcher.d.ts.map +1 -1
  193. package/dist/connection/launcher.js +130 -32
  194. package/dist/connection/launcher.js.map +1 -1
  195. package/dist/connection/pageReadiness.d.ts +46 -0
  196. package/dist/connection/pageReadiness.d.ts.map +1 -0
  197. package/dist/connection/pageReadiness.js +270 -0
  198. package/dist/connection/pageReadiness.js.map +1 -0
  199. package/dist/connection/tabs.d.ts +52 -0
  200. package/dist/connection/tabs.d.ts.map +1 -0
  201. package/dist/connection/tabs.js +227 -0
  202. package/dist/connection/tabs.js.map +1 -0
  203. package/dist/constants.d.ts +20 -40
  204. package/dist/constants.d.ts.map +1 -1
  205. package/dist/constants.js +26 -40
  206. package/dist/constants.js.map +1 -1
  207. package/dist/daemon/ipcServer.d.ts +5 -7
  208. package/dist/daemon/ipcServer.d.ts.map +1 -1
  209. package/dist/daemon/ipcServer.js +178 -143
  210. package/dist/daemon/ipcServer.js.map +1 -1
  211. package/dist/daemon/launcher.js +1 -1
  212. package/dist/daemon/launcher.js.map +1 -1
  213. package/dist/daemon/server/SocketServer.d.ts +22 -0
  214. package/dist/daemon/server/SocketServer.d.ts.map +1 -0
  215. package/dist/daemon/server/SocketServer.js +67 -0
  216. package/dist/daemon/server/SocketServer.js.map +1 -0
  217. package/dist/daemon/server/WorkerManager.d.ts +36 -0
  218. package/dist/daemon/server/WorkerManager.d.ts.map +1 -0
  219. package/dist/daemon/server/WorkerManager.js +98 -0
  220. package/dist/daemon/server/WorkerManager.js.map +1 -0
  221. package/dist/daemon/startSession.d.ts +2 -0
  222. package/dist/daemon/startSession.d.ts.map +1 -1
  223. package/dist/daemon/startSession.js +4 -2
  224. package/dist/daemon/startSession.js.map +1 -1
  225. package/dist/daemon/worker/TelemetryStore.d.ts +18 -0
  226. package/dist/daemon/worker/TelemetryStore.d.ts.map +1 -0
  227. package/dist/daemon/worker/TelemetryStore.js +49 -0
  228. package/dist/daemon/worker/TelemetryStore.js.map +1 -0
  229. package/dist/daemon/worker/collectors.d.ts +8 -0
  230. package/dist/daemon/worker/collectors.d.ts.map +1 -0
  231. package/dist/daemon/worker/collectors.js +19 -0
  232. package/dist/daemon/worker/collectors.js.map +1 -0
  233. package/dist/daemon/worker/commandRegistry.d.ts +10 -0
  234. package/dist/daemon/worker/commandRegistry.d.ts.map +1 -0
  235. package/dist/daemon/worker/commandRegistry.js +289 -0
  236. package/dist/daemon/worker/commandRegistry.js.map +1 -0
  237. package/dist/daemon/worker/plugins.d.ts +21 -0
  238. package/dist/daemon/worker/plugins.d.ts.map +1 -0
  239. package/dist/daemon/worker/plugins.js +71 -0
  240. package/dist/daemon/worker/plugins.js.map +1 -0
  241. package/dist/daemon/worker/types.d.ts +13 -0
  242. package/dist/daemon/worker/types.d.ts.map +1 -0
  243. package/dist/daemon/worker/types.js +2 -0
  244. package/dist/daemon/worker/types.js.map +1 -0
  245. package/dist/daemon/worker.js +206 -529
  246. package/dist/daemon/worker.js.map +1 -1
  247. package/dist/help/machineReadableHelp.d.ts +100 -0
  248. package/dist/help/machineReadableHelp.d.ts.map +1 -0
  249. package/dist/help/machineReadableHelp.js +139 -0
  250. package/dist/help/machineReadableHelp.js.map +1 -0
  251. package/dist/index.js +18 -9
  252. package/dist/index.js.map +1 -1
  253. package/dist/ipc/__tests__/client.contract.test.js +2 -2
  254. package/dist/ipc/__tests__/client.contract.test.js.map +1 -1
  255. package/dist/ipc/client.d.ts +3 -1
  256. package/dist/ipc/client.d.ts.map +1 -1
  257. package/dist/ipc/client.js +27 -14
  258. package/dist/ipc/client.js.map +1 -1
  259. package/dist/ipc/commands.d.ts +1 -0
  260. package/dist/ipc/commands.d.ts.map +1 -1
  261. package/dist/ipc/commands.js.map +1 -1
  262. package/dist/ipc/types.d.ts +2 -0
  263. package/dist/ipc/types.d.ts.map +1 -1
  264. package/dist/session/BdgSession.d.ts +91 -0
  265. package/dist/session/BdgSession.d.ts.map +1 -0
  266. package/dist/session/BdgSession.js +230 -0
  267. package/dist/session/BdgSession.js.map +1 -0
  268. package/dist/session/cleanup.d.ts.map +1 -1
  269. package/dist/session/cleanup.js +67 -65
  270. package/dist/session/cleanup.js.map +1 -1
  271. package/dist/session/fileOps.d.ts +25 -0
  272. package/dist/session/fileOps.d.ts.map +1 -0
  273. package/dist/session/fileOps.js +39 -0
  274. package/dist/session/fileOps.js.map +1 -0
  275. package/dist/session/metadata.js +2 -2
  276. package/dist/session/metadata.js.map +1 -1
  277. package/dist/session/paths.d.ts +2 -7
  278. package/dist/session/paths.d.ts.map +1 -1
  279. package/dist/session/paths.js +8 -8
  280. package/dist/session/paths.js.map +1 -1
  281. package/dist/session/queryCache.js +1 -1
  282. package/dist/session/queryCache.js.map +1 -1
  283. package/dist/telemetry/__tests__/filters.unit.test.d.ts +2 -0
  284. package/dist/telemetry/__tests__/filters.unit.test.d.ts.map +1 -0
  285. package/dist/telemetry/__tests__/filters.unit.test.js +239 -0
  286. package/dist/telemetry/__tests__/filters.unit.test.js.map +1 -0
  287. package/dist/telemetry/console.d.ts +1 -1
  288. package/dist/telemetry/console.d.ts.map +1 -1
  289. package/dist/telemetry/console.js +5 -3
  290. package/dist/telemetry/console.js.map +1 -1
  291. package/dist/telemetry/dialogs.d.ts +27 -0
  292. package/dist/telemetry/dialogs.d.ts.map +1 -0
  293. package/dist/telemetry/dialogs.js +51 -0
  294. package/dist/telemetry/dialogs.js.map +1 -0
  295. package/dist/telemetry/filters.d.ts +148 -0
  296. package/dist/telemetry/filters.d.ts.map +1 -0
  297. package/dist/telemetry/filters.js +358 -0
  298. package/dist/telemetry/filters.js.map +1 -0
  299. package/dist/telemetry/navigation.d.ts +49 -0
  300. package/dist/telemetry/navigation.d.ts.map +1 -0
  301. package/dist/telemetry/navigation.js +69 -0
  302. package/dist/telemetry/navigation.js.map +1 -0
  303. package/dist/telemetry/network.d.ts +1 -0
  304. package/dist/telemetry/network.d.ts.map +1 -1
  305. package/dist/telemetry/network.js +23 -34
  306. package/dist/telemetry/network.js.map +1 -1
  307. package/dist/types.d.ts +2 -0
  308. package/dist/types.d.ts.map +1 -1
  309. package/dist/ui/errors/CommandError.d.ts +39 -0
  310. package/dist/ui/errors/CommandError.d.ts.map +1 -0
  311. package/dist/ui/errors/CommandError.js +48 -0
  312. package/dist/ui/errors/CommandError.js.map +1 -0
  313. package/dist/ui/errors/SystemErrors.d.ts +22 -0
  314. package/dist/ui/errors/SystemErrors.d.ts.map +1 -0
  315. package/dist/ui/errors/SystemErrors.js +23 -0
  316. package/dist/ui/errors/SystemErrors.js.map +1 -0
  317. package/dist/ui/errors/index.d.ts +9 -0
  318. package/dist/ui/errors/index.d.ts.map +1 -0
  319. package/dist/ui/errors/index.js +12 -0
  320. package/dist/ui/errors/index.js.map +1 -0
  321. package/dist/ui/errors/utils.d.ts +24 -0
  322. package/dist/ui/errors/utils.d.ts.map +1 -0
  323. package/dist/ui/errors/utils.js +28 -0
  324. package/dist/ui/errors/utils.js.map +1 -0
  325. package/dist/ui/formatters/status.d.ts.map +1 -1
  326. package/dist/ui/formatters/status.js +1 -1
  327. package/dist/ui/formatters/status.js.map +1 -1
  328. package/dist/ui/logging/index.d.ts +7 -0
  329. package/dist/ui/logging/index.d.ts.map +1 -0
  330. package/dist/ui/logging/index.js +7 -0
  331. package/dist/ui/logging/index.js.map +1 -0
  332. package/dist/ui/logging/logger.d.ts +98 -0
  333. package/dist/ui/logging/logger.d.ts.map +1 -0
  334. package/dist/ui/logging/logger.js +93 -0
  335. package/dist/ui/logging/logger.js.map +1 -0
  336. package/dist/ui/messages/chrome.d.ts +50 -1
  337. package/dist/ui/messages/chrome.d.ts.map +1 -1
  338. package/dist/ui/messages/chrome.js +77 -0
  339. package/dist/ui/messages/chrome.js.map +1 -1
  340. package/dist/ui/messages/deprecation.d.ts +30 -0
  341. package/dist/ui/messages/deprecation.d.ts.map +1 -0
  342. package/dist/ui/messages/deprecation.js +49 -0
  343. package/dist/ui/messages/deprecation.js.map +1 -0
  344. package/dist/ui/messages/preview.js +1 -1
  345. package/dist/ui/messages/preview.js.map +1 -1
  346. package/dist/ui/messages/session.d.ts.map +1 -1
  347. package/dist/ui/messages/session.js +21 -7
  348. package/dist/ui/messages/session.js.map +1 -1
  349. package/dist/utils/__tests__/session.contract.test.js +15 -1
  350. package/dist/utils/__tests__/session.contract.test.js.map +1 -1
  351. package/dist/utils/filters.d.ts +40 -0
  352. package/dist/utils/filters.d.ts.map +1 -1
  353. package/dist/utils/filters.js +54 -0
  354. package/dist/utils/filters.js.map +1 -1
  355. package/dist/utils/pageReadiness.js +24 -25
  356. package/dist/utils/pageReadiness.js.map +1 -1
  357. package/dist/utils/session.d.ts +200 -0
  358. package/dist/utils/session.d.ts.map +1 -0
  359. package/dist/utils/session.js +498 -0
  360. package/dist/utils/session.js.map +1 -0
  361. package/dist/utils/url.d.ts.map +1 -1
  362. package/dist/utils/url.js +10 -0
  363. package/dist/utils/url.js.map +1 -1
  364. package/dist/utils/validation.d.ts +12 -0
  365. package/dist/utils/validation.d.ts.map +1 -0
  366. package/dist/utils/validation.js +20 -0
  367. package/dist/utils/validation.js.map +1 -0
  368. package/package.json +2 -1
  369. package/dist/cli/commands/__tests__/cdp.contract.test.d.ts +0 -24
  370. package/dist/cli/commands/__tests__/cdp.contract.test.d.ts.map +0 -1
  371. package/dist/cli/commands/__tests__/cdp.contract.test.js +0 -467
  372. package/dist/cli/commands/__tests__/cdp.contract.test.js.map +0 -1
  373. package/dist/cli/commands/cdp.d.ts +0 -8
  374. package/dist/cli/commands/cdp.d.ts.map +0 -1
  375. package/dist/cli/commands/cdp.js +0 -45
  376. package/dist/cli/commands/cdp.js.map +0 -1
  377. package/dist/cli/commands/console.d.ts +0 -8
  378. package/dist/cli/commands/console.d.ts.map +0 -1
  379. package/dist/cli/commands/console.js +0 -97
  380. package/dist/cli/commands/console.js.map +0 -1
  381. package/dist/cli/commands/dom/helpers/domCache.d.ts +0 -36
  382. package/dist/cli/commands/dom/helpers/domCache.d.ts.map +0 -1
  383. package/dist/cli/commands/dom/helpers/domCache.js +0 -65
  384. package/dist/cli/commands/dom/helpers/domCache.js.map +0 -1
  385. package/dist/cli/commands/dom/helpers/domQuery.d.ts +0 -48
  386. package/dist/cli/commands/dom/helpers/domQuery.d.ts.map +0 -1
  387. package/dist/cli/commands/dom/helpers/domQuery.js +0 -104
  388. package/dist/cli/commands/dom/helpers/domQuery.js.map +0 -1
  389. package/dist/cli/commands/dom/helpers/errorHandler.d.ts +0 -45
  390. package/dist/cli/commands/dom/helpers/errorHandler.d.ts.map +0 -1
  391. package/dist/cli/commands/dom/helpers/errorHandler.js +0 -71
  392. package/dist/cli/commands/dom/helpers/errorHandler.js.map +0 -1
  393. package/dist/cli/commands/dom/helpers/evalHelpers.d.ts +0 -52
  394. package/dist/cli/commands/dom/helpers/evalHelpers.d.ts.map +0 -1
  395. package/dist/cli/commands/dom/helpers/evalHelpers.js +0 -75
  396. package/dist/cli/commands/dom/helpers/evalHelpers.js.map +0 -1
  397. package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts +0 -35
  398. package/dist/cli/commands/dom/helpers/optionsBuilder.d.ts.map +0 -1
  399. package/dist/cli/commands/dom/helpers/optionsBuilder.js +0 -51
  400. package/dist/cli/commands/dom/helpers/optionsBuilder.js.map +0 -1
  401. package/dist/cli/commands/dom/helpers/selectorParser.d.ts +0 -20
  402. package/dist/cli/commands/dom/helpers/selectorParser.d.ts.map +0 -1
  403. package/dist/cli/commands/dom/helpers/selectorParser.js +0 -20
  404. package/dist/cli/commands/dom/helpers/selectorParser.js.map +0 -1
  405. package/dist/cli/commands/dom/index.d.ts +0 -8
  406. package/dist/cli/commands/dom/index.d.ts.map +0 -1
  407. package/dist/cli/commands/dom/index.js +0 -257
  408. package/dist/cli/commands/dom/index.js.map +0 -1
  409. package/dist/cli/commands/dom.d.ts +0 -8
  410. package/dist/cli/commands/dom.d.ts.map +0 -1
  411. package/dist/cli/commands/dom.js +0 -257
  412. package/dist/cli/commands/dom.js.map +0 -1
  413. package/dist/cli/commands/domErrorHandler.d.ts +0 -45
  414. package/dist/cli/commands/domErrorHandler.d.ts.map +0 -1
  415. package/dist/cli/commands/domErrorHandler.js +0 -71
  416. package/dist/cli/commands/domErrorHandler.js.map +0 -1
  417. package/dist/cli/commands/domEvalHelpers.d.ts +0 -52
  418. package/dist/cli/commands/domEvalHelpers.d.ts.map +0 -1
  419. package/dist/cli/commands/domEvalHelpers.js +0 -76
  420. package/dist/cli/commands/domEvalHelpers.js.map +0 -1
  421. package/dist/cli/commands/domOptionsBuilder.d.ts +0 -35
  422. package/dist/cli/commands/domOptionsBuilder.d.ts.map +0 -1
  423. package/dist/cli/commands/domOptionsBuilder.js +0 -51
  424. package/dist/cli/commands/domOptionsBuilder.js.map +0 -1
  425. package/dist/cli/commands/domSelectorParser.d.ts +0 -20
  426. package/dist/cli/commands/domSelectorParser.d.ts.map +0 -1
  427. package/dist/cli/commands/domSelectorParser.js +0 -20
  428. package/dist/cli/commands/domSelectorParser.js.map +0 -1
  429. package/dist/cli/commands/network.d.ts +0 -8
  430. package/dist/cli/commands/network.d.ts.map +0 -1
  431. package/dist/cli/commands/network.js +0 -43
  432. package/dist/cli/commands/network.js.map +0 -1
  433. package/dist/cli/handlers/CommandRunner.d.ts +0 -60
  434. package/dist/cli/handlers/CommandRunner.d.ts.map +0 -1
  435. package/dist/cli/handlers/CommandRunner.js +0 -81
  436. package/dist/cli/handlers/CommandRunner.js.map +0 -1
  437. package/dist/cli/handlers/commonOptions.d.ts +0 -54
  438. package/dist/cli/handlers/commonOptions.d.ts.map +0 -1
  439. package/dist/cli/handlers/commonOptions.js +0 -64
  440. package/dist/cli/handlers/commonOptions.js.map +0 -1
  441. package/dist/cli/handlers/daemonSessionController.d.ts +0 -23
  442. package/dist/cli/handlers/daemonSessionController.d.ts.map +0 -1
  443. package/dist/cli/handlers/daemonSessionController.js +0 -79
  444. package/dist/cli/handlers/daemonSessionController.js.map +0 -1
  445. package/dist/cli/handlers/landingPage.d.ts +0 -8
  446. package/dist/cli/handlers/landingPage.d.ts.map +0 -1
  447. package/dist/cli/handlers/landingPage.js +0 -8
  448. package/dist/cli/handlers/landingPage.js.map +0 -1
  449. package/dist/collectors/__tests__/network.contract.test.d.ts +0 -28
  450. package/dist/collectors/__tests__/network.contract.test.d.ts.map +0 -1
  451. package/dist/collectors/__tests__/network.contract.test.js +0 -540
  452. package/dist/collectors/__tests__/network.contract.test.js.map +0 -1
  453. package/dist/commandRegistry.d.ts +0 -11
  454. package/dist/commandRegistry.d.ts.map +0 -1
  455. package/dist/commandRegistry.js +0 -45
  456. package/dist/commandRegistry.js.map +0 -1
  457. package/dist/commands/domErrorHandler.d.ts +0 -45
  458. package/dist/commands/domErrorHandler.d.ts.map +0 -1
  459. package/dist/commands/domErrorHandler.js +0 -71
  460. package/dist/commands/domErrorHandler.js.map +0 -1
  461. package/dist/dom/cache.d.ts +0 -36
  462. package/dist/dom/cache.d.ts.map +0 -1
  463. package/dist/dom/cache.js +0 -65
  464. package/dist/dom/cache.js.map +0 -1
  465. package/dist/dom/index.d.ts +0 -9
  466. package/dist/dom/index.d.ts.map +0 -1
  467. package/dist/dom/index.js +0 -9
  468. package/dist/dom/index.js.map +0 -1
  469. package/dist/dom/query.d.ts +0 -48
  470. package/dist/dom/query.d.ts.map +0 -1
  471. package/dist/dom/query.js +0 -104
  472. package/dist/dom/query.js.map +0 -1
  473. package/dist/utils/formatters/network.d.ts +0 -23
  474. package/dist/utils/formatters/network.d.ts.map +0 -1
  475. package/dist/utils/formatters/network.js +0 -35
  476. package/dist/utils/formatters/network.js.map +0 -1
  477. package/dist/utils/ui.d.ts +0 -36
  478. package/dist/utils/ui.d.ts.map +0 -1
  479. package/dist/utils/ui.js +0 -47
  480. package/dist/utils/ui.js.map +0 -1
  481. package/dist/utils/url/safeParseUrl.d.ts +0 -63
  482. package/dist/utils/url/safeParseUrl.d.ts.map +0 -1
  483. package/dist/utils/url/safeParseUrl.js +0 -84
  484. package/dist/utils/url/safeParseUrl.js.map +0 -1
@@ -0,0 +1,50 @@
1
+ import { launchChrome } from '../../connection/launcher.js';
2
+ /**
3
+ * Handles Chrome browser launch and connection
4
+ */
5
+ export class ChromeBootstrap {
6
+ /**
7
+ * Launch Chrome if not already running, or connect to existing instance.
8
+ *
9
+ * Delegates to chrome-launcher which handles:
10
+ * - Port availability checking
11
+ * - Strict mode enforcement (via portStrictMode option)
12
+ * - Chrome readiness polling
13
+ * - Reusing existing Chrome instances when port is occupied
14
+ *
15
+ * @param port - Chrome debugging port
16
+ * @param targetUrl - Initial URL to navigate to
17
+ * @param launchOptions - Chrome launcher options (userDataDir, logLevel, etc.)
18
+ * @returns LaunchedChrome instance if Chrome was launched, null if already running
19
+ * @throws Error if chrome-launcher fails to launch or connect
20
+ */
21
+ static async launch(port, targetUrl, launchOptions) {
22
+ // Attempt launch - chrome-launcher handles everything:
23
+ // - Port availability checking
24
+ // - Launching new Chrome or reusing existing instance
25
+ // - Strict mode enforcement (throws if portStrictMode=true and can't connect)
26
+ // - Chrome readiness polling with retries
27
+ // Default to headless in CI environments (no display available)
28
+ // User can override via launchOptions.headless if needed
29
+ const isCI = process.env['CI'] === 'true' || process.env['CI'] === '1';
30
+ const headless = launchOptions?.headless ?? (isCI ? true : false);
31
+ const chrome = await launchChrome({
32
+ port,
33
+ headless,
34
+ url: targetUrl,
35
+ ...launchOptions,
36
+ });
37
+ // chrome-launcher returns a valid LaunchedChrome when successful
38
+ // PID will be 0 or undefined if reusing an existing Chrome instance
39
+ const isNewLaunch = chrome.pid && chrome.pid > 0;
40
+ if (isNewLaunch) {
41
+ console.error(`Chrome launched (PID: ${chrome.pid})`);
42
+ return chrome; // Return handle so we can kill it on cleanup
43
+ }
44
+ else {
45
+ console.error(`Chrome already running on port ${port}`);
46
+ return null; // Don't return handle - we don't own this Chrome instance
47
+ }
48
+ }
49
+ }
50
+ //# sourceMappingURL=ChromeBootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChromeBootstrap.js","sourceRoot":"","sources":["../../../src/cli/handlers/ChromeBootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAsB,MAAM,0BAA0B,CAAC;AAG5E;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,IAAY,EACZ,SAAiB,EACjB,aAAsC;QAEtC,uDAAuD;QACvD,+BAA+B;QAC/B,sDAAsD;QACtD,8EAA8E;QAC9E,0CAA0C;QAE1C,gEAAgE;QAChE,yDAAyD;QACzD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;QACvE,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAChC,IAAI;YACJ,QAAQ;YACR,GAAG,EAAE,SAAS;YACd,GAAG,aAAa;SACjB,CAAC,CAAC;QAEH,iEAAiE;QACjE,oEAAoE;QACpE,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;QACjD,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;YACtD,OAAO,MAAM,CAAC,CAAC,6CAA6C;QAC9D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,CAAC,0DAA0D;QACzE,CAAC;IACH,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import type { BdgOutput, CDPTarget, NetworkRequest, ConsoleMessage, DOMData, CollectorType } from '../../types';
1
+ import type { BdgOutput, CDPTarget, NetworkRequest, ConsoleMessage, DOMData, CollectorType } from '../../types.js';
2
2
  /**
3
3
  * Output mode determines what data is included and how partial flag is set
4
4
  */
@@ -16,8 +16,7 @@ export interface OutputBuilderOptions {
16
16
  activeCollectors: CollectorType[];
17
17
  }
18
18
  /**
19
- * Helper: build output payloads for different modes with consistent metadata.
20
- * Modes: preview (metadata only), full (with bodies), final (complete with DOM).
19
+ * Helper: build output payloads for preview/full/final modes with consistent metadata.
21
20
  */
22
21
  export declare class OutputBuilder {
23
22
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"OutputBuilder.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/OutputBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,cAAc,EACd,OAAO,EACP,aAAa,EACd,MAAM,SAAS,CAAC;AAIjB;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,aAAa,EAAE,CAAC;CACnC;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS;IA4FtD;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS;IAYnF;;;;;;;OAOG;IACH,MAAM,CAAC,cAAc,CACnB,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GACtD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAS1B;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAOhF"}
1
+ {"version":3,"file":"OutputBuilder.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/OutputBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,cAAc,EACd,OAAO,EACP,aAAa,EACd,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,aAAa,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS;IA4FtD;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS;IAYnF;;;;;;;OAOG;IACH,MAAM,CAAC,cAAc,CACnB,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GACtD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAS1B;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAOhF"}
@@ -1,8 +1,6 @@
1
- import { getErrorMessage } from '../../utils/errors.js';
2
1
  import { VERSION } from '../../utils/version.js';
3
2
  /**
4
- * Helper: build output payloads for different modes with consistent metadata.
5
- * Modes: preview (metadata only), full (with bodies), final (complete with DOM).
3
+ * Helper: build output payloads for preview/full/final modes with consistent metadata.
6
4
  */
7
5
  export class OutputBuilder {
8
6
  /**
@@ -101,7 +99,7 @@ export class OutputBuilder {
101
99
  duration: Date.now() - startTime,
102
100
  target: target ? { url: target.url, title: target.title } : { url: '', title: '' },
103
101
  data: {},
104
- error: getErrorMessage(error),
102
+ error: error instanceof Error ? error.message : String(error),
105
103
  };
106
104
  }
107
105
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"OutputBuilder.js","sourceRoot":"","sources":["../../../src/cli/handlers/OutputBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OutputBuilder.js","sourceRoot":"","sources":["../../../src/cli/handlers/OutputBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { BdgOutput } from '../../types.js';
2
+ /**
3
+ * Handles writing session output to files and console
4
+ */
5
+ export declare class OutputWriter {
6
+ /**
7
+ * Write session output to file and stdout.
8
+ *
9
+ * @param output - The output payload to write
10
+ * @param exitCode - 0 for success, 1 for error
11
+ * @param compact - If true, use compact JSON format (no indentation)
12
+ */
13
+ writeSessionOutput(output: BdgOutput, exitCode: 0 | 1, compact?: boolean): void;
14
+ }
15
+ //# sourceMappingURL=OutputWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputWriter.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/OutputWriter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC;;GAEG;AACH,qBAAa,YAAY;IACvB;;;;;;OAMG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,GAAE,OAAe,GAAG,IAAI;CAsBvF"}
@@ -0,0 +1,34 @@
1
+ import { writeSessionOutput } from '../../utils/session.js';
2
+ /**
3
+ * Handles writing session output to files and console
4
+ */
5
+ export class OutputWriter {
6
+ /**
7
+ * Write session output to file and stdout.
8
+ *
9
+ * @param output - The output payload to write
10
+ * @param exitCode - 0 for success, 1 for error
11
+ * @param compact - If true, use compact JSON format (no indentation)
12
+ */
13
+ writeSessionOutput(output, exitCode, compact = false) {
14
+ // Write output to file for 'bdg stop' to read
15
+ try {
16
+ const message = exitCode === 0 ? 'Writing session output...' : 'Writing error output...';
17
+ console.error(message);
18
+ writeSessionOutput(output, compact);
19
+ const successMessage = exitCode === 0
20
+ ? 'Session output written successfully'
21
+ : 'Error output written successfully';
22
+ console.error(successMessage);
23
+ }
24
+ catch (writeError) {
25
+ const errorMessage = exitCode === 0 ? 'Failed to write session output:' : 'Failed to write error output:';
26
+ console.error(errorMessage, writeError);
27
+ console.error('Write error details:', writeError);
28
+ }
29
+ // Output to stdout (for foreground use)
30
+ const jsonString = compact ? JSON.stringify(output) : JSON.stringify(output, null, 2);
31
+ console.log(jsonString);
32
+ }
33
+ }
34
+ //# sourceMappingURL=OutputWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputWriter.js","sourceRoot":"","sources":["../../../src/cli/handlers/OutputWriter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB;;;;;;OAMG;IACH,kBAAkB,CAAC,MAAiB,EAAE,QAAe,EAAE,UAAmB,KAAK;QAC7E,8CAA8C;QAC9C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,yBAAyB,CAAC;YACzF,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpC,MAAM,cAAc,GAClB,QAAQ,KAAK,CAAC;gBACZ,CAAC,CAAC,qCAAqC;gBACvC,CAAC,CAAC,mCAAmC,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,MAAM,YAAY,GAChB,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,+BAA+B,CAAC;YACvF,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;QACpD,CAAC;QAED,wCAAwC;QACxC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;CACF"}
@@ -0,0 +1,52 @@
1
+ import type { CDPTarget, NetworkRequest, ConsoleMessage, CollectorType } from '../../types.js';
2
+ /**
3
+ * Interface for accessing session data without direct coupling
4
+ */
5
+ export interface PreviewDataSource {
6
+ getTarget: () => CDPTarget;
7
+ getNetworkRequests: () => NetworkRequest[];
8
+ getConsoleLogs: () => ConsoleMessage[];
9
+ getActiveCollectors: () => CollectorType[];
10
+ isConnected: () => boolean;
11
+ }
12
+ /**
13
+ * Manages two-tier preview system with async I/O and mutex
14
+ *
15
+ * Periodically writes both lightweight preview and full data files
16
+ * to enable efficient monitoring without stopping collection.
17
+ */
18
+ export declare class PreviewWriter {
19
+ private dataSource;
20
+ private startTime;
21
+ private intervalMs;
22
+ private compact;
23
+ private interval;
24
+ private pendingWrite;
25
+ private isWriting;
26
+ constructor(dataSource: PreviewDataSource, startTime: number, intervalMs?: number, compact?: boolean);
27
+ /**
28
+ * Start periodic preview writes.
29
+ */
30
+ start(): void;
31
+ /**
32
+ * Stop preview writes and clear interval.
33
+ */
34
+ stop(): void;
35
+ /**
36
+ * Wait for any in-flight write to complete.
37
+ * Called during shutdown to prevent race conditions.
38
+ */
39
+ waitForPendingWrite(): Promise<void>;
40
+ /**
41
+ * Execute a single preview write cycle (internal)
42
+ */
43
+ private writePreview;
44
+ /**
45
+ * Perform the actual write operation (internal)
46
+ *
47
+ * Passes original arrays for active collectors, empty arrays for inactive ones.
48
+ * No cloning needed - OutputBuilder serializes immediately, avoiding unnecessary copies.
49
+ */
50
+ private doWrite;
51
+ }
52
+ //# sourceMappingURL=PreviewWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewWriter.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/PreviewWriter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAKxF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,SAAS,CAAC;IAC3B,kBAAkB,EAAE,MAAM,cAAc,EAAE,CAAC;IAC3C,cAAc,EAAE,MAAM,cAAc,EAAE,CAAC;IACvC,mBAAmB,EAAE,MAAM,aAAa,EAAE,CAAC;IAC3C,WAAW,EAAE,MAAM,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IAMtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IARjB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,SAAS,CAAS;gBAGhB,UAAU,EAAE,iBAAiB,EAC7B,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,MAAa,EACzB,OAAO,GAAE,OAAe;IAGlC;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAY1C;;OAEG;IACH,OAAO,CAAC,YAAY;IAyBpB;;;;;OAKG;YACW,OAAO;CAqCtB"}
@@ -0,0 +1,118 @@
1
+ import { writePartialOutputAsync, writeFullOutputAsync } from '../../utils/session.js';
2
+ import { OutputBuilder } from './OutputBuilder.js';
3
+ /**
4
+ * Manages two-tier preview system with async I/O and mutex
5
+ *
6
+ * Periodically writes both lightweight preview and full data files
7
+ * to enable efficient monitoring without stopping collection.
8
+ */
9
+ export class PreviewWriter {
10
+ dataSource;
11
+ startTime;
12
+ intervalMs;
13
+ compact;
14
+ interval = null;
15
+ pendingWrite = null;
16
+ isWriting = false;
17
+ constructor(dataSource, startTime, intervalMs = 5000, compact = false) {
18
+ this.dataSource = dataSource;
19
+ this.startTime = startTime;
20
+ this.intervalMs = intervalMs;
21
+ this.compact = compact;
22
+ }
23
+ /**
24
+ * Start periodic preview writes.
25
+ */
26
+ start() {
27
+ this.interval = setInterval(() => {
28
+ this.writePreview();
29
+ }, this.intervalMs);
30
+ }
31
+ /**
32
+ * Stop preview writes and clear interval.
33
+ */
34
+ stop() {
35
+ if (this.interval) {
36
+ clearInterval(this.interval);
37
+ this.interval = null;
38
+ }
39
+ }
40
+ /**
41
+ * Wait for any in-flight write to complete.
42
+ * Called during shutdown to prevent race conditions.
43
+ */
44
+ async waitForPendingWrite() {
45
+ if (this.pendingWrite) {
46
+ console.error('Waiting for in-flight write to complete...');
47
+ try {
48
+ await this.pendingWrite;
49
+ console.error('In-flight write completed');
50
+ }
51
+ catch (error) {
52
+ console.error('Error in pending write (ignoring):', error);
53
+ }
54
+ }
55
+ }
56
+ /**
57
+ * Execute a single preview write cycle (internal)
58
+ */
59
+ writePreview() {
60
+ // Skip if previous write in progress or disconnected
61
+ if (this.isWriting || !this.dataSource.isConnected()) {
62
+ if (this.isWriting) {
63
+ console.error('[PERF] Skipping preview write (previous write still in progress)');
64
+ }
65
+ return;
66
+ }
67
+ this.isWriting = true;
68
+ // Create and track the write promise so shutdown can await it
69
+ this.pendingWrite = this.doWrite()
70
+ .catch((error) => {
71
+ console.error('Warning: Failed to write preview data:', error instanceof Error ? error.message : String(error));
72
+ })
73
+ .finally(() => {
74
+ this.isWriting = false;
75
+ this.pendingWrite = null;
76
+ });
77
+ }
78
+ /**
79
+ * Perform the actual write operation (internal)
80
+ *
81
+ * Passes original arrays for active collectors, empty arrays for inactive ones.
82
+ * No cloning needed - OutputBuilder serializes immediately, avoiding unnecessary copies.
83
+ */
84
+ async doWrite() {
85
+ const target = this.dataSource.getTarget();
86
+ const activeCollectors = this.dataSource.getActiveCollectors();
87
+ // Pass original arrays when active, empty arrays when inactive (no cloning needed)
88
+ const networkRequests = activeCollectors.includes('network')
89
+ ? this.dataSource.getNetworkRequests()
90
+ : [];
91
+ const consoleLogs = activeCollectors.includes('console')
92
+ ? this.dataSource.getConsoleLogs()
93
+ : [];
94
+ // Build both preview and full outputs
95
+ const previewOutput = OutputBuilder.build({
96
+ mode: 'preview',
97
+ target,
98
+ startTime: this.startTime,
99
+ networkRequests,
100
+ consoleLogs,
101
+ activeCollectors,
102
+ });
103
+ const fullOutput = OutputBuilder.build({
104
+ mode: 'full',
105
+ target,
106
+ startTime: this.startTime,
107
+ networkRequests,
108
+ consoleLogs,
109
+ activeCollectors,
110
+ });
111
+ // Write both files in parallel (async, non-blocking)
112
+ await Promise.all([
113
+ writePartialOutputAsync(previewOutput, this.compact), // ~500KB - for 'bdg peek'
114
+ writeFullOutputAsync(fullOutput, this.compact), // ~87MB - for 'bdg details'
115
+ ]);
116
+ }
117
+ }
118
+ //# sourceMappingURL=PreviewWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewWriter.js","sourceRoot":"","sources":["../../../src/cli/handlers/PreviewWriter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { CollectorType } from '../../types.js';
2
+ /**
3
+ * Handles session lock acquisition and validation
4
+ */
5
+ export declare class SessionLock {
6
+ /**
7
+ * Acquire session lock and validate inputs
8
+ *
9
+ * @param url - Target URL to monitor
10
+ * @param collectors - Collector types to enable
11
+ * @returns Normalized URL
12
+ * @throws Error if session already running or validation fails
13
+ */
14
+ static acquire(url: string, collectors: CollectorType[]): string;
15
+ }
16
+ //# sourceMappingURL=SessionLock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionLock.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/SessionLock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7C;;GAEG;AACH,qBAAa,WAAW;IACtB;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM;CAsBjE"}
@@ -0,0 +1,35 @@
1
+ import { readPid, isProcessAlive, cleanupSession, acquireSessionLock } from '../../utils/session.js';
2
+ import { normalizeUrl } from '../../utils/url.js';
3
+ import { validateCollectorTypes } from '../../utils/validation.js';
4
+ /**
5
+ * Handles session lock acquisition and validation
6
+ */
7
+ export class SessionLock {
8
+ /**
9
+ * Acquire session lock and validate inputs
10
+ *
11
+ * @param url - Target URL to monitor
12
+ * @param collectors - Collector types to enable
13
+ * @returns Normalized URL
14
+ * @throws Error if session already running or validation fails
15
+ */
16
+ static acquire(url, collectors) {
17
+ const existingPid = readPid();
18
+ // Check for stale session before trying to acquire lock
19
+ if (existingPid && !isProcessAlive(existingPid)) {
20
+ console.error(`Found stale session (PID ${existingPid} not running)`);
21
+ console.error('Cleaning up stale session files...');
22
+ cleanupSession();
23
+ console.error('Stale session cleaned up');
24
+ }
25
+ if (!acquireSessionLock()) {
26
+ const currentPid = readPid();
27
+ throw new Error(`Session already running (PID ${currentPid}). Stop it with: bdg stop`);
28
+ }
29
+ // Validate collector types
30
+ validateCollectorTypes(collectors);
31
+ // Normalize URL - add http:// if no protocol specified
32
+ return normalizeUrl(url);
33
+ }
34
+ }
35
+ //# sourceMappingURL=SessionLock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionLock.js","sourceRoot":"","sources":["../../../src/cli/handlers/SessionLock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;GAEG;AACH,MAAM,OAAO,WAAW;IACtB;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,GAAW,EAAE,UAA2B;QACrD,MAAM,WAAW,GAAG,OAAO,EAAE,CAAC;QAE9B,wDAAwD;QACxD,IAAI,WAAW,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,4BAA4B,WAAW,eAAe,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACpD,cAAc,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,2BAA2B,CAAC,CAAC;QACzF,CAAC;QAED,2BAA2B;QAC3B,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAEnC,uDAAuD;QACvD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import type { BdgSession } from '../../session/BdgSession.js';
2
+ import type { CDPTarget } from '../../types.js';
3
+ /**
4
+ * Manages the session monitoring loop
5
+ */
6
+ export declare class SessionLoop {
7
+ /**
8
+ * Run session loop until stopped or error
9
+ *
10
+ * Monitors WebSocket connection and target lifecycle.
11
+ * Throws error if connection lost or tab closed.
12
+ *
13
+ * @param session - Active BDG session instance
14
+ * @param target - CDP target being monitored
15
+ * @throws Error if WebSocket connection lost or browser tab closed
16
+ */
17
+ static run(session: BdgSession, target: CDPTarget): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=SessionLoop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionLoop.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/SessionLoop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAA4B,MAAM,SAAS,CAAC;AAEnE;;GAEG;AACH,qBAAa,WAAW;IACtB;;;;;;;;;OASG;WACU,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CA2CxE"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Manages the session monitoring loop
3
+ */
4
+ export class SessionLoop {
5
+ /**
6
+ * Run session loop until stopped or error
7
+ *
8
+ * Monitors WebSocket connection and target lifecycle.
9
+ * Throws error if connection lost or tab closed.
10
+ *
11
+ * @param session - Active BDG session instance
12
+ * @param target - CDP target being monitored
13
+ * @throws Error if WebSocket connection lost or browser tab closed
14
+ */
15
+ static async run(session, target) {
16
+ if (!session) {
17
+ throw new Error('Session not initialized');
18
+ }
19
+ const cdp = session.getCDP();
20
+ const waitForNextCheck = () => new Promise((resolve) => {
21
+ let timer;
22
+ let handlerId;
23
+ const handleTargetDestroyed = (params) => {
24
+ if (params.targetId === target.id) {
25
+ clearTimeout(timer);
26
+ cdp.off('Target.targetDestroyed', handlerId);
27
+ resolve('destroyed');
28
+ }
29
+ };
30
+ handlerId = cdp.on('Target.targetDestroyed', handleTargetDestroyed);
31
+ timer = setTimeout(() => {
32
+ cdp.off('Target.targetDestroyed', handlerId);
33
+ resolve('continue');
34
+ }, 2000);
35
+ });
36
+ for (;;) {
37
+ const result = await waitForNextCheck();
38
+ if (!session.isConnected()) {
39
+ throw new Error('WebSocket connection lost');
40
+ }
41
+ if (result === 'destroyed') {
42
+ throw new Error('Browser tab was closed');
43
+ }
44
+ }
45
+ }
46
+ }
47
+ //# sourceMappingURL=SessionLoop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionLoop.js","sourceRoot":"","sources":["../../../src/cli/handlers/SessionLoop.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,WAAW;IACtB;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAmB,EAAE,MAAiB;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAE7B,MAAM,gBAAgB,GAAG,GAAsC,EAAE,CAC/D,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACtB,IAAI,KAAoC,CAAC;YACzC,IAAI,SAAiB,CAAC;YAEtB,MAAM,qBAAqB,GAAG,CAAC,MAAgC,EAAQ,EAAE;gBACvE,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC;oBAClC,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,GAAG,CAAC,GAAG,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;oBAC7C,OAAO,CAAC,WAAW,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC,CAAC;YAEF,SAAS,GAAG,GAAG,CAAC,EAAE,CAChB,wBAAwB,EACxB,qBAAqB,CACtB,CAAC;YAEF,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,GAAG,CAAC,GAAG,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;gBAC7C,OAAO,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QAEL,SAAS,CAAC;YACR,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;YAExC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ import type { PreviewWriter } from './PreviewWriter.js';
2
+ import type { BdgSession } from '../../session/BdgSession.js';
3
+ import type { CDPTarget, LaunchedChrome } from '../../types.js';
4
+ import { OutputWriter } from './OutputWriter.js';
5
+ /**
6
+ * Minimal session state interface
7
+ */
8
+ export interface SessionState {
9
+ session: BdgSession | null;
10
+ launchedChrome: LaunchedChrome | null;
11
+ isShuttingDown: boolean;
12
+ previewWriter: PreviewWriter | null;
13
+ startTime: number;
14
+ target: CDPTarget | null;
15
+ compact: boolean;
16
+ }
17
+ /**
18
+ * Orchestrates shutdown sequence and cleanup operations
19
+ */
20
+ export declare class ShutdownController {
21
+ private state;
22
+ private shutdownKeepalive;
23
+ private outputWriter;
24
+ constructor(state: SessionState, outputWriter?: OutputWriter);
25
+ /**
26
+ * Execute graceful shutdown sequence.
27
+ * Stops session, writes output, and exits process.
28
+ */
29
+ shutdown(): Promise<void>;
30
+ /**
31
+ * Cleanup without stopping session (error path).
32
+ * Clears timers, tears down Chrome if launched, and removes session files.
33
+ */
34
+ cleanup(): Promise<void>;
35
+ /**
36
+ * Finalize shutdown: write output, cleanup, and exit
37
+ * @private
38
+ */
39
+ private finalize;
40
+ }
41
+ //# sourceMappingURL=ShutdownController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShutdownController.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/ShutdownController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAa,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAK3B,OAAO,CAAC,KAAK;IAJf,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,YAAY,CAAe;gBAGzB,KAAK,EAAE,YAAY,EAC3B,YAAY,CAAC,EAAE,YAAY;IAK7B;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B/B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB9B;;;OAGG;IACH,OAAO,CAAC,QAAQ;CA8BjB"}
@@ -0,0 +1,94 @@
1
+ import { cleanupSession } from '../../utils/session.js';
2
+ import { OutputBuilder } from './OutputBuilder.js';
3
+ import { OutputWriter } from './OutputWriter.js';
4
+ /**
5
+ * Orchestrates shutdown sequence and cleanup operations
6
+ */
7
+ export class ShutdownController {
8
+ state;
9
+ shutdownKeepalive = null;
10
+ outputWriter;
11
+ constructor(state, outputWriter) {
12
+ this.state = state;
13
+ this.outputWriter = outputWriter ?? new OutputWriter();
14
+ }
15
+ /**
16
+ * Execute graceful shutdown sequence.
17
+ * Stops session, writes output, and exits process.
18
+ */
19
+ async shutdown() {
20
+ if (this.state.isShuttingDown || !this.state.session) {
21
+ return;
22
+ }
23
+ this.state.isShuttingDown = true;
24
+ // Keep event loop alive IMMEDIATELY to prevent premature exit during async operations
25
+ // This must be set before any await points
26
+ this.shutdownKeepalive = setInterval(() => { }, 1000);
27
+ // Stop preview writer and wait for pending writes
28
+ if (this.state.previewWriter) {
29
+ this.state.previewWriter.stop();
30
+ await this.state.previewWriter.waitForPendingWrite();
31
+ }
32
+ try {
33
+ console.error('Stopping session...');
34
+ const output = await this.state.session.stop();
35
+ this.finalize(output, 0);
36
+ }
37
+ catch (error) {
38
+ console.error('Error during shutdown:', error);
39
+ const errorOutput = OutputBuilder.buildError(error, this.state.startTime);
40
+ this.finalize(errorOutput, 1);
41
+ }
42
+ }
43
+ /**
44
+ * Cleanup without stopping session (error path).
45
+ * Clears timers, tears down Chrome if launched, and removes session files.
46
+ */
47
+ async cleanup() {
48
+ // Stop preview writer and wait for pending writes
49
+ if (this.state.previewWriter) {
50
+ this.state.previewWriter.stop();
51
+ await this.state.previewWriter.waitForPendingWrite();
52
+ }
53
+ // Kill Chrome if we launched it
54
+ if (this.state.launchedChrome) {
55
+ try {
56
+ await this.state.launchedChrome.kill();
57
+ }
58
+ catch {
59
+ // Ignore errors during cleanup
60
+ }
61
+ }
62
+ // Cleanup session files
63
+ cleanupSession();
64
+ }
65
+ /**
66
+ * Finalize shutdown: write output, cleanup, and exit
67
+ * @private
68
+ */
69
+ finalize(output, exitCode) {
70
+ // Write output
71
+ this.outputWriter.writeSessionOutput(output, exitCode, this.state.compact);
72
+ // Leave Chrome running for future sessions
73
+ if (this.state.launchedChrome) {
74
+ const chromeMessage = exitCode === 0
75
+ ? 'Leaving Chrome running for future sessions (use persistent profile)'
76
+ : 'Leaving Chrome running (use persistent profile)';
77
+ console.error(chromeMessage);
78
+ console.error(`Chrome PID: ${this.state.launchedChrome.pid}, port: ${this.state.launchedChrome.port}`);
79
+ }
80
+ // Cleanup session files
81
+ try {
82
+ cleanupSession();
83
+ }
84
+ catch (cleanupError) {
85
+ console.error('Error cleaning up session:', cleanupError);
86
+ }
87
+ // Clear keepalive and exit
88
+ if (this.shutdownKeepalive) {
89
+ clearInterval(this.shutdownKeepalive);
90
+ }
91
+ process.exit(exitCode);
92
+ }
93
+ }
94
+ //# sourceMappingURL=ShutdownController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShutdownController.js","sourceRoot":"","sources":["../../../src/cli/handlers/ShutdownController.ts"],"names":[],"mappings":"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"}