@flanksource/clicky-ui 0.3.48 → 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 (444) 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/DataTable.cjs +18 -8
  116. package/dist/data/DataTable.cjs.map +1 -1
  117. package/dist/data/DataTable.d.ts +4 -0
  118. package/dist/data/DataTable.d.ts.map +1 -1
  119. package/dist/data/DataTable.js +18 -8
  120. package/dist/data/DataTable.js.map +1 -1
  121. package/dist/data/TaskManager.cjs +183 -159
  122. package/dist/data/TaskManager.cjs.map +1 -1
  123. package/dist/data/TaskManager.d.ts +3 -1
  124. package/dist/data/TaskManager.d.ts.map +1 -1
  125. package/dist/data/TaskManager.js +185 -161
  126. package/dist/data/TaskManager.js.map +1 -1
  127. package/dist/data/TaskManagerButton.cjs +1 -0
  128. package/dist/data/TaskManagerButton.cjs.map +1 -1
  129. package/dist/data/TaskManagerButton.js +1 -0
  130. package/dist/data/TaskManagerButton.js.map +1 -1
  131. package/dist/data/TaskProgress.cjs +13 -7
  132. package/dist/data/TaskProgress.cjs.map +1 -1
  133. package/dist/data/TaskProgress.d.ts +3 -1
  134. package/dist/data/TaskProgress.d.ts.map +1 -1
  135. package/dist/data/TaskProgress.js +13 -7
  136. package/dist/data/TaskProgress.js.map +1 -1
  137. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +52 -295
  138. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
  139. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
  140. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +47 -290
  141. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
  142. package/dist/data/diagnostics/MetricTile.cjs +44 -0
  143. package/dist/data/diagnostics/MetricTile.cjs.map +1 -0
  144. package/dist/data/diagnostics/MetricTile.d.ts +13 -0
  145. package/dist/data/diagnostics/MetricTile.d.ts.map +1 -0
  146. package/dist/data/diagnostics/MetricTile.js +44 -0
  147. package/dist/data/diagnostics/MetricTile.js.map +1 -0
  148. package/dist/data/diagnostics/StackDumpView.cjs +227 -0
  149. package/dist/data/diagnostics/StackDumpView.cjs.map +1 -0
  150. package/dist/data/diagnostics/StackDumpView.d.ts +53 -0
  151. package/dist/data/diagnostics/StackDumpView.d.ts.map +1 -0
  152. package/dist/data/diagnostics/StackDumpView.js +227 -0
  153. package/dist/data/diagnostics/StackDumpView.js.map +1 -0
  154. package/dist/data/diagnostics/fixtures.d.ts +1 -0
  155. package/dist/data/diagnostics/fixtures.d.ts.map +1 -1
  156. package/dist/data/diagnostics/metric-tone.cjs +18 -0
  157. package/dist/data/diagnostics/metric-tone.cjs.map +1 -0
  158. package/dist/data/diagnostics/metric-tone.d.ts +6 -0
  159. package/dist/data/diagnostics/metric-tone.d.ts.map +1 -0
  160. package/dist/data/diagnostics/metric-tone.js +18 -0
  161. package/dist/data/diagnostics/metric-tone.js.map +1 -0
  162. package/dist/data/diagnostics/stacktrace.cjs +44 -0
  163. package/dist/data/diagnostics/stacktrace.cjs.map +1 -1
  164. package/dist/data/diagnostics/stacktrace.d.ts +7 -0
  165. package/dist/data/diagnostics/stacktrace.d.ts.map +1 -1
  166. package/dist/data/diagnostics/stacktrace.js +44 -0
  167. package/dist/data/diagnostics/stacktrace.js.map +1 -1
  168. package/dist/data/diagnostics/types.d.ts +2 -8
  169. package/dist/data/diagnostics/types.d.ts.map +1 -1
  170. package/dist/data/lint/LintDetail.cjs +339 -0
  171. package/dist/data/lint/LintDetail.cjs.map +1 -0
  172. package/dist/data/lint/LintDetail.d.ts +17 -0
  173. package/dist/data/lint/LintDetail.d.ts.map +1 -0
  174. package/dist/data/lint/LintDetail.js +339 -0
  175. package/dist/data/lint/LintDetail.js.map +1 -0
  176. package/dist/data/lint/LintFilterBar.cjs +103 -0
  177. package/dist/data/lint/LintFilterBar.cjs.map +1 -0
  178. package/dist/data/lint/LintFilterBar.d.ts +16 -0
  179. package/dist/data/lint/LintFilterBar.d.ts.map +1 -0
  180. package/dist/data/lint/LintFilterBar.js +103 -0
  181. package/dist/data/lint/LintFilterBar.js.map +1 -0
  182. package/dist/data/lint/LintResults.cjs +144 -0
  183. package/dist/data/lint/LintResults.cjs.map +1 -0
  184. package/dist/data/lint/LintResults.d.ts +39 -0
  185. package/dist/data/lint/LintResults.d.ts.map +1 -0
  186. package/dist/data/lint/LintResults.fixtures.d.ts +10 -0
  187. package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -0
  188. package/dist/data/lint/LintResults.js +144 -0
  189. package/dist/data/lint/LintResults.js.map +1 -0
  190. package/dist/data/lint/LintTreeNode.cjs +66 -0
  191. package/dist/data/lint/LintTreeNode.cjs.map +1 -0
  192. package/dist/data/lint/LintTreeNode.d.ts +7 -0
  193. package/dist/data/lint/LintTreeNode.d.ts.map +1 -0
  194. package/dist/data/lint/LintTreeNode.js +66 -0
  195. package/dist/data/lint/LintTreeNode.js.map +1 -0
  196. package/dist/data/lint/actions.cjs +195 -0
  197. package/dist/data/lint/actions.cjs.map +1 -0
  198. package/dist/data/lint/actions.d.ts +29 -0
  199. package/dist/data/lint/actions.d.ts.map +1 -0
  200. package/dist/data/lint/actions.js +195 -0
  201. package/dist/data/lint/actions.js.map +1 -0
  202. package/dist/data/lint/grouping-options.cjs +14 -0
  203. package/dist/data/lint/grouping-options.cjs.map +1 -0
  204. package/dist/data/lint/grouping-options.d.ts +9 -0
  205. package/dist/data/lint/grouping-options.d.ts.map +1 -0
  206. package/dist/data/lint/grouping-options.js +14 -0
  207. package/dist/data/lint/grouping-options.js.map +1 -0
  208. package/dist/data/lint/grouping.cjs +450 -0
  209. package/dist/data/lint/grouping.cjs.map +1 -0
  210. package/dist/data/lint/grouping.d.ts +10 -0
  211. package/dist/data/lint/grouping.d.ts.map +1 -0
  212. package/dist/data/lint/grouping.js +450 -0
  213. package/dist/data/lint/grouping.js.map +1 -0
  214. package/dist/data/lint/index.d.ts +10 -0
  215. package/dist/data/lint/index.d.ts.map +1 -0
  216. package/dist/data/lint/paths.cjs +35 -0
  217. package/dist/data/lint/paths.cjs.map +1 -0
  218. package/dist/data/lint/paths.d.ts +13 -0
  219. package/dist/data/lint/paths.d.ts.map +1 -0
  220. package/dist/data/lint/paths.js +35 -0
  221. package/dist/data/lint/paths.js.map +1 -0
  222. package/dist/data/lint/stats.cjs +76 -0
  223. package/dist/data/lint/stats.cjs.map +1 -0
  224. package/dist/data/lint/stats.d.ts +19 -0
  225. package/dist/data/lint/stats.d.ts.map +1 -0
  226. package/dist/data/lint/stats.js +76 -0
  227. package/dist/data/lint/stats.js.map +1 -0
  228. package/dist/data/lint/types.cjs +16 -0
  229. package/dist/data/lint/types.cjs.map +1 -0
  230. package/dist/data/lint/types.d.ts +93 -0
  231. package/dist/data/lint/types.d.ts.map +1 -0
  232. package/dist/data/lint/types.js +16 -0
  233. package/dist/data/lint/types.js.map +1 -0
  234. package/dist/data/test-runner/TestAttemptDetail.cjs +113 -0
  235. package/dist/data/test-runner/TestAttemptDetail.cjs.map +1 -0
  236. package/dist/data/test-runner/TestAttemptDetail.d.ts +19 -0
  237. package/dist/data/test-runner/TestAttemptDetail.d.ts.map +1 -0
  238. package/dist/data/test-runner/TestAttemptDetail.js +113 -0
  239. package/dist/data/test-runner/TestAttemptDetail.js.map +1 -0
  240. package/dist/data/test-runner/TestAttempts.cjs +36 -0
  241. package/dist/data/test-runner/TestAttempts.cjs.map +1 -0
  242. package/dist/data/test-runner/TestAttempts.d.ts +5 -0
  243. package/dist/data/test-runner/TestAttempts.d.ts.map +1 -0
  244. package/dist/data/test-runner/TestAttempts.js +36 -0
  245. package/dist/data/test-runner/TestAttempts.js.map +1 -0
  246. package/dist/data/test-runner/TestDetailPanel.cjs +13 -3
  247. package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
  248. package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
  249. package/dist/data/test-runner/TestDetailPanel.js +14 -4
  250. package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
  251. package/dist/data/test-runner/TestFailureDetail.cjs +9 -29
  252. package/dist/data/test-runner/TestFailureDetail.cjs.map +1 -1
  253. package/dist/data/test-runner/TestFailureDetail.d.ts +6 -6
  254. package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
  255. package/dist/data/test-runner/TestFailureDetail.js +9 -29
  256. package/dist/data/test-runner/TestFailureDetail.js.map +1 -1
  257. package/dist/data/test-runner/TestRunSummary.cjs +33 -0
  258. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  259. package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
  260. package/dist/data/test-runner/TestRunSummary.js +34 -1
  261. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  262. package/dist/data/test-runner/TestRunner.cjs +3 -0
  263. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  264. package/dist/data/test-runner/TestRunner.d.ts +8 -1
  265. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  266. package/dist/data/test-runner/TestRunner.js +3 -0
  267. package/dist/data/test-runner/TestRunner.js.map +1 -1
  268. package/dist/data/test-runner/TestTreeNode.cjs +3 -1
  269. package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
  270. package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
  271. package/dist/data/test-runner/TestTreeNode.js +3 -1
  272. package/dist/data/test-runner/TestTreeNode.js.map +1 -1
  273. package/dist/data/test-runner/adapter.cjs +9 -1
  274. package/dist/data/test-runner/adapter.cjs.map +1 -1
  275. package/dist/data/test-runner/adapter.d.ts +5 -0
  276. package/dist/data/test-runner/adapter.d.ts.map +1 -1
  277. package/dist/data/test-runner/adapter.js +9 -1
  278. package/dist/data/test-runner/adapter.js.map +1 -1
  279. package/dist/data/test-runner/attempts.cjs +62 -0
  280. package/dist/data/test-runner/attempts.cjs.map +1 -0
  281. package/dist/data/test-runner/attempts.d.ts +13 -0
  282. package/dist/data/test-runner/attempts.d.ts.map +1 -0
  283. package/dist/data/test-runner/attempts.js +62 -0
  284. package/dist/data/test-runner/attempts.js.map +1 -0
  285. package/dist/data/test-runner/context.cjs.map +1 -1
  286. package/dist/data/test-runner/context.d.ts +6 -0
  287. package/dist/data/test-runner/context.d.ts.map +1 -1
  288. package/dist/data/test-runner/context.js.map +1 -1
  289. package/dist/data/test-runner/index.d.ts +5 -1
  290. package/dist/data/test-runner/index.d.ts.map +1 -1
  291. package/dist/data/test-runner/marks.cjs +2 -0
  292. package/dist/data/test-runner/marks.cjs.map +1 -1
  293. package/dist/data/test-runner/marks.d.ts.map +1 -1
  294. package/dist/data/test-runner/marks.js +2 -0
  295. package/dist/data/test-runner/marks.js.map +1 -1
  296. package/dist/data/test-runner/process-metrics.cjs +15 -0
  297. package/dist/data/test-runner/process-metrics.cjs.map +1 -0
  298. package/dist/data/test-runner/process-metrics.d.ts +22 -0
  299. package/dist/data/test-runner/process-metrics.d.ts.map +1 -0
  300. package/dist/data/test-runner/process-metrics.js +15 -0
  301. package/dist/data/test-runner/process-metrics.js.map +1 -0
  302. package/dist/data/test-runner/status.cjs +11 -3
  303. package/dist/data/test-runner/status.cjs.map +1 -1
  304. package/dist/data/test-runner/status.d.ts +3 -1
  305. package/dist/data/test-runner/status.d.ts.map +1 -1
  306. package/dist/data/test-runner/status.js +11 -3
  307. package/dist/data/test-runner/status.js.map +1 -1
  308. package/dist/data/test-runner/types.d.ts +14 -0
  309. package/dist/data/test-runner/types.d.ts.map +1 -1
  310. package/dist/data/traces/GoProfileView.cjs +176 -0
  311. package/dist/data/traces/GoProfileView.cjs.map +1 -0
  312. package/dist/data/traces/GoProfileView.d.ts +30 -0
  313. package/dist/data/traces/GoProfileView.d.ts.map +1 -0
  314. package/dist/data/traces/GoProfileView.js +176 -0
  315. package/dist/data/traces/GoProfileView.js.map +1 -0
  316. package/dist/data/traces/ProcessFacetTable.cjs +79 -0
  317. package/dist/data/traces/ProcessFacetTable.cjs.map +1 -0
  318. package/dist/data/traces/ProcessFacetTable.d.ts +21 -0
  319. package/dist/data/traces/ProcessFacetTable.d.ts.map +1 -0
  320. package/dist/data/traces/ProcessFacetTable.js +79 -0
  321. package/dist/data/traces/ProcessFacetTable.js.map +1 -0
  322. package/dist/data/traces/ProcessRecordViews.cjs +41 -0
  323. package/dist/data/traces/ProcessRecordViews.cjs.map +1 -0
  324. package/dist/data/traces/ProcessRecordViews.d.ts +16 -0
  325. package/dist/data/traces/ProcessRecordViews.d.ts.map +1 -0
  326. package/dist/data/traces/ProcessRecordViews.js +41 -0
  327. package/dist/data/traces/ProcessRecordViews.js.map +1 -0
  328. package/dist/data/traces/ProcessTraceDetail.cjs +316 -0
  329. package/dist/data/traces/ProcessTraceDetail.cjs.map +1 -0
  330. package/dist/data/traces/ProcessTraceDetail.d.ts +39 -0
  331. package/dist/data/traces/ProcessTraceDetail.d.ts.map +1 -0
  332. package/dist/data/traces/ProcessTraceDetail.js +316 -0
  333. package/dist/data/traces/ProcessTraceDetail.js.map +1 -0
  334. package/dist/data/traces/ProcessTraceTree.cjs +135 -0
  335. package/dist/data/traces/ProcessTraceTree.cjs.map +1 -0
  336. package/dist/data/traces/ProcessTraceTree.d.ts +41 -0
  337. package/dist/data/traces/ProcessTraceTree.d.ts.map +1 -0
  338. package/dist/data/traces/ProcessTraceTree.js +135 -0
  339. package/dist/data/traces/ProcessTraceTree.js.map +1 -0
  340. package/dist/data/traces/Sparkline.cjs +45 -0
  341. package/dist/data/traces/Sparkline.cjs.map +1 -0
  342. package/dist/data/traces/Sparkline.d.ts +29 -0
  343. package/dist/data/traces/Sparkline.d.ts.map +1 -0
  344. package/dist/data/traces/Sparkline.js +45 -0
  345. package/dist/data/traces/Sparkline.js.map +1 -0
  346. package/dist/data/traces/SqlTraceTable.cjs +104 -0
  347. package/dist/data/traces/SqlTraceTable.cjs.map +1 -0
  348. package/dist/data/traces/SqlTraceTable.d.ts +19 -0
  349. package/dist/data/traces/SqlTraceTable.d.ts.map +1 -0
  350. package/dist/data/traces/SqlTraceTable.js +104 -0
  351. package/dist/data/traces/SqlTraceTable.js.map +1 -0
  352. package/dist/data/traces/TerminalCastPlayer.cjs +162 -0
  353. package/dist/data/traces/TerminalCastPlayer.cjs.map +1 -0
  354. package/dist/data/traces/TerminalCastPlayer.js +162 -0
  355. package/dist/data/traces/TerminalCastPlayer.js.map +1 -0
  356. package/dist/data/traces/TraceHarView.cjs +15 -0
  357. package/dist/data/traces/TraceHarView.cjs.map +1 -0
  358. package/dist/data/traces/TraceHarView.js +15 -0
  359. package/dist/data/traces/TraceHarView.js.map +1 -0
  360. package/dist/data/traces/TraceView.cjs +63 -0
  361. package/dist/data/traces/TraceView.cjs.map +1 -0
  362. package/dist/data/traces/TraceView.d.ts +20 -0
  363. package/dist/data/traces/TraceView.d.ts.map +1 -0
  364. package/dist/data/traces/TraceView.js +63 -0
  365. package/dist/data/traces/TraceView.js.map +1 -0
  366. package/dist/data/traces/TraceWindowList.cjs +117 -0
  367. package/dist/data/traces/TraceWindowList.cjs.map +1 -0
  368. package/dist/data/traces/TraceWindowList.d.ts +48 -0
  369. package/dist/data/traces/TraceWindowList.d.ts.map +1 -0
  370. package/dist/data/traces/TraceWindowList.js +117 -0
  371. package/dist/data/traces/TraceWindowList.js.map +1 -0
  372. package/dist/data/traces/cast.cjs +81 -0
  373. package/dist/data/traces/cast.cjs.map +1 -0
  374. package/dist/data/traces/cast.js +81 -0
  375. package/dist/data/traces/cast.js.map +1 -0
  376. package/dist/data/traces/fixtures.d.ts +25 -1
  377. package/dist/data/traces/fixtures.d.ts.map +1 -1
  378. package/dist/data/traces/har-adapter.cjs +83 -0
  379. package/dist/data/traces/har-adapter.cjs.map +1 -0
  380. package/dist/data/traces/har-adapter.js +83 -0
  381. package/dist/data/traces/har-adapter.js.map +1 -0
  382. package/dist/data/traces/index.d.ts +19 -0
  383. package/dist/data/traces/index.d.ts.map +1 -0
  384. package/dist/data/traces/process-facets.cjs +48 -0
  385. package/dist/data/traces/process-facets.cjs.map +1 -0
  386. package/dist/data/traces/process-facets.d.ts +38 -0
  387. package/dist/data/traces/process-facets.d.ts.map +1 -0
  388. package/dist/data/traces/process-facets.js +48 -0
  389. package/dist/data/traces/process-facets.js.map +1 -0
  390. package/dist/data/traces/process-tree.cjs +85 -0
  391. package/dist/data/traces/process-tree.cjs.map +1 -0
  392. package/dist/data/traces/process-tree.d.ts +40 -0
  393. package/dist/data/traces/process-tree.d.ts.map +1 -0
  394. package/dist/data/traces/process-tree.js +85 -0
  395. package/dist/data/traces/process-tree.js.map +1 -0
  396. package/dist/data/traces/profile-aggregate.cjs +78 -0
  397. package/dist/data/traces/profile-aggregate.cjs.map +1 -0
  398. package/dist/data/traces/profile-aggregate.d.ts +41 -0
  399. package/dist/data/traces/profile-aggregate.d.ts.map +1 -0
  400. package/dist/data/traces/profile-aggregate.js +78 -0
  401. package/dist/data/traces/profile-aggregate.js.map +1 -0
  402. package/dist/data/traces/sql-trace.cjs +39 -0
  403. package/dist/data/traces/sql-trace.cjs.map +1 -0
  404. package/dist/data/traces/sql-trace.d.ts +31 -0
  405. package/dist/data/traces/sql-trace.d.ts.map +1 -0
  406. package/dist/data/traces/sql-trace.js +39 -0
  407. package/dist/data/traces/sql-trace.js.map +1 -0
  408. package/dist/data/traces/stack-checkpoints.cjs +22 -0
  409. package/dist/data/traces/stack-checkpoints.cjs.map +1 -0
  410. package/dist/data/traces/stack-checkpoints.d.ts +18 -0
  411. package/dist/data/traces/stack-checkpoints.d.ts.map +1 -0
  412. package/dist/data/traces/stack-checkpoints.js +22 -0
  413. package/dist/data/traces/stack-checkpoints.js.map +1 -0
  414. package/dist/data/traces/terminal-screen.cjs +270 -0
  415. package/dist/data/traces/terminal-screen.cjs.map +1 -0
  416. package/dist/data/traces/terminal-screen.js +270 -0
  417. package/dist/data/traces/terminal-screen.js.map +1 -0
  418. package/dist/data/traces/terminal-timeline.cjs +48 -0
  419. package/dist/data/traces/terminal-timeline.cjs.map +1 -0
  420. package/dist/data/traces/terminal-timeline.js +48 -0
  421. package/dist/data/traces/terminal-timeline.js.map +1 -0
  422. package/dist/data/traces/types.d.ts +121 -8
  423. package/dist/data/traces/types.d.ts.map +1 -1
  424. package/dist/data/verification/adapters.cjs +1 -0
  425. package/dist/data/verification/adapters.cjs.map +1 -1
  426. package/dist/data/verification/adapters.d.ts.map +1 -1
  427. package/dist/data/verification/adapters.js +1 -0
  428. package/dist/data/verification/adapters.js.map +1 -1
  429. package/dist/data/version-info.cjs +3 -3
  430. package/dist/data/version-info.cjs.map +1 -1
  431. package/dist/data/version-info.js +3 -3
  432. package/dist/data/version-info.js.map +1 -1
  433. package/dist/data.cjs +105 -5
  434. package/dist/data.cjs.map +1 -1
  435. package/dist/data.d.ts +5 -0
  436. package/dist/data.d.ts.map +1 -1
  437. package/dist/data.js +101 -1
  438. package/dist/data.js.map +1 -1
  439. package/dist/index.cjs +107 -7
  440. package/dist/index.cjs.map +1 -1
  441. package/dist/index.js +101 -1
  442. package/dist/index.js.map +1 -1
  443. package/dist/styles.css +1 -1
  444. package/package.json +6 -1
