@flanksource/clicky-ui 0.3.49 → 0.3.50

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 (384) hide show
  1. package/dist/connections/ConnectionsPage.cjs +219 -0
  2. package/dist/connections/ConnectionsPage.cjs.map +1 -0
  3. package/dist/connections/ConnectionsPage.d.ts +23 -0
  4. package/dist/connections/ConnectionsPage.d.ts.map +1 -0
  5. package/dist/connections/ConnectionsPage.js +219 -0
  6. package/dist/connections/ConnectionsPage.js.map +1 -0
  7. package/dist/connections/connectionActionStatus.cjs +43 -0
  8. package/dist/connections/connectionActionStatus.cjs.map +1 -0
  9. package/dist/connections/connectionActionStatus.d.ts +5 -0
  10. package/dist/connections/connectionActionStatus.d.ts.map +1 -0
  11. package/dist/connections/connectionActionStatus.js +43 -0
  12. package/dist/connections/connectionActionStatus.js.map +1 -0
  13. package/dist/connections/connectionActionTypes.cjs +24 -0
  14. package/dist/connections/connectionActionTypes.cjs.map +1 -0
  15. package/dist/connections/connectionActionTypes.d.ts +36 -0
  16. package/dist/connections/connectionActionTypes.d.ts.map +1 -0
  17. package/dist/connections/connectionActionTypes.js +24 -0
  18. package/dist/connections/connectionActionTypes.js.map +1 -0
  19. package/dist/connections/connectionActions.cjs +11 -0
  20. package/dist/connections/connectionActions.cjs.map +1 -0
  21. package/dist/connections/connectionActions.d.ts +15 -0
  22. package/dist/connections/connectionActions.d.ts.map +1 -0
  23. package/dist/connections/connectionActions.js +11 -0
  24. package/dist/connections/connectionActions.js.map +1 -0
  25. package/dist/connections/connectionDashboard.cjs +185 -0
  26. package/dist/connections/connectionDashboard.cjs.map +1 -0
  27. package/dist/connections/connectionDashboard.d.ts +25 -0
  28. package/dist/connections/connectionDashboard.d.ts.map +1 -0
  29. package/dist/connections/connectionDashboard.js +185 -0
  30. package/dist/connections/connectionDashboard.js.map +1 -0
  31. package/dist/connections/connectionDashboardModel.cjs +43 -0
  32. package/dist/connections/connectionDashboardModel.cjs.map +1 -0
  33. package/dist/connections/connectionDashboardModel.d.ts +75 -0
  34. package/dist/connections/connectionDashboardModel.d.ts.map +1 -0
  35. package/dist/connections/connectionDashboardModel.js +43 -0
  36. package/dist/connections/connectionDashboardModel.js.map +1 -0
  37. package/dist/connections/connectionDashboardRenderer.cjs +21 -0
  38. package/dist/connections/connectionDashboardRenderer.cjs.map +1 -0
  39. package/dist/connections/connectionDashboardRenderer.d.ts +15 -0
  40. package/dist/connections/connectionDashboardRenderer.d.ts.map +1 -0
  41. package/dist/connections/connectionDashboardRenderer.js +21 -0
  42. package/dist/connections/connectionDashboardRenderer.js.map +1 -0
  43. package/dist/connections/connectionDashboardRow.cjs +169 -0
  44. package/dist/connections/connectionDashboardRow.cjs.map +1 -0
  45. package/dist/connections/connectionDashboardRow.d.ts +12 -0
  46. package/dist/connections/connectionDashboardRow.d.ts.map +1 -0
  47. package/dist/connections/connectionDashboardRow.js +169 -0
  48. package/dist/connections/connectionDashboardRow.js.map +1 -0
  49. package/dist/connections/connectionErrorView.cjs +8 -0
  50. package/dist/connections/connectionErrorView.cjs.map +1 -0
  51. package/dist/connections/connectionErrorView.d.ts +4 -0
  52. package/dist/connections/connectionErrorView.d.ts.map +1 -0
  53. package/dist/connections/connectionErrorView.js +8 -0
  54. package/dist/connections/connectionErrorView.js.map +1 -0
  55. package/dist/connections/connectionHealth.cjs +82 -0
  56. package/dist/connections/connectionHealth.cjs.map +1 -0
  57. package/dist/connections/connectionHealth.d.ts +33 -0
  58. package/dist/connections/connectionHealth.d.ts.map +1 -0
  59. package/dist/connections/connectionHealth.js +82 -0
  60. package/dist/connections/connectionHealth.js.map +1 -0
  61. package/dist/connections/connectionLogging.cjs +29 -0
  62. package/dist/connections/connectionLogging.cjs.map +1 -0
  63. package/dist/connections/connectionLogging.d.ts +11 -0
  64. package/dist/connections/connectionLogging.d.ts.map +1 -0
  65. package/dist/connections/connectionLogging.js +29 -0
  66. package/dist/connections/connectionLogging.js.map +1 -0
  67. package/dist/connections/connectionLoggingField.cjs +37 -0
  68. package/dist/connections/connectionLoggingField.cjs.map +1 -0
  69. package/dist/connections/connectionLoggingField.d.ts +12 -0
  70. package/dist/connections/connectionLoggingField.d.ts.map +1 -0
  71. package/dist/connections/connectionLoggingField.js +37 -0
  72. package/dist/connections/connectionLoggingField.js.map +1 -0
  73. package/dist/connections/connectionLoggingModel.cjs +16 -0
  74. package/dist/connections/connectionLoggingModel.cjs.map +1 -0
  75. package/dist/connections/connectionLoggingModel.d.ts +6 -0
  76. package/dist/connections/connectionLoggingModel.d.ts.map +1 -0
  77. package/dist/connections/connectionLoggingModel.js +16 -0
  78. package/dist/connections/connectionLoggingModel.js.map +1 -0
  79. package/dist/connections/connectionResolveView.cjs +24 -0
  80. package/dist/connections/connectionResolveView.cjs.map +1 -0
  81. package/dist/connections/connectionResolveView.d.ts +5 -0
  82. package/dist/connections/connectionResolveView.d.ts.map +1 -0
  83. package/dist/connections/connectionResolveView.js +24 -0
  84. package/dist/connections/connectionResolveView.js.map +1 -0
  85. package/dist/connections/connectionTestButton.cjs +58 -0
  86. package/dist/connections/connectionTestButton.cjs.map +1 -0
  87. package/dist/connections/connectionTestButton.d.ts +6 -0
  88. package/dist/connections/connectionTestButton.d.ts.map +1 -0
  89. package/dist/connections/connectionTestButton.js +58 -0
  90. package/dist/connections/connectionTestButton.js.map +1 -0
  91. package/dist/connections/connectionTestView.cjs +12 -0
  92. package/dist/connections/connectionTestView.cjs.map +1 -0
  93. package/dist/connections/connectionTestView.d.ts +5 -0
  94. package/dist/connections/connectionTestView.d.ts.map +1 -0
  95. package/dist/connections/connectionTestView.js +12 -0
  96. package/dist/connections/connectionTestView.js.map +1 -0
  97. package/dist/connections/connectionsPageModel.cjs +33 -0
  98. package/dist/connections/connectionsPageModel.cjs.map +1 -0
  99. package/dist/connections/connectionsPageModel.d.ts +24 -0
  100. package/dist/connections/connectionsPageModel.d.ts.map +1 -0
  101. package/dist/connections/connectionsPageModel.js +33 -0
  102. package/dist/connections/connectionsPageModel.js.map +1 -0
  103. package/dist/connections/iconProvider.cjs +20 -0
  104. package/dist/connections/iconProvider.cjs.map +1 -0
  105. package/dist/connections/iconProvider.d.ts +7 -0
  106. package/dist/connections/iconProvider.d.ts.map +1 -0
  107. package/dist/connections/iconProvider.js +20 -0
  108. package/dist/connections/iconProvider.js.map +1 -0
  109. package/dist/connections.cjs +45 -0
  110. package/dist/connections.cjs.map +1 -0
  111. package/dist/connections.d.ts +34 -0
  112. package/dist/connections.d.ts.map +1 -0
  113. package/dist/connections.js +45 -0
  114. package/dist/connections.js.map +1 -0
  115. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +52 -295
  116. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
  117. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
  118. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +47 -290
  119. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
  120. package/dist/data/diagnostics/MetricTile.cjs +44 -0
  121. package/dist/data/diagnostics/MetricTile.cjs.map +1 -0
  122. package/dist/data/diagnostics/MetricTile.d.ts +13 -0
  123. package/dist/data/diagnostics/MetricTile.d.ts.map +1 -0
  124. package/dist/data/diagnostics/MetricTile.js +44 -0
  125. package/dist/data/diagnostics/MetricTile.js.map +1 -0
  126. package/dist/data/diagnostics/StackDumpView.cjs +227 -0
  127. package/dist/data/diagnostics/StackDumpView.cjs.map +1 -0
  128. package/dist/data/diagnostics/StackDumpView.d.ts +53 -0
  129. package/dist/data/diagnostics/StackDumpView.d.ts.map +1 -0
  130. package/dist/data/diagnostics/StackDumpView.js +227 -0
  131. package/dist/data/diagnostics/StackDumpView.js.map +1 -0
  132. package/dist/data/diagnostics/fixtures.d.ts +1 -0
  133. package/dist/data/diagnostics/fixtures.d.ts.map +1 -1
  134. package/dist/data/diagnostics/metric-tone.cjs +18 -0
  135. package/dist/data/diagnostics/metric-tone.cjs.map +1 -0
  136. package/dist/data/diagnostics/metric-tone.d.ts +6 -0
  137. package/dist/data/diagnostics/metric-tone.d.ts.map +1 -0
  138. package/dist/data/diagnostics/metric-tone.js +18 -0
  139. package/dist/data/diagnostics/metric-tone.js.map +1 -0
  140. package/dist/data/diagnostics/stacktrace.cjs +44 -0
  141. package/dist/data/diagnostics/stacktrace.cjs.map +1 -1
  142. package/dist/data/diagnostics/stacktrace.d.ts +7 -0
  143. package/dist/data/diagnostics/stacktrace.d.ts.map +1 -1
  144. package/dist/data/diagnostics/stacktrace.js +44 -0
  145. package/dist/data/diagnostics/stacktrace.js.map +1 -1
  146. package/dist/data/diagnostics/types.d.ts +2 -8
  147. package/dist/data/diagnostics/types.d.ts.map +1 -1
  148. package/dist/data/lint/LintDetail.cjs +339 -0
  149. package/dist/data/lint/LintDetail.cjs.map +1 -0
  150. package/dist/data/lint/LintDetail.d.ts +17 -0
  151. package/dist/data/lint/LintDetail.d.ts.map +1 -0
  152. package/dist/data/lint/LintDetail.js +339 -0
  153. package/dist/data/lint/LintDetail.js.map +1 -0
  154. package/dist/data/lint/LintFilterBar.cjs +103 -0
  155. package/dist/data/lint/LintFilterBar.cjs.map +1 -0
  156. package/dist/data/lint/LintFilterBar.d.ts +16 -0
  157. package/dist/data/lint/LintFilterBar.d.ts.map +1 -0
  158. package/dist/data/lint/LintFilterBar.js +103 -0
  159. package/dist/data/lint/LintFilterBar.js.map +1 -0
  160. package/dist/data/lint/LintResults.cjs +144 -0
  161. package/dist/data/lint/LintResults.cjs.map +1 -0
  162. package/dist/data/lint/LintResults.d.ts +39 -0
  163. package/dist/data/lint/LintResults.d.ts.map +1 -0
  164. package/dist/data/lint/LintResults.fixtures.d.ts +10 -0
  165. package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -0
  166. package/dist/data/lint/LintResults.js +144 -0
  167. package/dist/data/lint/LintResults.js.map +1 -0
  168. package/dist/data/lint/LintTreeNode.cjs +66 -0
  169. package/dist/data/lint/LintTreeNode.cjs.map +1 -0
  170. package/dist/data/lint/LintTreeNode.d.ts +7 -0
  171. package/dist/data/lint/LintTreeNode.d.ts.map +1 -0
  172. package/dist/data/lint/LintTreeNode.js +66 -0
  173. package/dist/data/lint/LintTreeNode.js.map +1 -0
  174. package/dist/data/lint/actions.cjs +195 -0
  175. package/dist/data/lint/actions.cjs.map +1 -0
  176. package/dist/data/lint/actions.d.ts +29 -0
  177. package/dist/data/lint/actions.d.ts.map +1 -0
  178. package/dist/data/lint/actions.js +195 -0
  179. package/dist/data/lint/actions.js.map +1 -0
  180. package/dist/data/lint/grouping-options.cjs +14 -0
  181. package/dist/data/lint/grouping-options.cjs.map +1 -0
  182. package/dist/data/lint/grouping-options.d.ts +9 -0
  183. package/dist/data/lint/grouping-options.d.ts.map +1 -0
  184. package/dist/data/lint/grouping-options.js +14 -0
  185. package/dist/data/lint/grouping-options.js.map +1 -0
  186. package/dist/data/lint/grouping.cjs +450 -0
  187. package/dist/data/lint/grouping.cjs.map +1 -0
  188. package/dist/data/lint/grouping.d.ts +10 -0
  189. package/dist/data/lint/grouping.d.ts.map +1 -0
  190. package/dist/data/lint/grouping.js +450 -0
  191. package/dist/data/lint/grouping.js.map +1 -0
  192. package/dist/data/lint/index.d.ts +10 -0
  193. package/dist/data/lint/index.d.ts.map +1 -0
  194. package/dist/data/lint/paths.cjs +35 -0
  195. package/dist/data/lint/paths.cjs.map +1 -0
  196. package/dist/data/lint/paths.d.ts +13 -0
  197. package/dist/data/lint/paths.d.ts.map +1 -0
  198. package/dist/data/lint/paths.js +35 -0
  199. package/dist/data/lint/paths.js.map +1 -0
  200. package/dist/data/lint/stats.cjs +76 -0
  201. package/dist/data/lint/stats.cjs.map +1 -0
  202. package/dist/data/lint/stats.d.ts +19 -0
  203. package/dist/data/lint/stats.d.ts.map +1 -0
  204. package/dist/data/lint/stats.js +76 -0
  205. package/dist/data/lint/stats.js.map +1 -0
  206. package/dist/data/lint/types.cjs +16 -0
  207. package/dist/data/lint/types.cjs.map +1 -0
  208. package/dist/data/lint/types.d.ts +93 -0
  209. package/dist/data/lint/types.d.ts.map +1 -0
  210. package/dist/data/lint/types.js +16 -0
  211. package/dist/data/lint/types.js.map +1 -0
  212. package/dist/data/test-runner/TestAttemptDetail.cjs +113 -0
  213. package/dist/data/test-runner/TestAttemptDetail.cjs.map +1 -0
  214. package/dist/data/test-runner/TestAttemptDetail.d.ts +19 -0
  215. package/dist/data/test-runner/TestAttemptDetail.d.ts.map +1 -0
  216. package/dist/data/test-runner/TestAttemptDetail.js +113 -0
  217. package/dist/data/test-runner/TestAttemptDetail.js.map +1 -0
  218. package/dist/data/test-runner/TestAttempts.cjs +36 -0
  219. package/dist/data/test-runner/TestAttempts.cjs.map +1 -0
  220. package/dist/data/test-runner/TestAttempts.d.ts +5 -0
  221. package/dist/data/test-runner/TestAttempts.d.ts.map +1 -0
  222. package/dist/data/test-runner/TestAttempts.js +36 -0
  223. package/dist/data/test-runner/TestAttempts.js.map +1 -0
  224. package/dist/data/test-runner/TestDetailPanel.cjs +13 -3
  225. package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
  226. package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
  227. package/dist/data/test-runner/TestDetailPanel.js +14 -4
  228. package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
  229. package/dist/data/test-runner/TestFailureDetail.cjs +9 -29
  230. package/dist/data/test-runner/TestFailureDetail.cjs.map +1 -1
  231. package/dist/data/test-runner/TestFailureDetail.d.ts +6 -6
  232. package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
  233. package/dist/data/test-runner/TestFailureDetail.js +9 -29
  234. package/dist/data/test-runner/TestFailureDetail.js.map +1 -1
  235. package/dist/data/test-runner/TestRunSummary.cjs +33 -0
  236. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  237. package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
  238. package/dist/data/test-runner/TestRunSummary.js +34 -1
  239. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  240. package/dist/data/test-runner/TestRunner.cjs +3 -0
  241. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  242. package/dist/data/test-runner/TestRunner.d.ts +8 -1
  243. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  244. package/dist/data/test-runner/TestRunner.js +3 -0
  245. package/dist/data/test-runner/TestRunner.js.map +1 -1
  246. package/dist/data/test-runner/TestTreeNode.cjs +3 -1
  247. package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
  248. package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
  249. package/dist/data/test-runner/TestTreeNode.js +3 -1
  250. package/dist/data/test-runner/TestTreeNode.js.map +1 -1
  251. package/dist/data/test-runner/adapter.cjs +9 -1
  252. package/dist/data/test-runner/adapter.cjs.map +1 -1
  253. package/dist/data/test-runner/adapter.d.ts +5 -0
  254. package/dist/data/test-runner/adapter.d.ts.map +1 -1
  255. package/dist/data/test-runner/adapter.js +9 -1
  256. package/dist/data/test-runner/adapter.js.map +1 -1
  257. package/dist/data/test-runner/attempts.cjs +62 -0
  258. package/dist/data/test-runner/attempts.cjs.map +1 -0
  259. package/dist/data/test-runner/attempts.d.ts +13 -0
  260. package/dist/data/test-runner/attempts.d.ts.map +1 -0
  261. package/dist/data/test-runner/attempts.js +62 -0
  262. package/dist/data/test-runner/attempts.js.map +1 -0
  263. package/dist/data/test-runner/context.cjs.map +1 -1
  264. package/dist/data/test-runner/context.d.ts +6 -0
  265. package/dist/data/test-runner/context.d.ts.map +1 -1
  266. package/dist/data/test-runner/context.js.map +1 -1
  267. package/dist/data/test-runner/index.d.ts +5 -1
  268. package/dist/data/test-runner/index.d.ts.map +1 -1
  269. package/dist/data/test-runner/marks.cjs +2 -0
  270. package/dist/data/test-runner/marks.cjs.map +1 -1
  271. package/dist/data/test-runner/marks.d.ts.map +1 -1
  272. package/dist/data/test-runner/marks.js +2 -0
  273. package/dist/data/test-runner/marks.js.map +1 -1
  274. package/dist/data/test-runner/process-metrics.cjs +15 -0
  275. package/dist/data/test-runner/process-metrics.cjs.map +1 -0
  276. package/dist/data/test-runner/process-metrics.d.ts +22 -0
  277. package/dist/data/test-runner/process-metrics.d.ts.map +1 -0
  278. package/dist/data/test-runner/process-metrics.js +15 -0
  279. package/dist/data/test-runner/process-metrics.js.map +1 -0
  280. package/dist/data/test-runner/status.cjs +11 -3
  281. package/dist/data/test-runner/status.cjs.map +1 -1
  282. package/dist/data/test-runner/status.d.ts +3 -1
  283. package/dist/data/test-runner/status.d.ts.map +1 -1
  284. package/dist/data/test-runner/status.js +11 -3
  285. package/dist/data/test-runner/status.js.map +1 -1
  286. package/dist/data/test-runner/types.d.ts +14 -0
  287. package/dist/data/test-runner/types.d.ts.map +1 -1
  288. package/dist/data/traces/GoProfileView.cjs +176 -0
  289. package/dist/data/traces/GoProfileView.cjs.map +1 -0
  290. package/dist/data/traces/GoProfileView.d.ts +30 -0
  291. package/dist/data/traces/GoProfileView.d.ts.map +1 -0
  292. package/dist/data/traces/GoProfileView.js +176 -0
  293. package/dist/data/traces/GoProfileView.js.map +1 -0
  294. package/dist/data/traces/ProcessFacetTable.cjs +79 -0
  295. package/dist/data/traces/ProcessFacetTable.cjs.map +1 -0
  296. package/dist/data/traces/ProcessFacetTable.d.ts +21 -0
  297. package/dist/data/traces/ProcessFacetTable.d.ts.map +1 -0
  298. package/dist/data/traces/ProcessFacetTable.js +79 -0
  299. package/dist/data/traces/ProcessFacetTable.js.map +1 -0
  300. package/dist/data/traces/ProcessRecordViews.cjs +41 -0
  301. package/dist/data/traces/ProcessRecordViews.cjs.map +1 -0
  302. package/dist/data/traces/ProcessRecordViews.d.ts +16 -0
  303. package/dist/data/traces/ProcessRecordViews.d.ts.map +1 -0
  304. package/dist/data/traces/ProcessRecordViews.js +41 -0
  305. package/dist/data/traces/ProcessRecordViews.js.map +1 -0
  306. package/dist/data/traces/ProcessTraceDetail.cjs +316 -0
  307. package/dist/data/traces/ProcessTraceDetail.cjs.map +1 -0
  308. package/dist/data/traces/ProcessTraceDetail.d.ts +39 -0
  309. package/dist/data/traces/ProcessTraceDetail.d.ts.map +1 -0
  310. package/dist/data/traces/ProcessTraceDetail.js +316 -0
  311. package/dist/data/traces/ProcessTraceDetail.js.map +1 -0
  312. package/dist/data/traces/ProcessTraceTree.cjs +76 -34
  313. package/dist/data/traces/ProcessTraceTree.cjs.map +1 -1
  314. package/dist/data/traces/ProcessTraceTree.d.ts +21 -4
  315. package/dist/data/traces/ProcessTraceTree.d.ts.map +1 -1
  316. package/dist/data/traces/ProcessTraceTree.js +72 -30
  317. package/dist/data/traces/ProcessTraceTree.js.map +1 -1
  318. package/dist/data/traces/Sparkline.cjs +27 -5
  319. package/dist/data/traces/Sparkline.cjs.map +1 -1
  320. package/dist/data/traces/Sparkline.d.ts +17 -1
  321. package/dist/data/traces/Sparkline.d.ts.map +1 -1
  322. package/dist/data/traces/Sparkline.js +28 -6
  323. package/dist/data/traces/Sparkline.js.map +1 -1
  324. package/dist/data/traces/TraceView.cjs +9 -0
  325. package/dist/data/traces/TraceView.cjs.map +1 -1
  326. package/dist/data/traces/TraceView.d.ts +4 -2
  327. package/dist/data/traces/TraceView.d.ts.map +1 -1
  328. package/dist/data/traces/TraceView.js +9 -0
  329. package/dist/data/traces/TraceView.js.map +1 -1
  330. package/dist/data/traces/TraceWindowList.cjs +117 -0
  331. package/dist/data/traces/TraceWindowList.cjs.map +1 -0
  332. package/dist/data/traces/TraceWindowList.d.ts +48 -0
  333. package/dist/data/traces/TraceWindowList.d.ts.map +1 -0
  334. package/dist/data/traces/TraceWindowList.js +117 -0
  335. package/dist/data/traces/TraceWindowList.js.map +1 -0
  336. package/dist/data/traces/fixtures.d.ts +25 -1
  337. package/dist/data/traces/fixtures.d.ts.map +1 -1
  338. package/dist/data/traces/index.d.ts +10 -3
  339. package/dist/data/traces/index.d.ts.map +1 -1
  340. package/dist/data/traces/process-facets.cjs +48 -0
  341. package/dist/data/traces/process-facets.cjs.map +1 -0
  342. package/dist/data/traces/process-facets.d.ts +38 -0
  343. package/dist/data/traces/process-facets.d.ts.map +1 -0
  344. package/dist/data/traces/process-facets.js +48 -0
  345. package/dist/data/traces/process-facets.js.map +1 -0
  346. package/dist/data/traces/process-tree.cjs +36 -4
  347. package/dist/data/traces/process-tree.cjs.map +1 -1
  348. package/dist/data/traces/process-tree.d.ts +20 -1
  349. package/dist/data/traces/process-tree.d.ts.map +1 -1
  350. package/dist/data/traces/process-tree.js +36 -4
  351. package/dist/data/traces/process-tree.js.map +1 -1
  352. package/dist/data/traces/profile-aggregate.cjs +78 -0
  353. package/dist/data/traces/profile-aggregate.cjs.map +1 -0
  354. package/dist/data/traces/profile-aggregate.d.ts +41 -0
  355. package/dist/data/traces/profile-aggregate.d.ts.map +1 -0
  356. package/dist/data/traces/profile-aggregate.js +78 -0
  357. package/dist/data/traces/profile-aggregate.js.map +1 -0
  358. package/dist/data/traces/stack-checkpoints.cjs +22 -0
  359. package/dist/data/traces/stack-checkpoints.cjs.map +1 -0
  360. package/dist/data/traces/stack-checkpoints.d.ts +18 -0
  361. package/dist/data/traces/stack-checkpoints.d.ts.map +1 -0
  362. package/dist/data/traces/stack-checkpoints.js +22 -0
  363. package/dist/data/traces/stack-checkpoints.js.map +1 -0
  364. package/dist/data/traces/types.d.ts +120 -5
  365. package/dist/data/traces/types.d.ts.map +1 -1
  366. package/dist/data/verification/adapters.cjs +1 -0
  367. package/dist/data/verification/adapters.cjs.map +1 -1
  368. package/dist/data/verification/adapters.d.ts.map +1 -1
  369. package/dist/data/verification/adapters.js +1 -0
  370. package/dist/data/verification/adapters.js.map +1 -1
  371. package/dist/data/version-info.cjs +3 -3
  372. package/dist/data/version-info.js +3 -3
  373. package/dist/data.cjs +85 -7
  374. package/dist/data.cjs.map +1 -1
  375. package/dist/data.d.ts +4 -0
  376. package/dist/data.d.ts.map +1 -1
  377. package/dist/data.js +81 -3
  378. package/dist/data.js.map +1 -1
  379. package/dist/index.cjs +87 -9
  380. package/dist/index.cjs.map +1 -1
  381. package/dist/index.js +81 -3
  382. package/dist/index.js.map +1 -1
  383. package/dist/styles.css +1 -1
  384. package/package.json +6 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-tone.cjs","sources":["../../../src/data/diagnostics/metric-tone.ts"],"sourcesContent":["import type { GaugeTone } from \"../Gauge\";\n\n/** Tone of a CPU percentage: green while busy, amber from 60, red from 90. */\nexport function cpuTone(pct: number): GaugeTone {\n if (pct >= 90) return \"danger\";\n if (pct >= 60) return \"warning\";\n if (pct > 0) return \"success\";\n return \"neutral\";\n}\n\n/** Tone of resident memory against virtual size; neutral when either is unknown. */\nexport function memoryTone(rss: number | undefined, vms: number | undefined): GaugeTone {\n if (!rss || !vms) return \"neutral\";\n const ratio = rss / vms;\n if (ratio >= 0.9) return \"danger\";\n if (ratio >= 0.6) return \"warning\";\n return \"info\";\n}\n"],"names":[],"mappings":";;AAGO,SAAS,QAAQ,KAAwB;AAC9C,MAAI,OAAO,GAAI,QAAO;AACtB,MAAI,OAAO,GAAI,QAAO;AACtB,MAAI,MAAM,EAAG,QAAO;AACpB,SAAO;AACT;AAGO,SAAS,WAAW,KAAyB,KAAoC;AACtF,MAAI,CAAC,OAAO,CAAC,IAAK,QAAO;AACzB,QAAM,QAAQ,MAAM;AACpB,MAAI,SAAS,IAAK,QAAO;AACzB,MAAI,SAAS,IAAK,QAAO;AACzB,SAAO;AACT;;;"}
