@flanksource/clicky-ui 0.1.0 → 0.2.2

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 (378) hide show
  1. package/README.md +29 -2
  2. package/dist/api-explorer.d.ts +5 -0
  3. package/dist/api-explorer.d.ts.map +1 -0
  4. package/dist/api-explorer.js +25 -0
  5. package/dist/api-explorer.js.map +1 -0
  6. package/dist/clicky.d.ts +2 -0
  7. package/dist/clicky.d.ts.map +1 -0
  8. package/dist/clicky.js +5 -0
  9. package/dist/clicky.js.map +1 -0
  10. package/dist/components/DatePicker.d.ts +18 -0
  11. package/dist/components/DatePicker.d.ts.map +1 -0
  12. package/dist/components/DatePicker.js +63 -0
  13. package/dist/components/DatePicker.js.map +1 -0
  14. package/dist/components/DateTimePicker.d.ts +18 -0
  15. package/dist/components/DateTimePicker.d.ts.map +1 -0
  16. package/dist/components/DateTimePicker.js +84 -0
  17. package/dist/components/DateTimePicker.js.map +1 -0
  18. package/dist/components/FilterBar.d.ts +180 -0
  19. package/dist/components/FilterBar.d.ts.map +1 -0
  20. package/dist/components/FilterBar.js +1685 -0
  21. package/dist/components/FilterBar.js.map +1 -0
  22. package/dist/components/MultiSelect.d.ts +19 -0
  23. package/dist/components/MultiSelect.d.ts.map +1 -0
  24. package/dist/components/MultiSelect.js +143 -0
  25. package/dist/components/MultiSelect.js.map +1 -0
  26. package/dist/components/RangeSlider.d.ts +16 -0
  27. package/dist/components/RangeSlider.d.ts.map +1 -0
  28. package/dist/components/RangeSlider.js +92 -0
  29. package/dist/components/RangeSlider.js.map +1 -0
  30. package/dist/components/button.d.ts +21 -0
  31. package/dist/components/button.d.ts.map +1 -0
  32. package/dist/components/button.js +126 -0
  33. package/dist/components/button.js.map +1 -0
  34. package/dist/components/density-switcher.d.ts +7 -0
  35. package/dist/components/density-switcher.d.ts.map +1 -0
  36. package/dist/components/density-switcher.js +32 -0
  37. package/dist/components/density-switcher.js.map +1 -0
  38. package/dist/components/icon-menu-picker.d.ts +23 -0
  39. package/dist/components/icon-menu-picker.d.ts.map +1 -0
  40. package/dist/components/icon-menu-picker.js +192 -0
  41. package/dist/components/icon-menu-picker.js.map +1 -0
  42. package/dist/components/select.d.ts +15 -0
  43. package/dist/components/select.d.ts.map +1 -0
  44. package/dist/components/select.js +39 -0
  45. package/dist/components/select.js.map +1 -0
  46. package/dist/components/theme-switcher.d.ts +7 -0
  47. package/dist/components/theme-switcher.d.ts.map +1 -0
  48. package/dist/components/theme-switcher.js +42 -0
  49. package/dist/components/theme-switcher.js.map +1 -0
  50. package/dist/components.d.ts +15 -0
  51. package/dist/components.d.ts.map +1 -0
  52. package/dist/components.js +33 -0
  53. package/dist/components.js.map +1 -0
  54. package/dist/data/AnsiHtml.d.ts +7 -0
  55. package/dist/data/AnsiHtml.d.ts.map +1 -0
  56. package/dist/data/AnsiHtml.js +71 -0
  57. package/dist/data/AnsiHtml.js.map +1 -0
  58. package/dist/data/Avatar.d.ts +32 -0
  59. package/dist/data/Avatar.d.ts.map +1 -0
  60. package/dist/data/Avatar.js +201 -0
  61. package/dist/data/Avatar.js.map +1 -0
  62. package/dist/data/AvatarBadge.d.ts +26 -0
  63. package/dist/data/AvatarBadge.d.ts.map +1 -0
  64. package/dist/data/AvatarBadge.js +104 -0
  65. package/dist/data/AvatarBadge.js.map +1 -0
  66. package/dist/data/Badge.d.ts +44 -0
  67. package/dist/data/Badge.d.ts.map +1 -0
  68. package/dist/data/Badge.js +667 -0
  69. package/dist/data/Badge.js.map +1 -0
  70. package/dist/data/Clicky.d.ts +147 -0
  71. package/dist/data/Clicky.d.ts.map +1 -0
  72. package/dist/data/Clicky.fixtures.d.ts +3 -0
  73. package/dist/data/Clicky.fixtures.d.ts.map +1 -0
  74. package/dist/data/Clicky.js +1960 -0
  75. package/dist/data/Clicky.js.map +1 -0
  76. package/dist/data/DataTable.d.ts +95 -0
  77. package/dist/data/DataTable.d.ts.map +1 -0
  78. package/dist/data/DataTable.js +1464 -0
  79. package/dist/data/DataTable.js.map +1 -0
  80. package/dist/data/FilterPill.d.ts +29 -0
  81. package/dist/data/FilterPill.d.ts.map +1 -0
  82. package/dist/data/FilterPill.js +153 -0
  83. package/dist/data/FilterPill.js.map +1 -0
  84. package/dist/data/Gauge.d.ts +15 -0
  85. package/dist/data/Gauge.d.ts.map +1 -0
  86. package/dist/data/Gauge.js +63 -0
  87. package/dist/data/Gauge.js.map +1 -0
  88. package/dist/data/Icon.d.ts +53 -0
  89. package/dist/data/Icon.d.ts.map +1 -0
  90. package/dist/data/Icon.js +115 -0
  91. package/dist/data/Icon.js.map +1 -0
  92. package/dist/data/JsonView.d.ts +8 -0
  93. package/dist/data/JsonView.d.ts.map +1 -0
  94. package/dist/data/JsonView.js +74 -0
  95. package/dist/data/JsonView.js.map +1 -0
  96. package/dist/data/KeyValueList.d.ts +17 -0
  97. package/dist/data/KeyValueList.d.ts.map +1 -0
  98. package/dist/data/KeyValueList.js +33 -0
  99. package/dist/data/KeyValueList.js.map +1 -0
  100. package/dist/data/LogViewer.d.ts +10 -0
  101. package/dist/data/LogViewer.d.ts.map +1 -0
  102. package/dist/data/LogViewer.js +46 -0
  103. package/dist/data/LogViewer.js.map +1 -0
  104. package/dist/data/LogsTable.d.ts +27 -0
  105. package/dist/data/LogsTable.d.ts.map +1 -0
  106. package/dist/data/LogsTable.js +580 -0
  107. package/dist/data/LogsTable.js.map +1 -0
  108. package/dist/data/Markdown.d.ts +6 -0
  109. package/dist/data/Markdown.d.ts.map +1 -0
  110. package/dist/data/Markdown.js +59 -0
  111. package/dist/data/Markdown.js.map +1 -0
  112. package/dist/data/MatrixTable.d.ts +22 -0
  113. package/dist/data/MatrixTable.d.ts.map +1 -0
  114. package/dist/data/MatrixTable.js +164 -0
  115. package/dist/data/MatrixTable.js.map +1 -0
  116. package/dist/data/MethodBadge.d.ts +6 -0
  117. package/dist/data/MethodBadge.d.ts.map +1 -0
  118. package/dist/data/MethodBadge.js +18 -0
  119. package/dist/data/MethodBadge.js.map +1 -0
  120. package/dist/data/ProgressBar.d.ts +13 -0
  121. package/dist/data/ProgressBar.d.ts.map +1 -0
  122. package/dist/data/ProgressBar.js +34 -0
  123. package/dist/data/ProgressBar.js.map +1 -0
  124. package/dist/data/SortableHeader.d.ts +12 -0
  125. package/dist/data/SortableHeader.d.ts.map +1 -0
  126. package/dist/data/SortableHeader.js +33 -0
  127. package/dist/data/SortableHeader.js.map +1 -0
  128. package/dist/data/TabButton.d.ts +12 -0
  129. package/dist/data/TabButton.d.ts.map +1 -0
  130. package/dist/data/TabButton.js +45 -0
  131. package/dist/data/TabButton.js.map +1 -0
  132. package/dist/data/Tree.d.ts +35 -0
  133. package/dist/data/Tree.d.ts.map +1 -0
  134. package/dist/data/Tree.js +236 -0
  135. package/dist/data/Tree.js.map +1 -0
  136. package/dist/data/TreeGroupHeader.d.ts +11 -0
  137. package/dist/data/TreeGroupHeader.d.ts.map +1 -0
  138. package/dist/data/TreeGroupHeader.js +41 -0
  139. package/dist/data/TreeGroupHeader.js.map +1 -0
  140. package/dist/data/TreeNode.d.ts +43 -0
  141. package/dist/data/TreeNode.d.ts.map +1 -0
  142. package/dist/data/TreeNode.js +100 -0
  143. package/dist/data/TreeNode.js.map +1 -0
  144. package/dist/data/cells/StatusDot.d.ts +11 -0
  145. package/dist/data/cells/StatusDot.d.ts.map +1 -0
  146. package/dist/data/cells/StatusDot.js +38 -0
  147. package/dist/data/cells/StatusDot.js.map +1 -0
  148. package/dist/data/cells/TagList.d.ts +59 -0
  149. package/dist/data/cells/TagList.d.ts.map +1 -0
  150. package/dist/data/cells/TagList.js +257 -0
  151. package/dist/data/cells/TagList.js.map +1 -0
  152. package/dist/data/cells/Timestamp.d.ts +46 -0
  153. package/dist/data/cells/Timestamp.d.ts.map +1 -0
  154. package/dist/data/cells/Timestamp.js +146 -0
  155. package/dist/data/cells/Timestamp.js.map +1 -0
  156. package/dist/data/cells/status-mapping.d.ts +8 -0
  157. package/dist/data/cells/status-mapping.d.ts.map +1 -0
  158. package/dist/data/cells/status-mapping.js +44 -0
  159. package/dist/data/cells/status-mapping.js.map +1 -0
  160. package/dist/data/code-highlight.d.ts +12 -0
  161. package/dist/data/code-highlight.d.ts.map +1 -0
  162. package/dist/data/code-highlight.js +28 -0
  163. package/dist/data/code-highlight.js.map +1 -0
  164. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +9 -0
  165. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -0
  166. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +445 -0
  167. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -0
  168. package/dist/data/diagnostics/DiagnosticsTree.d.ts +9 -0
  169. package/dist/data/diagnostics/DiagnosticsTree.d.ts.map +1 -0
  170. package/dist/data/diagnostics/DiagnosticsTree.js +78 -0
  171. package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -0
  172. package/dist/data/diagnostics/ErrorDetails.d.ts +20 -0
  173. package/dist/data/diagnostics/ErrorDetails.d.ts.map +1 -0
  174. package/dist/data/diagnostics/ErrorDetails.js +157 -0
  175. package/dist/data/diagnostics/ErrorDetails.js.map +1 -0
  176. package/dist/data/diagnostics/GoroutineCard.d.ts +10 -0
  177. package/dist/data/diagnostics/GoroutineCard.d.ts.map +1 -0
  178. package/dist/data/diagnostics/GoroutineCard.js +75 -0
  179. package/dist/data/diagnostics/GoroutineCard.js.map +1 -0
  180. package/dist/data/diagnostics/JvmStackTrace.d.ts +11 -0
  181. package/dist/data/diagnostics/JvmStackTrace.d.ts.map +1 -0
  182. package/dist/data/diagnostics/JvmStackTrace.js +26 -0
  183. package/dist/data/diagnostics/JvmStackTrace.js.map +1 -0
  184. package/dist/data/diagnostics/RenderedStackTrace.d.ts +18 -0
  185. package/dist/data/diagnostics/RenderedStackTrace.d.ts.map +1 -0
  186. package/dist/data/diagnostics/RenderedStackTrace.js +235 -0
  187. package/dist/data/diagnostics/RenderedStackTrace.js.map +1 -0
  188. package/dist/data/diagnostics/ThreadCard.d.ts +10 -0
  189. package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -0
  190. package/dist/data/diagnostics/ThreadCard.js +78 -0
  191. package/dist/data/diagnostics/ThreadCard.js.map +1 -0
  192. package/dist/data/diagnostics/error-diagnostics.d.ts +26 -0
  193. package/dist/data/diagnostics/error-diagnostics.d.ts.map +1 -0
  194. package/dist/data/diagnostics/error-diagnostics.js +108 -0
  195. package/dist/data/diagnostics/error-diagnostics.js.map +1 -0
  196. package/dist/data/diagnostics/fixtures.d.ts +3 -0
  197. package/dist/data/diagnostics/fixtures.d.ts.map +1 -0
  198. package/dist/data/diagnostics/jvm-stacktrace.d.ts +34 -0
  199. package/dist/data/diagnostics/jvm-stacktrace.d.ts.map +1 -0
  200. package/dist/data/diagnostics/jvm-stacktrace.js +190 -0
  201. package/dist/data/diagnostics/jvm-stacktrace.js.map +1 -0
  202. package/dist/data/diagnostics/stacktrace-parse.d.ts +11 -0
  203. package/dist/data/diagnostics/stacktrace-parse.d.ts.map +1 -0
  204. package/dist/data/diagnostics/stacktrace-parse.js +87 -0
  205. package/dist/data/diagnostics/stacktrace-parse.js.map +1 -0
  206. package/dist/data/diagnostics/stacktrace.d.ts +38 -0
  207. package/dist/data/diagnostics/stacktrace.d.ts.map +1 -0
  208. package/dist/data/diagnostics/stacktrace.js +119 -0
  209. package/dist/data/diagnostics/stacktrace.js.map +1 -0
  210. package/dist/data/diagnostics/types.d.ts +30 -0
  211. package/dist/data/diagnostics/types.d.ts.map +1 -0
  212. package/dist/data/diagnostics/utils.d.ts +8 -0
  213. package/dist/data/diagnostics/utils.d.ts.map +1 -0
  214. package/dist/data/diagnostics/utils.js +59 -0
  215. package/dist/data/diagnostics/utils.js.map +1 -0
  216. package/dist/data/har/HarPanel.d.ts +9 -0
  217. package/dist/data/har/HarPanel.d.ts.map +1 -0
  218. package/dist/data/har/HarPanel.js +175 -0
  219. package/dist/data/har/HarPanel.js.map +1 -0
  220. package/dist/data/har/fixtures.d.ts +3 -0
  221. package/dist/data/har/fixtures.d.ts.map +1 -0
  222. package/dist/data/har/types.d.ts +47 -0
  223. package/dist/data/har/types.d.ts.map +1 -0
  224. package/dist/data.d.ts +39 -0
  225. package/dist/data.d.ts.map +1 -0
  226. package/dist/data.js +109 -0
  227. package/dist/data.js.map +1 -0
  228. package/dist/hooks/use-density.d.ts +22 -0
  229. package/dist/hooks/use-density.d.ts.map +1 -0
  230. package/dist/hooks/use-density.js +54 -0
  231. package/dist/hooks/use-density.js.map +1 -0
  232. package/dist/hooks/use-history-route.d.ts +6 -0
  233. package/dist/hooks/use-history-route.d.ts.map +1 -0
  234. package/dist/hooks/use-history-route.js +31 -0
  235. package/dist/hooks/use-history-route.js.map +1 -0
  236. package/dist/hooks/use-sort.d.ts +17 -0
  237. package/dist/hooks/use-sort.d.ts.map +1 -0
  238. package/dist/hooks/use-sort.js +42 -0
  239. package/dist/hooks/use-sort.js.map +1 -0
  240. package/dist/hooks/use-theme.d.ts +17 -0
  241. package/dist/hooks/use-theme.d.ts.map +1 -0
  242. package/dist/hooks/use-theme.js +68 -0
  243. package/dist/hooks/use-theme.js.map +1 -0
  244. package/dist/hooks.d.ts +5 -0
  245. package/dist/hooks.d.ts.map +1 -0
  246. package/dist/hooks.js +14 -0
  247. package/dist/hooks.js.map +1 -0
  248. package/dist/index.d.ts +7 -0
  249. package/dist/index.d.ts.map +1 -0
  250. package/dist/index.js +195 -0
  251. package/dist/index.js.map +1 -0
  252. package/dist/layout/Section.d.ts +23 -0
  253. package/dist/layout/Section.d.ts.map +1 -0
  254. package/dist/layout/Section.js +73 -0
  255. package/dist/layout/Section.js.map +1 -0
  256. package/dist/layout/SplitPane.d.ts +13 -0
  257. package/dist/layout/SplitPane.d.ts.map +1 -0
  258. package/dist/layout/SplitPane.js +72 -0
  259. package/dist/layout/SplitPane.js.map +1 -0
  260. package/dist/lib/palette.d.ts +4 -0
  261. package/dist/lib/palette.d.ts.map +1 -0
  262. package/dist/lib/palette.js +35 -0
  263. package/dist/lib/palette.js.map +1 -0
  264. package/dist/lib/size.d.ts +6 -0
  265. package/dist/lib/size.d.ts.map +1 -0
  266. package/dist/lib/size.js +14 -0
  267. package/dist/lib/size.js.map +1 -0
  268. package/dist/lib/utils.d.ts +3 -0
  269. package/dist/lib/utils.d.ts.map +1 -0
  270. package/dist/lib/utils.js +9 -0
  271. package/dist/lib/utils.js.map +1 -0
  272. package/dist/overlay/HoverCard.d.ts +13 -0
  273. package/dist/overlay/HoverCard.d.ts.map +1 -0
  274. package/dist/overlay/HoverCard.js +170 -0
  275. package/dist/overlay/HoverCard.js.map +1 -0
  276. package/dist/overlay/Modal.d.ts +17 -0
  277. package/dist/overlay/Modal.d.ts.map +1 -0
  278. package/dist/overlay/Modal.js +91 -0
  279. package/dist/overlay/Modal.js.map +1 -0
  280. package/dist/rpc/AcceptPicker.d.ts +52 -0
  281. package/dist/rpc/AcceptPicker.d.ts.map +1 -0
  282. package/dist/rpc/AcceptPicker.js +126 -0
  283. package/dist/rpc/AcceptPicker.js.map +1 -0
  284. package/dist/rpc/ApiExplorer.d.ts +11 -0
  285. package/dist/rpc/ApiExplorer.d.ts.map +1 -0
  286. package/dist/rpc/ApiExplorer.js +37 -0
  287. package/dist/rpc/ApiExplorer.js.map +1 -0
  288. package/dist/rpc/CommandForm.d.ts +15 -0
  289. package/dist/rpc/CommandForm.d.ts.map +1 -0
  290. package/dist/rpc/CommandForm.js +356 -0
  291. package/dist/rpc/CommandForm.js.map +1 -0
  292. package/dist/rpc/CommandOutput.d.ts +11 -0
  293. package/dist/rpc/CommandOutput.d.ts.map +1 -0
  294. package/dist/rpc/CommandOutput.js +195 -0
  295. package/dist/rpc/CommandOutput.js.map +1 -0
  296. package/dist/rpc/EndpointList.d.ts +18 -0
  297. package/dist/rpc/EndpointList.d.ts.map +1 -0
  298. package/dist/rpc/EndpointList.js +56 -0
  299. package/dist/rpc/EndpointList.js.map +1 -0
  300. package/dist/rpc/EntityExplorerApp.d.ts +15 -0
  301. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -0
  302. package/dist/rpc/EntityExplorerApp.js +282 -0
  303. package/dist/rpc/EntityExplorerApp.js.map +1 -0
  304. package/dist/rpc/ExecutionResult.d.ts +14 -0
  305. package/dist/rpc/ExecutionResult.d.ts.map +1 -0
  306. package/dist/rpc/ExecutionResult.js +51 -0
  307. package/dist/rpc/ExecutionResult.js.map +1 -0
  308. package/dist/rpc/FilterForm.d.ts +22 -0
  309. package/dist/rpc/FilterForm.d.ts.map +1 -0
  310. package/dist/rpc/FilterForm.js +392 -0
  311. package/dist/rpc/FilterForm.js.map +1 -0
  312. package/dist/rpc/InlineError.d.ts +7 -0
  313. package/dist/rpc/InlineError.d.ts.map +1 -0
  314. package/dist/rpc/InlineError.js +54 -0
  315. package/dist/rpc/InlineError.js.map +1 -0
  316. package/dist/rpc/OperationActionDialog.d.ts +12 -0
  317. package/dist/rpc/OperationActionDialog.d.ts.map +1 -0
  318. package/dist/rpc/OperationActionDialog.js +105 -0
  319. package/dist/rpc/OperationActionDialog.js.map +1 -0
  320. package/dist/rpc/OperationCatalog.d.ts +21 -0
  321. package/dist/rpc/OperationCatalog.d.ts.map +1 -0
  322. package/dist/rpc/OperationCatalog.js +339 -0
  323. package/dist/rpc/OperationCatalog.js.map +1 -0
  324. package/dist/rpc/OperationCommandPage.d.ts +22 -0
  325. package/dist/rpc/OperationCommandPage.d.ts.map +1 -0
  326. package/dist/rpc/OperationCommandPage.js +484 -0
  327. package/dist/rpc/OperationCommandPage.js.map +1 -0
  328. package/dist/rpc/OperationEntityPage.d.ts +23 -0
  329. package/dist/rpc/OperationEntityPage.d.ts.map +1 -0
  330. package/dist/rpc/OperationEntityPage.js +218 -0
  331. package/dist/rpc/OperationEntityPage.js.map +1 -0
  332. package/dist/rpc/classify.d.ts +8 -0
  333. package/dist/rpc/classify.d.ts.map +1 -0
  334. package/dist/rpc/classify.js +76 -0
  335. package/dist/rpc/classify.js.map +1 -0
  336. package/dist/rpc/clickyMetadata.d.ts +12 -0
  337. package/dist/rpc/clickyMetadata.d.ts.map +1 -0
  338. package/dist/rpc/clickyMetadata.js +71 -0
  339. package/dist/rpc/clickyMetadata.js.map +1 -0
  340. package/dist/rpc/formMetadata.d.ts +27 -0
  341. package/dist/rpc/formMetadata.d.ts.map +1 -0
  342. package/dist/rpc/formMetadata.js +250 -0
  343. package/dist/rpc/formMetadata.js.map +1 -0
  344. package/dist/rpc/types.d.ts +109 -0
  345. package/dist/rpc/types.d.ts.map +1 -0
  346. package/dist/rpc/types.js +8 -0
  347. package/dist/rpc/types.js.map +1 -0
  348. package/dist/rpc/useOperations.d.ts +346 -0
  349. package/dist/rpc/useOperations.d.ts.map +1 -0
  350. package/dist/rpc/useOperations.js +31 -0
  351. package/dist/rpc/useOperations.js.map +1 -0
  352. package/dist/rpc.d.ts +14 -0
  353. package/dist/rpc.d.ts.map +1 -0
  354. package/dist/rpc.js +37 -0
  355. package/dist/rpc.js.map +1 -0
  356. package/dist/styles.css +2 -0
  357. package/dist/styles.d.ts +1 -0
  358. package/dist/styles.d.ts.map +1 -0
  359. package/dist/styles.js +2 -0
  360. package/dist/styles.js.map +1 -0
  361. package/dist/tailwind-preset.d.ts +4 -0
  362. package/dist/tailwind-preset.d.ts.map +1 -0
  363. package/dist/tailwind-preset.js +69 -0
  364. package/dist/tailwind-preset.js.map +1 -0
  365. package/dist/utils.d.ts +4 -0
  366. package/dist/utils.d.ts.map +1 -0
  367. package/dist/utils.js +12 -0
  368. package/dist/utils.js.map +1 -0
  369. package/package.json +83 -40
  370. package/dist/index.d.mts +0 -834
  371. package/dist/index.d.mts.map +0 -1
  372. package/dist/index.mjs +0 -2918
  373. package/dist/index.mjs.map +0 -1
  374. package/dist/tailwind-preset.d.mts +0 -7
  375. package/dist/tailwind-preset.d.mts.map +0 -1
  376. package/dist/tailwind-preset.mjs +0 -64
  377. package/dist/tailwind-preset.mjs.map +0 -1
  378. package/src/styles/tokens.css +0 -78