@@ -0,0 +1,81 @@
1
+ const NO_EXIT_CODE = -1;
2
+ const IGNORED_EVENT_TYPES = /* @__PURE__ */ new Set(["i", "m"]);
3
+ function parseJson(text, what) {
4
+ try {
5
+ return JSON.parse(text);
6
+ } catch (cause) {
7
+ throw new Error(`cast ${what} is not valid JSON: ${cause.message}`);
8
+ }
9
+ }
10
+ function parseHeader(line) {
11
+ const header = parseJson(line, "header");
12
+ if (header === null || typeof header !== "object" || Array.isArray(header)) {
13
+ throw new Error("cast header is not a JSON object");
14
+ }
15
+ if (header.version !== 2) throw new Error(`cast header: only asciinema version 2 is supported, got ${String(header.version)}`);
16
+ if (typeof header.width !== "number" || typeof header.height !== "number") {
17
+ throw new Error("cast header has no numeric width and height");
18
+ }
19
+ return { ...header, width: header.width, height: header.height };
20
+ }
21
+ function parseResize(data, lineNumber) {
22
+ const match = typeof data === "string" ? /^(\d+)x(\d+)$/.exec(data) : null;
23
+ if (!match) throw new Error(`cast line ${lineNumber}: resize data must be "<width>x<height>", got ${JSON.stringify(data)}`);
24
+ return { width: Number(match[1]), height: Number(match[2]) };
25
+ }
26
+ function parseCast(text) {
27
+ const lines = text.split("\n").filter((line) => line.trim() !== "");
28
+ const [headerLine, ...eventLines] = lines;
29
+ if (headerLine === void 0) throw new Error("cast text is empty");
30
+ const header = parseHeader(headerLine);
31
+ let size = { width: header.width, height: header.height };
32
+ const events = [];
33
+ let lastOffset = 0;
34
+ eventLines.forEach((line, index) => {
35
+ const lineNumber = index + 2;
36
+ let entry;
37
+ try {
38
+ entry = JSON.parse(line);
39
+ } catch (cause) {
40
+ throw new Error(`cast line ${lineNumber} is not valid JSON: ${cause.message}`);
41
+ }
42
+ if (!Array.isArray(entry) || entry.length < 3 || typeof entry[0] !== "number" || typeof entry[1] !== "string") {
43
+ throw new Error(`cast line ${lineNumber} is not a [seconds, type, data] event`);
44
+ }
45
+ const [offset, type, data] = entry;
46
+ lastOffset = Math.max(lastOffset, offset);
47
+ if (IGNORED_EVENT_TYPES.has(type)) return;
48
+ if (type === "o") {
49
+ events.push({ offset, kind: "o", data: String(data), ...size });
50
+ } else if (type === "r") {
51
+ size = parseResize(data, lineNumber);
52
+ events.push({ offset, kind: "r", data: "", ...size });
53
+ } else {
54
+ throw new Error(`cast line ${lineNumber}: unknown event type "${type}"`);
55
+ }
56
+ });
57
+ const extras = header._gavel;
58
+ if (!extras) return events;
59
+ const duration = header.duration ?? lastOffset;
60
+ const snapshots = extras.snapshots ?? [];
61
+ for (const [milliseconds, screen] of snapshots) {
62
+ events.push({ offset: milliseconds / 1e3, kind: "snapshot", data: screen, ...size });
63
+ }
64
+ if (snapshots.length === 0 && extras.final !== void 0) {
65
+ events.push({ offset: duration, kind: "snapshot", data: extras.final, ...size });
66
+ }
67
+ events.push({
68
+ offset: duration,
69
+ kind: "exit",
70
+ data: "",
71
+ ...size,
72
+ ...extras.exit_code !== void 0 && extras.exit_code !== NO_EXIT_CODE ? { exitCode: extras.exit_code } : {},
73
+ ...extras.truncated ? { truncated: true } : {},
74
+ ...header.command ? { command: header.command } : {}
75
+ });
76
+ return events;
77
+ }
78
+ export {
79
+ parseCast
80
+ };
81
+ //# sourceMappingURL=cast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cast.js","sources":["../../../src/data/traces/cast.ts"],"sourcesContent":["import type { TerminalEvent } from \"./types\";\n\ntype CastHeader = {\n version?: number;\n width?: number;\n height?: number;\n duration?: number;\n command?: string;\n /** Gavel's extras on top of asciinema v2; players ignore keys they do not know. */\n _gavel?: {\n exit_code?: number;\n snapshots?: [number, string][];\n final?: string;\n truncated?: boolean;\n };\n};\n\nconst NO_EXIT_CODE = -1;\n/** Events asciinema defines that draw nothing on the screen. */\nconst IGNORED_EVENT_TYPES = new Set([\"i\", \"m\"]);\n\nfunction parseJson(text: string, what: string): unknown {\n try {\n return JSON.parse(text);\n } catch (cause) {\n throw new Error(`cast ${what} is not valid JSON: ${(cause as Error).message}`);\n }\n}\n\nfunction parseHeader(line: string): CastHeader & { width: number; height: number } {\n const header = parseJson(line, \"header\") as CastHeader | null;\n if (header === null || typeof header !== \"object\" || Array.isArray(header)) {\n throw new Error(\"cast header is not a JSON object\");\n }\n if (header.version !== 2) throw new Error(`cast header: only asciinema version 2 is supported, got ${String(header.version)}`);\n if (typeof header.width !== \"number\" || typeof header.height !== \"number\") {\n throw new Error(\"cast header has no numeric width and height\");\n }\n return { ...header, width: header.width, height: header.height };\n}\n\nfunction parseResize(data: unknown, lineNumber: number): { width: number; height: number } {\n const match = typeof data === \"string\" ? /^(\\d+)x(\\d+)$/.exec(data) : null;\n if (!match) throw new Error(`cast line ${lineNumber}: resize data must be \"<width>x<height>\", got ${JSON.stringify(data)}`);\n return { width: Number(match[1]), height: Number(match[2]) };\n}\n\n/**\n * Parses an asciinema v2 cast (a header object, then one `[seconds, type, data]`\n * array per line) into the terminal events `TerminalCastPlayer` replays. The\n * `_gavel` header extras a commons-db export carries become the `snapshot` and\n * `exit` events a live capture records.\n */\nexport function parseCast(text: string): TerminalEvent[] {\n const lines = text.split(\"\\n\").filter((line) => line.trim() !== \"\");\n const [headerLine, ...eventLines] = lines;\n if (headerLine === undefined) throw new Error(\"cast text is empty\");\n\n const header = parseHeader(headerLine);\n let size = { width: header.width, height: header.height };\n const events: TerminalEvent[] = [];\n let lastOffset = 0;\n\n eventLines.forEach((line, index) => {\n const lineNumber = index + 2;\n let entry: unknown;\n try {\n entry = JSON.parse(line);\n } catch (cause) {\n throw new Error(`cast line ${lineNumber} is not valid JSON: ${(cause as Error).message}`);\n }\n if (!Array.isArray(entry) || entry.length < 3 || typeof entry[0] !== \"number\" || typeof entry[1] !== \"string\") {\n throw new Error(`cast line ${lineNumber} is not a [seconds, type, data] event`);\n }\n const [offset, type, data] = entry as [number, string, unknown];\n lastOffset = Math.max(lastOffset, offset);\n if (IGNORED_EVENT_TYPES.has(type)) return;\n if (type === \"o\") {\n events.push({ offset, kind: \"o\", data: String(data), ...size });\n } else if (type === \"r\") {\n size = parseResize(data, lineNumber);\n events.push({ offset, kind: \"r\", data: \"\", ...size });\n } else {\n throw new Error(`cast line ${lineNumber}: unknown event type \"${type}\"`);\n }\n });\n\n const extras = header._gavel;\n if (!extras) return events;\n\n const duration = header.duration ?? lastOffset;\n const snapshots = extras.snapshots ?? [];\n for (const [milliseconds, screen] of snapshots) {\n events.push({ offset: milliseconds / 1000, kind: \"snapshot\", data: screen, ...size });\n }\n if (snapshots.length === 0 && extras.final !== undefined) {\n events.push({ offset: duration, kind: \"snapshot\", data: extras.final, ...size });\n }\n events.push({\n offset: duration,\n kind: \"exit\",\n data: \"\",\n ...size,\n ...(extras.exit_code !== undefined && extras.exit_code !== NO_EXIT_CODE ? { exitCode: extras.exit_code } : {}),\n ...(extras.truncated ? { truncated: true } : {}),\n ...(header.command ? { command: header.command } : {}),\n });\n return events;\n}\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,32 @@
1
- import { HttpExchangeRow, ProcessNodeRow, ProcessSampleRow, SqlStatementRow, TerminalEvent } from './types.js';
1
+ import { TraceWindow } from './TraceWindowList.js';
2
+ import { GoProfileRecord, HttpExchangeRow, ProcessEnv, ProcessNodeRow, ProcessSampleRow, SqlStatementRow, StackRecord, TerminalEvent } from './types.js';
2
3
  export declare const httpExchangeRows: HttpExchangeRow[];