@@ -0,0 +1,6 @@
1
+ import { GaugeTone } from '../Gauge.js';
2
+ /** Tone of a CPU percentage: green while busy, amber from 60, red from 90. */
3
+ export declare function cpuTone(pct: number): GaugeTone;
4
+ /** Tone of resident memory against virtual size; neutral when either is unknown. */
5
+ export declare function memoryTone(rss: number | undefined, vms: number | undefined): GaugeTone;
6
+ //# sourceMappingURL=metric-tone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-tone.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/metric-tone.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAK9C;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAMtF"}
@@ -0,0 +1,18 @@
1
+ function cpuTone(pct) {
2
+ if (pct >= 90) return "danger";
3
+ if (pct >= 60) return "warning";
4
+ if (pct > 0) return "success";
5
+ return "neutral";
6
+ }
7
+ function memoryTone(rss, vms) {
8
+ if (!rss || !vms) return "neutral";
9
+ const ratio = rss / vms;
10
+ if (ratio >= 0.9) return "danger";
11
+ if (ratio >= 0.6) return "warning";
12
+ return "info";
13
+ }
14
+ export {
15
+ cpuTone,
16
+ memoryTone
17
+ };
18
+ //# sourceMappingURL=metric-tone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-tone.js","sources":["../../../src/data/diagnostics/metric-tone.ts"],"sourcesContent":["import type { GaugeTone } from \"../Gauge\";\n\n/** Tone of a CPU percentage: green while busy, amber from 60, red from 90. */\nexport function cpuTone(pct: number): GaugeTone {\n if (pct >= 90) return \"danger\";\n if (pct >= 60) return \"warning\";\n if (pct > 0) return \"success\";\n return \"neutral\";\n}\n\n/** Tone of resident memory against virtual size; neutral when either is unknown. */\nexport function memoryTone(rss: number | undefined, vms: number | undefined): GaugeTone {\n if (!rss || !vms) return \"neutral\";\n const ratio = rss / vms;\n if (ratio >= 0.9) return \"danger\";\n if (ratio >= 0.6) return \"warning\";\n return \"info\";\n}\n"],"names":[],"mappings":"AAGO,SAAS,QAAQ,KAAwB;AAC9C,MAAI,OAAO,GAAI,QAAO;AACtB,MAAI,OAAO,GAAI,QAAO;AACtB,MAAI,MAAM,EAAG,QAAO;AACpB,SAAO;AACT;AAGO,SAAS,WAAW,KAAyB,KAAoC;AACtF,MAAI,CAAC,OAAO,CAAC,IAAK,QAAO;AACzB,QAAM,QAAQ,MAAM;AACpB,MAAI,SAAS,IAAK,QAAO;AACzB,MAAI,SAAS,IAAK,QAAO;AACzB,SAAO;AACT;"}
@@ -84,6 +84,49 @@ ${frames.map((frame) => `${frame.functionName} ${frame.file || ""}`).join("\n")}
84
84
  }
