browser-debugger-cli 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/README.md +50 -4
  2. package/dist/__tests__/smoke/error-handling.smoke.test.js +0 -11
  3. package/dist/__tests__/smoke/error-handling.smoke.test.js.map +1 -1
  4. package/dist/cdp/protocol.d.ts +121 -0
  5. package/dist/cdp/protocol.d.ts.map +1 -0
  6. package/dist/cdp/protocol.js +215 -0
  7. package/dist/cdp/protocol.js.map +1 -0
  8. package/dist/cdp/schema.d.ts +159 -0
  9. package/dist/cdp/schema.d.ts.map +1 -0
  10. package/dist/cdp/schema.js +256 -0
  11. package/dist/cdp/schema.js.map +1 -0
  12. package/dist/cdp/types.d.ts +139 -0
  13. package/dist/cdp/types.d.ts.map +1 -0
  14. package/dist/cdp/types.js +7 -0
  15. package/dist/cdp/types.js.map +1 -0
  16. package/dist/commands/cdp.d.ts +10 -1
  17. package/dist/commands/cdp.d.ts.map +1 -1
  18. package/dist/commands/cdp.js +363 -26
  19. package/dist/commands/cdp.js.map +1 -1
  20. package/dist/commands/cleanup.js +3 -3
  21. package/dist/commands/cleanup.js.map +1 -1
  22. package/dist/commands/dom.d.ts.map +1 -1
  23. package/dist/commands/dom.js +1 -0
  24. package/dist/commands/dom.js.map +1 -1
  25. package/dist/commands/domEvalHelpers.d.ts +2 -15
  26. package/dist/commands/domEvalHelpers.d.ts.map +1 -1
  27. package/dist/commands/domEvalHelpers.js +1 -1
  28. package/dist/commands/domEvalHelpers.js.map +1 -1
  29. package/dist/commands/peek.d.ts.map +1 -1
  30. package/dist/commands/peek.js +12 -6
  31. package/dist/commands/peek.js.map +1 -1
  32. package/dist/commands/shared/CommandRunner.d.ts +2 -0
  33. package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
  34. package/dist/commands/shared/CommandRunner.js +13 -1
  35. package/dist/commands/shared/CommandRunner.js.map +1 -1
  36. package/dist/commands/shared/commonOptions.d.ts.map +1 -1
  37. package/dist/commands/shared/commonOptions.js +2 -2
  38. package/dist/commands/shared/commonOptions.js.map +1 -1
  39. package/dist/commands/start.d.ts.map +1 -1
  40. package/dist/commands/start.js +21 -12
  41. package/dist/commands/start.js.map +1 -1
  42. package/dist/commands/status.js +2 -2
  43. package/dist/commands/status.js.map +1 -1
  44. package/dist/commands/stop.js +2 -2
  45. package/dist/commands/stop.js.map +1 -1
  46. package/dist/commands/tail.d.ts.map +1 -1
  47. package/dist/commands/tail.js +9 -6
  48. package/dist/commands/tail.js.map +1 -1
  49. package/dist/connection/cdp.d.ts.map +1 -1
  50. package/dist/connection/cdp.js +15 -2
  51. package/dist/connection/cdp.js.map +1 -1
  52. package/dist/connection/domOperations.d.ts.map +1 -1
  53. package/dist/connection/domOperations.js +3 -1
  54. package/dist/connection/domOperations.js.map +1 -1
  55. package/dist/connection/handlers.d.ts +34 -2
  56. package/dist/connection/handlers.d.ts.map +1 -1
  57. package/dist/connection/handlers.js +28 -2
  58. package/dist/connection/handlers.js.map +1 -1
  59. package/dist/connection/launcher.d.ts.map +1 -1
  60. package/dist/connection/launcher.js +14 -2
  61. package/dist/connection/launcher.js.map +1 -1
  62. package/dist/connection/pageReadiness.d.ts.map +1 -1
  63. package/dist/connection/pageReadiness.js +6 -6
  64. package/dist/connection/pageReadiness.js.map +1 -1
  65. package/dist/connection/typed-cdp.d.ts +144 -0
  66. package/dist/connection/typed-cdp.d.ts.map +1 -0
  67. package/dist/connection/typed-cdp.js +120 -0
  68. package/dist/connection/typed-cdp.js.map +1 -0
  69. package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
  70. package/dist/daemon/worker/commandRegistry.js.map +1 -1
  71. package/dist/telemetry/__tests__/network.contract.test.js +124 -93
  72. package/dist/telemetry/__tests__/network.contract.test.js.map +1 -1
  73. package/dist/telemetry/console.d.ts.map +1 -1
  74. package/dist/telemetry/console.js +3 -2
  75. package/dist/telemetry/console.js.map +1 -1
  76. package/dist/telemetry/dialogs.d.ts.map +1 -1
  77. package/dist/telemetry/dialogs.js.map +1 -1
  78. package/dist/telemetry/dom.d.ts.map +1 -1
  79. package/dist/telemetry/dom.js +3 -1
  80. package/dist/telemetry/dom.js.map +1 -1
  81. package/dist/telemetry/navigation.d.ts.map +1 -1
  82. package/dist/telemetry/navigation.js.map +1 -1
  83. package/dist/telemetry/network.d.ts.map +1 -1
  84. package/dist/telemetry/network.js.map +1 -1
  85. package/dist/types.d.ts +0 -141
  86. package/dist/types.d.ts.map +1 -1
  87. package/dist/ui/messages/commands.d.ts +1 -0
  88. package/dist/ui/messages/commands.d.ts.map +1 -1
  89. package/dist/ui/messages/commands.js +1 -0
  90. package/dist/ui/messages/commands.js.map +1 -1
  91. package/dist/ui/messages/errors.d.ts +30 -3
  92. package/dist/ui/messages/errors.d.ts.map +1 -1
  93. package/dist/ui/messages/errors.js +36 -8
  94. package/dist/ui/messages/errors.js.map +1 -1
  95. package/dist/ui/messages/session.d.ts.map +1 -1
  96. package/dist/ui/messages/session.js +5 -4
  97. package/dist/ui/messages/session.js.map +1 -1
  98. package/dist/ui/messages/validation.d.ts +22 -4
  99. package/dist/ui/messages/validation.d.ts.map +1 -1
  100. package/dist/ui/messages/validation.js +26 -5
  101. package/dist/ui/messages/validation.js.map +1 -1
  102. package/package.json +2 -1
  103. package/dist/cli/commands/__tests__/start.unit.test.d.ts +0 -2
  104. package/dist/cli/commands/__tests__/start.unit.test.d.ts.map +0 -1
  105. package/dist/cli/commands/__tests__/start.unit.test.js +0 -131
  106. package/dist/cli/commands/__tests__/start.unit.test.js.map +0 -1
  107. package/dist/cli/commands/cleanup.d.ts +0 -9
  108. package/dist/cli/commands/cleanup.d.ts.map +0 -1
  109. package/dist/cli/commands/cleanup.js +0 -148
  110. package/dist/cli/commands/cleanup.js.map +0 -1
  111. package/dist/cli/commands/details.d.ts +0 -9
  112. package/dist/cli/commands/details.d.ts.map +0 -1
  113. package/dist/cli/commands/details.js +0 -120
  114. package/dist/cli/commands/details.js.map +0 -1
  115. package/dist/cli/commands/peek.d.ts +0 -9
  116. package/dist/cli/commands/peek.d.ts.map +0 -1
  117. package/dist/cli/commands/peek.js +0 -64
  118. package/dist/cli/commands/peek.js.map +0 -1
  119. package/dist/cli/commands/query.d.ts +0 -9
  120. package/dist/cli/commands/query.d.ts.map +0 -1
  121. package/dist/cli/commands/query.js +0 -125
  122. package/dist/cli/commands/query.js.map +0 -1
  123. package/dist/cli/commands/start.d.ts +0 -83
  124. package/dist/cli/commands/start.d.ts.map +0 -1
  125. package/dist/cli/commands/start.js +0 -204
  126. package/dist/cli/commands/start.js.map +0 -1
  127. package/dist/cli/commands/status.d.ts +0 -9
  128. package/dist/cli/commands/status.d.ts.map +0 -1
  129. package/dist/cli/commands/status.js +0 -75
  130. package/dist/cli/commands/status.js.map +0 -1
  131. package/dist/cli/commands/stop.d.ts +0 -9
  132. package/dist/cli/commands/stop.d.ts.map +0 -1
  133. package/dist/cli/commands/stop.js +0 -133
  134. package/dist/cli/commands/stop.js.map +0 -1
  135. package/dist/cli/formatters/detailsFormatter.d.ts +0 -10
  136. package/dist/cli/formatters/detailsFormatter.d.ts.map +0 -1
  137. package/dist/cli/formatters/detailsFormatter.js +0 -63
  138. package/dist/cli/formatters/detailsFormatter.js.map +0 -1
  139. package/dist/cli/formatters/previewFormatter.d.ts +0 -27
  140. package/dist/cli/formatters/previewFormatter.d.ts.map +0 -1
  141. package/dist/cli/formatters/previewFormatter.js +0 -155
  142. package/dist/cli/formatters/previewFormatter.js.map +0 -1
  143. package/dist/cli/formatters/statusFormatter.d.ts +0 -42
  144. package/dist/cli/formatters/statusFormatter.d.ts.map +0 -1
  145. package/dist/cli/formatters/statusFormatter.js +0 -126
  146. package/dist/cli/formatters/statusFormatter.js.map +0 -1
  147. package/dist/cli/handlers/ChromeBootstrap.d.ts +0 -24
  148. package/dist/cli/handlers/ChromeBootstrap.d.ts.map +0 -1
  149. package/dist/cli/handlers/ChromeBootstrap.js +0 -50
  150. package/dist/cli/handlers/ChromeBootstrap.js.map +0 -1
  151. package/dist/cli/handlers/OutputBuilder.d.ts +0 -59
  152. package/dist/cli/handlers/OutputBuilder.d.ts.map +0 -1
  153. package/dist/cli/handlers/OutputBuilder.js +0 -136
  154. package/dist/cli/handlers/OutputBuilder.js.map +0 -1
  155. package/dist/cli/handlers/OutputWriter.d.ts +0 -15
  156. package/dist/cli/handlers/OutputWriter.d.ts.map +0 -1
  157. package/dist/cli/handlers/OutputWriter.js +0 -34
  158. package/dist/cli/handlers/OutputWriter.js.map +0 -1
  159. package/dist/cli/handlers/PreviewWriter.d.ts +0 -52
  160. package/dist/cli/handlers/PreviewWriter.d.ts.map +0 -1
  161. package/dist/cli/handlers/PreviewWriter.js +0 -118
  162. package/dist/cli/handlers/PreviewWriter.js.map +0 -1
  163. package/dist/cli/handlers/SessionLock.d.ts +0 -16
  164. package/dist/cli/handlers/SessionLock.d.ts.map +0 -1
  165. package/dist/cli/handlers/SessionLock.js +0 -35
  166. package/dist/cli/handlers/SessionLock.js.map +0 -1
  167. package/dist/cli/handlers/SessionLoop.d.ts +0 -19
  168. package/dist/cli/handlers/SessionLoop.d.ts.map +0 -1
  169. package/dist/cli/handlers/SessionLoop.js +0 -47
  170. package/dist/cli/handlers/SessionLoop.js.map +0 -1
  171. package/dist/cli/handlers/ShutdownController.d.ts +0 -41
  172. package/dist/cli/handlers/ShutdownController.d.ts.map +0 -1
  173. package/dist/cli/handlers/ShutdownController.js +0 -94
  174. package/dist/cli/handlers/ShutdownController.js.map +0 -1
  175. package/dist/cli/handlers/SignalHandler.d.ts +0 -35
  176. package/dist/cli/handlers/SignalHandler.d.ts.map +0 -1
  177. package/dist/cli/handlers/SignalHandler.js +0 -81
  178. package/dist/cli/handlers/SignalHandler.js.map +0 -1
  179. package/dist/cli/handlers/TargetSetup.d.ts +0 -42
  180. package/dist/cli/handlers/TargetSetup.d.ts.map +0 -1
  181. package/dist/cli/handlers/TargetSetup.js +0 -87
  182. package/dist/cli/handlers/TargetSetup.js.map +0 -1
  183. package/dist/cli/handlers/sessionController.d.ts +0 -62
  184. package/dist/cli/handlers/sessionController.d.ts.map +0 -1
  185. package/dist/cli/handlers/sessionController.js +0 -316
  186. package/dist/cli/handlers/sessionController.js.map +0 -1
  187. package/dist/cli/registry.d.ts +0 -11
  188. package/dist/cli/registry.d.ts.map +0 -1
  189. package/dist/cli/registry.js +0 -21
  190. package/dist/cli/registry.js.map +0 -1
  191. package/dist/collectors/console.d.ts +0 -19
  192. package/dist/collectors/console.d.ts.map +0 -1
  193. package/dist/collectors/console.js +0 -87
  194. package/dist/collectors/console.js.map +0 -1
  195. package/dist/collectors/dom.d.ts +0 -21
  196. package/dist/collectors/dom.d.ts.map +0 -1
  197. package/dist/collectors/dom.js +0 -99
  198. package/dist/collectors/dom.js.map +0 -1
  199. package/dist/collectors/network.d.ts +0 -32
  200. package/dist/collectors/network.d.ts.map +0 -1
  201. package/dist/collectors/network.js +0 -191
  202. package/dist/collectors/network.js.map +0 -1
  203. package/dist/connection/tabs.d.ts +0 -52
  204. package/dist/connection/tabs.d.ts.map +0 -1
  205. package/dist/connection/tabs.js +0 -227
  206. package/dist/connection/tabs.js.map +0 -1
  207. package/dist/help/machineReadableHelp.d.ts +0 -100
  208. package/dist/help/machineReadableHelp.d.ts.map +0 -1
  209. package/dist/help/machineReadableHelp.js +0 -139
  210. package/dist/help/machineReadableHelp.js.map +0 -1
  211. package/dist/session/BdgSession.d.ts +0 -91
  212. package/dist/session/BdgSession.d.ts.map +0 -1
  213. package/dist/session/BdgSession.js +0 -230
  214. package/dist/session/BdgSession.js.map +0 -1
  215. package/dist/ui/errors/SystemErrors.d.ts +0 -22
  216. package/dist/ui/errors/SystemErrors.d.ts.map +0 -1
  217. package/dist/ui/errors/SystemErrors.js +0 -23
  218. package/dist/ui/errors/SystemErrors.js.map +0 -1
  219. package/dist/ui/errors.d.ts +0 -39
  220. package/dist/ui/errors.d.ts.map +0 -1
  221. package/dist/ui/errors.js +0 -48
  222. package/dist/ui/errors.js.map +0 -1
  223. package/dist/ui/messages/deprecation.d.ts +0 -30
  224. package/dist/ui/messages/deprecation.d.ts.map +0 -1
  225. package/dist/ui/messages/deprecation.js +0 -49
  226. package/dist/ui/messages/deprecation.js.map +0 -1
  227. package/dist/ui/messages/index.d.ts +0 -12
  228. package/dist/ui/messages/index.d.ts.map +0 -1
  229. package/dist/ui/messages/index.js +0 -12
  230. package/dist/ui/messages/index.js.map +0 -1
  231. package/dist/utils/__tests__/filters.unit.test.d.ts +0 -2
  232. package/dist/utils/__tests__/filters.unit.test.d.ts.map +0 -1
  233. package/dist/utils/__tests__/filters.unit.test.js +0 -239
  234. package/dist/utils/__tests__/filters.unit.test.js.map +0 -1
  235. package/dist/utils/cdpHandlers.d.ts +0 -31
  236. package/dist/utils/cdpHandlers.d.ts.map +0 -1
  237. package/dist/utils/cdpHandlers.js +0 -38
  238. package/dist/utils/cdpHandlers.js.map +0 -1
  239. package/dist/utils/chromeDiagnostics.d.ts +0 -16
  240. package/dist/utils/chromeDiagnostics.d.ts.map +0 -1
  241. package/dist/utils/chromeDiagnostics.js +0 -37
  242. package/dist/utils/chromeDiagnostics.js.map +0 -1
  243. package/dist/utils/errors.d.ts +0 -82
  244. package/dist/utils/errors.d.ts.map +0 -1
  245. package/dist/utils/errors.js +0 -88
  246. package/dist/utils/errors.js.map +0 -1
  247. package/dist/utils/filters.d.ts +0 -148
  248. package/dist/utils/filters.d.ts.map +0 -1
  249. package/dist/utils/filters.js +0 -358
  250. package/dist/utils/filters.js.map +0 -1
  251. package/dist/utils/logger.d.ts +0 -98
  252. package/dist/utils/logger.d.ts.map +0 -1
  253. package/dist/utils/logger.js +0 -93
  254. package/dist/utils/logger.js.map +0 -1
  255. package/dist/utils/pageReadiness.d.ts +0 -46
  256. package/dist/utils/pageReadiness.d.ts.map +0 -1
  257. package/dist/utils/pageReadiness.js +0 -270
  258. package/dist/utils/pageReadiness.js.map +0 -1
  259. package/dist/utils/session.d.ts +0 -200
  260. package/dist/utils/session.d.ts.map +0 -1
  261. package/dist/utils/session.js +0 -498
  262. package/dist/utils/session.js.map +0 -1
  263. package/dist/utils/validation.d.ts +0 -12
  264. package/dist/utils/validation.d.ts.map +0 -1
  265. package/dist/utils/validation.js +0 -20
  266. package/dist/utils/validation.js.map +0 -1