@@ -0,0 +1,87 @@
1
+ const frameRe = /^\s*at\s+([\w$.]+)\.([\w$<>]+)\(([^)]+)\)/;
2
+ const headerRe = /^([\w.$]+(?:Exception|Error|Throwable))(?::\s*(.*))?$/;
3
+ const continuationRe = /^\.\.\.\s+\d+\s+more$/;
4
+ const runtimePrefixes = ["java.", "javax.", "sun.", "jdk.", "com.sun.", "oracle.jrockit."];
5
+ function parseJavaStackTrace(input) {
6
+ const out = {
7
+ causedBy: [],
8
+ frames: [],
9
+ language: "java"
10
+ };
11
+ if (!input || !input.trim()) return out;
12
+ const headerLines = [];
13
+ for (const raw of input.split("\n")) {
14
+ const trimmed = raw.trim();
15
+ if (!trimmed) continue;
16
+ if (continuationRe.test(trimmed)) continue;
17
+ const frameMatch = frameRe.exec(raw);
18
+ if (frameMatch && frameMatch[1] && frameMatch[2] && frameMatch[3] !== void 0) {
19
+ out.frames.push(buildFrame(frameMatch[1], frameMatch[2], frameMatch[3]));
20
+ continue;
21
+ }
22
+ if (trimmed.startsWith("Caused by:")) {
23
+ out.causedBy.push(trimmed.slice("Caused by:".length).trim());
24
+ continue;
25
+ }
26
+ if (trimmed.startsWith("Internal Exception:")) {
27
+ out.causedBy.push(trimmed.slice("Internal Exception:".length).trim());
28
+ continue;
29
+ }
30
+ if (!out.exceptionClass) {
31
+ const headerMatch = headerRe.exec(trimmed);
32
+ if (headerMatch && headerMatch[1]) {
33
+ out.exceptionClass = headerMatch[1];
34
+ if (headerMatch[2]) out.message = headerMatch[2];
35
+ continue;
36
+ }
37
+ }
38
+ headerLines.push(trimmed);
39
+ }
40
+ if (!out.message && headerLines.length > 0) {
41
+ out.message = headerLines.join(" ");
42
+ }
43
+ return out;
44
+ }
45
+ function buildFrame(cls, method, locRaw) {
46
+ const loc = locRaw.trim();
47
+ let file;
48
+ let line;
49
+ let nativeMethod = false;
50
+ if (loc === "Native Method") {
51
+ nativeMethod = true;
52
+ } else if (loc !== "Unknown Source") {
53
+ const cleaned = (loc.split(" ~[")[0] ?? loc).trim();
54
+ const i = cleaned.lastIndexOf(":");
55
+ if (i >= 0) {
56
+ file = cleaned.slice(0, i);
57
+ const n = Number(cleaned.slice(i + 1));
58
+ if (Number.isFinite(n)) line = n;
59
+ } else {
60
+ file = cleaned;
61
+ }
62
+ }
63
+ const functionName = `${cls}.${method}`;
64
+ const location = file ? line ? `${file}:${line}` : file : nativeMethod ? "Native Method" : void 0;
65
+ const frame = {
66
+ functionName,
67
+ displayName: shortDisplay(cls, method),
68
+ kind: "frame",
69
+ runtime: runtimePrefixes.some((p) => cls.startsWith(p)),
70
+ nativeMethod,
71
+ class: cls,
72
+ method
73
+ };
74
+ if (file !== void 0) frame.file = file;
75
+ if (line !== void 0) frame.line = line;
76
+ if (location !== void 0) frame.location = location;
77
+ return frame;
78
+ }
79
+ function shortDisplay(cls, method) {
80
+ const parts = cls.split(".");
81
+ const last = parts[parts.length - 1] ?? cls;
82
+ return `${last}.${method}`;
83
+ }
84
+ export {
85
+ parseJavaStackTrace
86
+ };
87
+ //# sourceMappingURL=stacktrace-parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stacktrace-parse.js","sources":["../../../src/data/diagnostics/stacktrace-parse.ts"],"sourcesContent":["import type { ParsedThreadFrame } from \"./jvm-stacktrace\";\n\n// ParsedStackFrame is the React mirror of Go's clicky api.StackFrame. We reuse\n// ParsedThreadFrame so the existing JvmStackFrameRow renderer can display it.\nexport type ParsedStackFrame = ParsedThreadFrame;\n\nexport interface ParsedStackTrace {\n exceptionClass?: string;\n message?: string;\n causedBy: string[];\n frames: ParsedStackFrame[];\n language: \"java\";\n}\n\nconst frameRe = /^\\s*at\\s+([\\w$.]+)\\.([\\w$<>]+)\\(([^)]+)\\)/;\nconst headerRe = /^([\\w.$]+(?:Exception|Error|Throwable))(?::\\s*(.*))?$/;\nconst continuationRe = /^\\.\\.\\.\\s+\\d+\\s+more$/;\n\nconst runtimePrefixes = [\"java.\", \"javax.\", \"sun.\", \"jdk.\", \"com.sun.\", \"or\" + \"acle.jrockit.\"];\n\n// parseJavaStackTrace decodes a free-form Java exception dump (the body that\n// printStackTrace() emits, optionally wrapped by EclipseLink \"Internal\n// Exception:\" / \"Caused by:\" markers) into a renderable shape. It is the\n// React-side counterpart to Go's api.ParseJavaStackTrace.\nexport function parseJavaStackTrace(input: string): ParsedStackTrace {\n const out: ParsedStackTrace = {\n causedBy: [],\n frames: [],\n language: \"java\",\n };\n if (!input || !input.trim()) return out;\n\n const headerLines: string[] = [];\n for (const raw of input.split(\"\\n\")) {\n const trimmed = raw.trim();\n if (!trimmed) continue;\n if (continuationRe.test(trimmed)) continue;\n\n const frameMatch = frameRe.exec(raw);\n if (frameMatch && frameMatch[1] && frameMatch[2] && frameMatch[3] !== undefined) {\n out.frames.push(buildFrame(frameMatch[1], frameMatch[2], frameMatch[3]));\n continue;\n }\n\n if (trimmed.startsWith(\"Caused by:\")) {\n out.causedBy.push(trimmed.slice(\"Caused by:\".length).trim());\n continue;\n }\n if (trimmed.startsWith(\"Internal Exception:\")) {\n out.causedBy.push(trimmed.slice(\"Internal Exception:\".length).trim());\n continue;\n }\n\n if (!out.exceptionClass) {\n const headerMatch = headerRe.exec(trimmed);\n if (headerMatch && headerMatch[1]) {\n out.exceptionClass = headerMatch[1];\n if (headerMatch[2]) out.message = headerMatch[2];\n continue;\n }\n }\n\n headerLines.push(trimmed);\n }\n\n if (!out.message && headerLines.length > 0) {\n out.message = headerLines.join(\" \");\n }\n\n return out;\n}\n\nfunction buildFrame(cls: string, method: string, locRaw: string): ParsedStackFrame {\n const loc = locRaw.trim();\n let file: string | undefined;\n let line: number | undefined;\n let nativeMethod = false;\n if (loc === \"Native Method\") {\n nativeMethod = true;\n } else if (loc !== \"Unknown Source\") {\n const cleaned = (loc.split(\" ~[\")[0] ?? loc).trim();\n const i = cleaned.lastIndexOf(\":\");\n if (i >= 0) {\n file = cleaned.slice(0, i);\n const n = Number(cleaned.slice(i + 1));\n if (Number.isFinite(n)) line = n;\n } else {\n file = cleaned;\n }\n }\n const functionName = `${cls}.${method}`;\n const location = file\n ? line\n ? `${file}:${line}`\n : file\n : nativeMethod\n ? \"Native Method\"\n : undefined;\n const frame: ParsedStackFrame = {\n functionName,\n displayName: shortDisplay(cls, method),\n kind: \"frame\",\n runtime: runtimePrefixes.some((p) => cls.startsWith(p)),\n nativeMethod,\n class: cls,\n method,\n };\n if (file !== undefined) frame.file = file;\n if (line !== undefined) frame.line = line;\n if (location !== undefined) frame.location = location;\n return frame;\n}\n\nfunction shortDisplay(cls: string, method: string): string {\n const parts = cls.split(\".\");\n const last = parts[parts.length - 1] ?? cls;\n return `${last}.${method}`;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { ParsedThread } from './jvm-stacktrace';
2
+ export type DumpFormat = "go" | "jvm" | "unknown";
3
+ export type ParsedStack = {
4
+ format: "go";
5
+ goroutines: ParsedGoroutine[];
6
+ } | {
7
+ format: "jvm";
8
+ threads: ParsedThread[];
9
+ } | {
10
+ format: "unknown";
11
+ goroutines: [];
12
+ threads: [];
13
+ };
14
+ export declare function detectDumpFormat(text: string): DumpFormat;
15
+ export declare function parseStackDump(text: string): ParsedStack;
16
+ export declare function countStackByState(stack: ParsedStack): Map<string, number>;
17
+ export interface ParsedGoroutineFrame {
18
+ functionName: string;
19
+ displayName: string;
20
+ file?: string;
21
+ location?: string;
22
+ line?: number;
23
+ kind: "frame" | "created_by";
24
+ runtime: boolean;
25
+ }
26
+ export interface ParsedGoroutine {
27
+ id: number;
28
+ state: string;
29
+ rawState: string;
30
+ frames: ParsedGoroutineFrame[];
31
+ raw: string;
32
+ userFrameCount: number;
33
+ topFunction?: string;
34
+ searchText: string;
35
+ }
36
+ export declare function parseGoroutineDump(text: string): ParsedGoroutine[];
37
+ export declare function countGoroutinesByState(goroutines: ParsedGoroutine[]): Map<string, number>;
38
+ //# sourceMappingURL=stacktrace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stacktrace.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/stacktrace.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9F,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC;AAElD,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,eAAe,EAAE,CAAA;CAAE,GAC/C;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,EAAE,CAAC;IAAC,OAAO,EAAE,EAAE,CAAA;CAAE,CAAC;AAEvD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAQzD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CASxD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAIzE;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,YAAY,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAmElE;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAMzF"}
@@ -0,0 +1,119 @@
1
+ import { countThreadsByState, parseJvmThreadDump } from "./jvm-stacktrace.js";
2
+ function detectDumpFormat(text) {
3
+ const trimmed = text.trim();
4
+ if (!trimmed) return "unknown";
5
+ if (/^"[^"]*"[^\n]*\b(prio=|tid=|nid=)/m.test(trimmed)) return "jvm";
6
+ if (/^goroutine\s+\d+\s+\[[^\]]+\]:/m.test(trimmed)) return "go";
7
+ return "unknown";
8
+ }
9
+ function parseStackDump(text) {
10
+ const format = detectDumpFormat(text);
11
+ if (format === "jvm") {
12
+ return { format: "jvm", threads: parseJvmThreadDump(text) };
13
+ }
14
+ if (format === "go") {
15
+ return { format: "go", goroutines: parseGoroutineDump(text) };
16
+ }
17
+ return { format: "unknown", goroutines: [], threads: [] };
18
+ }
19
+ function countStackByState(stack) {
20
+ if (stack.format === "jvm") return countThreadsByState(stack.threads);
21
+ if (stack.format === "go") return countGoroutinesByState(stack.goroutines);
22
+ return /* @__PURE__ */ new Map();
23
+ }
24
+ const headerRe = /^goroutine\s+(\d+)\s+\[(.+?)\]:$/;
25
+ const fileRe = /^\s*(.+?):(\d+)(?:\s+\+0x[0-9a-f]+)?$/i;
26
+ const goSrcPrefixRe = /^\/usr\/local\/go[\d.]+\/src\//;
27
+ const goWorkspacePrefixRe = /^.*?\/go\/src\//;
28
+ const goPkgModPrefixRe = /^.*?\/go\/pkg\/mod\//;
29
+ function parseGoroutineDump(text) {
30
+ var _a, _b;
31
+ const trimmed = text.trim();
32
+ if (!trimmed) return [];
33
+ const blocks = trimmed.split(/\n\s*\n+/);
34
+ const goroutines = [];
35
+ for (const block of blocks) {
36
+ const lines = block.split("\n").map((line) => line.replace(/\r$/, ""));
37
+ const header = (_a = lines[0]) == null ? void 0 : _a.trim();
38
+ const match = headerRe.exec(header || "");
39
+ if (!match) continue;
40
+ const id = Number(match[1] ?? 0);
41
+ const rawState = match[2] ?? "";
42
+ const state = normalizeState(rawState);
43
+ const frames = [];
44
+ for (let i = 1; i < lines.length; i++) {
45
+ const line = lines[i];
46
+ if (line == null) continue;
47
+ const trimmedLine = line.trim();
48
+ if (!trimmedLine) continue;
49
+ const fileMatch = fileRe.exec(trimmedLine);
50
+ const previousFrame = frames[frames.length - 1];
51
+ if (fileMatch && previousFrame && !previousFrame.file) {
52
+ previousFrame.file = fileMatch[1] ?? "";
53
+ previousFrame.line = Number(fileMatch[2] ?? 0);
54
+ continue;
55
+ }
56
+ const kind = trimmedLine.startsWith("created by ") ? "created_by" : "frame";
57
+ const functionName = kind === "created_by" ? trimmedLine.slice("created by ".length) : trimmedLine;
58
+ frames.push({
59
+ functionName,
60
+ displayName: sanitizeFunctionName(functionName),
61
+ kind,
62
+ runtime: isRuntimeFrame(functionName)
63
+ });
64
+ }
65
+ for (const frame of frames) {
66
+ if (frame.file) {
67
+ frame.file = normalizeFilePath(frame.file);
68
+ frame.location = `${frame.file}${frame.line ? `:${frame.line}` : ""}`;
69
+ }
70
+ }
71
+ const topFunction = (_b = frames.find((frame) => frame.kind === "frame")) == null ? void 0 : _b.functionName;
72
+ goroutines.push({
73
+ id,
74
+ state,
75
+ rawState,
76
+ frames,
77
+ raw: block,
78
+ userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === "frame").length,
79
+ searchText: `${header}
80
+ ${frames.map((frame) => `${frame.functionName} ${frame.file || ""}`).join("\n")}`.toLowerCase(),
81
+ ...topFunction !== void 0 ? { topFunction } : {}
82
+ });
83
+ }
84
+ return goroutines;
85
+ }
86
+ function countGoroutinesByState(goroutines) {
87
+ const counts = /* @__PURE__ */ new Map();
88
+ for (const goroutine of goroutines) {
89
+ counts.set(goroutine.state, (counts.get(goroutine.state) || 0) + 1);
90
+ }
91
+ return counts;
92
+ }
93
+ function normalizeState(value) {
94
+ return (value.split(",")[0] ?? "").trim().toLowerCase();
95
+ }
96
+ function isRuntimeFrame(functionName) {
97
+ return functionName.startsWith("runtime.") || functionName.startsWith("runtime/") || functionName.startsWith("internal/") || functionName.startsWith("runtime/internal/") || functionName.startsWith("syscall.") || functionName.startsWith("reflect.");
98
+ }
99
+ function sanitizeFunctionName(functionName) {
100
+ let name = functionName.trim();
101
+ const paren = name.indexOf("(");
102
+ if (paren !== -1) name = name.slice(0, paren);
103
+ name = name.replace(/\.\(\*([^)]+)\)\./g, ".$1.");
104
+ return stripPackageQualifier(name);
105
+ }
106
+ function stripPackageQualifier(name) {
107
+ return name.replace(/^((?:[^./\s]+\/)+)([^./\s]+)\./, "$2.");
108
+ }
109
+ function normalizeFilePath(path) {
110
+ return path.replace(goSrcPrefixRe, "").replace(goWorkspacePrefixRe, "").replace(goPkgModPrefixRe, "");
111
+ }
112
+ export {
113
+ countGoroutinesByState,
114
+ countStackByState,
115
+ detectDumpFormat,
116
+ parseGoroutineDump,
117
+ parseStackDump
118
+ };
119
+ //# sourceMappingURL=stacktrace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stacktrace.js","sources":["../../../src/data/diagnostics/stacktrace.ts"],"sourcesContent":["import { parseJvmThreadDump, countThreadsByState, type ParsedThread } from \"./jvm-stacktrace\";\n\nexport type DumpFormat = \"go\" | \"jvm\" | \"unknown\";\n\nexport type ParsedStack =\n | { format: \"go\"; goroutines: ParsedGoroutine[] }\n | { format: \"jvm\"; threads: ParsedThread[] }\n | { format: \"unknown\"; goroutines: []; threads: [] };\n\nexport function detectDumpFormat(text: string): DumpFormat {\n const trimmed = text.trim();\n if (!trimmed) return \"unknown\";\n // JVM header: `\"name\" ... prio=` OR `\"name\" ... tid=`\n if (/^\"[^\"]*\"[^\\n]*\\b(prio=|tid=|nid=)/m.test(trimmed)) return \"jvm\";\n // Go header: `goroutine N [state]:`\n if (/^goroutine\\s+\\d+\\s+\\[[^\\]]+\\]:/m.test(trimmed)) return \"go\";\n return \"unknown\";\n}\n\nexport function parseStackDump(text: string): ParsedStack {\n const format = detectDumpFormat(text);\n if (format === \"jvm\") {\n return { format: \"jvm\", threads: parseJvmThreadDump(text) };\n }\n if (format === \"go\") {\n return { format: \"go\", goroutines: parseGoroutineDump(text) };\n }\n return { format: \"unknown\", goroutines: [], threads: [] };\n}\n\nexport function countStackByState(stack: ParsedStack): Map<string, number> {\n if (stack.format === \"jvm\") return countThreadsByState(stack.threads);\n if (stack.format === \"go\") return countGoroutinesByState(stack.goroutines);\n return new Map();\n}\n\nexport interface ParsedGoroutineFrame {\n functionName: string;\n displayName: string;\n file?: string;\n location?: string;\n line?: number;\n kind: \"frame\" | \"created_by\";\n runtime: boolean;\n}\n\nexport interface ParsedGoroutine {\n id: number;\n state: string;\n rawState: string;\n frames: ParsedGoroutineFrame[];\n raw: string;\n userFrameCount: number;\n topFunction?: string;\n searchText: string;\n}\n\nconst headerRe = /^goroutine\\s+(\\d+)\\s+\\[(.+?)\\]:$/;\nconst fileRe = /^\\s*(.+?):(\\d+)(?:\\s+\\+0x[0-9a-f]+)?$/i;\nconst goSrcPrefixRe = /^\\/usr\\/local\\/go[\\d.]+\\/src\\//;\nconst goWorkspacePrefixRe = /^.*?\\/go\\/src\\//;\nconst goPkgModPrefixRe = /^.*?\\/go\\/pkg\\/mod\\//;\n\nexport function parseGoroutineDump(text: string): ParsedGoroutine[] {\n const trimmed = text.trim();\n if (!trimmed) return [];\n\n const blocks = trimmed.split(/\\n\\s*\\n+/);\n const goroutines: ParsedGoroutine[] = [];\n\n for (const block of blocks) {\n const lines = block.split(\"\\n\").map((line) => line.replace(/\\r$/, \"\"));\n const header = lines[0]?.trim();\n const match = headerRe.exec(header || \"\");\n if (!match) continue;\n\n const id = Number(match[1] ?? 0);\n const rawState = match[2] ?? \"\";\n const state = normalizeState(rawState);\n const frames: ParsedGoroutineFrame[] = [];\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i];\n if (line == null) continue;\n const trimmedLine = line.trim();\n if (!trimmedLine) continue;\n\n const fileMatch = fileRe.exec(trimmedLine);\n const previousFrame = frames[frames.length - 1];\n if (fileMatch && previousFrame && !previousFrame.file) {\n previousFrame.file = fileMatch[1] ?? \"\";\n previousFrame.line = Number(fileMatch[2] ?? 0);\n continue;\n }\n\n const kind = trimmedLine.startsWith(\"created by \") ? \"created_by\" : \"frame\";\n const functionName =\n kind === \"created_by\" ? trimmedLine.slice(\"created by \".length) : trimmedLine;\n frames.push({\n functionName,\n displayName: sanitizeFunctionName(functionName),\n kind,\n runtime: isRuntimeFrame(functionName),\n });\n }\n\n for (const frame of frames) {\n if (frame.file) {\n frame.file = normalizeFilePath(frame.file);\n frame.location = `${frame.file}${frame.line ? `:${frame.line}` : \"\"}`;\n }\n }\n\n const topFunction = frames.find((frame) => frame.kind === \"frame\")?.functionName;\n\n goroutines.push({\n id,\n state,\n rawState,\n frames,\n raw: block,\n userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === \"frame\").length,\n searchText: `${header}\\n${frames\n .map((frame) => `${frame.functionName} ${frame.file || \"\"}`)\n .join(\"\\n\")}`.toLowerCase(),\n ...(topFunction !== undefined ? { topFunction } : {}),\n });\n }\n\n return goroutines;\n}\n\nexport function countGoroutinesByState(goroutines: ParsedGoroutine[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const goroutine of goroutines) {\n counts.set(goroutine.state, (counts.get(goroutine.state) || 0) + 1);\n }\n return counts;\n}\n\nfunction normalizeState(value: string): string {\n return (value.split(\",\")[0] ?? \"\").trim().toLowerCase();\n}\n\nfunction isRuntimeFrame(functionName: string): boolean {\n return (\n functionName.startsWith(\"runtime.\") ||\n functionName.startsWith(\"runtime/\") ||\n functionName.startsWith(\"internal/\") ||\n functionName.startsWith(\"runtime/internal/\") ||\n functionName.startsWith(\"syscall.\") ||\n functionName.startsWith(\"reflect.\")\n );\n}\n\nfunction sanitizeFunctionName(functionName: string): string {\n let name = functionName.trim();\n const paren = name.indexOf(\"(\");\n if (paren !== -1) name = name.slice(0, paren);\n name = name.replace(/\\.\\(\\*([^)]+)\\)\\./g, \".$1.\");\n return stripPackageQualifier(name);\n}\n\nfunction stripPackageQualifier(name: string): string {\n return name.replace(/^((?:[^./\\s]+\\/)+)([^./\\s]+)\\./, \"$2.\");\n}\n\nfunction normalizeFilePath(path: string): string {\n return path\n .replace(goSrcPrefixRe, \"\")\n .replace(goWorkspacePrefixRe, \"\")\n .replace(goPkgModPrefixRe, \"\");\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface ProcessNode {
2
+ pid: number;
3
+ ppid?: number;
4
+ name?: string;
5
+ command?: string;
6
+ status?: string;
7
+ cpu_percent?: number;
8
+ rss?: number;
9
+ vms?: number;
10
+ open_files?: number;
11
+ is_root?: boolean;
12
+ children?: ProcessNode[];
13
+ stack_capture?: StackCapture;
14
+ }
15
+ export interface StackCapture {
16
+ status: "ready" | "unsupported" | "error";
17
+ supported?: boolean;
18
+ text?: string;
19
+ error?: string;
20
+ collected_at?: string;
21
+ }
22
+ export interface RunMeta {
23
+ version?: string;
24
+ sequence: number;
25
+ kind?: "initial" | "rerun" | string;
26
+ started?: string;
27
+ ended?: string;
28
+ args?: Record<string, unknown>;
29
+ }
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,GAAG,aAAa,GAAG,OAAO,CAAC;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC"}
@@ -0,0 +1,8 @@
1
+ import { ProcessNode } from './types';
2
+ export declare function countProcesses(node?: ProcessNode): number;
3
+ export declare function findProcessByPID(node: ProcessNode | undefined, pid: number): ProcessNode | null;
4
+ export declare function processStateIcon(status?: string): string;
5
+ export declare function processStateColor(status?: string): string;
6
+ export declare function formatBytes(value?: number): string;
7
+ export declare function processLabel(node: ProcessNode): string;
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAGzD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQ/F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAUlD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAOtD"}
@@ -0,0 +1,59 @@
1
+ function countProcesses(node) {
2
+ if (!node) return 0;
3
+ return 1 + (node.children || []).reduce((sum, child) => sum + countProcesses(child), 0);
4
+ }
5
+ function findProcessByPID(node, pid) {
6
+ if (!node) return null;
7
+ if (node.pid === pid) return node;
8
+ for (const child of node.children || []) {
9
+ const found = findProcessByPID(child, pid);
10
+ if (found) return found;
11
+ }
12
+ return null;
13
+ }
14
+ function processStateIcon(status) {
15
+ const value = (status || "").toLowerCase();
16
+ if (value.includes("run")) return "codicon:play-circle";
17
+ if (value.includes("sleep") || value.includes("idle")) return "codicon:clock";
18
+ if (value.includes("stop") || value.includes("halt")) return "codicon:debug-pause";
19
+ if (value.includes("zombie") || value.includes("dead")) return "codicon:error";
20
+ if (value.includes("wait") || value.includes("block")) return "codicon:debug-step-over";
21
+ return "codicon:circle-filled";
22
+ }
23
+ function processStateColor(status) {
24
+ const value = (status || "").toLowerCase();
25
+ if (value.includes("run")) return "text-green-600";
26
+ if (value.includes("sleep") || value.includes("idle")) return "text-amber-500";
27
+ if (value.includes("stop") || value.includes("halt")) return "text-orange-600";
28
+ if (value.includes("zombie") || value.includes("dead")) return "text-red-600";
29
+ if (value.includes("wait") || value.includes("block")) return "text-blue-600";
30
+ return "text-muted-foreground";
31
+ }
32
+ function formatBytes(value) {
33
+ if (!value || value <= 0) return "0 B";
34
+ const units = ["B", "KB", "MB", "GB", "TB"];
35
+ let size = value;
36
+ let unit = 0;
37
+ while (size >= 1024 && unit < units.length - 1) {
38
+ size /= 1024;
39
+ unit++;
40
+ }
41
+ return `${size >= 10 || unit === 0 ? size.toFixed(0) : size.toFixed(1)} ${units[unit]}`;
42
+ }
43
+ function processLabel(node) {
44
+ if (node.name) return node.name;
45
+ if (node.command) {
46
+ const [first] = node.command.split(/\s+/, 1);
47
+ return first || `pid ${node.pid}`;
48
+ }
49
+ return `pid ${node.pid}`;
50
+ }
51
+ export {
52
+ countProcesses,
53
+ findProcessByPID,
54
+ formatBytes,
55
+ processLabel,
56
+ processStateColor,
57
+ processStateIcon
58
+ };
59
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../src/data/diagnostics/utils.ts"],"sourcesContent":["import type { ProcessNode } from \"./types\";\n\nexport function countProcesses(node?: ProcessNode): number {\n if (!node) return 0;\n return 1 + (node.children || []).reduce((sum, child) => sum + countProcesses(child), 0);\n}\n\nexport function findProcessByPID(node: ProcessNode | undefined, pid: number): ProcessNode | null {\n if (!node) return null;\n if (node.pid === pid) return node;\n for (const child of node.children || []) {\n const found = findProcessByPID(child, pid);\n if (found) return found;\n }\n return null;\n}\n\nexport function processStateIcon(status?: string): string {\n const value = (status || \"\").toLowerCase();\n if (value.includes(\"run\")) return \"codicon:play-circle\";\n if (value.includes(\"sleep\") || value.includes(\"idle\")) return \"codicon:clock\";\n if (value.includes(\"stop\") || value.includes(\"halt\")) return \"codicon:debug-pause\";\n if (value.includes(\"zombie\") || value.includes(\"dead\")) return \"codicon:error\";\n if (value.includes(\"wait\") || value.includes(\"block\")) return \"codicon:debug-step-over\";\n return \"codicon:circle-filled\";\n}\n\nexport function processStateColor(status?: string): string {\n const value = (status || \"\").toLowerCase();\n if (value.includes(\"run\")) return \"text-green-600\";\n if (value.includes(\"sleep\") || value.includes(\"idle\")) return \"text-amber-500\";\n if (value.includes(\"stop\") || value.includes(\"halt\")) return \"text-orange-600\";\n if (value.includes(\"zombie\") || value.includes(\"dead\")) return \"text-red-600\";\n if (value.includes(\"wait\") || value.includes(\"block\")) return \"text-blue-600\";\n return \"text-muted-foreground\";\n}\n\nexport function formatBytes(value?: number): string {\n if (!value || value <= 0) return \"0 B\";\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n let size = value;\n let unit = 0;\n while (size >= 1024 && unit < units.length - 1) {\n size /= 1024;\n unit++;\n }\n return `${size >= 10 || unit === 0 ? size.toFixed(0) : size.toFixed(1)} ${units[unit]}`;\n}\n\nexport function processLabel(node: ProcessNode): string {\n if (node.name) return node.name;\n if (node.command) {\n const [first] = node.command.split(/\\s+/, 1);\n return first || `pid ${node.pid}`;\n }\n return `pid ${node.pid}`;\n}\n"],"names":[],"mappings":"AAEO,SAAS,eAAe,MAA4B;AACzD,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,KAAK,KAAK,YAAY,CAAA,GAAI,OAAO,CAAC,KAAK,UAAU,MAAM,eAAe,KAAK,GAAG,CAAC;AACxF;AAEO,SAAS,iBAAiB,MAA+B,KAAiC;AAC/F,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,KAAK,QAAQ,IAAK,QAAO;AAC7B,aAAW,SAAS,KAAK,YAAY,CAAA,GAAI;AACvC,UAAM,QAAQ,iBAAiB,OAAO,GAAG;AACzC,QAAI,MAAO,QAAO;AAAA,EACpB;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,QAAyB;AACxD,QAAM,SAAS,UAAU,IAAI,YAAA;AAC7B,MAAI,MAAM,SAAS,KAAK,EAAG,QAAO;AAClC,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC9D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC7D,MAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,EAAG,QAAO;AAC9D,SAAO;AACT;AAEO,SAAS,kBAAkB,QAAyB;AACzD,QAAM,SAAS,UAAU,IAAI,YAAA;AAC7B,MAAI,MAAM,SAAS,KAAK,EAAG,QAAO;AAClC,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC9D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC7D,MAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,EAAG,QAAO;AAC9D,SAAO;AACT;AAEO,SAAS,YAAY,OAAwB;AAClD,MAAI,CAAC,SAAS,SAAS,EAAG,QAAO;AACjC,QAAM,QAAQ,CAAC,KAAK,MAAM,MAAM,MAAM,IAAI;AAC1C,MAAI,OAAO;AACX,MAAI,OAAO;AACX,SAAO,QAAQ,QAAQ,OAAO,MAAM,SAAS,GAAG;AAC9C,YAAQ;AACR;AAAA,EACF;AACA,SAAO,GAAG,QAAQ,MAAM,SAAS,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC;AACvF;AAEO,SAAS,aAAa,MAA2B;AACtD,MAAI,KAAK,KAAM,QAAO,KAAK;AAC3B,MAAI,KAAK,SAAS;AAChB,UAAM,CAAC,KAAK,IAAI,KAAK,QAAQ,MAAM,OAAO,CAAC;AAC3C,WAAO,SAAS,OAAO,KAAK,GAAG;AAAA,EACjC;AACA,SAAO,OAAO,KAAK,GAAG;AACxB;"}
@@ -0,0 +1,9 @@
1
+ import { HAREntry } from './types';
2
+ export type HarPanelProps = {
3
+ entries: HAREntry[];
4
+ search?: string;
5
+ emptyLabel?: string;
6
+ className?: string;
7
+ };
8
+ export declare function HarPanel({ entries, search, emptyLabel, className, }: HarPanelProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=HarPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HarPanel.d.ts","sourceRoot":"","sources":["../../../src/data/har/HarPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA8CF,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,MAAM,EACN,UAAuC,EACvC,SAAS,GACV,EAAE,aAAa,2CA6Bf"}
@@ -0,0 +1,175 @@
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
3
+ import { DataTable } from "../DataTable.js";
4
+ import { JsonView } from "../JsonView.js";
5
+ const COLS = [
6
+ {
7
+ key: "request.method",
8
+ label: "Method",
9
+ shrink: true
10
+ },
11
+ {
12
+ key: "request.url",
13
+ label: "URL",
14
+ grow: true,
15
+ render: (value) => /* @__PURE__ */ jsx("span", { title: String(value ?? ""), children: String(value ?? "") })
16
+ },
17
+ {
18
+ key: "response.status",
19
+ label: "Status",
20
+ shrink: true,
21
+ render: (value) => /* @__PURE__ */ jsx("span", { className: statusColor(Number(value ?? 0)), children: String(value ?? "") }),
22
+ sortValue: (value) => Number(value ?? 0)
23
+ },
24
+ {
25
+ key: "time",
26
+ label: "Time",
27
+ align: "right",
28
+ shrink: true,
29
+ render: (value) => `${Number(value ?? 0).toFixed(0)}ms`,
30
+ sortValue: (value) => Number(value ?? 0)
31
+ },
32
+ {
33
+ key: "response.bodySize",
34
+ label: "Size",
35
+ align: "right",
36
+ shrink: true,
37
+ render: (value) => formatBytes(Number(value ?? 0)),
38
+ sortValue: (value) => Number(value ?? 0)
39
+ },
40
+ {
41
+ key: "response.content.mimeType",
42
+ label: "Type",
43
+ shrink: true
44
+ }
45
+ ];
46
+ function HarPanel({
47
+ entries,
48
+ search,
49
+ emptyLabel = "No HTTP traffic captured",
50
+ className
51
+ }) {
52
+ const filteredEntries = useMemo(() => {
53
+ if (search === void 0 || search.trim() === "") return entries;
54
+ return entries.filter((entry) => matchesSearch(search.trim().toLowerCase(), entry));
55
+ }, [entries, search]);
56
+ if (!entries || entries.length === 0) {
57
+ return /* @__PURE__ */ jsx("div", { className: "p-density-6 text-center text-muted-foreground text-sm", children: emptyLabel });
58
+ }
59
+ return /* @__PURE__ */ jsx("div", { className: `h-full ${className ?? ""}`, children: /* @__PURE__ */ jsx(
60
+ DataTable,
61
+ {
62
+ data: filteredEntries,
63
+ columns: COLS,
64
+ autoFilter: true,
65
+ showGlobalFilter: search === void 0,
66
+ globalFilterPlaceholder: "Filter URL, method, or body…",
67
+ defaultSort: { key: "time", dir: "asc" },
68
+ emptyMessage: emptyLabel,
69
+ getRowId: (entry, index) => `${entry.startedDateTime ?? index}-${entry.request.method}-${entry.request.url}-${entry.time}`,
70
+ renderExpandedRow: (entry) => /* @__PURE__ */ jsx(HarRowDetails, { entry })
71
+ }
72
+ ) });
73
+ }
74
+ function HarRowDetails({ entry }) {
75
+ var _a, _b;
76
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
77
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-density-4", children: [
78
+ /* @__PURE__ */ jsxs("div", { children: [
79
+ /* @__PURE__ */ jsx(
80
+ HeaderList,
81
+ {
82
+ title: "Request Headers",
83
+ ...entry.request.headers ? { headers: entry.request.headers } : {}
84
+ }
85
+ ),
86
+ ((_a = entry.request.postData) == null ? void 0 : _a.text) && /* @__PURE__ */ jsxs("div", { className: "mt-density-2", children: [
87
+ /* @__PURE__ */ jsx("div", { className: "font-semibold text-foreground mb-1", children: "Request Body" }),
88
+ /* @__PURE__ */ jsx("div", { className: "bg-background p-density-2 rounded border border-border overflow-auto max-h-48", children: /* @__PURE__ */ jsx(
89
+ BodyView,
90
+ {
91
+ text: entry.request.postData.text,
92
+ ...entry.request.postData.mimeType ? { mimeType: entry.request.postData.mimeType } : {}
93
+ }
94
+ ) })
95
+ ] })
96
+ ] }),
97
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
98
+ HeaderList,
99
+ {
100
+ title: "Response Headers",
101
+ ...entry.response.headers ? { headers: entry.response.headers } : {}
102
+ }
103
+ ) })
104
+ ] }),
105
+ ((_b = entry.response.content) == null ? void 0 : _b.text) && /* @__PURE__ */ jsxs("div", { className: "mt-density-3", children: [
106
+ /* @__PURE__ */ jsx("div", { className: "font-semibold text-foreground mb-1", children: "Response Body" }),
107
+ /* @__PURE__ */ jsx("div", { className: "bg-background p-density-2 rounded border border-border overflow-auto max-h-64", children: /* @__PURE__ */ jsx(
108
+ BodyView,
109
+ {
110
+ text: entry.response.content.text,
111
+ ...entry.response.content.mimeType ? { mimeType: entry.response.content.mimeType } : {}
112
+ }
113
+ ) })
114
+ ] })
115
+ ] });
116
+ }
117
+ function HeaderList({
118
+ title,
119
+ headers
120
+ }) {
121
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
122
+ /* @__PURE__ */ jsx("div", { className: "font-semibold text-foreground mb-1", children: title }),
123
+ /* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: headers == null ? void 0 : headers.map((h, i) => /* @__PURE__ */ jsxs("div", { className: "whitespace-nowrap", children: [
124
+ /* @__PURE__ */ jsxs("span", { className: "text-purple-600 dark:text-purple-400", children: [
125
+ h.name,
126
+ ":"
127
+ ] }),
128
+ " ",
129
+ h.value
130
+ ] }, i)) })
131
+ ] });
132
+ }
133
+ function BodyView({ text, mimeType }) {
134
+ if (isJsonType(mimeType)) {
135
+ const parsed = tryParseJson(text);
136
+ if (parsed !== null) return /* @__PURE__ */ jsx(JsonView, { data: parsed });
137
+ }
138
+ return /* @__PURE__ */ jsx("pre", { className: "whitespace-pre-wrap break-all", children: text });
139
+ }
140
+ function tryParseJson(text) {
141
+ try {
142
+ return JSON.parse(text);
143
+ } catch {
144
+ return null;
145
+ }
146
+ }
147
+ function isJsonType(mime) {
148
+ return !!mime && (mime.includes("json") || mime.includes("javascript"));
149
+ }
150
+ function matchesSearch(needle, entry) {
151
+ var _a, _b;
152
+ return [
153
+ entry.request.method,
154
+ entry.request.url,
155
+ (_a = entry.request.postData) == null ? void 0 : _a.text,
156
+ (_b = entry.response.content) == null ? void 0 : _b.text
157
+ ].some((value) => !!value && value.toLowerCase().includes(needle));
158
+ }
159
+ function formatBytes(bytes) {
160
+ if (bytes < 0) return "";
161
+ if (bytes < 1024) return `${bytes}B`;
162
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;
163
+ return `${(bytes / 1024 / 1024).toFixed(1)}MB`;
164
+ }
165
+ function statusColor(status) {
166
+ if (status >= 500) return "text-red-600";
167
+ if (status >= 400) return "text-amber-600";
168
+ if (status >= 300) return "text-blue-600";
169
+ if (status >= 200) return "text-green-600";
170
+ return "text-muted-foreground";
171
+ }
172
+ export {
173
+ HarPanel
174
+ };
175
+ //# sourceMappingURL=HarPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HarPanel.js","sources":["../../../src/data/har/HarPanel.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { DataTable, type DataTableColumn } from \"../DataTable\";\nimport { JsonView } from \"../JsonView\";\nimport type { HAREntry } from \"./types\";\n\nexport type HarPanelProps = {\n entries: HAREntry[];\n search?: string;\n emptyLabel?: string;\n className?: string;\n};\n\nconst COLS: DataTableColumn<HAREntry>[] = [\n {\n key: \"request.method\",\n label: \"Method\",\n shrink: true,\n },\n {\n key: \"request.url\",\n label: \"URL\",\n grow: true,\n render: (value) => <span title={String(value ?? \"\")}>{String(value ?? \"\")}</span>,\n },\n {\n key: \"response.status\",\n label: \"Status\",\n shrink: true,\n render: (value) => (\n <span className={statusColor(Number(value ?? 0))}>{String(value ?? \"\")}</span>\n ),\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"time\",\n label: \"Time\",\n align: \"right\",\n shrink: true,\n render: (value) => `${Number(value ?? 0).toFixed(0)}ms`,\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"response.bodySize\",\n label: \"Size\",\n align: \"right\",\n shrink: true,\n render: (value) => formatBytes(Number(value ?? 0)),\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"response.content.mimeType\",\n label: \"Type\",\n shrink: true,\n },\n];\n\nexport function HarPanel({\n entries,\n search,\n emptyLabel = \"No HTTP traffic captured\",\n className,\n}: HarPanelProps) {\n const filteredEntries = useMemo(() => {\n if (search === undefined || search.trim() === \"\") return entries;\n return entries.filter((entry) => matchesSearch(search.trim().toLowerCase(), entry));\n }, [entries, search]);\n\n if (!entries || entries.length === 0) {\n return (\n <div className=\"p-density-6 text-center text-muted-foreground text-sm\">{emptyLabel}</div>\n );\n }\n\n return (\n <div className={`h-full ${className ?? \"\"}`}>\n <DataTable\n data={filteredEntries}\n columns={COLS}\n autoFilter\n showGlobalFilter={search === undefined}\n globalFilterPlaceholder=\"Filter URL, method, or body…\"\n defaultSort={{ key: \"time\", dir: \"asc\" }}\n emptyMessage={emptyLabel}\n getRowId={(entry, index) =>\n `${entry.startedDateTime ?? index}-${entry.request.method}-${entry.request.url}-${entry.time}`\n }\n renderExpandedRow={(entry) => <HarRowDetails entry={entry} />}\n />\n </div>\n );\n}\n\nfunction HarRowDetails({ entry }: { entry: HAREntry }) {\n return (\n <>\n <div className=\"grid grid-cols-2 gap-density-4\">\n <div>\n <HeaderList\n title=\"Request Headers\"\n {...(entry.request.headers ? { headers: entry.request.headers } : {})}\n />\n {entry.request.postData?.text && (\n <div className=\"mt-density-2\">\n <div className=\"font-semibold text-foreground mb-1\">Request Body</div>\n <div className=\"bg-background p-density-2 rounded border border-border overflow-auto max-h-48\">\n <BodyView\n text={entry.request.postData.text}\n {...(entry.request.postData.mimeType\n ? { mimeType: entry.request.postData.mimeType }\n : {})}\n />\n </div>\n </div>\n )}\n </div>\n <div>\n <HeaderList\n title=\"Response Headers\"\n {...(entry.response.headers ? { headers: entry.response.headers } : {})}\n />\n </div>\n </div>\n {entry.response.content?.text && (\n <div className=\"mt-density-3\">\n <div className=\"font-semibold text-foreground mb-1\">Response Body</div>\n <div className=\"bg-background p-density-2 rounded border border-border overflow-auto max-h-64\">\n <BodyView\n text={entry.response.content.text}\n {...(entry.response.content.mimeType\n ? { mimeType: entry.response.content.mimeType }\n : {})}\n />\n </div>\n </div>\n )}\n </>\n );\n}\n\nfunction HeaderList({\n title,\n headers,\n}: {\n title: string;\n headers?: { name: string; value: string }[];\n}) {\n return (\n <>\n <div className=\"font-semibold text-foreground mb-1\">{title}</div>\n <div className=\"space-y-0.5\">\n {headers?.map((h, i) => (\n <div key={i} className=\"whitespace-nowrap\">\n <span className=\"text-purple-600 dark:text-purple-400\">{h.name}:</span> {h.value}\n </div>\n ))}\n </div>\n </>\n );\n}\n\nfunction BodyView({ text, mimeType }: { text: string; mimeType?: string }) {\n if (isJsonType(mimeType)) {\n const parsed = tryParseJson(text);\n if (parsed !== null) return <JsonView data={parsed} />;\n }\n return <pre className=\"whitespace-pre-wrap break-all\">{text}</pre>;\n}\n\nfunction tryParseJson(text: string): unknown | null {\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n\nfunction isJsonType(mime?: string): boolean {\n return !!mime && (mime.includes(\"json\") || mime.includes(\"javascript\"));\n}\n\nfunction matchesSearch(needle: string, entry: HAREntry): boolean {\n return [\n entry.request.method,\n entry.request.url,\n entry.request.postData?.text,\n entry.response.content?.text,\n ].some((value) => !!value && value.toLowerCase().includes(needle));\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 0) return \"\";\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)}MB`;\n}\n\nfunction statusColor(status: number): string {\n if (status >= 500) return \"text-red-600\";\n if (status >= 400) return \"text-amber-600\";\n if (status >= 300) return \"text-blue-600\";\n if (status >= 200) return \"text-green-600\";\n return \"text-muted-foreground\";\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { HAREntry } from './types';
2
+ export declare const sampleHarEntries: HAREntry[];
3
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/data/har/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,eAAO,MAAM,gBAAgB,EAAE,QAAQ,EA+EtC,CAAC"}