85
85
  return goroutines;
86
86
  }
87
+ function recordFrame(frame, kind) {
88
+ const file = frame.file ? normalizeFilePath(frame.file) : void 0;
89
+ return {
90
+ functionName: frame.func,
91
+ // A record's func carries no argument list, so only the package path is stripped.
92
+ displayName: stripPackageQualifier(frame.func),
93
+ kind,
94
+ runtime: isRuntimeFrame(frame.func),
95
+ ...file ? { file, line: frame.line, location: `${file}${frame.line ? `:${frame.line}` : ""}` } : {}
96
+ };
97
+ }
98
+ function goroutinesFromRecords(records) {
99
+ return records.map((record) => {
100
+ var _a;
101
+ if (record.format !== "go" || record.error || record.goroutineId === void 0) {
102
+ throw new Error(
103
+ `stack record ${record.checkpointId}/${record.key} is not a Go goroutine record (format "${record.format}"${record.error ? `, error "${record.error}"` : ""})`
104
+ );
105
+ }
106
+ const frames = [
107
+ ...(record.frames ?? []).map((frame) => recordFrame(frame, "frame")),
108
+ ...record.createdBy ? [recordFrame(record.createdBy, "created_by")] : []
109
+ ];
110
+ const state = record.state ?? "";
111
+ const rawState = [
112
+ state,
113
+ ...record.waitMinutes ? [`${record.waitMinutes} minutes`] : [],
114
+ ...record.lockedToThread ? ["locked to thread"] : []
115
+ ].join(", ");
116
+ const topFunction = (_a = frames.find((frame) => frame.kind === "frame")) == null ? void 0 : _a.functionName;
117
+ return {
118
+ id: record.goroutineId,
119
+ state: normalizeState(state),
120
+ rawState,
121
+ frames,
122
+ raw: record.raw,
123
+ userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === "frame").length,
124
+ searchText: `goroutine ${record.goroutineId} [${rawState}]
125
+ ${frames.map((frame) => `${frame.functionName} ${frame.file || ""}`).join("\n")}`.toLowerCase(),
126
+ ...topFunction !== void 0 ? { topFunction } : {}
127
+ };
128
+ });
129
+ }
87
130
  function countGoroutinesByState(goroutines) {
88
131
  const counts = /* @__PURE__ */ new Map();
89
132
  for (const goroutine of goroutines) {
@@ -157,6 +200,7 @@ function normalizeFilePath(path) {
157
200
  exports.countGoroutinesByState = countGoroutinesByState;
158
201
  exports.countStackByState = countStackByState;
159
202
  exports.detectDumpFormat = detectDumpFormat;
203
+ exports.goroutinesFromRecords = goroutinesFromRecords;
160
204
  exports.parseGoroutineDump = parseGoroutineDump;
161
205
  exports.parseStackDump = parseStackDump;
162
206
  //# sourceMappingURL=stacktrace.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"stacktrace.cjs","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 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 = splitGoroutineBlocks(trimmed);\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 fileLocation = parseGoroutineFileLocation(trimmedLine);\n const previousFrame = frames[frames.length - 1];\n if (fileLocation && previousFrame && !previousFrame.file) {\n previousFrame.file = fileLocation.file;\n previousFrame.line = fileLocation.line;\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 parseGoroutineFileLocation(value: string): { file: string; line: number } | undefined {\n const separator = value.lastIndexOf(\":\");\n if (separator <= 0) return undefined;\n\n let index = separator + 1;\n const lineStart = index;\n while (index < value.length && isAsciiDigit(value[index] ?? \"\")) index++;\n if (index === lineStart) return undefined;\n\n const lineEnd = index;\n if (index < value.length) {\n const whitespaceStart = index;\n while (index < value.length && (value[index] ?? \"\").trim() === \"\") index++;\n if (index === whitespaceStart || value.slice(index, index + 3).toLowerCase() !== \"+0x\") {\n return undefined;\n }\n\n index += 3;\n const offsetStart = index;\n while (index < value.length && isAsciiHexDigit(value[index] ?? \"\")) index++;\n if (index === offsetStart || index !== value.length) return undefined;\n }\n\n return {\n file: value.slice(0, separator),\n line: Number(value.slice(lineStart, lineEnd)),\n };\n}\n\nfunction isAsciiDigit(value: string): boolean {\n return value >= \"0\" && value <= \"9\";\n}\n\nfunction isAsciiHexDigit(value: string): boolean {\n const lower = value.toLowerCase();\n return isAsciiDigit(value) || (lower >= \"a\" && lower <= \"f\");\n}\n\nfunction splitGoroutineBlocks(text: string): string[] {\n const blocks: string[] = [];\n let lines: string[] = [];\n for (const line of text.split(\"\\n\")) {\n if (line.trim()) {\n lines.push(line);\n } else if (lines.length > 0) {\n blocks.push(lines.join(\"\\n\"));\n lines = [];\n }\n }\n if (lines.length > 0) blocks.push(lines.join(\"\\n\"));\n return blocks;\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 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":["parseJvmThreadDump","countThreadsByState"],"mappings":"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"}
1
+ {"version":3,"file":"stacktrace.cjs","sources":["../../../src/data/diagnostics/stacktrace.ts"],"sourcesContent":["import type { StackFrame, StackRecord } from \"../traces/types\";\nimport { 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 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 = splitGoroutineBlocks(trimmed);\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 fileLocation = parseGoroutineFileLocation(trimmedLine);\n const previousFrame = frames[frames.length - 1];\n if (fileLocation && previousFrame && !previousFrame.file) {\n previousFrame.file = fileLocation.file;\n previousFrame.line = fileLocation.line;\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\nfunction recordFrame(frame: StackFrame, kind: ParsedGoroutineFrame[\"kind\"]): ParsedGoroutineFrame {\n const file = frame.file ? normalizeFilePath(frame.file) : undefined;\n return {\n functionName: frame.func,\n // A record's func carries no argument list, so only the package path is stripped.\n displayName: stripPackageQualifier(frame.func),\n kind,\n runtime: isRuntimeFrame(frame.func),\n ...(file ? { file, line: frame.line, location: `${file}${frame.line ? `:${frame.line}` : \"\"}` } : {}),\n };\n}\n\n/**\n * Goroutines from `stacks` records of Go format, already parsed server side:\n * no text is parsed. A record of another format or one that failed is a caller\n * error and throws.\n */\nexport function goroutinesFromRecords(records: StackRecord[]): ParsedGoroutine[] {\n return records.map((record) => {\n if (record.format !== \"go\" || record.error || record.goroutineId === undefined) {\n throw new Error(\n `stack record ${record.checkpointId}/${record.key} is not a Go goroutine record (format \"${record.format}\"${record.error ? `, error \"${record.error}\"` : \"\"})`,\n );\n }\n const frames = [\n ...(record.frames ?? []).map((frame) => recordFrame(frame, \"frame\")),\n ...(record.createdBy ? [recordFrame(record.createdBy, \"created_by\")] : []),\n ];\n const state = record.state ?? \"\";\n const rawState = [\n state,\n ...(record.waitMinutes ? [`${record.waitMinutes} minutes`] : []),\n ...(record.lockedToThread ? [\"locked to thread\"] : []),\n ].join(\", \");\n const topFunction = frames.find((frame) => frame.kind === \"frame\")?.functionName;\n return {\n id: record.goroutineId,\n state: normalizeState(state),\n rawState,\n frames,\n raw: record.raw,\n userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === \"frame\").length,\n searchText: `goroutine ${record.goroutineId} [${rawState}]\\n${frames\n .map((frame) => `${frame.functionName} ${frame.file || \"\"}`)\n .join(\"\\n\")}`.toLowerCase(),\n ...(topFunction !== undefined ? { topFunction } : {}),\n };\n });\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 parseGoroutineFileLocation(value: string): { file: string; line: number } | undefined {\n const separator = value.lastIndexOf(\":\");\n if (separator <= 0) return undefined;\n\n let index = separator + 1;\n const lineStart = index;\n while (index < value.length && isAsciiDigit(value[index] ?? \"\")) index++;\n if (index === lineStart) return undefined;\n\n const lineEnd = index;\n if (index < value.length) {\n const whitespaceStart = index;\n while (index < value.length && (value[index] ?? \"\").trim() === \"\") index++;\n if (index === whitespaceStart || value.slice(index, index + 3).toLowerCase() !== \"+0x\") {\n return undefined;\n }\n\n index += 3;\n const offsetStart = index;\n while (index < value.length && isAsciiHexDigit(value[index] ?? \"\")) index++;\n if (index === offsetStart || index !== value.length) return undefined;\n }\n\n return {\n file: value.slice(0, separator),\n line: Number(value.slice(lineStart, lineEnd)),\n };\n}\n\nfunction isAsciiDigit(value: string): boolean {\n return value >= \"0\" && value <= \"9\";\n}\n\nfunction isAsciiHexDigit(value: string): boolean {\n const lower = value.toLowerCase();\n return isAsciiDigit(value) || (lower >= \"a\" && lower <= \"f\");\n}\n\nfunction splitGoroutineBlocks(text: string): string[] {\n const blocks: string[] = [];\n let lines: string[] = [];\n for (const line of text.split(\"\\n\")) {\n if (line.trim()) {\n lines.push(line);\n } else if (lines.length > 0) {\n blocks.push(lines.join(\"\\n\"));\n lines = [];\n }\n }\n if (lines.length > 0) blocks.push(lines.join(\"\\n\"));\n return blocks;\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 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":["parseJvmThreadDump","countThreadsByState"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { StackRecord } from '../traces/types.js';
1
2
  import { ParsedThread } from './jvm-stacktrace.js';
2
3
  export type DumpFormat = "go" | "jvm" | "unknown";
3
4
  export type ParsedStack = {
@@ -34,5 +35,11 @@ export interface ParsedGoroutine {
34
35
  searchText: string;
35
36
  }
36
37
  export declare function parseGoroutineDump(text: string): ParsedGoroutine[];
38
+ /**
39
+ * Goroutines from `stacks` records of Go format, already parsed server side:
40
+ * no text is parsed. A record of another format or one that failed is a caller
41
+ * error and throws.
42
+ */
43
+ export declare function goroutinesFromRecords(records: StackRecord[]): ParsedGoroutine[];
37
44
  export declare function countGoroutinesByState(goroutines: ParsedGoroutine[]): Map<string, number>;
38
45
  //# sourceMappingURL=stacktrace.d.ts.map
@@ -1 +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;AAOD,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"}
1
+ {"version":3,"file":"stacktrace.d.ts","sourceRoot":"","sources":["../../../src/data/diagnostics/stacktrace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,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;AAOD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAmElE;AAcD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,eAAe,EAAE,CA+B/E;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAMzF"}
@@ -82,6 +82,49 @@ ${frames.map((frame) => `${frame.functionName} ${frame.file || ""}`).join("\n")}
82
82
  }
83
83
  return goroutines;
84
84
  }
85
+ function recordFrame(frame, kind) {
86
+ const file = frame.file ? normalizeFilePath(frame.file) : void 0;
87
+ return {
88
+ functionName: frame.func,
89
+ // A record's func carries no argument list, so only the package path is stripped.
90
+ displayName: stripPackageQualifier(frame.func),
91
+ kind,
92
+ runtime: isRuntimeFrame(frame.func),
93
+ ...file ? { file, line: frame.line, location: `${file}${frame.line ? `:${frame.line}` : ""}` } : {}
94
+ };
95
+ }
96
+ function goroutinesFromRecords(records) {
97
+ return records.map((record) => {
98
+ var _a;
99
+ if (record.format !== "go" || record.error || record.goroutineId === void 0) {
100
+ throw new Error(
101
+ `stack record ${record.checkpointId}/${record.key} is not a Go goroutine record (format "${record.format}"${record.error ? `, error "${record.error}"` : ""})`
102
+ );
103
+ }
104
+ const frames = [
105
+ ...(record.frames ?? []).map((frame) => recordFrame(frame, "frame")),
106
+ ...record.createdBy ? [recordFrame(record.createdBy, "created_by")] : []
107
+ ];
108
+ const state = record.state ?? "";
109
+ const rawState = [
110
+ state,
111
+ ...record.waitMinutes ? [`${record.waitMinutes} minutes`] : [],
112
+ ...record.lockedToThread ? ["locked to thread"] : []
113
+ ].join(", ");
114
+ const topFunction = (_a = frames.find((frame) => frame.kind === "frame")) == null ? void 0 : _a.functionName;
115
+ return {
116
+ id: record.goroutineId,
117
+ state: normalizeState(state),
118
+ rawState,
119
+ frames,
120
+ raw: record.raw,
121
+ userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === "frame").length,
122
+ searchText: `goroutine ${record.goroutineId} [${rawState}]
123
+ ${frames.map((frame) => `${frame.functionName} ${frame.file || ""}`).join("\n")}`.toLowerCase(),
124
+ ...topFunction !== void 0 ? { topFunction } : {}
125
+ };
126
+ });
127
+ }
85
128
  function countGoroutinesByState(goroutines) {
86
129
  const counts = /* @__PURE__ */ new Map();
87
130
  for (const goroutine of goroutines) {
@@ -156,6 +199,7 @@ export {
156
199
  countGoroutinesByState,
157
200
  countStackByState,
158
201
  detectDumpFormat,
202
+ goroutinesFromRecords,
159
203
  parseGoroutineDump,
160
204
  parseStackDump
161
205
  };
@@ -1 +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 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 = splitGoroutineBlocks(trimmed);\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 fileLocation = parseGoroutineFileLocation(trimmedLine);\n const previousFrame = frames[frames.length - 1];\n if (fileLocation && previousFrame && !previousFrame.file) {\n previousFrame.file = fileLocation.file;\n previousFrame.line = fileLocation.line;\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 parseGoroutineFileLocation(value: string): { file: string; line: number } | undefined {\n const separator = value.lastIndexOf(\":\");\n if (separator <= 0) return undefined;\n\n let index = separator + 1;\n const lineStart = index;\n while (index < value.length && isAsciiDigit(value[index] ?? \"\")) index++;\n if (index === lineStart) return undefined;\n\n const lineEnd = index;\n if (index < value.length) {\n const whitespaceStart = index;\n while (index < value.length && (value[index] ?? \"\").trim() === \"\") index++;\n if (index === whitespaceStart || value.slice(index, index + 3).toLowerCase() !== \"+0x\") {\n return undefined;\n }\n\n index += 3;\n const offsetStart = index;\n while (index < value.length && isAsciiHexDigit(value[index] ?? \"\")) index++;\n if (index === offsetStart || index !== value.length) return undefined;\n }\n\n return {\n file: value.slice(0, separator),\n line: Number(value.slice(lineStart, lineEnd)),\n };\n}\n\nfunction isAsciiDigit(value: string): boolean {\n return value >= \"0\" && value <= \"9\";\n}\n\nfunction isAsciiHexDigit(value: string): boolean {\n const lower = value.toLowerCase();\n return isAsciiDigit(value) || (lower >= \"a\" && lower <= \"f\");\n}\n\nfunction splitGoroutineBlocks(text: string): string[] {\n const blocks: string[] = [];\n let lines: string[] = [];\n for (const line of text.split(\"\\n\")) {\n if (line.trim()) {\n lines.push(line);\n } else if (lines.length > 0) {\n blocks.push(lines.join(\"\\n\"));\n lines = [];\n }\n }\n if (lines.length > 0) blocks.push(lines.join(\"\\n\"));\n return blocks;\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 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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"}
1
+ {"version":3,"file":"stacktrace.js","sources":["../../../src/data/diagnostics/stacktrace.ts"],"sourcesContent":["import type { StackFrame, StackRecord } from \"../traces/types\";\nimport { 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 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 = splitGoroutineBlocks(trimmed);\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 fileLocation = parseGoroutineFileLocation(trimmedLine);\n const previousFrame = frames[frames.length - 1];\n if (fileLocation && previousFrame && !previousFrame.file) {\n previousFrame.file = fileLocation.file;\n previousFrame.line = fileLocation.line;\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\nfunction recordFrame(frame: StackFrame, kind: ParsedGoroutineFrame[\"kind\"]): ParsedGoroutineFrame {\n const file = frame.file ? normalizeFilePath(frame.file) : undefined;\n return {\n functionName: frame.func,\n // A record's func carries no argument list, so only the package path is stripped.\n displayName: stripPackageQualifier(frame.func),\n kind,\n runtime: isRuntimeFrame(frame.func),\n ...(file ? { file, line: frame.line, location: `${file}${frame.line ? `:${frame.line}` : \"\"}` } : {}),\n };\n}\n\n/**\n * Goroutines from `stacks` records of Go format, already parsed server side:\n * no text is parsed. A record of another format or one that failed is a caller\n * error and throws.\n */\nexport function goroutinesFromRecords(records: StackRecord[]): ParsedGoroutine[] {\n return records.map((record) => {\n if (record.format !== \"go\" || record.error || record.goroutineId === undefined) {\n throw new Error(\n `stack record ${record.checkpointId}/${record.key} is not a Go goroutine record (format \"${record.format}\"${record.error ? `, error \"${record.error}\"` : \"\"})`,\n );\n }\n const frames = [\n ...(record.frames ?? []).map((frame) => recordFrame(frame, \"frame\")),\n ...(record.createdBy ? [recordFrame(record.createdBy, \"created_by\")] : []),\n ];\n const state = record.state ?? \"\";\n const rawState = [\n state,\n ...(record.waitMinutes ? [`${record.waitMinutes} minutes`] : []),\n ...(record.lockedToThread ? [\"locked to thread\"] : []),\n ].join(\", \");\n const topFunction = frames.find((frame) => frame.kind === \"frame\")?.functionName;\n return {\n id: record.goroutineId,\n state: normalizeState(state),\n rawState,\n frames,\n raw: record.raw,\n userFrameCount: frames.filter((frame) => !frame.runtime && frame.kind === \"frame\").length,\n searchText: `goroutine ${record.goroutineId} [${rawState}]\\n${frames\n .map((frame) => `${frame.functionName} ${frame.file || \"\"}`)\n .join(\"\\n\")}`.toLowerCase(),\n ...(topFunction !== undefined ? { topFunction } : {}),\n };\n });\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 parseGoroutineFileLocation(value: string): { file: string; line: number } | undefined {\n const separator = value.lastIndexOf(\":\");\n if (separator <= 0) return undefined;\n\n let index = separator + 1;\n const lineStart = index;\n while (index < value.length && isAsciiDigit(value[index] ?? \"\")) index++;\n if (index === lineStart) return undefined;\n\n const lineEnd = index;\n if (index < value.length) {\n const whitespaceStart = index;\n while (index < value.length && (value[index] ?? \"\").trim() === \"\") index++;\n if (index === whitespaceStart || value.slice(index, index + 3).toLowerCase() !== \"+0x\") {\n return undefined;\n }\n\n index += 3;\n const offsetStart = index;\n while (index < value.length && isAsciiHexDigit(value[index] ?? \"\")) index++;\n if (index === offsetStart || index !== value.length) return undefined;\n }\n\n return {\n file: value.slice(0, separator),\n line: Number(value.slice(lineStart, lineEnd)),\n };\n}\n\nfunction isAsciiDigit(value: string): boolean {\n return value >= \"0\" && value <= \"9\";\n}\n\nfunction isAsciiHexDigit(value: string): boolean {\n const lower = value.toLowerCase();\n return isAsciiDigit(value) || (lower >= \"a\" && lower <= \"f\");\n}\n\nfunction splitGoroutineBlocks(text: string): string[] {\n const blocks: string[] = [];\n let lines: string[] = [];\n for (const line of text.split(\"\\n\")) {\n if (line.trim()) {\n lines.push(line);\n } else if (lines.length > 0) {\n blocks.push(lines.join(\"\\n\"));\n lines = [];\n }\n }\n if (lines.length > 0) blocks.push(lines.join(\"\\n\"));\n return blocks;\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 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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"}
@@ -19,12 +19,6 @@ export interface StackCapture {
19
19
  error?: string;
20
20
  collected_at?: string;
21
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
- }
22
+ /** The test-runner run metadata; diagnostics shares it rather than keeping a duplicate. */
23
+ export type { RunMeta } from '../test-runner/types.js';
30
24
  //# sourceMappingURL=types.d.ts.map
@@ -1 +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"}
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,2FAA2F;AAC3F,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC"}