@@ -1,32 +0,0 @@
1
- import type { CDPConnection } from '../connection/cdp.js';
2
- import type { NetworkRequest, CleanupFunction } from '../types.js';
3
- export interface NetworkCollectionOptions {
4
- includeAll?: boolean;
5
- fetchAllBodies?: boolean;
6
- fetchBodiesInclude?: string[];
7
- fetchBodiesExclude?: string[];
8
- networkInclude?: string[];
9
- networkExclude?: string[];
10
- }
11
- /**
12
- * Start collecting network requests via CDP Network domain.
13
- *
14
- * Tracks all HTTP requests and responses, including headers and bodies (for JSON/text responses).
15
- * Implements automatic cleanup of stale requests to prevent memory leaks during long sessions.
16
- *
17
- * @param cdp - CDP connection instance
18
- * @param requests - Array to populate with completed network requests
19
- * @param options - Collection options
20
- * @returns Cleanup function to remove event handlers and clear state
21
- *
22
- * @remarks
23
- * - Chrome buffer limits: 50MB total, 10MB per resource, 1MB POST data (with fallback)
24
- * - Stale requests (incomplete after 60s) are removed from tracking but NOT added to output
25
- * - Request limit of 10,000 prevents memory issues in long-running sessions
26
- * - Response bodies are automatically skipped for images, fonts, CSS, and source maps (see DEFAULT_SKIP_BODY_PATTERNS)
27
- * - Response bodies larger than 5MB are skipped with a placeholder message
28
- * - By default, common tracking/analytics domains are filtered out (use includeAll to disable)
29
- * - Pattern precedence: include patterns always trump exclude patterns
30
- */
31
- export declare function startNetworkCollection(cdp: CDPConnection, requests: NetworkRequest[], options?: NetworkCollectionOptions): Promise<CleanupFunction>;
32
- //# sourceMappingURL=network.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/collectors/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAUzD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAMhB,MAAM,SAAS,CAAC;AAIjB,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,eAAe,CAAC,CAuN1B"}
@@ -1,191 +0,0 @@
1
- import { MAX_NETWORK_REQUESTS, STALE_REQUEST_TIMEOUT, STALE_REQUEST_CLEANUP_INTERVAL, MAX_RESPONSE_SIZE, CHROME_NETWORK_BUFFER_TOTAL, CHROME_NETWORK_BUFFER_PER_RESOURCE, CHROME_POST_DATA_LIMIT, } from '../constants.js';
2
- import { CDPHandlerRegistry } from '../utils/cdpHandlers.js';
3
- import { shouldExcludeDomain, shouldExcludeUrl, shouldFetchBody } from '../utils/filters.js';
4
- /**
5
- * Start collecting network requests via CDP Network domain.
6
- *
7
- * Tracks all HTTP requests and responses, including headers and bodies (for JSON/text responses).
8
- * Implements automatic cleanup of stale requests to prevent memory leaks during long sessions.
9
- *
10
- * @param cdp - CDP connection instance
11
- * @param requests - Array to populate with completed network requests
12
- * @param options - Collection options
13
- * @returns Cleanup function to remove event handlers and clear state
14
- *
15
- * @remarks
16
- * - Chrome buffer limits: 50MB total, 10MB per resource, 1MB POST data (with fallback)
17
- * - Stale requests (incomplete after 60s) are removed from tracking but NOT added to output
18
- * - Request limit of 10,000 prevents memory issues in long-running sessions
19
- * - Response bodies are automatically skipped for images, fonts, CSS, and source maps (see DEFAULT_SKIP_BODY_PATTERNS)
20
- * - Response bodies larger than 5MB are skipped with a placeholder message
21
- * - By default, common tracking/analytics domains are filtered out (use includeAll to disable)
22
- * - Pattern precedence: include patterns always trump exclude patterns
23
- */
24
- export async function startNetworkCollection(cdp, requests, options = {}) {
25
- const { includeAll = false, fetchAllBodies = false, fetchBodiesInclude = [], fetchBodiesExclude = [], networkInclude = [], networkExclude = [], } = options;
26
- const requestMap = new Map();
27
- const registry = new CDPHandlerRegistry();
28
- // Counters for PERF logging
29
- let bodiesFetched = 0;
30
- let bodiesSkipped = 0;
31
- // Enable network tracking with buffer limits (if supported)
32
- // These parameters are optional and experimental, but widely supported in Chrome 58+
33
- // See docs/chrome-cdp-compatibility.md for details
34
- try {
35
- await cdp.send('Network.enable', {
36
- maxTotalBufferSize: CHROME_NETWORK_BUFFER_TOTAL,
37
- maxResourceBufferSize: CHROME_NETWORK_BUFFER_PER_RESOURCE,
38
- maxPostDataSize: CHROME_POST_DATA_LIMIT,
39
- });
40
- }
41
- catch {
42
- // Fallback to basic Network.enable if buffer parameters not supported
43
- console.error('Network buffer limits not supported, using default settings');
44
- await cdp.send('Network.enable');
45
- }
46
- // Periodic cleanup of stale requests (see JSDoc @remarks for behavior)
47
- const cleanupInterval = setInterval(() => {
48
- const now = Date.now();
49
- const staleRequests = [];
50
- requestMap.forEach((value, requestId) => {
51
- if (now - value.timestamp > STALE_REQUEST_TIMEOUT) {
52
- staleRequests.push(requestId);
53
- }
54
- });
55
- if (staleRequests.length > 0) {
56
- console.error(`Cleaning up ${staleRequests.length} stale network requests`);
57
- staleRequests.forEach((requestId) => requestMap.delete(requestId));
58
- }
59
- }, STALE_REQUEST_CLEANUP_INTERVAL);
60
- // Listen for requests
61
- registry.register(cdp, 'Network.requestWillBeSent', (params) => {
62
- if (requestMap.size >= MAX_NETWORK_REQUESTS) {
63
- console.error(`Warning: Network request limit reached (${MAX_NETWORK_REQUESTS}), dropping new requests`);
64
- return;
65
- }
66
- const request = {
67
- requestId: params.requestId,
68
- url: params.request.url,
69
- method: params.request.method,
70
- timestamp: params.timestamp,
71
- requestHeaders: params.request.headers,
72
- requestBody: params.request.postData,
73
- };
74
- requestMap.set(params.requestId, {
75
- request,
76
- timestamp: Date.now(),
77
- });
78
- });
79
- // Listen for responses
80
- registry.register(cdp, 'Network.responseReceived', (params) => {
81
- const entry = requestMap.get(params.requestId);
82
- if (entry) {
83
- entry.request.status = params.response.status;
84
- entry.request.mimeType = params.response.mimeType;
85
- entry.request.responseHeaders = params.response.headers;
86
- }
87
- });
88
- // Listen for finished requests
89
- registry.register(cdp, 'Network.loadingFinished', (params) => {
90
- const entry = requestMap.get(params.requestId);
91
- if (entry && requests.length < MAX_NETWORK_REQUESTS) {
92
- const request = entry.request;
93
- // Apply domain filtering
94
- if (shouldExcludeDomain(request.url, includeAll)) {
95
- requestMap.delete(params.requestId);
96
- return;
97
- }
98
- // Apply URL pattern filtering
99
- if (shouldExcludeUrl(request.url, {
100
- includePatterns: networkInclude,
101
- excludePatterns: networkExclude,
102
- })) {
103
- requestMap.delete(params.requestId);
104
- return;
105
- }
106
- // Determine if we should fetch the response body
107
- const isSizeAcceptable = params.encodedDataLength <= MAX_RESPONSE_SIZE;
108
- const isTextResponse = (request.mimeType?.includes('json') ?? false) ||
109
- (request.mimeType?.includes('javascript') ?? false) ||
110
- (request.mimeType?.includes('text') ?? false) ||
111
- (request.mimeType?.includes('html') ?? false);
112
- if (isTextResponse && isSizeAcceptable) {
113
- // Check if we should fetch body based on patterns
114
- const shouldFetch = shouldFetchBody(request.url, request.mimeType, {
115
- fetchAllBodies,
116
- includePatterns: fetchBodiesInclude,
117
- excludePatterns: fetchBodiesExclude,
118
- });
119
- if (shouldFetch) {
120
- bodiesFetched++;
121
- // Fetch response body asynchronously
122
- void cdp
123
- .send('Network.getResponseBody', { requestId: params.requestId })
124
- .then((response) => {
125
- const typedResponse = response;
126
- request.responseBody = typedResponse.body;
127
- })
128
- .catch(() => {
129
- // Response body not available (e.g., 204 No Content, redirects, etc.)
130
- });
131
- }
132
- else {
133
- bodiesSkipped++;
134
- request.responseBody = '[SKIPPED: Auto-optimization (see DEFAULT_SKIP_BODY_PATTERNS)]';
135
- }
136
- }
137
- else if (isTextResponse && !isSizeAcceptable) {
138
- bodiesSkipped++;
139
- // Mark large responses as skipped
140
- request.responseBody = `[SKIPPED: Response too large (${(params.encodedDataLength / 1024 / 1024).toFixed(2)}MB > ${MAX_RESPONSE_SIZE / 1024 / 1024}MB)]`;
141
- }
142
- requests.push(request);
143
- requestMap.delete(params.requestId);
144
- }
145
- else if (requests.length >= MAX_NETWORK_REQUESTS) {
146
- console.error(`Warning: Network request limit reached (${MAX_NETWORK_REQUESTS})`);
147
- requestMap.delete(params.requestId);
148
- }
149
- });
150
- // Listen for failed requests
151
- registry.register(cdp, 'Network.loadingFailed', (params) => {
152
- const entry = requestMap.get(params.requestId);
153
- if (entry && requests.length < MAX_NETWORK_REQUESTS) {
154
- // Apply domain filtering
155
- if (shouldExcludeDomain(entry.request.url, includeAll)) {
156
- requestMap.delete(params.requestId);
157
- return;
158
- }
159
- // Apply URL pattern filtering
160
- if (shouldExcludeUrl(entry.request.url, {
161
- includePatterns: networkInclude,
162
- excludePatterns: networkExclude,
163
- })) {
164
- requestMap.delete(params.requestId);
165
- return;
166
- }
167
- entry.request.status = 0; // Indicate failure
168
- requests.push(entry.request);
169
- requestMap.delete(params.requestId);
170
- }
171
- else if (requests.length >= MAX_NETWORK_REQUESTS) {
172
- requestMap.delete(params.requestId);
173
- }
174
- });
175
- // Return cleanup function
176
- return () => {
177
- // Log PERF metrics
178
- const totalBodyDecisions = bodiesFetched + bodiesSkipped;
179
- if (totalBodyDecisions > 0) {
180
- const percentageSkipped = ((bodiesSkipped / totalBodyDecisions) * 100).toFixed(1);
181
- console.error(`[PERF] Network bodies: ${bodiesFetched} fetched, ${bodiesSkipped} skipped (${percentageSkipped}% reduction)`);
182
- }
183
- // Clear interval
184
- clearInterval(cleanupInterval);
185
- // Remove event handlers
186
- registry.cleanup(cdp);
187
- // Clear request map
188
- requestMap.clear();
189
- };
190
- }
191
- //# sourceMappingURL=network.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/collectors/network.ts"],"names":[],"mappings":"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"}
@@ -1,52 +0,0 @@
1
- import type { CDPConnection } from './cdp.js';
2
- import type { CDPTarget } from '../types.js';
3
- /**
4
- * Find the best matching target from a list of tabs.
5
- *
6
- * @param normalizedUrl - Target URL to find (must be pre-normalized)
7
- * @param targets - List of available targets
8
- * @returns Best matching target or null if no match found
9
- */
10
- export declare function findBestTarget(normalizedUrl: string, targets: CDPTarget[]): CDPTarget | null;
11
- /**
12
- * Create a new tab with the specified URL using CDP.
13
- *
14
- * @param normalizedUrl - URL to open in the new tab (must be pre-normalized)
15
- * @param cdp - CDP connection instance
16
- * @returns Target information for the new tab
17
- * @throws Error if tab creation fails via both CDP and HTTP fallback methods
18
- */
19
- export declare function createNewTab(normalizedUrl: string, cdp: CDPConnection): Promise<CDPTarget>;
20
- /**
21
- * Navigate an existing tab to a new URL using CDP.
22
- *
23
- * @param targetId - CDP target ID to navigate
24
- * @param normalizedUrl - URL to navigate to (must be pre-normalized)
25
- * @param cdp - CDP connection instance
26
- * @throws Error if navigation fails (e.g., network error, invalid URL, blocked by browser)
27
- */
28
- export declare function navigateToUrl(targetId: string, normalizedUrl: string, cdp: CDPConnection): Promise<void>;
29
- /**
30
- * Wait for a target to be ready (URL matches expected).
31
- *
32
- * @param targetId - CDP target ID to wait for
33
- * @param normalizedUrl - Expected URL (must be pre-normalized)
34
- * @param cdp - CDP connection instance
35
- * @param maxWaitMs - Maximum time to wait in milliseconds
36
- * @throws Error if target doesn't become ready within maxWaitMs timeout
37
- */
38
- export declare function waitForTargetReady(targetId: string, normalizedUrl: string, cdp: CDPConnection, maxWaitMs?: number): Promise<void>;
39
- /**
40
- * Create a new tab or find existing tab with the target URL.
41
- *
42
- * This is the main entry point for tab management.
43
- * It tries to find an existing tab first, and if not found,
44
- * creates a new one.
45
- *
46
- * @param url - Target URL (will be normalized once at entry)
47
- * @param cdp - CDP connection instance
48
- * @param reuseTab - If true, navigate existing tab instead of creating new one
49
- * @returns Target information
50
- */
51
- export declare function createOrFindTarget(url: string, cdp: CDPConnection, reuseTab?: boolean): Promise<CDPTarget>;
52
- //# sourceMappingURL=tabs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/connection/tabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAiEzC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,SAAS,GAAG,IAAI,CA8B5F;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAyDhG;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,aAAa,EAClB,SAAS,SAAQ,GAChB,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,aAAa,EAClB,QAAQ,UAAQ,GACf,OAAO,CAAC,SAAS,CAAC,CAwCpB"}
@@ -1,227 +0,0 @@
1
- import { normalizeUrl } from '../utils/url.js';
2
- /**
3
- * Score how well a tab matches the search URL.
4
- * Higher score = better match.
5
- *
6
- * @param tab - Target to score
7
- * @param searchUrl - Normalized URL to match against
8
- * @returns Match score (0-100)
9
- */
10
- function scoreTabMatch(tab, searchUrl) {
11
- // Exact match = best score
12
- if (tab.url === searchUrl) {
13
- return 100;
14
- }
15
- // Try URL-based matching
16
- try {
17
- const tabUrlObj = new URL(tab.url);
18
- const searchUrlObj = new URL(searchUrl);
19
- // Same host + path = excellent score
20
- if (tabUrlObj.host === searchUrlObj.host && tabUrlObj.pathname === searchUrlObj.pathname) {
21
- return 90;
22
- }
23
- // Same host + path prefix = good score
24
- if (tabUrlObj.host === searchUrlObj.host &&
25
- tabUrlObj.pathname.startsWith(searchUrlObj.pathname)) {
26
- return 70;
27
- }
28
- // Same host = decent score
29
- if (tabUrlObj.host === searchUrlObj.host) {
30
- return 50;
31
- }
32
- }
33
- catch {
34
- // URL parsing failed, fall back to substring matching
35
- }
36
- // Substring match = weak score
37
- if (tab.url.includes(searchUrl)) {
38
- return 30;
39
- }
40
- return 0; // No match
41
- }
42
- /**
43
- * Find the best matching target from a list of tabs.
44
- *
45
- * @param normalizedUrl - Target URL to find (must be pre-normalized)
46
- * @param targets - List of available targets
47
- * @returns Best matching target or null if no match found
48
- */
49
- export function findBestTarget(normalizedUrl, targets) {
50
- const searchUrl = normalizedUrl;
51
- // Filter for page targets only
52
- const pageTargets = targets.filter((t) => t.type === 'page');
53
- if (pageTargets.length === 0) {
54
- return null;
55
- }
56
- // Score all targets
57
- const scored = pageTargets
58
- .map((t) => ({ target: t, score: scoreTabMatch(t, searchUrl) }))
59
- .filter(({ score }) => score > 0)
60
- .sort((a, b) => b.score - a.score);
61
- if (scored.length === 0) {
62
- return null;
63
- }
64
- // Warn if multiple tabs have same score
65
- const first = scored[0];
66
- const second = scored[1];
67
- if (scored.length > 1 && first && second && first.score === second.score && first.score < 100) {
68
- console.error(`Warning: Multiple tabs match equally (score ${first.score}), using: ${first.target.url}`);
69
- }
70
- return first ? first.target : null;
71
- }
72
- /**
73
- * Create a new tab with the specified URL using CDP.
74
- *
75
- * @param normalizedUrl - URL to open in the new tab (must be pre-normalized)
76
- * @param cdp - CDP connection instance
77
- * @returns Target information for the new tab
78
- * @throws Error if tab creation fails via both CDP and HTTP fallback methods
79
- */
80
- export async function createNewTab(normalizedUrl, cdp) {
81
- const port = cdp.getPort();
82
- let createdTargetId = null;
83
- try {
84
- const response = (await cdp.send('Target.createTarget', {
85
- url: normalizedUrl,
86
- newWindow: false, // Open as tab, not window
87
- }));
88
- createdTargetId = response.targetId;
89
- }
90
- catch (error) {
91
- console.error('CDP Target.createTarget failed, attempting HTTP fallback...', error);
92
- }
93
- if (createdTargetId) {
94
- try {
95
- const listResponse = await fetch(`http://127.0.0.1:${port}/json/list`);
96
- if (!listResponse.ok) {
97
- throw new Error(`Failed to list targets: ${listResponse.status} ${listResponse.statusText}`);
98
- }
99
- const targets = (await listResponse.json());
100
- const target = targets.find((t) => t.id === createdTargetId);
101
- if (!target) {
102
- throw new Error(`Created target ${createdTargetId} not found in Chrome target list`);
103
- }
104
- return target;
105
- }
106
- catch (resolveError) {
107
- throw new Error(`Failed to resolve created tab: ${resolveError instanceof Error ? resolveError.message : String(resolveError)}`);
108
- }
109
- }
110
- // Fallback to HTTP endpoint method
111
- try {
112
- const createResponse = await fetch(`http://127.0.0.1:${port}/json/new?${encodeURIComponent(normalizedUrl)}`);
113
- if (!createResponse.ok) {
114
- throw new Error(`HTTP /json/new failed: ${createResponse.statusText}`);
115
- }
116
- const target = (await createResponse.json());
117
- return target;
118
- }
119
- catch (httpError) {
120
- throw new Error(`Failed to create new tab: ${httpError instanceof Error ? httpError.message : String(httpError)}`);
121
- }
122
- }
123
- /**
124
- * Navigate an existing tab to a new URL using CDP.
125
- *
126
- * @param targetId - CDP target ID to navigate
127
- * @param normalizedUrl - URL to navigate to (must be pre-normalized)
128
- * @param cdp - CDP connection instance
129
- * @throws Error if navigation fails (e.g., network error, invalid URL, blocked by browser)
130
- */
131
- export async function navigateToUrl(targetId, normalizedUrl, cdp) {
132
- // Attach to target
133
- const sessionResponse = (await cdp.send('Target.attachToTarget', {
134
- targetId,
135
- flatten: true,
136
- }));
137
- // Navigate
138
- const navResponse = (await cdp.send('Page.navigate', { url: normalizedUrl }, sessionResponse.sessionId));
139
- if (navResponse.errorText) {
140
- throw new Error(`Navigation failed: ${navResponse.errorText}`);
141
- }
142
- }
143
- /**
144
- * Wait for a target to be ready (URL matches expected).
145
- *
146
- * @param targetId - CDP target ID to wait for
147
- * @param normalizedUrl - Expected URL (must be pre-normalized)
148
- * @param cdp - CDP connection instance
149
- * @param maxWaitMs - Maximum time to wait in milliseconds
150
- * @throws Error if target doesn't become ready within maxWaitMs timeout
151
- */
152
- export async function waitForTargetReady(targetId, normalizedUrl, cdp, maxWaitMs = 15000) {
153
- const startTime = Date.now();
154
- while (Date.now() - startTime < maxWaitMs) {
155
- try {
156
- // Fetch current targets
157
- const response = await fetch(`http://127.0.0.1:${cdp.getPort()}/json/list`);
158
- const targets = (await response.json());
159
- const target = targets.find((t) => t.id === targetId);
160
- if (target) {
161
- // Check if URL matches or is loading
162
- if (target.url === normalizedUrl ||
163
- target.url.startsWith(normalizedUrl) ||
164
- target.url === 'about:blank' // Still loading
165
- ) {
166
- // Wait a bit more if still on about:blank
167
- if (target.url === 'about:blank') {
168
- await new Promise((resolve) => setTimeout(resolve, 500));
169
- continue;
170
- }
171
- return; // Target is ready!
172
- }
173
- }
174
- }
175
- catch {
176
- // Target doesn't exist yet or fetch failed, keep waiting
177
- }
178
- await new Promise((resolve) => setTimeout(resolve, 200));
179
- }
180
- throw new Error(`Target did not become ready within ${maxWaitMs}ms`);
181
- }
182
- /**
183
- * Create a new tab or find existing tab with the target URL.
184
- *
185
- * This is the main entry point for tab management.
186
- * It tries to find an existing tab first, and if not found,
187
- * creates a new one.
188
- *
189
- * @param url - Target URL (will be normalized once at entry)
190
- * @param cdp - CDP connection instance
191
- * @param reuseTab - If true, navigate existing tab instead of creating new one
192
- * @returns Target information
193
- */
194
- export async function createOrFindTarget(url, cdp, reuseTab = false) {
195
- // Normalize URL once at entry point
196
- const normalizedUrl = normalizeUrl(url);
197
- // Only look for existing tabs if reuseTab is true
198
- if (reuseTab) {
199
- // Try to find existing target via CDP
200
- const targetsResponse = (await cdp.send('Target.getTargets'));
201
- const targets = targetsResponse.targetInfos.map((info) => ({
202
- id: info.targetId,
203
- type: info.type,
204
- url: info.url,
205
- title: info.title,
206
- webSocketDebuggerUrl: '', // Not needed for this operation
207
- }));
208
- const existingTarget = findBestTarget(normalizedUrl, targets);
209
- if (existingTarget) {
210
- console.error(`Found existing tab: ${existingTarget.url}`);
211
- // If URLs don't match exactly, navigate
212
- if (existingTarget.url !== normalizedUrl) {
213
- console.error(`Navigating tab to: ${normalizedUrl}`);
214
- await navigateToUrl(existingTarget.id, normalizedUrl, cdp);
215
- await waitForTargetReady(existingTarget.id, normalizedUrl, cdp);
216
- }
217
- return existingTarget;
218
- }
219
- }
220
- // No matching tab found (or reuseTab=false), create new one
221
- console.error(`Creating new tab for: ${normalizedUrl}`);
222
- const newTarget = await createNewTab(normalizedUrl, cdp);
223
- // Wait for tab to start loading
224
- await waitForTargetReady(newTarget.id, normalizedUrl, cdp);
225
- return newTarget;
226
- }
227
- //# sourceMappingURL=tabs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/connection/tabs.ts"],"names":[],"mappings":"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"}
@@ -1,100 +0,0 @@
1
- /**
2
- * Machine-readable help generation using Commander.js introspection API.
3
- *
4
- * @module help/machineReadableHelp
5
- */
6
- import type { Command } from 'commander';
7
- /**
8
- * Option metadata for machine-readable help.
9
- */
10
- export interface OptionMetadata {
11
- /** Option flags (e.g., "-j, --json") */
12
- flags: string;
13
- /** Option description */
14
- description: string;
15
- /** Whether option is required */
16
- required: boolean;
17
- /** Whether option has an optional value */
18
- optional: boolean;
19
- /** Default value if any */
20
- defaultValue?: unknown;
21
- /** Description of default value */
22
- defaultValueDescription?: string;
23
- /** Allowed choices if restricted */
24
- choices?: readonly string[];
25
- }
26
- /**
27
- * Argument metadata for machine-readable help.
28
- */
29
- export interface ArgumentMetadata {
30
- /** Argument name */
31
- name: string;
32
- /** Argument description */
33
- description: string;
34
- /** Whether argument is required */
35
- required: boolean;
36
- /** Whether argument accepts multiple values */
37
- variadic: boolean;
38
- /** Default value if any */
39
- defaultValue?: unknown;
40
- /** Allowed choices if restricted */
41
- choices?: readonly string[];
42
- }
43
- /**
44
- * Command metadata for machine-readable help.
45
- */
46
- export interface CommandMetadata {
47
- /** Command name */
48
- name: string;
49
- /** Command aliases */
50
- aliases: readonly string[];
51
- /** Command description */
52
- description: string;
53
- /** Command usage string */
54
- usage: string;
55
- /** Command arguments */
56
- arguments: ArgumentMetadata[];
57
- /** Command options */
58
- options: OptionMetadata[];
59
- /** Subcommands */
60
- subcommands: CommandMetadata[];
61
- }
62
- /**
63
- * Root machine-readable help structure.
64
- */
65
- export interface MachineReadableHelp {
66
- /** CLI name */
67
- name: string;
68
- /** CLI version */
69
- version: string;
70
- /** CLI description */
71
- description: string;
72
- /** Root command metadata */
73
- command: CommandMetadata;
74
- /** Exit code documentation */
75
- exitCodes: {
76
- /** Exit code value */
77
- code: number;
78
- /** Exit code name */
79
- name: string;
80
- /** Exit code description */
81
- description: string;
82
- }[];
83
- }
84
- /**
85
- * Generates machine-readable help from a Commander program.
86
- *
87
- * @param program - Commander program instance
88
- * @returns Machine-readable help structure
89
- *
90
- * @example
91
- * ```typescript
92
- * import { program } from 'commander';
93
- * import { generateMachineReadableHelp } from './help/machineReadableHelp.js';
94
- *
95
- * const help = generateMachineReadableHelp(program);
96
- * console.log(JSON.stringify(help, null, 2));
97
- * ```
98
- */
99
- export declare function generateMachineReadableHelp(program: Command): MachineReadableHelp;
100
- //# sourceMappingURL=machineReadableHelp.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"machineReadableHelp.d.ts","sourceRoot":"","sources":["../../src/help/machineReadableHelp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAoB,MAAM,WAAW,CAAC;AAI3D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mCAAmC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,oCAAoC;IACpC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oCAAoC;IACpC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,sBAAsB;IACtB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,kBAAkB;IAClB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,OAAO,EAAE,eAAe,CAAC;IACzB,8BAA8B;IAC9B,SAAS,EAAE;QACT,sBAAsB;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,qBAAqB;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,4BAA4B;QAC5B,WAAW,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;CACL;AAuDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAkEjF"}