3
4
  export declare const sqlStatementRows: SqlStatementRow[];
4
5
  /** A short build log: colour, a progress line redrawn with a carriage return, a resize, and a settled screen. */
5
6
  export declare const terminalEvents: TerminalEvent[];
6
7
  export declare const processNodeRows: ProcessNodeRow[];
7
8
  export declare const processSampleRows: ProcessSampleRow[];
9
+ export declare const processEnvFixture: ProcessEnv;
10
+ /** processNodeRows with a working directory, the stack transports each process offers, and the root's recorded environment. */
11
+ export declare const processDetailRows: ProcessNodeRow[];
12
+ /** A native stack sample, which the UI shows as raw text. */
13
+ export declare const nativeSample = "Sampling process 101 for 1 seconds\nCall graph:\n 12 Thread_1001 DispatchQueue_1: com.apple.main-thread (serial)\n 12 start (in dyld) + 6076\n 12 main (in go) + 88\n";
14
+ /**
15
+ * `stacks` records: the root dumped twice in-process (a periodic reading, then the watchdog
16
+ * timeout), a busy child sampled natively, and an exited child whose dump failed.
17
+ */
18
+ export declare const stackRecords: StackRecord[];
19
+ /**
20
+ * processSampleRows from a session that armed every facet and disk IO. Open files change at
21
+ * ticks 5 and 9, a socket and a connection appear at tick 6 and close at tick 10 (an empty list
22
+ * is not stored), and the listening port never changes, so only tick 1 stores its list.
23
+ */
24
+ export declare const processFacetSampleRows: ProcessSampleRow[];
25
+ /**
26
+ * `goprof` records: a CPU profile taken at the watchdog timeout (two sample types) and an
27
+ * earlier heap profile (in-use and allocated space).
28
+ */
29
+ export declare const goProfileRecords: GoProfileRecord[];
30
+ /** Two armed windows of one fixture step: an HTTP capture and a process capture, with chips beyond the six that fit. */
31
+ export declare const traceWindows: TraceWindow[];
8
32
  //# sourceMappingURL=fixtures.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/data/traces/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,gBAAgB,EAAE,eAAe,EA8E7C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,eAAe,EA4D7C,CAAC;AAIF,iHAAiH;AACjH,eAAO,MAAM,cAAc,EAAE,aAAa,EAiBzC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAAc,EA+D3C,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAQ7C,CAAC"}
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/data/traces/fixtures.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAEf,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EAEf,WAAW,EACX,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,gBAAgB,EAAE,eAAe,EA8E7C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,eAAe,EA4D7C,CAAC;AAIF,iHAAiH;AACjH,eAAO,MAAM,cAAc,EAAE,aAAa,EAiBzC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAAc,EA+D3C,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAQ7C,CAAC;AAEJ,eAAO,MAAM,iBAAiB,EAAE,UAK/B,CAAC;AAEF,+HAA+H;AAC/H,eAAO,MAAM,iBAAiB,EAAE,cAAc,EA0B5C,CAAC;AAmCH,6DAA6D;AAC7D,eAAO,MAAM,YAAY,6LAKxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,WAAW,EA6DrC,CAAC;AAuCF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,gBAAgB,EAcnD,CAAC;AAyDH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAsC7C,CAAC;AAEF,wHAAwH;AACxH,eAAO,MAAM,YAAY,EAAE,WAAW,EAWrC,CAAC"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const format = require("../../lib/format.cjs");
4
+ const REQUEST_BODY_PATH = "request.postData.text";
5
+ const RESPONSE_BODY_PATH = "response.content.text";
6
+ function bodyText(body) {
7
+ if (body === void 0 || body === null) return void 0;
8
+ return typeof body === "string" ? body : JSON.stringify(body, null, 2);
9
+ }
10
+ function mimeTypeOf(body, declared) {
11
+ if (declared) return declared;
12
+ return body !== void 0 && body !== null && typeof body !== "string" ? "application/json" : void 0;
13
+ }
14
+ function headers(list) {
15
+ return list ? { headers: list } : {};
16
+ }
17
+ function requireObject(value, part, row) {
18
+ if (value === void 0 || value === null || typeof value !== "object") {
19
+ throw new Error(`HTTP exchange ${row.method ?? "?"} ${row.url ?? "?"} has no ${part} object`);
20
+ }
21
+ return value;
22
+ }
23
+ function harRequest(request, bodySize) {
24
+ var _a, _b, _c;
25
+ const text = bodyText((_a = request.postData) == null ? void 0 : _a.text);
26
+ return {
27
+ method: request.method,
28
+ url: request.url,
29
+ ...request.httpVersion ? { httpVersion: request.httpVersion } : {},
30
+ ...headers(request.headers),
31
+ ...request.queryString ? { queryString: request.queryString } : {},
32
+ ...text !== void 0 ? { postData: { mimeType: mimeTypeOf((_b = request.postData) == null ? void 0 : _b.text, (_c = request.postData) == null ? void 0 : _c.mimeType) ?? "", text } } : {},
33
+ ...request.headersSize !== void 0 ? { headersSize: request.headersSize } : {},
34
+ ...bodySize !== void 0 ? { bodySize } : {}
35
+ };
36
+ }
37
+ function harResponse(response, text, mimeType, bodySize, truncated) {
38
+ var _a;
39
+ return {
40
+ status: response.status,
41
+ ...response.statusText ? { statusText: response.statusText } : {},
42
+ ...response.httpVersion ? { httpVersion: response.httpVersion } : {},
43
+ ...headers(response.headers),
44
+ content: {
45
+ size: ((_a = response.content) == null ? void 0 : _a.size) ?? bodySize,
46
+ ...mimeType ? { mimeType } : {},
47
+ ...text !== void 0 ? { text } : {},
48
+ ...truncated ? { truncated } : {}
49
+ },
50
+ ...response.redirectURL ? { redirectURL: response.redirectURL } : {},
51
+ ...response.headersSize !== void 0 ? { headersSize: response.headersSize } : {},
52
+ bodySize
53
+ };
54
+ }
55
+ function tunnelSummary(row) {
56
+ return `Tunnelled CONNECT relayed without decrypting it: ${format.formatBytes(row.bytesIn ?? 0)} in from the server, ${format.formatBytes(row.bytesOut ?? 0)} out from the client.`;
57
+ }
58
+ function exchangeToHarEntry(row, options = {}) {
59
+ var _a, _b, _c, _d;
60
+ const request = requireObject(row.request, "request", row);
61
+ const response = requireObject(row.response, "response", row);
62
+ const cut = new Set(row.truncated ?? []);
63
+ const tunnelled = row.tunnelled === true;
64
+ const responseBody = tunnelled ? tunnelSummary(row) : bodyText((_a = response.content) == null ? void 0 : _a.text);
65
+ const responseMime = tunnelled ? "text/plain" : mimeTypeOf((_b = response.content) == null ? void 0 : _b.text, (_c = response.content) == null ? void 0 : _c.mimeType);
66
+ const responseSize = tunnelled ? row.bytesIn ?? 0 : response.bodySize ?? ((_d = response.content) == null ? void 0 : _d.size) ?? 0;
67
+ return {
68
+ startedDateTime: row.startedAt,
69
+ time: row.durationMs,
70
+ request: harRequest(request, tunnelled ? row.bytesOut ?? 0 : request.bodySize),
71
+ response: harResponse(response, responseBody, responseMime, responseSize, cut.has(RESPONSE_BODY_PATH)),
72
+ ...row.timings ? { timings: row.timings } : {},
73
+ ...options.id ? { _id: options.id } : {},
74
+ ...row.error ? { _error: row.error } : {},
75
+ ...row.serverIPAddress ? { serverIPAddress: row.serverIPAddress } : {},
76
+ ...tunnelled ? { _tunnelled: true, _bytesIn: row.bytesIn ?? 0, _bytesOut: row.bytesOut ?? 0 } : {},
77
+ ...row.comment ? { _comment: row.comment } : {},
78
+ ...row.encoding ? { _encoding: row.encoding } : {},
79
+ ...cut.has(REQUEST_BODY_PATH) ? { _requestBodyTruncated: true } : {}
80
+ };
81
+ }
82
+ exports.exchangeToHarEntry = exchangeToHarEntry;
83
+ //# sourceMappingURL=har-adapter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"har-adapter.cjs","sources":["../../../src/data/traces/har-adapter.ts"],"sourcesContent":["import { formatBytes } from \"../../lib/format\";\nimport type { HAREntry, HARHeader, HARRequest, HARResponse } from \"../har/types\";\nimport type { HttpExchangeRequest, HttpExchangeResponse, HttpExchangeRow, TraceBodyText } from \"./types\";\n\nconst REQUEST_BODY_PATH = \"request.postData.text\";\nconst RESPONSE_BODY_PATH = \"response.content.text\";\n\nexport type ExchangeToHarEntryOptions = {\n /** Stable per-request id, so an expanded HarPanel row survives a re-render. */\n id?: string;\n};\n\n/** A body as text: stored text verbatim, a body the store parsed into structure as indented JSON. */\nfunction bodyText(body: TraceBodyText | null | undefined): string | undefined {\n if (body === undefined || body === null) return undefined;\n return typeof body === \"string\" ? body : JSON.stringify(body, null, 2);\n}\n\nfunction mimeTypeOf(body: TraceBodyText | null | undefined, declared: string | undefined): string | undefined {\n if (declared) return declared;\n return body !== undefined && body !== null && typeof body !== \"string\" ? \"application/json\" : undefined;\n}\n\nfunction headers(list: HARHeader[] | null | undefined): { headers?: HARHeader[] } {\n return list ? { headers: list } : {};\n}\n\nfunction requireObject<T>(value: T | undefined | null, part: string, row: HttpExchangeRow): T {\n if (value === undefined || value === null || typeof value !== \"object\") {\n throw new Error(`HTTP exchange ${row.method ?? \"?\"} ${row.url ?? \"?\"} has no ${part} object`);\n }\n return value;\n}\n\nfunction harRequest(request: HttpExchangeRequest, bodySize: number | undefined): HARRequest {\n const text = bodyText(request.postData?.text);\n return {\n method: request.method,\n url: request.url,\n ...(request.httpVersion ? { httpVersion: request.httpVersion } : {}),\n ...headers(request.headers),\n ...(request.queryString ? { queryString: request.queryString } : {}),\n ...(text !== undefined\n ? { postData: { mimeType: mimeTypeOf(request.postData?.text, request.postData?.mimeType) ?? \"\", text } }\n : {}),\n ...(request.headersSize !== undefined ? { headersSize: request.headersSize } : {}),\n ...(bodySize !== undefined ? { bodySize } : {}),\n };\n}\n\nfunction harResponse(\n response: HttpExchangeResponse,\n text: string | undefined,\n mimeType: string | undefined,\n bodySize: number,\n truncated: boolean,\n): HARResponse {\n return {\n status: response.status,\n ...(response.statusText ? { statusText: response.statusText } : {}),\n ...(response.httpVersion ? { httpVersion: response.httpVersion } : {}),\n ...headers(response.headers),\n content: {\n size: response.content?.size ?? bodySize,\n ...(mimeType ? { mimeType } : {}),\n ...(text !== undefined ? { text } : {}),\n ...(truncated ? { truncated } : {}),\n },\n ...(response.redirectURL ? { redirectURL: response.redirectURL } : {}),\n ...(response.headersSize !== undefined ? { headersSize: response.headersSize } : {}),\n bodySize,\n };\n}\n\nfunction tunnelSummary(row: HttpExchangeRow): string {\n return `Tunnelled CONNECT relayed without decrypting it: ${formatBytes(row.bytesIn ?? 0)} in from the server, ${formatBytes(row.bytesOut ?? 0)} out from the client.`;\n}\n\n/**\n * Adapts one `http` / `http_proxy` trace row to the HAR entry `HarPanel`\n * renders. A tunnelled CONNECT has no request or response body to show, so its\n * byte counts stand in for the response body and fill the size columns.\n */\nexport function exchangeToHarEntry(row: HttpExchangeRow, options: ExchangeToHarEntryOptions = {}): HAREntry {\n const request = requireObject(row.request, \"request\", row);\n const response = requireObject(row.response, \"response\", row);\n const cut = new Set(row.truncated ?? []);\n const tunnelled = row.tunnelled === true;\n\n const responseBody = tunnelled ? tunnelSummary(row) : bodyText(response.content?.text);\n const responseMime = tunnelled ? \"text/plain\" : mimeTypeOf(response.content?.text, response.content?.mimeType);\n const responseSize = tunnelled ? (row.bytesIn ?? 0) : (response.bodySize ?? response.content?.size ?? 0);\n\n return {\n startedDateTime: row.startedAt,\n time: row.durationMs,\n request: harRequest(request, tunnelled ? (row.bytesOut ?? 0) : request.bodySize),\n response: harResponse(response, responseBody, responseMime, responseSize, cut.has(RESPONSE_BODY_PATH)),\n ...(row.timings ? { timings: row.timings } : {}),\n ...(options.id ? { _id: options.id } : {}),\n ...(row.error ? { _error: row.error } : {}),\n ...(row.serverIPAddress ? { serverIPAddress: row.serverIPAddress } : {}),\n ...(tunnelled ? { _tunnelled: true, _bytesIn: row.bytesIn ?? 0, _bytesOut: row.bytesOut ?? 0 } : {}),\n ...(row.comment ? { _comment: row.comment } : {}),\n ...(row.encoding ? { _encoding: row.encoding } : {}),\n ...(cut.has(REQUEST_BODY_PATH) ? { _requestBodyTruncated: true } : {}),\n };\n}\n"],"names":["formatBytes"],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import { formatBytes } from "../../lib/format.js";
2
+ const REQUEST_BODY_PATH = "request.postData.text";
3
+ const RESPONSE_BODY_PATH = "response.content.text";
4
+ function bodyText(body) {
5
+ if (body === void 0 || body === null) return void 0;
6
+ return typeof body === "string" ? body : JSON.stringify(body, null, 2);
7
+ }
8
+ function mimeTypeOf(body, declared) {
9
+ if (declared) return declared;
10
+ return body !== void 0 && body !== null && typeof body !== "string" ? "application/json" : void 0;
11
+ }
12
+ function headers(list) {
13
+ return list ? { headers: list } : {};
14
+ }
15
+ function requireObject(value, part, row) {
16
+ if (value === void 0 || value === null || typeof value !== "object") {
17
+ throw new Error(`HTTP exchange ${row.method ?? "?"} ${row.url ?? "?"} has no ${part} object`);
18
+ }
19
+ return value;
20
+ }
21
+ function harRequest(request, bodySize) {
22
+ var _a, _b, _c;
23
+ const text = bodyText((_a = request.postData) == null ? void 0 : _a.text);
24
+ return {
25
+ method: request.method,
26
+ url: request.url,
27
+ ...request.httpVersion ? { httpVersion: request.httpVersion } : {},
28
+ ...headers(request.headers),
29
+ ...request.queryString ? { queryString: request.queryString } : {},
30
+ ...text !== void 0 ? { postData: { mimeType: mimeTypeOf((_b = request.postData) == null ? void 0 : _b.text, (_c = request.postData) == null ? void 0 : _c.mimeType) ?? "", text } } : {},
31
+ ...request.headersSize !== void 0 ? { headersSize: request.headersSize } : {},
32
+ ...bodySize !== void 0 ? { bodySize } : {}
33
+ };
34
+ }
35
+ function harResponse(response, text, mimeType, bodySize, truncated) {
36
+ var _a;
37
+ return {
38
+ status: response.status,
39
+ ...response.statusText ? { statusText: response.statusText } : {},
40
+ ...response.httpVersion ? { httpVersion: response.httpVersion } : {},
41
+ ...headers(response.headers),
42
+ content: {
43
+ size: ((_a = response.content) == null ? void 0 : _a.size) ?? bodySize,
44
+ ...mimeType ? { mimeType } : {},
45
+ ...text !== void 0 ? { text } : {},
46
+ ...truncated ? { truncated } : {}
47
+ },
48
+ ...response.redirectURL ? { redirectURL: response.redirectURL } : {},
49
+ ...response.headersSize !== void 0 ? { headersSize: response.headersSize } : {},
50
+ bodySize
51
+ };
52
+ }
53
+ function tunnelSummary(row) {
54
+ return `Tunnelled CONNECT relayed without decrypting it: ${formatBytes(row.bytesIn ?? 0)} in from the server, ${formatBytes(row.bytesOut ?? 0)} out from the client.`;
55
+ }
56
+ function exchangeToHarEntry(row, options = {}) {
57
+ var _a, _b, _c, _d;
58
+ const request = requireObject(row.request, "request", row);
59
+ const response = requireObject(row.response, "response", row);
60
+ const cut = new Set(row.truncated ?? []);
61
+ const tunnelled = row.tunnelled === true;
62
+ const responseBody = tunnelled ? tunnelSummary(row) : bodyText((_a = response.content) == null ? void 0 : _a.text);
63
+ const responseMime = tunnelled ? "text/plain" : mimeTypeOf((_b = response.content) == null ? void 0 : _b.text, (_c = response.content) == null ? void 0 : _c.mimeType);
64
+ const responseSize = tunnelled ? row.bytesIn ?? 0 : response.bodySize ?? ((_d = response.content) == null ? void 0 : _d.size) ?? 0;
65
+ return {
66
+ startedDateTime: row.startedAt,
67
+ time: row.durationMs,
68
+ request: harRequest(request, tunnelled ? row.bytesOut ?? 0 : request.bodySize),
69
+ response: harResponse(response, responseBody, responseMime, responseSize, cut.has(RESPONSE_BODY_PATH)),
70
+ ...row.timings ? { timings: row.timings } : {},
71
+ ...options.id ? { _id: options.id } : {},
72
+ ...row.error ? { _error: row.error } : {},
73
+ ...row.serverIPAddress ? { serverIPAddress: row.serverIPAddress } : {},
74
+ ...tunnelled ? { _tunnelled: true, _bytesIn: row.bytesIn ?? 0, _bytesOut: row.bytesOut ?? 0 } : {},
75
+ ...row.comment ? { _comment: row.comment } : {},
76
+ ...row.encoding ? { _encoding: row.encoding } : {},
77
+ ...cut.has(REQUEST_BODY_PATH) ? { _requestBodyTruncated: true } : {}
78
+ };
79
+ }
80
+ export {
81
+ exchangeToHarEntry
82
+ };
83
+ //# sourceMappingURL=har-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"har-adapter.js","sources":["../../../src/data/traces/har-adapter.ts"],"sourcesContent":["import { formatBytes } from \"../../lib/format\";\nimport type { HAREntry, HARHeader, HARRequest, HARResponse } from \"../har/types\";\nimport type { HttpExchangeRequest, HttpExchangeResponse, HttpExchangeRow, TraceBodyText } from \"./types\";\n\nconst REQUEST_BODY_PATH = \"request.postData.text\";\nconst RESPONSE_BODY_PATH = \"response.content.text\";\n\nexport type ExchangeToHarEntryOptions = {\n /** Stable per-request id, so an expanded HarPanel row survives a re-render. */\n id?: string;\n};\n\n/** A body as text: stored text verbatim, a body the store parsed into structure as indented JSON. */\nfunction bodyText(body: TraceBodyText | null | undefined): string | undefined {\n if (body === undefined || body === null) return undefined;\n return typeof body === \"string\" ? body : JSON.stringify(body, null, 2);\n}\n\nfunction mimeTypeOf(body: TraceBodyText | null | undefined, declared: string | undefined): string | undefined {\n if (declared) return declared;\n return body !== undefined && body !== null && typeof body !== \"string\" ? \"application/json\" : undefined;\n}\n\nfunction headers(list: HARHeader[] | null | undefined): { headers?: HARHeader[] } {\n return list ? { headers: list } : {};\n}\n\nfunction requireObject<T>(value: T | undefined | null, part: string, row: HttpExchangeRow): T {\n if (value === undefined || value === null || typeof value !== \"object\") {\n throw new Error(`HTTP exchange ${row.method ?? \"?\"} ${row.url ?? \"?\"} has no ${part} object`);\n }\n return value;\n}\n\nfunction harRequest(request: HttpExchangeRequest, bodySize: number | undefined): HARRequest {\n const text = bodyText(request.postData?.text);\n return {\n method: request.method,\n url: request.url,\n ...(request.httpVersion ? { httpVersion: request.httpVersion } : {}),\n ...headers(request.headers),\n ...(request.queryString ? { queryString: request.queryString } : {}),\n ...(text !== undefined\n ? { postData: { mimeType: mimeTypeOf(request.postData?.text, request.postData?.mimeType) ?? \"\", text } }\n : {}),\n ...(request.headersSize !== undefined ? { headersSize: request.headersSize } : {}),\n ...(bodySize !== undefined ? { bodySize } : {}),\n };\n}\n\nfunction harResponse(\n response: HttpExchangeResponse,\n text: string | undefined,\n mimeType: string | undefined,\n bodySize: number,\n truncated: boolean,\n): HARResponse {\n return {\n status: response.status,\n ...(response.statusText ? { statusText: response.statusText } : {}),\n ...(response.httpVersion ? { httpVersion: response.httpVersion } : {}),\n ...headers(response.headers),\n content: {\n size: response.content?.size ?? bodySize,\n ...(mimeType ? { mimeType } : {}),\n ...(text !== undefined ? { text } : {}),\n ...(truncated ? { truncated } : {}),\n },\n ...(response.redirectURL ? { redirectURL: response.redirectURL } : {}),\n ...(response.headersSize !== undefined ? { headersSize: response.headersSize } : {}),\n bodySize,\n };\n}\n\nfunction tunnelSummary(row: HttpExchangeRow): string {\n return `Tunnelled CONNECT relayed without decrypting it: ${formatBytes(row.bytesIn ?? 0)} in from the server, ${formatBytes(row.bytesOut ?? 0)} out from the client.`;\n}\n\n/**\n * Adapts one `http` / `http_proxy` trace row to the HAR entry `HarPanel`\n * renders. A tunnelled CONNECT has no request or response body to show, so its\n * byte counts stand in for the response body and fill the size columns.\n */\nexport function exchangeToHarEntry(row: HttpExchangeRow, options: ExchangeToHarEntryOptions = {}): HAREntry {\n const request = requireObject(row.request, \"request\", row);\n const response = requireObject(row.response, \"response\", row);\n const cut = new Set(row.truncated ?? []);\n const tunnelled = row.tunnelled === true;\n\n const responseBody = tunnelled ? tunnelSummary(row) : bodyText(response.content?.text);\n const responseMime = tunnelled ? \"text/plain\" : mimeTypeOf(response.content?.text, response.content?.mimeType);\n const responseSize = tunnelled ? (row.bytesIn ?? 0) : (response.bodySize ?? response.content?.size ?? 0);\n\n return {\n startedDateTime: row.startedAt,\n time: row.durationMs,\n request: harRequest(request, tunnelled ? (row.bytesOut ?? 0) : request.bodySize),\n response: harResponse(response, responseBody, responseMime, responseSize, cut.has(RESPONSE_BODY_PATH)),\n ...(row.timings ? { timings: row.timings } : {}),\n ...(options.id ? { _id: options.id } : {}),\n ...(row.error ? { _error: row.error } : {}),\n ...(row.serverIPAddress ? { serverIPAddress: row.serverIPAddress } : {}),\n ...(tunnelled ? { _tunnelled: true, _bytesIn: row.bytesIn ?? 0, _bytesOut: row.bytesOut ?? 0 } : {}),\n ...(row.comment ? { _comment: row.comment } : {}),\n ...(row.encoding ? { _encoding: row.encoding } : {}),\n ...(cut.has(REQUEST_BODY_PATH) ? { _requestBodyTruncated: true } : {}),\n };\n}\n"],"names":[],"mappings":";AAIA,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAQ3B,SAAS,SAAS,MAA4D;AAC5E,MAAI,SAAS,UAAa,SAAS,KAAM,QAAO;AAChD,SAAO,OAAO,SAAS,WAAW,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC;AACvE;AAEA,SAAS,WAAW,MAAwC,UAAkD;AAC5G,MAAI,SAAU,QAAO;AACrB,SAAO,SAAS,UAAa,SAAS,QAAQ,OAAO,SAAS,WAAW,qBAAqB;AAChG;AAEA,SAAS,QAAQ,MAAiE;AAChF,SAAO,OAAO,EAAE,SAAS,KAAA,IAAS,CAAA;AACpC;AAEA,SAAS,cAAiB,OAA6B,MAAc,KAAyB;AAC5F,MAAI,UAAU,UAAa,UAAU,QAAQ,OAAO,UAAU,UAAU;AACtE,UAAM,IAAI,MAAM,iBAAiB,IAAI,UAAU,GAAG,IAAI,IAAI,OAAO,GAAG,WAAW,IAAI,SAAS;AAAA,EAC9F;AACA,SAAO;AACT;AAEA,SAAS,WAAW,SAA8B,UAA0C;;AAC1F,QAAM,OAAO,UAAS,aAAQ,aAAR,mBAAkB,IAAI;AAC5C,SAAO;AAAA,IACL,QAAQ,QAAQ;AAAA,IAChB,KAAK,QAAQ;AAAA,IACb,GAAI,QAAQ,cAAc,EAAE,aAAa,QAAQ,YAAA,IAAgB,CAAA;AAAA,IACjE,GAAG,QAAQ,QAAQ,OAAO;AAAA,IAC1B,GAAI,QAAQ,cAAc,EAAE,aAAa,QAAQ,YAAA,IAAgB,CAAA;AAAA,IACjE,GAAI,SAAS,SACT,EAAE,UAAU,EAAE,UAAU,YAAW,aAAQ,aAAR,mBAAkB,OAAM,aAAQ,aAAR,mBAAkB,QAAQ,KAAK,IAAI,KAAA,EAAK,IACnG,CAAA;AAAA,IACJ,GAAI,QAAQ,gBAAgB,SAAY,EAAE,aAAa,QAAQ,YAAA,IAAgB,CAAA;AAAA,IAC/E,GAAI,aAAa,SAAY,EAAE,aAAa,CAAA;AAAA,EAAC;AAEjD;AAEA,SAAS,YACP,UACA,MACA,UACA,UACA,WACa;;AACb,SAAO;AAAA,IACL,QAAQ,SAAS;AAAA,IACjB,GAAI,SAAS,aAAa,EAAE,YAAY,SAAS,WAAA,IAAe,CAAA;AAAA,IAChE,GAAI,SAAS,cAAc,EAAE,aAAa,SAAS,YAAA,IAAgB,CAAA;AAAA,IACnE,GAAG,QAAQ,SAAS,OAAO;AAAA,IAC3B,SAAS;AAAA,MACP,QAAM,cAAS,YAAT,mBAAkB,SAAQ;AAAA,MAChC,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA;AAAA,MAC9B,GAAI,SAAS,SAAY,EAAE,KAAA,IAAS,CAAA;AAAA,MACpC,GAAI,YAAY,EAAE,cAAc,CAAA;AAAA,IAAC;AAAA,IAEnC,GAAI,SAAS,cAAc,EAAE,aAAa,SAAS,YAAA,IAAgB,CAAA;AAAA,IACnE,GAAI,SAAS,gBAAgB,SAAY,EAAE,aAAa,SAAS,YAAA,IAAgB,CAAA;AAAA,IACjF;AAAA,EAAA;AAEJ;AAEA,SAAS,cAAc,KAA8B;AACnD,SAAO,oDAAoD,YAAY,IAAI,WAAW,CAAC,CAAC,wBAAwB,YAAY,IAAI,YAAY,CAAC,CAAC;AAChJ;AAOO,SAAS,mBAAmB,KAAsB,UAAqC,IAAc;;AAC1G,QAAM,UAAU,cAAc,IAAI,SAAS,WAAW,GAAG;AACzD,QAAM,WAAW,cAAc,IAAI,UAAU,YAAY,GAAG;AAC5D,QAAM,MAAM,IAAI,IAAI,IAAI,aAAa,CAAA,CAAE;AACvC,QAAM,YAAY,IAAI,cAAc;AAEpC,QAAM,eAAe,YAAY,cAAc,GAAG,IAAI,UAAS,cAAS,YAAT,mBAAkB,IAAI;AACrF,QAAM,eAAe,YAAY,eAAe,YAAW,cAAS,YAAT,mBAAkB,OAAM,cAAS,YAAT,mBAAkB,QAAQ;AAC7G,QAAM,eAAe,YAAa,IAAI,WAAW,IAAM,SAAS,cAAY,cAAS,YAAT,mBAAkB,SAAQ;AAEtG,SAAO;AAAA,IACL,iBAAiB,IAAI;AAAA,IACrB,MAAM,IAAI;AAAA,IACV,SAAS,WAAW,SAAS,YAAa,IAAI,YAAY,IAAK,QAAQ,QAAQ;AAAA,IAC/E,UAAU,YAAY,UAAU,cAAc,cAAc,cAAc,IAAI,IAAI,kBAAkB,CAAC;AAAA,IACrG,GAAI,IAAI,UAAU,EAAE,SAAS,IAAI,QAAA,IAAY,CAAA;AAAA,IAC7C,GAAI,QAAQ,KAAK,EAAE,KAAK,QAAQ,GAAA,IAAO,CAAA;AAAA,IACvC,GAAI,IAAI,QAAQ,EAAE,QAAQ,IAAI,MAAA,IAAU,CAAA;AAAA,IACxC,GAAI,IAAI,kBAAkB,EAAE,iBAAiB,IAAI,gBAAA,IAAoB,CAAA;AAAA,IACrE,GAAI,YAAY,EAAE,YAAY,MAAM,UAAU,IAAI,WAAW,GAAG,WAAW,IAAI,YAAY,EAAA,IAAM,CAAA;AAAA,IACjG,GAAI,IAAI,UAAU,EAAE,UAAU,IAAI,QAAA,IAAY,CAAA;AAAA,IAC9C,GAAI,IAAI,WAAW,EAAE,WAAW,IAAI,SAAA,IAAa,CAAA;AAAA,IACjD,GAAI,IAAI,IAAI,iBAAiB,IAAI,EAAE,uBAAuB,SAAS,CAAA;AAAA,EAAC;AAExE;"}
@@ -0,0 +1,19 @@
1
+ export { TraceView, type TraceViewProps } from './TraceView.js';
2
+ export { TraceHarView, type TraceHarViewProps } from './TraceHarView.js';
3
+ export { exchangeToHarEntry, type ExchangeToHarEntryOptions } from './har-adapter.js';
4
+ export { SqlTraceTable, type SqlTraceTableProps } from './SqlTraceTable.js';
5
+ export { groupStatements, formatStatementDuration, type SqlDisplayRow } from './sql-trace.js';
6
+ export { TerminalCastPlayer, type TerminalCastPlayerProps } from './TerminalCastPlayer.js';
7
+ export { parseCast } from './cast.js';
8
+ export { ProcessTraceTree, type ProcessTraceTreeProps } from './ProcessTraceTree.js';
9
+ export { ProcessTraceDetail, type ProcessTraceDetailProps } from './ProcessTraceDetail.js';
10
+ export { ProcessFacetTable, type ProcessFacetTableProps } from './ProcessFacetTable.js';
11
+ export { GoProfileView, ProfileTopTable, type GoProfileViewProps, type ProfileTopTableProps } from './GoProfileView.js';
12
+ export { aggregateProfile, formatProfileValue, profileValueTypes, stacksThrough, type ProfileAggregate, type ProfileFunctionRow, type ProfileStack, type ProfileValueType, } from './profile-aggregate.js';
13
+ export { SAMPLE_FACETS, SAMPLE_FACET_ORDER, armedFacets, diskSeries, facetCountSeries, latestFacetReading, type FacetReading, } from './process-facets.js';
14
+ export { stackCheckpoints, type StackCheckpoint } from './stack-checkpoints.js';
15
+ export { TraceWindowList, type TraceWindow, type TraceWindowListProps, type TraceWindowSource, } from './TraceWindowList.js';
16
+ export { buildProcessForest, flattenForest, formatCpuPercent, formatProcessTimestamp, isProcessExited, processLifetimeMs, processSeries, pruneExitedProcesses, type ProcessTreeNode, } from './process-tree.js';
17
+ export { Sparkline, LabeledSparkline, type SparklineProps, type LabeledSparklineProps } from './Sparkline.js';
18
+ export type { HttpExchangeRequest, HttpExchangeResponse, GoProfileRecord, HttpExchangeRow, ProcessDescriptor, ProcessEnv, ProcessNodeRow, ProcessSampleFacet, ProcessSampleRow, ProcessStackTransport, ProfileSample, SqlStatementRow, StackFormat, StackFrame, StackRecord, TerminalEvent, TerminalEventKind, TraceBodyText, TraceRow, } from './types.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/traces/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACrH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,YAAY,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EACL,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC3G,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,QAAQ,GACT,MAAM,SAAS,CAAC"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const SAMPLE_FACETS = {
4
+ openFiles: { label: "Open files", countKey: "openFiles", listKey: "openFileList", empty: "No open files" },
5
+ sockets: { label: "Sockets", countKey: "sockets", listKey: "socketList", empty: "No open sockets" },
6
+ ports: { label: "Ports", countKey: "ports", listKey: "portList", empty: "Not listening on any port" },
7
+ connections: {
8
+ label: "Connections",
9
+ countKey: "connections",
10
+ listKey: "connectionList",
11
+ empty: "No network connections"
12
+ }
13
+ };
14
+ const SAMPLE_FACET_ORDER = ["openFiles", "sockets", "ports", "connections"];
15
+ const inTickOrder = (samples, key) => samples.filter((sample) => sample.key === key).sort((a, b) => a.tick - b.tick);
16
+ function armedFacets(samples) {
17
+ return SAMPLE_FACET_ORDER.filter((facet) => samples.some((sample) => sample[SAMPLE_FACETS[facet].countKey] !== void 0));
18
+ }
19
+ function facetCountSeries(samples, key, facet) {
20
+ const { countKey } = SAMPLE_FACETS[facet];
21
+ return inTickOrder(samples, key).flatMap((sample) => sample[countKey] === void 0 ? [] : [sample[countKey]]);
22
+ }
23
+ function latestFacetReading(samples, key, facet) {
24
+ const { countKey, listKey } = SAMPLE_FACETS[facet];
25
+ let reading;
26
+ for (const sample of inTickOrder(samples, key)) {
27
+ const list = sample[listKey];
28
+ if (list) reading = { rows: list, readAt: sample.sampledAt };
29
+ else if (sample[countKey] === 0 && (!reading || reading.rows.length > 0)) {
30
+ reading = { rows: [], readAt: sample.sampledAt };
31
+ }
32
+ }
33
+ return reading;
34
+ }
35
+ function diskSeries(samples, key) {
36
+ const own = inTickOrder(samples, key);
37
+ return {
38
+ read: own.flatMap((sample) => sample.diskReadBytes === void 0 ? [] : [sample.diskReadBytes]),
39
+ write: own.flatMap((sample) => sample.diskWriteBytes === void 0 ? [] : [sample.diskWriteBytes])
40
+ };
41
+ }
42
+ exports.SAMPLE_FACETS = SAMPLE_FACETS;
43
+ exports.SAMPLE_FACET_ORDER = SAMPLE_FACET_ORDER;
44
+ exports.armedFacets = armedFacets;
45
+ exports.diskSeries = diskSeries;
46
+ exports.facetCountSeries = facetCountSeries;
47
+ exports.latestFacetReading = latestFacetReading;
48
+ //# sourceMappingURL=process-facets.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-facets.cjs","sources":["../../../src/data/traces/process-facets.ts"],"sourcesContent":["import type { ProcessDescriptor, ProcessSampleFacet, ProcessSampleRow } from \"./types\";\n\ntype FacetSpec = {\n label: string;\n countKey: \"openFiles\" | \"sockets\" | \"ports\" | \"connections\";\n listKey: \"openFileList\" | \"socketList\" | \"portList\" | \"connectionList\";\n empty: string;\n};\n\n/** The facets of `process_samples` in tab order, with the record fields that carry each one. */\nexport const SAMPLE_FACETS: Record<ProcessSampleFacet, FacetSpec> = {\n openFiles: { label: \"Open files\", countKey: \"openFiles\", listKey: \"openFileList\", empty: \"No open files\" },\n sockets: { label: \"Sockets\", countKey: \"sockets\", listKey: \"socketList\", empty: \"No open sockets\" },\n ports: { label: \"Ports\", countKey: \"ports\", listKey: \"portList\", empty: \"Not listening on any port\" },\n connections: {\n label: \"Connections\",\n countKey: \"connections\",\n listKey: \"connectionList\",\n empty: \"No network connections\",\n },\n};\n\nexport const SAMPLE_FACET_ORDER: ProcessSampleFacet[] = [\"openFiles\", \"sockets\", \"ports\", \"connections\"];\n\nconst inTickOrder = (samples: ProcessSampleRow[], key: string) =>\n samples.filter((sample) => sample.key === key).sort((a, b) => a.tick - b.tick);\n\n/**\n * The facets the session armed: those whose count some sample carries. A sample\n * carries a facet's count on every tick once it is armed and never otherwise, so\n * this is a property of the session, not of one process.\n */\nexport function armedFacets(samples: ProcessSampleRow[]): ProcessSampleFacet[] {\n return SAMPLE_FACET_ORDER.filter((facet) => samples.some((sample) => sample[SAMPLE_FACETS[facet].countKey] !== undefined));\n}\n\n/** One process's count of a facet over its samples, in tick order. */\nexport function facetCountSeries(samples: ProcessSampleRow[], key: string, facet: ProcessSampleFacet): number[] {\n const { countKey } = SAMPLE_FACETS[facet];\n return inTickOrder(samples, key).flatMap((sample) => (sample[countKey] === undefined ? [] : [sample[countKey]]));\n}\n\nexport type FacetReading = {\n rows: ProcessDescriptor[];\n /** When this list was stored: the first tick it held, not the last tick it was still true. */\n readAt: string;\n};\n\n/**\n * The latest stored list of a facet for one process. Lists are stored only when\n * they change, so this is the list on the latest sample that carries one. An\n * empty list is never stored, so a sample whose count is 0 with no list ends a\n * non-empty reading with an empty one. Undefined when nothing was stored and no\n * count says the list is empty.\n */\nexport function latestFacetReading(\n samples: ProcessSampleRow[],\n key: string,\n facet: ProcessSampleFacet,\n): FacetReading | undefined {\n const { countKey, listKey } = SAMPLE_FACETS[facet];\n let reading: FacetReading | undefined;\n for (const sample of inTickOrder(samples, key)) {\n const list = sample[listKey];\n if (list) reading = { rows: list, readAt: sample.sampledAt };\n else if (sample[countKey] === 0 && (!reading || reading.rows.length > 0)) {\n reading = { rows: [], readAt: sample.sampledAt };\n }\n }\n return reading;\n}\n\n/** One process's cumulative disk read and write bytes over the samples that carry them, in tick order. */\nexport function diskSeries(samples: ProcessSampleRow[], key: string): { read: number[]; write: number[] } {\n const own = inTickOrder(samples, key);\n return {\n read: own.flatMap((sample) => (sample.diskReadBytes === undefined ? [] : [sample.diskReadBytes])),\n write: own.flatMap((sample) => (sample.diskWriteBytes === undefined ? [] : [sample.diskWriteBytes])),\n };\n}\n"],"names":[],"mappings":";;AAUO,MAAM,gBAAuD;AAAA,EAClE,WAAW,EAAE,OAAO,cAAc,UAAU,aAAa,SAAS,gBAAgB,OAAO,gBAAA;AAAA,EACzF,SAAS,EAAE,OAAO,WAAW,UAAU,WAAW,SAAS,cAAc,OAAO,kBAAA;AAAA,EAChF,OAAO,EAAE,OAAO,SAAS,UAAU,SAAS,SAAS,YAAY,OAAO,4BAAA;AAAA,EACxE,aAAa;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,EAAA;AAEX;AAEO,MAAM,qBAA2C,CAAC,aAAa,WAAW,SAAS,aAAa;AAEvG,MAAM,cAAc,CAAC,SAA6B,QAChD,QAAQ,OAAO,CAAC,WAAW,OAAO,QAAQ,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI;AAOxE,SAAS,YAAY,SAAmD;AAC7E,SAAO,mBAAmB,OAAO,CAAC,UAAU,QAAQ,KAAK,CAAC,WAAW,OAAO,cAAc,KAAK,EAAE,QAAQ,MAAM,MAAS,CAAC;AAC3H;AAGO,SAAS,iBAAiB,SAA6B,KAAa,OAAqC;AAC9G,QAAM,EAAE,SAAA,IAAa,cAAc,KAAK;AACxC,SAAO,YAAY,SAAS,GAAG,EAAE,QAAQ,CAAC,WAAY,OAAO,QAAQ,MAAM,SAAY,CAAA,IAAK,CAAC,OAAO,QAAQ,CAAC,CAAE;AACjH;AAeO,SAAS,mBACd,SACA,KACA,OAC0B;AAC1B,QAAM,EAAE,UAAU,YAAY,cAAc,KAAK;AACjD,MAAI;AACJ,aAAW,UAAU,YAAY,SAAS,GAAG,GAAG;AAC9C,UAAM,OAAO,OAAO,OAAO;AAC3B,QAAI,KAAM,WAAU,EAAE,MAAM,MAAM,QAAQ,OAAO,UAAA;AAAA,aACxC,OAAO,QAAQ,MAAM,MAAM,CAAC,WAAW,QAAQ,KAAK,SAAS,IAAI;AACxE,gBAAU,EAAE,MAAM,CAAA,GAAI,QAAQ,OAAO,UAAA;AAAA,IACvC;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,WAAW,SAA6B,KAAkD;AACxG,QAAM,MAAM,YAAY,SAAS,GAAG;AACpC,SAAO;AAAA,IACL,MAAM,IAAI,QAAQ,CAAC,WAAY,OAAO,kBAAkB,SAAY,CAAA,IAAK,CAAC,OAAO,aAAa,CAAE;AAAA,IAChG,OAAO,IAAI,QAAQ,CAAC,WAAY,OAAO,mBAAmB,SAAY,CAAA,IAAK,CAAC,OAAO,cAAc,CAAE;AAAA,EAAA;AAEvG;;;;;;;"}
@@ -0,0 +1,38 @@
1
+ import { ProcessDescriptor, ProcessSampleFacet, ProcessSampleRow } from './types.js';
2
+ type FacetSpec = {
3
+ label: string;
4
+ countKey: "openFiles" | "sockets" | "ports" | "connections";
5
+ listKey: "openFileList" | "socketList" | "portList" | "connectionList";
6
+ empty: string;
7
+ };
8
+ /** The facets of `process_samples` in tab order, with the record fields that carry each one. */
9
+ export declare const SAMPLE_FACETS: Record<ProcessSampleFacet, FacetSpec>;
10
+ export declare const SAMPLE_FACET_ORDER: ProcessSampleFacet[];
11
+ /**
12
+ * The facets the session armed: those whose count some sample carries. A sample
13
+ * carries a facet's count on every tick once it is armed and never otherwise, so
14
+ * this is a property of the session, not of one process.
15
+ */
16
+ export declare function armedFacets(samples: ProcessSampleRow[]): ProcessSampleFacet[];
17
+ /** One process's count of a facet over its samples, in tick order. */
18
+ export declare function facetCountSeries(samples: ProcessSampleRow[], key: string, facet: ProcessSampleFacet): number[];
19
+ export type FacetReading = {
20
+ rows: ProcessDescriptor[];
21
+ /** When this list was stored: the first tick it held, not the last tick it was still true. */
22
+ readAt: string;
23
+ };
24
+ /**
25
+ * The latest stored list of a facet for one process. Lists are stored only when
26
+ * they change, so this is the list on the latest sample that carries one. An
27
+ * empty list is never stored, so a sample whose count is 0 with no list ends a
28
+ * non-empty reading with an empty one. Undefined when nothing was stored and no
29
+ * count says the list is empty.
30
+ */
31
+ export declare function latestFacetReading(samples: ProcessSampleRow[], key: string, facet: ProcessSampleFacet): FacetReading | undefined;
32
+ /** One process's cumulative disk read and write bytes over the samples that carry them, in tick order. */
33
+ export declare function diskSeries(samples: ProcessSampleRow[], key: string): {
34
+ read: number[];
35
+ write: number[];
36
+ };
37
+ export {};
38
+ //# sourceMappingURL=process-facets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-facets.d.ts","sourceRoot":"","sources":["../../../src/data/traces/process-facets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEvF,KAAK,SAAS,GAAG;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,CAAC;IAC5D,OAAO,EAAE,cAAc,GAAG,YAAY,GAAG,UAAU,GAAG,gBAAgB,CAAC;IACvE,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,gGAAgG;AAChG,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,kBAAkB,EAAE,SAAS,CAU/D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,kBAAkB,EAAqD,CAAC;AAKzG;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,kBAAkB,EAAE,CAE7E;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAG9G;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,8FAA8F;IAC9F,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,kBAAkB,GACxB,YAAY,GAAG,SAAS,CAW1B;AAED,0GAA0G;AAC1G,wBAAgB,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAMxG"}
@@ -0,0 +1,48 @@
1
+ const SAMPLE_FACETS = {
2
+ openFiles: { label: "Open files", countKey: "openFiles", listKey: "openFileList", empty: "No open files" },
3
+ sockets: { label: "Sockets", countKey: "sockets", listKey: "socketList", empty: "No open sockets" },
4
+ ports: { label: "Ports", countKey: "ports", listKey: "portList", empty: "Not listening on any port" },
5
+ connections: {
6
+ label: "Connections",
7
+ countKey: "connections",
8
+ listKey: "connectionList",
9
+ empty: "No network connections"
10
+ }
11
+ };
12
+ const SAMPLE_FACET_ORDER = ["openFiles", "sockets", "ports", "connections"];
13
+ const inTickOrder = (samples, key) => samples.filter((sample) => sample.key === key).sort((a, b) => a.tick - b.tick);
14
+ function armedFacets(samples) {
15
+ return SAMPLE_FACET_ORDER.filter((facet) => samples.some((sample) => sample[SAMPLE_FACETS[facet].countKey] !== void 0));
16
+ }
17
+ function facetCountSeries(samples, key, facet) {
18
+ const { countKey } = SAMPLE_FACETS[facet];
19
+ return inTickOrder(samples, key).flatMap((sample) => sample[countKey] === void 0 ? [] : [sample[countKey]]);
20
+ }
21
+ function latestFacetReading(samples, key, facet) {
22
+ const { countKey, listKey } = SAMPLE_FACETS[facet];
23
+ let reading;
24
+ for (const sample of inTickOrder(samples, key)) {
25
+ const list = sample[listKey];
26
+ if (list) reading = { rows: list, readAt: sample.sampledAt };
27
+ else if (sample[countKey] === 0 && (!reading || reading.rows.length > 0)) {
28
+ reading = { rows: [], readAt: sample.sampledAt };
29
+ }
30
+ }
31
+ return reading;
32
+ }
33
+ function diskSeries(samples, key) {
34
+ const own = inTickOrder(samples, key);
35
+ return {
36
+ read: own.flatMap((sample) => sample.diskReadBytes === void 0 ? [] : [sample.diskReadBytes]),
37
+ write: own.flatMap((sample) => sample.diskWriteBytes === void 0 ? [] : [sample.diskWriteBytes])
38
+ };
39
+ }
40
+ export {
41
+ SAMPLE_FACETS,
42
+ SAMPLE_FACET_ORDER,
43
+ armedFacets,
44
+ diskSeries,
45
+ facetCountSeries,
46
+ latestFacetReading
47
+ };
48
+ //# sourceMappingURL=process-facets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-facets.js","sources":["../../../src/data/traces/process-facets.ts"],"sourcesContent":["import type { ProcessDescriptor, ProcessSampleFacet, ProcessSampleRow } from \"./types\";\n\ntype FacetSpec = {\n label: string;\n countKey: \"openFiles\" | \"sockets\" | \"ports\" | \"connections\";\n listKey: \"openFileList\" | \"socketList\" | \"portList\" | \"connectionList\";\n empty: string;\n};\n\n/** The facets of `process_samples` in tab order, with the record fields that carry each one. */\nexport const SAMPLE_FACETS: Record<ProcessSampleFacet, FacetSpec> = {\n openFiles: { label: \"Open files\", countKey: \"openFiles\", listKey: \"openFileList\", empty: \"No open files\" },\n sockets: { label: \"Sockets\", countKey: \"sockets\", listKey: \"socketList\", empty: \"No open sockets\" },\n ports: { label: \"Ports\", countKey: \"ports\", listKey: \"portList\", empty: \"Not listening on any port\" },\n connections: {\n label: \"Connections\",\n countKey: \"connections\",\n listKey: \"connectionList\",\n empty: \"No network connections\",\n },\n};\n\nexport const SAMPLE_FACET_ORDER: ProcessSampleFacet[] = [\"openFiles\", \"sockets\", \"ports\", \"connections\"];\n\nconst inTickOrder = (samples: ProcessSampleRow[], key: string) =>\n samples.filter((sample) => sample.key === key).sort((a, b) => a.tick - b.tick);\n\n/**\n * The facets the session armed: those whose count some sample carries. A sample\n * carries a facet's count on every tick once it is armed and never otherwise, so\n * this is a property of the session, not of one process.\n */\nexport function armedFacets(samples: ProcessSampleRow[]): ProcessSampleFacet[] {\n return SAMPLE_FACET_ORDER.filter((facet) => samples.some((sample) => sample[SAMPLE_FACETS[facet].countKey] !== undefined));\n}\n\n/** One process's count of a facet over its samples, in tick order. */\nexport function facetCountSeries(samples: ProcessSampleRow[], key: string, facet: ProcessSampleFacet): number[] {\n const { countKey } = SAMPLE_FACETS[facet];\n return inTickOrder(samples, key).flatMap((sample) => (sample[countKey] === undefined ? [] : [sample[countKey]]));\n}\n\nexport type FacetReading = {\n rows: ProcessDescriptor[];\n /** When this list was stored: the first tick it held, not the last tick it was still true. */\n readAt: string;\n};\n\n/**\n * The latest stored list of a facet for one process. Lists are stored only when\n * they change, so this is the list on the latest sample that carries one. An\n * empty list is never stored, so a sample whose count is 0 with no list ends a\n * non-empty reading with an empty one. Undefined when nothing was stored and no\n * count says the list is empty.\n */\nexport function latestFacetReading(\n samples: ProcessSampleRow[],\n key: string,\n facet: ProcessSampleFacet,\n): FacetReading | undefined {\n const { countKey, listKey } = SAMPLE_FACETS[facet];\n let reading: FacetReading | undefined;\n for (const sample of inTickOrder(samples, key)) {\n const list = sample[listKey];\n if (list) reading = { rows: list, readAt: sample.sampledAt };\n else if (sample[countKey] === 0 && (!reading || reading.rows.length > 0)) {\n reading = { rows: [], readAt: sample.sampledAt };\n }\n }\n return reading;\n}\n\n/** One process's cumulative disk read and write bytes over the samples that carry them, in tick order. */\nexport function diskSeries(samples: ProcessSampleRow[], key: string): { read: number[]; write: number[] } {\n const own = inTickOrder(samples, key);\n return {\n read: own.flatMap((sample) => (sample.diskReadBytes === undefined ? [] : [sample.diskReadBytes])),\n write: own.flatMap((sample) => (sample.diskWriteBytes === undefined ? [] : [sample.diskWriteBytes])),\n };\n}\n"],"names":[],"mappings":"AAUO,MAAM,gBAAuD;AAAA,EAClE,WAAW,EAAE,OAAO,cAAc,UAAU,aAAa,SAAS,gBAAgB,OAAO,gBAAA;AAAA,EACzF,SAAS,EAAE,OAAO,WAAW,UAAU,WAAW,SAAS,cAAc,OAAO,kBAAA;AAAA,EAChF,OAAO,EAAE,OAAO,SAAS,UAAU,SAAS,SAAS,YAAY,OAAO,4BAAA;AAAA,EACxE,aAAa;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,EAAA;AAEX;AAEO,MAAM,qBAA2C,CAAC,aAAa,WAAW,SAAS,aAAa;AAEvG,MAAM,cAAc,CAAC,SAA6B,QAChD,QAAQ,OAAO,CAAC,WAAW,OAAO,QAAQ,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI;AAOxE,SAAS,YAAY,SAAmD;AAC7E,SAAO,mBAAmB,OAAO,CAAC,UAAU,QAAQ,KAAK,CAAC,WAAW,OAAO,cAAc,KAAK,EAAE,QAAQ,MAAM,MAAS,CAAC;AAC3H;AAGO,SAAS,iBAAiB,SAA6B,KAAa,OAAqC;AAC9G,QAAM,EAAE,SAAA,IAAa,cAAc,KAAK;AACxC,SAAO,YAAY,SAAS,GAAG,EAAE,QAAQ,CAAC,WAAY,OAAO,QAAQ,MAAM,SAAY,CAAA,IAAK,CAAC,OAAO,QAAQ,CAAC,CAAE;AACjH;AAeO,SAAS,mBACd,SACA,KACA,OAC0B;AAC1B,QAAM,EAAE,UAAU,YAAY,cAAc,KAAK;AACjD,MAAI;AACJ,aAAW,UAAU,YAAY,SAAS,GAAG,GAAG;AAC9C,UAAM,OAAO,OAAO,OAAO;AAC3B,QAAI,KAAM,WAAU,EAAE,MAAM,MAAM,QAAQ,OAAO,UAAA;AAAA,aACxC,OAAO,QAAQ,MAAM,MAAM,CAAC,WAAW,QAAQ,KAAK,SAAS,IAAI;AACxE,gBAAU,EAAE,MAAM,CAAA,GAAI,QAAQ,OAAO,UAAA;AAAA,IACvC;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,WAAW,SAA6B,KAAkD;AACxG,QAAM,MAAM,YAAY,SAAS,GAAG;AACpC,SAAO;AAAA,IACL,MAAM,IAAI,QAAQ,CAAC,WAAY,OAAO,kBAAkB,SAAY,CAAA,IAAK,CAAC,OAAO,aAAa,CAAE;AAAA,IAChG,OAAO,IAAI,QAAQ,CAAC,WAAY,OAAO,mBAAmB,SAAY,CAAA,IAAK,CAAC,OAAO,cAAc,CAAE;AAAA,EAAA;AAEvG;"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const byStart = (a, b) => Date.parse(a.row.startedAt) - Date.parse(b.row.startedAt) || a.row.pid - b.row.pid;
4
+ function buildProcessForest(rows) {
5
+ const nodes = /* @__PURE__ */ new Map();
6
+ for (const row of rows) {
7
+ if (nodes.has(row.key)) throw new Error(`process tree key "${row.key}" appears twice`);
8
+ nodes.set(row.key, { row, children: [], exited: isProcessExited(row) });
9
+ }
10
+ const roots = [];
11
+ for (const node of nodes.values()) {
12
+ const parent = node.row.parentKey ? nodes.get(node.row.parentKey) : void 0;
13
+ (parent ? parent.children : roots).push(node);
14
+ }
15
+ roots.sort((a, b) => Number(Boolean(b.row.isRoot)) - Number(Boolean(a.row.isRoot)) || byStart(a, b));
16
+ const reached = flattenForest(roots);
17
+ if (reached.length !== nodes.size) {
18
+ const lost = [...nodes.keys()].filter((key) => !reached.some((node) => node.row.key === key));
19
+ throw new Error(`process tree has a parent cycle among keys ${lost.map((key) => `"${key}"`).join(", ")}`);
20
+ }
21
+ for (const node of nodes.values()) node.children.sort(byStart);
22
+ return roots;
23
+ }
24
+ function pruneExitedProcesses(roots) {
25
+ return roots.flatMap((node) => {
26
+ const children = pruneExitedProcesses(node.children);
27
+ return node.exited && children.length === 0 ? [] : [{ ...node, children }];
28
+ });
29
+ }
30
+ function processLifetimeMs(row) {
31
+ return Date.parse(row.exitedAt ?? row.lastSeenAt) - Date.parse(row.startedAt);
32
+ }
33
+ function formatProcessTimestamp(iso) {
34
+ const date = new Date(iso);
35
+ if (Number.isNaN(date.getTime())) return iso;
36
+ const pad = (n) => String(n).padStart(2, "0");
37
+ return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
38
+ }
39
+ function isProcessExited(row) {
40
+ return row.status === "exited" || Boolean(row.exitedAt);
41
+ }
42
+ function flattenForest(roots) {
43
+ const flat = [];
44
+ const visit = (node) => {
45
+ flat.push(node);
46
+ node.children.forEach(visit);
47
+ };
48
+ roots.forEach(visit);
49
+ return flat;
50
+ }
51
+ function formatCpuPercent(value) {
52
+ return value == null ? "—" : `${value.toFixed(1)}%`;
53
+ }
54
+ function knownCpu(samples) {
55
+ return samples.flatMap((sample) => sample.cpuPercent == null ? [] : [sample.cpuPercent]);
56
+ }
57
+ function cpuSeriesByKey(samples) {
58
+ const byKey = /* @__PURE__ */ new Map();
59
+ for (const sample of samples) byKey.set(sample.key, [...byKey.get(sample.key) ?? [], sample]);
60
+ return new Map([...byKey].map(([key, list]) => [key, knownCpu(list.sort((a, b) => a.tick - b.tick))]));
61
+ }
62
+ function processSeries(samples, key) {
63
+ const own = samples.filter((sample) => sample.key === key).sort((a, b) => a.tick - b.tick);
64
+ return { cpu: knownCpu(own), rss: own.map((sample) => sample.rssBytes) };
65
+ }
66
+ function sparklinePoints(values, width, height) {
67
+ if (values.length < 2) return void 0;
68
+ const max = Math.max(...values);
69
+ return values.map((value, index) => {
70
+ const x = index / (values.length - 1) * width;
71
+ const y = max === 0 ? height : height - value / max * height;
72
+ return `${x.toFixed(1)},${y.toFixed(1)}`;
73
+ }).join(" ");
74
+ }
75
+ exports.buildProcessForest = buildProcessForest;
76
+ exports.cpuSeriesByKey = cpuSeriesByKey;
77
+ exports.flattenForest = flattenForest;
78
+ exports.formatCpuPercent = formatCpuPercent;
79
+ exports.formatProcessTimestamp = formatProcessTimestamp;
80
+ exports.isProcessExited = isProcessExited;
81
+ exports.processLifetimeMs = processLifetimeMs;
82
+ exports.processSeries = processSeries;
83
+ exports.pruneExitedProcesses = pruneExitedProcesses;
84
+ exports.sparklinePoints = sparklinePoints;
85
+ //# sourceMappingURL=process-tree.cjs.map