@flanksource/clicky-ui 0.3.49 → 0.3.51

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 (399) 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/query-browser/QueryBrowser.cjs +12 -1
  213. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
  214. package/dist/data/query-browser/QueryBrowser.d.ts +1 -1
  215. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
  216. package/dist/data/query-browser/QueryBrowser.editor.cjs +18 -10
  217. package/dist/data/query-browser/QueryBrowser.editor.cjs.map +1 -1
  218. package/dist/data/query-browser/QueryBrowser.editor.d.ts.map +1 -1
  219. package/dist/data/query-browser/QueryBrowser.editor.js +17 -9
  220. package/dist/data/query-browser/QueryBrowser.editor.js.map +1 -1
  221. package/dist/data/query-browser/QueryBrowser.js +12 -1
  222. package/dist/data/query-browser/QueryBrowser.js.map +1 -1
  223. package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -1
  224. package/dist/data/query-browser/QueryBrowser.types.d.ts +4 -0
  225. package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -1
  226. package/dist/data/query-browser/QueryBrowser.types.js.map +1 -1
  227. package/dist/data/test-runner/TestAttemptDetail.cjs +113 -0
  228. package/dist/data/test-runner/TestAttemptDetail.cjs.map +1 -0
  229. package/dist/data/test-runner/TestAttemptDetail.d.ts +19 -0
  230. package/dist/data/test-runner/TestAttemptDetail.d.ts.map +1 -0
  231. package/dist/data/test-runner/TestAttemptDetail.js +113 -0
  232. package/dist/data/test-runner/TestAttemptDetail.js.map +1 -0
  233. package/dist/data/test-runner/TestAttempts.cjs +36 -0
  234. package/dist/data/test-runner/TestAttempts.cjs.map +1 -0
  235. package/dist/data/test-runner/TestAttempts.d.ts +5 -0
  236. package/dist/data/test-runner/TestAttempts.d.ts.map +1 -0
  237. package/dist/data/test-runner/TestAttempts.js +36 -0
  238. package/dist/data/test-runner/TestAttempts.js.map +1 -0
  239. package/dist/data/test-runner/TestDetailPanel.cjs +13 -3
  240. package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
  241. package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
  242. package/dist/data/test-runner/TestDetailPanel.js +14 -4
  243. package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
  244. package/dist/data/test-runner/TestFailureDetail.cjs +9 -29
  245. package/dist/data/test-runner/TestFailureDetail.cjs.map +1 -1
  246. package/dist/data/test-runner/TestFailureDetail.d.ts +6 -6
  247. package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
  248. package/dist/data/test-runner/TestFailureDetail.js +9 -29
  249. package/dist/data/test-runner/TestFailureDetail.js.map +1 -1
  250. package/dist/data/test-runner/TestRunSummary.cjs +33 -0
  251. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  252. package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
  253. package/dist/data/test-runner/TestRunSummary.js +34 -1
  254. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  255. package/dist/data/test-runner/TestRunner.cjs +3 -0
  256. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  257. package/dist/data/test-runner/TestRunner.d.ts +8 -1
  258. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  259. package/dist/data/test-runner/TestRunner.js +3 -0
  260. package/dist/data/test-runner/TestRunner.js.map +1 -1
  261. package/dist/data/test-runner/TestTreeNode.cjs +3 -1
  262. package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
  263. package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
  264. package/dist/data/test-runner/TestTreeNode.js +3 -1
  265. package/dist/data/test-runner/TestTreeNode.js.map +1 -1
  266. package/dist/data/test-runner/adapter.cjs +9 -1
  267. package/dist/data/test-runner/adapter.cjs.map +1 -1
  268. package/dist/data/test-runner/adapter.d.ts +5 -0
  269. package/dist/data/test-runner/adapter.d.ts.map +1 -1
  270. package/dist/data/test-runner/adapter.js +9 -1
  271. package/dist/data/test-runner/adapter.js.map +1 -1
  272. package/dist/data/test-runner/attempts.cjs +62 -0
  273. package/dist/data/test-runner/attempts.cjs.map +1 -0
  274. package/dist/data/test-runner/attempts.d.ts +13 -0
  275. package/dist/data/test-runner/attempts.d.ts.map +1 -0
  276. package/dist/data/test-runner/attempts.js +62 -0
  277. package/dist/data/test-runner/attempts.js.map +1 -0
  278. package/dist/data/test-runner/context.cjs.map +1 -1
  279. package/dist/data/test-runner/context.d.ts +6 -0
  280. package/dist/data/test-runner/context.d.ts.map +1 -1
  281. package/dist/data/test-runner/context.js.map +1 -1
  282. package/dist/data/test-runner/index.d.ts +5 -1
  283. package/dist/data/test-runner/index.d.ts.map +1 -1
  284. package/dist/data/test-runner/marks.cjs +2 -0
  285. package/dist/data/test-runner/marks.cjs.map +1 -1
  286. package/dist/data/test-runner/marks.d.ts.map +1 -1
  287. package/dist/data/test-runner/marks.js +2 -0
  288. package/dist/data/test-runner/marks.js.map +1 -1
  289. package/dist/data/test-runner/process-metrics.cjs +15 -0
  290. package/dist/data/test-runner/process-metrics.cjs.map +1 -0
  291. package/dist/data/test-runner/process-metrics.d.ts +22 -0
  292. package/dist/data/test-runner/process-metrics.d.ts.map +1 -0
  293. package/dist/data/test-runner/process-metrics.js +15 -0
  294. package/dist/data/test-runner/process-metrics.js.map +1 -0
  295. package/dist/data/test-runner/status.cjs +11 -3
  296. package/dist/data/test-runner/status.cjs.map +1 -1
  297. package/dist/data/test-runner/status.d.ts +3 -1
  298. package/dist/data/test-runner/status.d.ts.map +1 -1
  299. package/dist/data/test-runner/status.js +11 -3
  300. package/dist/data/test-runner/status.js.map +1 -1
  301. package/dist/data/test-runner/types.d.ts +14 -0
  302. package/dist/data/test-runner/types.d.ts.map +1 -1
  303. package/dist/data/traces/GoProfileView.cjs +176 -0
  304. package/dist/data/traces/GoProfileView.cjs.map +1 -0
  305. package/dist/data/traces/GoProfileView.d.ts +30 -0
  306. package/dist/data/traces/GoProfileView.d.ts.map +1 -0
  307. package/dist/data/traces/GoProfileView.js +176 -0
  308. package/dist/data/traces/GoProfileView.js.map +1 -0
  309. package/dist/data/traces/ProcessFacetTable.cjs +79 -0
  310. package/dist/data/traces/ProcessFacetTable.cjs.map +1 -0
  311. package/dist/data/traces/ProcessFacetTable.d.ts +21 -0
  312. package/dist/data/traces/ProcessFacetTable.d.ts.map +1 -0
  313. package/dist/data/traces/ProcessFacetTable.js +79 -0
  314. package/dist/data/traces/ProcessFacetTable.js.map +1 -0
  315. package/dist/data/traces/ProcessRecordViews.cjs +41 -0
  316. package/dist/data/traces/ProcessRecordViews.cjs.map +1 -0
  317. package/dist/data/traces/ProcessRecordViews.d.ts +16 -0
  318. package/dist/data/traces/ProcessRecordViews.d.ts.map +1 -0
  319. package/dist/data/traces/ProcessRecordViews.js +41 -0
  320. package/dist/data/traces/ProcessRecordViews.js.map +1 -0
  321. package/dist/data/traces/ProcessTraceDetail.cjs +316 -0
  322. package/dist/data/traces/ProcessTraceDetail.cjs.map +1 -0
  323. package/dist/data/traces/ProcessTraceDetail.d.ts +39 -0
  324. package/dist/data/traces/ProcessTraceDetail.d.ts.map +1 -0
  325. package/dist/data/traces/ProcessTraceDetail.js +316 -0
  326. package/dist/data/traces/ProcessTraceDetail.js.map +1 -0
  327. package/dist/data/traces/ProcessTraceTree.cjs +76 -34
  328. package/dist/data/traces/ProcessTraceTree.cjs.map +1 -1
  329. package/dist/data/traces/ProcessTraceTree.d.ts +21 -4
  330. package/dist/data/traces/ProcessTraceTree.d.ts.map +1 -1
  331. package/dist/data/traces/ProcessTraceTree.js +72 -30
  332. package/dist/data/traces/ProcessTraceTree.js.map +1 -1
  333. package/dist/data/traces/Sparkline.cjs +27 -5
  334. package/dist/data/traces/Sparkline.cjs.map +1 -1
  335. package/dist/data/traces/Sparkline.d.ts +17 -1
  336. package/dist/data/traces/Sparkline.d.ts.map +1 -1
  337. package/dist/data/traces/Sparkline.js +28 -6
  338. package/dist/data/traces/Sparkline.js.map +1 -1
  339. package/dist/data/traces/TraceView.cjs +9 -0
  340. package/dist/data/traces/TraceView.cjs.map +1 -1
  341. package/dist/data/traces/TraceView.d.ts +4 -2
  342. package/dist/data/traces/TraceView.d.ts.map +1 -1
  343. package/dist/data/traces/TraceView.js +9 -0
  344. package/dist/data/traces/TraceView.js.map +1 -1
  345. package/dist/data/traces/TraceWindowList.cjs +117 -0
  346. package/dist/data/traces/TraceWindowList.cjs.map +1 -0
  347. package/dist/data/traces/TraceWindowList.d.ts +48 -0
  348. package/dist/data/traces/TraceWindowList.d.ts.map +1 -0
  349. package/dist/data/traces/TraceWindowList.js +117 -0
  350. package/dist/data/traces/TraceWindowList.js.map +1 -0
  351. package/dist/data/traces/fixtures.d.ts +25 -1
  352. package/dist/data/traces/fixtures.d.ts.map +1 -1
  353. package/dist/data/traces/index.d.ts +10 -3
  354. package/dist/data/traces/index.d.ts.map +1 -1
  355. package/dist/data/traces/process-facets.cjs +48 -0
  356. package/dist/data/traces/process-facets.cjs.map +1 -0
  357. package/dist/data/traces/process-facets.d.ts +38 -0
  358. package/dist/data/traces/process-facets.d.ts.map +1 -0
  359. package/dist/data/traces/process-facets.js +48 -0
  360. package/dist/data/traces/process-facets.js.map +1 -0
  361. package/dist/data/traces/process-tree.cjs +36 -4
  362. package/dist/data/traces/process-tree.cjs.map +1 -1
  363. package/dist/data/traces/process-tree.d.ts +20 -1
  364. package/dist/data/traces/process-tree.d.ts.map +1 -1
  365. package/dist/data/traces/process-tree.js +36 -4
  366. package/dist/data/traces/process-tree.js.map +1 -1
  367. package/dist/data/traces/profile-aggregate.cjs +78 -0
  368. package/dist/data/traces/profile-aggregate.cjs.map +1 -0
  369. package/dist/data/traces/profile-aggregate.d.ts +41 -0
  370. package/dist/data/traces/profile-aggregate.d.ts.map +1 -0
  371. package/dist/data/traces/profile-aggregate.js +78 -0
  372. package/dist/data/traces/profile-aggregate.js.map +1 -0
  373. package/dist/data/traces/stack-checkpoints.cjs +22 -0
  374. package/dist/data/traces/stack-checkpoints.cjs.map +1 -0
  375. package/dist/data/traces/stack-checkpoints.d.ts +18 -0
  376. package/dist/data/traces/stack-checkpoints.d.ts.map +1 -0
  377. package/dist/data/traces/stack-checkpoints.js +22 -0
  378. package/dist/data/traces/stack-checkpoints.js.map +1 -0
  379. package/dist/data/traces/types.d.ts +120 -5
  380. package/dist/data/traces/types.d.ts.map +1 -1
  381. package/dist/data/verification/adapters.cjs +1 -0
  382. package/dist/data/verification/adapters.cjs.map +1 -1
  383. package/dist/data/verification/adapters.d.ts.map +1 -1
  384. package/dist/data/verification/adapters.js +1 -0
  385. package/dist/data/verification/adapters.js.map +1 -1
  386. package/dist/data/version-info.cjs +3 -3
  387. package/dist/data/version-info.js +3 -3
  388. package/dist/data.cjs +85 -7
  389. package/dist/data.cjs.map +1 -1
  390. package/dist/data.d.ts +4 -0
  391. package/dist/data.d.ts.map +1 -1
  392. package/dist/data.js +81 -3
  393. package/dist/data.js.map +1 -1
  394. package/dist/index.cjs +87 -9
  395. package/dist/index.cjs.map +1 -1
  396. package/dist/index.js +81 -3
  397. package/dist/index.js.map +1 -1
  398. package/dist/styles.css +1 -1
  399. package/package.json +7 -1
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const filterState = require("../test-runner/filterState.cjs");
4
+ const SEVERITY_RANK = { info: 1, warning: 2, error: 3 };
5
+ function severityOf(violation) {
6
+ return violation.severity ?? "error";
7
+ }
8
+ function worstSeverity(violations) {
9
+ let worst = "info";
10
+ for (const v of violations ?? []) {
11
+ const sev = severityOf(v);
12
+ if (SEVERITY_RANK[sev] > SEVERITY_RANK[worst]) worst = sev;
13
+ }
14
+ return worst;
15
+ }
16
+ function isLinterErrored(result) {
17
+ return !result.skipped && (Boolean(result.error) || Boolean(result.timed_out));
18
+ }
19
+ function linterErrorMessage(result) {
20
+ return result.error || "timed out";
21
+ }
22
+ function collectLintLinters(results) {
23
+ const names = /* @__PURE__ */ new Set();
24
+ for (const r of results) {
25
+ if ((r.violations ?? []).length > 0 || isLinterErrored(r)) names.add(r.linter);
26
+ }
27
+ return Array.from(names).sort();
28
+ }
29
+ function countLintBySeverity(results, linterFilter) {
30
+ const counts = { error: 0, warning: 0, info: 0 };
31
+ for (const r of results) {
32
+ if (!filterState.matchesFilterState(r.linter, linterFilter)) continue;
33
+ for (const v of r.violations ?? []) counts[severityOf(v)] += 1;
34
+ }
35
+ return counts;
36
+ }
37
+ function countLintByLinter(results, severityFilter) {
38
+ const counts = {};
39
+ for (const r of results) {
40
+ for (const v of r.violations ?? []) {
41
+ if (!filterState.matchesFilterState(severityOf(v), severityFilter)) continue;
42
+ counts[r.linter] = (counts[r.linter] ?? 0) + 1;
43
+ }
44
+ }
45
+ return counts;
46
+ }
47
+ function totalLintViolations(results) {
48
+ return results.reduce((n, r) => n + (r.violations ?? []).length, 0);
49
+ }
50
+ function lintNodeCount(node) {
51
+ var _a;
52
+ if (node.violations) return node.violations.length;
53
+ return (((_a = node.noFileViolations) == null ? void 0 : _a.length) ?? 0) + (node.children ?? []).reduce((n, child) => n + lintNodeCount(child), 0);
54
+ }
55
+ function lintNodeSeverity(node) {
56
+ if (node.kind === "linter-error") return "error";
57
+ let worst = "info";
58
+ const consider = (sev) => {
59
+ if (SEVERITY_RANK[sev] > SEVERITY_RANK[worst]) worst = sev;
60
+ };
61
+ if (node.violations) consider(worstSeverity(node.violations));
62
+ if (node.noFileViolations) consider(worstSeverity(node.noFileViolations));
63
+ for (const child of node.children ?? []) consider(lintNodeSeverity(child));
64
+ return worst;
65
+ }
66
+ exports.collectLintLinters = collectLintLinters;
67
+ exports.countLintByLinter = countLintByLinter;
68
+ exports.countLintBySeverity = countLintBySeverity;
69
+ exports.isLinterErrored = isLinterErrored;
70
+ exports.lintNodeCount = lintNodeCount;
71
+ exports.lintNodeSeverity = lintNodeSeverity;
72
+ exports.linterErrorMessage = linterErrorMessage;
73
+ exports.severityOf = severityOf;
74
+ exports.totalLintViolations = totalLintViolations;
75
+ exports.worstSeverity = worstSeverity;
76
+ //# sourceMappingURL=stats.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.cjs","sources":["../../../src/data/lint/stats.ts"],"sourcesContent":["// Counting and severity roll-ups over raw results and over built tree nodes.\n\nimport { matchesFilterState, type FilterState } from \"../test-runner/filterState\";\nimport type { LintNode, LintSeverity, LinterResult, Violation } from \"./types\";\n\nconst SEVERITY_RANK: Record<LintSeverity, number> = { info: 1, warning: 2, error: 3 };\n\n/** A violation without a severity is an error, as on the wire. */\nexport function severityOf(violation: Violation): LintSeverity {\n return violation.severity ?? \"error\";\n}\n\nexport function worstSeverity(violations: readonly Violation[] | undefined): LintSeverity {\n let worst: LintSeverity = \"info\";\n for (const v of violations ?? []) {\n const sev = severityOf(v);\n if (SEVERITY_RANK[sev] > SEVERITY_RANK[worst]) worst = sev;\n }\n return worst;\n}\n\n/** Whether the linter itself failed to run (as opposed to reporting findings). */\nexport function isLinterErrored(result: LinterResult): boolean {\n return !result.skipped && (Boolean(result.error) || Boolean(result.timed_out));\n}\n\n/** Why a linter failed: its error text, or \"timed out\" when it only carries the flag. */\nexport function linterErrorMessage(result: LinterResult): string {\n return result.error || \"timed out\";\n}\n\n/** Linters that reported violations or failed to run, sorted by name. */\nexport function collectLintLinters(results: readonly LinterResult[]): string[] {\n const names = new Set<string>();\n for (const r of results) {\n if ((r.violations ?? []).length > 0 || isLinterErrored(r)) names.add(r.linter);\n }\n return Array.from(names).sort();\n}\n\nexport function countLintBySeverity(\n results: readonly LinterResult[],\n linterFilter: FilterState<string>,\n): Record<LintSeverity, number> {\n const counts: Record<LintSeverity, number> = { error: 0, warning: 0, info: 0 };\n for (const r of results) {\n if (!matchesFilterState(r.linter, linterFilter)) continue;\n for (const v of r.violations ?? []) counts[severityOf(v)] += 1;\n }\n return counts;\n}\n\nexport function countLintByLinter(\n results: readonly LinterResult[],\n severityFilter: FilterState<LintSeverity>,\n): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const r of results) {\n for (const v of r.violations ?? []) {\n if (!matchesFilterState(severityOf(v), severityFilter)) continue;\n counts[r.linter] = (counts[r.linter] ?? 0) + 1;\n }\n }\n return counts;\n}\n\nexport function totalLintViolations(results: readonly LinterResult[]): number {\n return results.reduce((n, r) => n + (r.violations ?? []).length, 0);\n}\n\n/** Violations at or beneath a node; error leaves count as zero (they are not findings). */\nexport function lintNodeCount(node: LintNode): number {\n if (node.violations) return node.violations.length;\n return (\n (node.noFileViolations?.length ?? 0) +\n (node.children ?? []).reduce((n, child) => n + lintNodeCount(child), 0)\n );\n}\n\n/** The worst severity at or beneath a node. A linter-error leaf is an error. */\nexport function lintNodeSeverity(node: LintNode): LintSeverity {\n if (node.kind === \"linter-error\") return \"error\";\n let worst: LintSeverity = \"info\";\n const consider = (sev: LintSeverity) => {\n if (SEVERITY_RANK[sev] > SEVERITY_RANK[worst]) worst = sev;\n };\n if (node.violations) consider(worstSeverity(node.violations));\n if (node.noFileViolations) consider(worstSeverity(node.noFileViolations));\n for (const child of node.children ?? []) consider(lintNodeSeverity(child));\n return worst;\n}\n"],"names":["matchesFilterState"],"mappings":";;;AAKA,MAAM,gBAA8C,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EAAA;AAG3E,SAAS,WAAW,WAAoC;AAC7D,SAAO,UAAU,YAAY;AAC/B;AAEO,SAAS,cAAc,YAA4D;AACxF,MAAI,QAAsB;AAC1B,aAAW,KAAK,cAAc,IAAI;AAChC,UAAM,MAAM,WAAW,CAAC;AACxB,QAAI,cAAc,GAAG,IAAI,cAAc,KAAK,EAAG,SAAQ;AAAA,EACzD;AACA,SAAO;AACT;AAGO,SAAS,gBAAgB,QAA+B;AAC7D,SAAO,CAAC,OAAO,YAAY,QAAQ,OAAO,KAAK,KAAK,QAAQ,OAAO,SAAS;AAC9E;AAGO,SAAS,mBAAmB,QAA8B;AAC/D,SAAO,OAAO,SAAS;AACzB;AAGO,SAAS,mBAAmB,SAA4C;AAC7E,QAAM,4BAAY,IAAA;AAClB,aAAW,KAAK,SAAS;AACvB,SAAK,EAAE,cAAc,CAAA,GAAI,SAAS,KAAK,gBAAgB,CAAC,EAAG,OAAM,IAAI,EAAE,MAAM;AAAA,EAC/E;AACA,SAAO,MAAM,KAAK,KAAK,EAAE,KAAA;AAC3B;AAEO,SAAS,oBACd,SACA,cAC8B;AAC9B,QAAM,SAAuC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,EAAA;AAC3E,aAAW,KAAK,SAAS;AACvB,QAAI,CAACA,YAAAA,mBAAmB,EAAE,QAAQ,YAAY,EAAG;AACjD,eAAW,KAAK,EAAE,cAAc,CAAA,EAAI,QAAO,WAAW,CAAC,CAAC,KAAK;AAAA,EAC/D;AACA,SAAO;AACT;AAEO,SAAS,kBACd,SACA,gBACwB;AACxB,QAAM,SAAiC,CAAA;AACvC,aAAW,KAAK,SAAS;AACvB,eAAW,KAAK,EAAE,cAAc,CAAA,GAAI;AAClC,UAAI,CAACA,YAAAA,mBAAmB,WAAW,CAAC,GAAG,cAAc,EAAG;AACxD,aAAO,EAAE,MAAM,KAAK,OAAO,EAAE,MAAM,KAAK,KAAK;AAAA,IAC/C;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,oBAAoB,SAA0C;AAC5E,SAAO,QAAQ,OAAO,CAAC,GAAG,MAAM,KAAK,EAAE,cAAc,IAAI,QAAQ,CAAC;AACpE;AAGO,SAAS,cAAc,MAAwB;;AACpD,MAAI,KAAK,WAAY,QAAO,KAAK,WAAW;AAC5C,YACG,UAAK,qBAAL,mBAAuB,WAAU,MACjC,KAAK,YAAY,CAAA,GAAI,OAAO,CAAC,GAAG,UAAU,IAAI,cAAc,KAAK,GAAG,CAAC;AAE1E;AAGO,SAAS,iBAAiB,MAA8B;AAC7D,MAAI,KAAK,SAAS,eAAgB,QAAO;AACzC,MAAI,QAAsB;AAC1B,QAAM,WAAW,CAAC,QAAsB;AACtC,QAAI,cAAc,GAAG,IAAI,cAAc,KAAK,EAAG,SAAQ;AAAA,EACzD;AACA,MAAI,KAAK,WAAY,UAAS,cAAc,KAAK,UAAU,CAAC;AAC5D,MAAI,KAAK,iBAAkB,UAAS,cAAc,KAAK,gBAAgB,CAAC;AACxE,aAAW,SAAS,KAAK,YAAY,CAAA,EAAI,UAAS,iBAAiB,KAAK,CAAC;AACzE,SAAO;AACT;;;;;;;;;;;"}
@@ -0,0 +1,19 @@
1
+ import { FilterState } from '../test-runner/filterState.js';
2
+ import { LintNode, LintSeverity, LinterResult, Violation } from './types.js';
3
+ /** A violation without a severity is an error, as on the wire. */
4
+ export declare function severityOf(violation: Violation): LintSeverity;
5
+ export declare function worstSeverity(violations: readonly Violation[] | undefined): LintSeverity;
6
+ /** Whether the linter itself failed to run (as opposed to reporting findings). */
7
+ export declare function isLinterErrored(result: LinterResult): boolean;
8
+ /** Why a linter failed: its error text, or "timed out" when it only carries the flag. */
9
+ export declare function linterErrorMessage(result: LinterResult): string;
10
+ /** Linters that reported violations or failed to run, sorted by name. */
11
+ export declare function collectLintLinters(results: readonly LinterResult[]): string[];
12
+ export declare function countLintBySeverity(results: readonly LinterResult[], linterFilter: FilterState<string>): Record<LintSeverity, number>;
13
+ export declare function countLintByLinter(results: readonly LinterResult[], severityFilter: FilterState<LintSeverity>): Record<string, number>;
14
+ export declare function totalLintViolations(results: readonly LinterResult[]): number;
15
+ /** Violations at or beneath a node; error leaves count as zero (they are not findings). */
16
+ export declare function lintNodeCount(node: LintNode): number;
17
+ /** The worst severity at or beneath a node. A linter-error leaf is an error. */
18
+ export declare function lintNodeSeverity(node: LintNode): LintSeverity;
19
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/data/lint/stats.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAI/E,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,CAE7D;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,GAAG,YAAY,CAOxF;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAE7D;AAED,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAE/D;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,EAAE,CAM7E;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAO9B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,cAAc,EAAE,WAAW,CAAC,YAAY,CAAC,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAE5E;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAMpD;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,CAU7D"}
@@ -0,0 +1,76 @@
1
+ import { matchesFilterState } from "../test-runner/filterState.js";
2
+ const SEVERITY_RANK = { info: 1, warning: 2, error: 3 };
3
+ function severityOf(violation) {
4
+ return violation.severity ?? "error";
5
+ }
6
+ function worstSeverity(violations) {
7
+ let worst = "info";
8
+ for (const v of violations ?? []) {
9
+ const sev = severityOf(v);
10
+ if (SEVERITY_RANK[sev] > SEVERITY_RANK[worst]) worst = sev;
11
+ }
12
+ return worst;
13
+ }
14
+ function isLinterErrored(result) {
15
+ return !result.skipped && (Boolean(result.error) || Boolean(result.timed_out));
16
+ }
17
+ function linterErrorMessage(result) {
18
+ return result.error || "timed out";
19
+ }
20
+ function collectLintLinters(results) {
21
+ const names = /* @__PURE__ */ new Set();
22
+ for (const r of results) {
23
+ if ((r.violations ?? []).length > 0 || isLinterErrored(r)) names.add(r.linter);
24
+ }
25
+ return Array.from(names).sort();
26
+ }
27
+ function countLintBySeverity(results, linterFilter) {
28
+ const counts = { error: 0, warning: 0, info: 0 };
29
+ for (const r of results) {
30
+ if (!matchesFilterState(r.linter, linterFilter)) continue;
31
+ for (const v of r.violations ?? []) counts[severityOf(v)] += 1;
32
+ }
33
+ return counts;
34
+ }
35
+ function countLintByLinter(results, severityFilter) {
36
+ const counts = {};
37
+ for (const r of results) {
38
+ for (const v of r.violations ?? []) {
39
+ if (!matchesFilterState(severityOf(v), severityFilter)) continue;
40
+ counts[r.linter] = (counts[r.linter] ?? 0) + 1;
41
+ }
42
+ }
43
+ return counts;
44
+ }
45
+ function totalLintViolations(results) {
46
+ return results.reduce((n, r) => n + (r.violations ?? []).length, 0);
47
+ }
48
+ function lintNodeCount(node) {
49
+ var _a;
50
+ if (node.violations) return node.violations.length;
51
+ return (((_a = node.noFileViolations) == null ? void 0 : _a.length) ?? 0) + (node.children ?? []).reduce((n, child) => n + lintNodeCount(child), 0);
52
+ }
53
+ function lintNodeSeverity(node) {
54
+ if (node.kind === "linter-error") return "error";
55
+ let worst = "info";
56
+ const consider = (sev) => {
57
+ if (SEVERITY_RANK[sev] > SEVERITY_RANK[worst]) worst = sev;
58
+ };
59
+ if (node.violations) consider(worstSeverity(node.violations));
60
+ if (node.noFileViolations) consider(worstSeverity(node.noFileViolations));
61
+ for (const child of node.children ?? []) consider(lintNodeSeverity(child));
62
+ return worst;
63
+ }
64
+ export {
65
+ collectLintLinters,
66
+ countLintByLinter,
67
+ countLintBySeverity,
68
+ isLinterErrored,
69
+ lintNodeCount,
70
+ lintNodeSeverity,
71
+ linterErrorMessage,
72
+ severityOf,
73
+ totalLintViolations,
74
+ worstSeverity
75
+ };
76
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sources":["../../../src/data/lint/stats.ts"],"sourcesContent":["// Counting and severity roll-ups over raw results and over built tree nodes.\n\nimport { matchesFilterState, type FilterState } from \"../test-runner/filterState\";\nimport type { LintNode, LintSeverity, LinterResult, Violation } from \"./types\";\n\nconst SEVERITY_RANK: Record<LintSeverity, number> = { info: 1, warning: 2, error: 3 };\n\n/** A violation without a severity is an error, as on the wire. */\nexport function severityOf(violation: Violation): LintSeverity {\n return violation.severity ?? \"error\";\n}\n\nexport function worstSeverity(violations: readonly Violation[] | undefined): LintSeverity {\n let worst: LintSeverity = \"info\";\n for (const v of violations ?? []) {\n const sev = severityOf(v);\n if (SEVERITY_RANK[sev] > SEVERITY_RANK[worst]) worst = sev;\n }\n return worst;\n}\n\n/** Whether the linter itself failed to run (as opposed to reporting findings). */\nexport function isLinterErrored(result: LinterResult): boolean {\n return !result.skipped && (Boolean(result.error) || Boolean(result.timed_out));\n}\n\n/** Why a linter failed: its error text, or \"timed out\" when it only carries the flag. */\nexport function linterErrorMessage(result: LinterResult): string {\n return result.error || \"timed out\";\n}\n\n/** Linters that reported violations or failed to run, sorted by name. */\nexport function collectLintLinters(results: readonly LinterResult[]): string[] {\n const names = new Set<string>();\n for (const r of results) {\n if ((r.violations ?? []).length > 0 || isLinterErrored(r)) names.add(r.linter);\n }\n return Array.from(names).sort();\n}\n\nexport function countLintBySeverity(\n results: readonly LinterResult[],\n linterFilter: FilterState<string>,\n): Record<LintSeverity, number> {\n const counts: Record<LintSeverity, number> = { error: 0, warning: 0, info: 0 };\n for (const r of results) {\n if (!matchesFilterState(r.linter, linterFilter)) continue;\n for (const v of r.violations ?? []) counts[severityOf(v)] += 1;\n }\n return counts;\n}\n\nexport function countLintByLinter(\n results: readonly LinterResult[],\n severityFilter: FilterState<LintSeverity>,\n): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const r of results) {\n for (const v of r.violations ?? []) {\n if (!matchesFilterState(severityOf(v), severityFilter)) continue;\n counts[r.linter] = (counts[r.linter] ?? 0) + 1;\n }\n }\n return counts;\n}\n\nexport function totalLintViolations(results: readonly LinterResult[]): number {\n return results.reduce((n, r) => n + (r.violations ?? []).length, 0);\n}\n\n/** Violations at or beneath a node; error leaves count as zero (they are not findings). */\nexport function lintNodeCount(node: LintNode): number {\n if (node.violations) return node.violations.length;\n return (\n (node.noFileViolations?.length ?? 0) +\n (node.children ?? []).reduce((n, child) => n + lintNodeCount(child), 0)\n );\n}\n\n/** The worst severity at or beneath a node. A linter-error leaf is an error. */\nexport function lintNodeSeverity(node: LintNode): LintSeverity {\n if (node.kind === \"linter-error\") return \"error\";\n let worst: LintSeverity = \"info\";\n const consider = (sev: LintSeverity) => {\n if (SEVERITY_RANK[sev] > SEVERITY_RANK[worst]) worst = sev;\n };\n if (node.violations) consider(worstSeverity(node.violations));\n if (node.noFileViolations) consider(worstSeverity(node.noFileViolations));\n for (const child of node.children ?? []) consider(lintNodeSeverity(child));\n return worst;\n}\n"],"names":[],"mappings":";AAKA,MAAM,gBAA8C,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EAAA;AAG3E,SAAS,WAAW,WAAoC;AAC7D,SAAO,UAAU,YAAY;AAC/B;AAEO,SAAS,cAAc,YAA4D;AACxF,MAAI,QAAsB;AAC1B,aAAW,KAAK,cAAc,IAAI;AAChC,UAAM,MAAM,WAAW,CAAC;AACxB,QAAI,cAAc,GAAG,IAAI,cAAc,KAAK,EAAG,SAAQ;AAAA,EACzD;AACA,SAAO;AACT;AAGO,SAAS,gBAAgB,QAA+B;AAC7D,SAAO,CAAC,OAAO,YAAY,QAAQ,OAAO,KAAK,KAAK,QAAQ,OAAO,SAAS;AAC9E;AAGO,SAAS,mBAAmB,QAA8B;AAC/D,SAAO,OAAO,SAAS;AACzB;AAGO,SAAS,mBAAmB,SAA4C;AAC7E,QAAM,4BAAY,IAAA;AAClB,aAAW,KAAK,SAAS;AACvB,SAAK,EAAE,cAAc,CAAA,GAAI,SAAS,KAAK,gBAAgB,CAAC,EAAG,OAAM,IAAI,EAAE,MAAM;AAAA,EAC/E;AACA,SAAO,MAAM,KAAK,KAAK,EAAE,KAAA;AAC3B;AAEO,SAAS,oBACd,SACA,cAC8B;AAC9B,QAAM,SAAuC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,EAAA;AAC3E,aAAW,KAAK,SAAS;AACvB,QAAI,CAAC,mBAAmB,EAAE,QAAQ,YAAY,EAAG;AACjD,eAAW,KAAK,EAAE,cAAc,CAAA,EAAI,QAAO,WAAW,CAAC,CAAC,KAAK;AAAA,EAC/D;AACA,SAAO;AACT;AAEO,SAAS,kBACd,SACA,gBACwB;AACxB,QAAM,SAAiC,CAAA;AACvC,aAAW,KAAK,SAAS;AACvB,eAAW,KAAK,EAAE,cAAc,CAAA,GAAI;AAClC,UAAI,CAAC,mBAAmB,WAAW,CAAC,GAAG,cAAc,EAAG;AACxD,aAAO,EAAE,MAAM,KAAK,OAAO,EAAE,MAAM,KAAK,KAAK;AAAA,IAC/C;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,oBAAoB,SAA0C;AAC5E,SAAO,QAAQ,OAAO,CAAC,GAAG,MAAM,KAAK,EAAE,cAAc,IAAI,QAAQ,CAAC;AACpE;AAGO,SAAS,cAAc,MAAwB;;AACpD,MAAI,KAAK,WAAY,QAAO,KAAK,WAAW;AAC5C,YACG,UAAK,qBAAL,mBAAuB,WAAU,MACjC,KAAK,YAAY,CAAA,GAAI,OAAO,CAAC,GAAG,UAAU,IAAI,cAAc,KAAK,GAAG,CAAC;AAE1E;AAGO,SAAS,iBAAiB,MAA8B;AAC7D,MAAI,KAAK,SAAS,eAAgB,QAAO;AACzC,MAAI,QAAsB;AAC1B,QAAM,WAAW,CAAC,QAAsB;AACtC,QAAI,cAAc,GAAG,IAAI,cAAc,KAAK,EAAG,SAAQ;AAAA,EACzD;AACA,MAAI,KAAK,WAAY,UAAS,cAAc,KAAK,UAAU,CAAC;AAC5D,MAAI,KAAK,iBAAkB,UAAS,cAAc,KAAK,gBAAgB,CAAC;AACxE,aAAW,SAAS,KAAK,YAAY,CAAA,EAAI,UAAS,iBAAiB,KAAK,CAAC;AACzE,SAAO;AACT;"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const DEFAULT_LINT_GROUPING = "linter-rule-file";
4
+ const LINT_GROUPINGS = [
5
+ "linter-rule-file",
6
+ "linter-file",
7
+ "file-linter-rule",
8
+ "summary"
9
+ ];
10
+ function emptyLintFilters() {
11
+ return { severity: /* @__PURE__ */ new Map(), linter: /* @__PURE__ */ new Map() };
12
+ }
13
+ exports.DEFAULT_LINT_GROUPING = DEFAULT_LINT_GROUPING;
14
+ exports.LINT_GROUPINGS = LINT_GROUPINGS;
15
+ exports.emptyLintFilters = emptyLintFilters;
16
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.cjs","sources":["../../../src/data/lint/types.ts"],"sourcesContent":["// Lint data model — gavel's wire shape (models.Violation / linters.LinterResult)\n// plus the synthetic tree nodes the groupings build from it. Field names keep\n// the snake_case wire spelling on purpose so a host can pass a snapshot's\n// `lint` array straight through.\n\nimport type { FilterState } from \"../test-runner/filterState\";\nimport type { LintSeverity } from \"../test-runner/marks\";\n\nexport type { LintSeverity };\n\nexport type Violation = {\n file?: string | undefined;\n /** Frontend-only: the path relative to the linter's work_dir, set while grouping. */\n raw_file?: string | undefined;\n line?: number;\n column?: number;\n message?: string;\n source?: string;\n rule?: {\n method?: string;\n description?: string;\n pattern?: string;\n package?: string;\n } | null;\n /** Absent means error, as on the wire. */\n severity?: LintSeverity;\n /** The offending source snippet, not a rule id. */\n code?: string;\n fixable?: boolean;\n};\n\nexport type LinterResult = {\n linter: string;\n work_dir?: string;\n /** Resolved executable, e.g. \"eslint\". */\n command?: string;\n /** argv without the command name. */\n args?: string[];\n success?: boolean;\n skipped?: boolean;\n timed_out?: boolean;\n /** Nanoseconds. */\n duration?: number;\n /** Go marshals a nil slice as null when the linter failed before reporting. */\n violations: Violation[] | null;\n raw_output?: string;\n /** Why the linter failed to run (or why it was skipped). */\n error?: string;\n file_count?: number;\n rule_count?: number;\n};\n\nexport type LintGrouping = \"linter-rule-file\" | \"linter-file\" | \"file-linter-rule\" | \"summary\";\n\nexport const DEFAULT_LINT_GROUPING: LintGrouping = \"linter-rule-file\";\n\nexport const LINT_GROUPINGS: readonly LintGrouping[] = [\n \"linter-rule-file\",\n \"linter-file\",\n \"file-linter-rule\",\n \"summary\",\n];\n\n/** Tri-state severity and linter filters, same primitives as the test runner. */\nexport type LintFilters = {\n severity: FilterState<LintSeverity>;\n linter: FilterState<string>;\n};\n\nexport function emptyLintFilters(): LintFilters {\n return { severity: new Map(), linter: new Map() };\n}\n\nexport type LintNodeKind =\n | \"linter\"\n | \"lint-folder\"\n | \"lint-file\"\n | \"lint-rule\"\n | \"lint-rule-group\"\n /** A linter that failed to run: the leaf carries its error text. */\n | \"linter-error\";\n\nexport type LintNode = {\n name: string;\n kind: LintNodeKind;\n /** Stable, URL-safe selection key assigned by buildLintTree. */\n route_path: string;\n children?: LintNode[] | undefined;\n file?: string | undefined;\n /** Path relative to the linter's work_dir — what ignore rules match against. */\n target_path?: string | undefined;\n work_dir?: string | undefined;\n linterName?: string | undefined;\n ruleName?: string | undefined;\n linter?: LinterResult | undefined;\n violations?: Violation[] | undefined;\n /** Violations that carry no file, shown on the node itself. */\n noFileViolations?: Violation[] | undefined;\n failed: boolean;\n passed: boolean;\n skipped: boolean;\n message?: string | undefined;\n};\n\n/** The body of an ignore request, matching gavel's `.gavel.yaml` ignore entries. */\nexport type LintIgnoreRequest = {\n source?: string | undefined;\n rule?: string | undefined;\n file?: string | undefined;\n work_dir?: string | undefined;\n};\n\nexport type LintAction = {\n key: string;\n label: string;\n title: string;\n req: LintIgnoreRequest;\n variant?: \"primary\" | \"subtle\";\n /** Folder-scoped ignores cannot be applied without knowing the work dir. */\n disabledWithoutWorkDir?: boolean;\n};\n"],"names":[],"mappings":";;AAsDO,MAAM,wBAAsC;AAE5C,MAAM,iBAA0C;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQO,SAAS,mBAAgC;AAC9C,SAAO,EAAE,UAAU,oBAAI,IAAA,GAAO,QAAQ,oBAAI,MAAI;AAChD;;;;"}
@@ -0,0 +1,93 @@
1
+ import { FilterState } from '../test-runner/filterState.js';
2
+ import { LintSeverity } from '../test-runner/marks.js';
3
+ export type { LintSeverity };
4
+ export type Violation = {
5
+ file?: string | undefined;
6
+ /** Frontend-only: the path relative to the linter's work_dir, set while grouping. */
7
+ raw_file?: string | undefined;
8
+ line?: number;
9
+ column?: number;
10
+ message?: string;
11
+ source?: string;
12
+ rule?: {
13
+ method?: string;
14
+ description?: string;
15
+ pattern?: string;
16
+ package?: string;
17
+ } | null;
18
+ /** Absent means error, as on the wire. */
19
+ severity?: LintSeverity;
20
+ /** The offending source snippet, not a rule id. */
21
+ code?: string;
22
+ fixable?: boolean;
23
+ };
24
+ export type LinterResult = {
25
+ linter: string;
26
+ work_dir?: string;
27
+ /** Resolved executable, e.g. "eslint". */
28
+ command?: string;
29
+ /** argv without the command name. */
30
+ args?: string[];
31
+ success?: boolean;
32
+ skipped?: boolean;
33
+ timed_out?: boolean;
34
+ /** Nanoseconds. */
35
+ duration?: number;
36
+ /** Go marshals a nil slice as null when the linter failed before reporting. */
37
+ violations: Violation[] | null;
38
+ raw_output?: string;
39
+ /** Why the linter failed to run (or why it was skipped). */
40
+ error?: string;
41
+ file_count?: number;
42
+ rule_count?: number;
43
+ };
44
+ export type LintGrouping = "linter-rule-file" | "linter-file" | "file-linter-rule" | "summary";
45
+ export declare const DEFAULT_LINT_GROUPING: LintGrouping;
46
+ export declare const LINT_GROUPINGS: readonly LintGrouping[];
47
+ /** Tri-state severity and linter filters, same primitives as the test runner. */
48
+ export type LintFilters = {
49
+ severity: FilterState<LintSeverity>;
50
+ linter: FilterState<string>;
51
+ };
52
+ export declare function emptyLintFilters(): LintFilters;
53
+ export type LintNodeKind = "linter" | "lint-folder" | "lint-file" | "lint-rule" | "lint-rule-group"
54
+ /** A linter that failed to run: the leaf carries its error text. */
55
+ | "linter-error";
56
+ export type LintNode = {
57
+ name: string;
58
+ kind: LintNodeKind;
59
+ /** Stable, URL-safe selection key assigned by buildLintTree. */
60
+ route_path: string;
61
+ children?: LintNode[] | undefined;
62
+ file?: string | undefined;
63
+ /** Path relative to the linter's work_dir — what ignore rules match against. */
64
+ target_path?: string | undefined;
65
+ work_dir?: string | undefined;
66
+ linterName?: string | undefined;
67
+ ruleName?: string | undefined;
68
+ linter?: LinterResult | undefined;
69
+ violations?: Violation[] | undefined;
70
+ /** Violations that carry no file, shown on the node itself. */
71
+ noFileViolations?: Violation[] | undefined;
72
+ failed: boolean;
73
+ passed: boolean;
74
+ skipped: boolean;
75
+ message?: string | undefined;
76
+ };
77
+ /** The body of an ignore request, matching gavel's `.gavel.yaml` ignore entries. */
78
+ export type LintIgnoreRequest = {
79
+ source?: string | undefined;
80
+ rule?: string | undefined;
81
+ file?: string | undefined;
82
+ work_dir?: string | undefined;
83
+ };
84
+ export type LintAction = {
85
+ key: string;
86
+ label: string;
87
+ title: string;
88
+ req: LintIgnoreRequest;
89
+ variant?: "primary" | "subtle";
90
+ /** Folder-scoped ignores cannot be applied without knowing the work dir. */
91
+ disabledWithoutWorkDir?: boolean;
92
+ };
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/lint/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ const DEFAULT_LINT_GROUPING = "linter-rule-file";
2
+ const LINT_GROUPINGS = [
3
+ "linter-rule-file",
4
+ "linter-file",
5
+ "file-linter-rule",
6
+ "summary"
7
+ ];
8
+ function emptyLintFilters() {
9
+ return { severity: /* @__PURE__ */ new Map(), linter: /* @__PURE__ */ new Map() };
10
+ }
11
+ export {
12
+ DEFAULT_LINT_GROUPING,
13
+ LINT_GROUPINGS,
14
+ emptyLintFilters
15
+ };
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../../src/data/lint/types.ts"],"sourcesContent":["// Lint data model — gavel's wire shape (models.Violation / linters.LinterResult)\n// plus the synthetic tree nodes the groupings build from it. Field names keep\n// the snake_case wire spelling on purpose so a host can pass a snapshot's\n// `lint` array straight through.\n\nimport type { FilterState } from \"../test-runner/filterState\";\nimport type { LintSeverity } from \"../test-runner/marks\";\n\nexport type { LintSeverity };\n\nexport type Violation = {\n file?: string | undefined;\n /** Frontend-only: the path relative to the linter's work_dir, set while grouping. */\n raw_file?: string | undefined;\n line?: number;\n column?: number;\n message?: string;\n source?: string;\n rule?: {\n method?: string;\n description?: string;\n pattern?: string;\n package?: string;\n } | null;\n /** Absent means error, as on the wire. */\n severity?: LintSeverity;\n /** The offending source snippet, not a rule id. */\n code?: string;\n fixable?: boolean;\n};\n\nexport type LinterResult = {\n linter: string;\n work_dir?: string;\n /** Resolved executable, e.g. \"eslint\". */\n command?: string;\n /** argv without the command name. */\n args?: string[];\n success?: boolean;\n skipped?: boolean;\n timed_out?: boolean;\n /** Nanoseconds. */\n duration?: number;\n /** Go marshals a nil slice as null when the linter failed before reporting. */\n violations: Violation[] | null;\n raw_output?: string;\n /** Why the linter failed to run (or why it was skipped). */\n error?: string;\n file_count?: number;\n rule_count?: number;\n};\n\nexport type LintGrouping = \"linter-rule-file\" | \"linter-file\" | \"file-linter-rule\" | \"summary\";\n\nexport const DEFAULT_LINT_GROUPING: LintGrouping = \"linter-rule-file\";\n\nexport const LINT_GROUPINGS: readonly LintGrouping[] = [\n \"linter-rule-file\",\n \"linter-file\",\n \"file-linter-rule\",\n \"summary\",\n];\n\n/** Tri-state severity and linter filters, same primitives as the test runner. */\nexport type LintFilters = {\n severity: FilterState<LintSeverity>;\n linter: FilterState<string>;\n};\n\nexport function emptyLintFilters(): LintFilters {\n return { severity: new Map(), linter: new Map() };\n}\n\nexport type LintNodeKind =\n | \"linter\"\n | \"lint-folder\"\n | \"lint-file\"\n | \"lint-rule\"\n | \"lint-rule-group\"\n /** A linter that failed to run: the leaf carries its error text. */\n | \"linter-error\";\n\nexport type LintNode = {\n name: string;\n kind: LintNodeKind;\n /** Stable, URL-safe selection key assigned by buildLintTree. */\n route_path: string;\n children?: LintNode[] | undefined;\n file?: string | undefined;\n /** Path relative to the linter's work_dir — what ignore rules match against. */\n target_path?: string | undefined;\n work_dir?: string | undefined;\n linterName?: string | undefined;\n ruleName?: string | undefined;\n linter?: LinterResult | undefined;\n violations?: Violation[] | undefined;\n /** Violations that carry no file, shown on the node itself. */\n noFileViolations?: Violation[] | undefined;\n failed: boolean;\n passed: boolean;\n skipped: boolean;\n message?: string | undefined;\n};\n\n/** The body of an ignore request, matching gavel's `.gavel.yaml` ignore entries. */\nexport type LintIgnoreRequest = {\n source?: string | undefined;\n rule?: string | undefined;\n file?: string | undefined;\n work_dir?: string | undefined;\n};\n\nexport type LintAction = {\n key: string;\n label: string;\n title: string;\n req: LintIgnoreRequest;\n variant?: \"primary\" | \"subtle\";\n /** Folder-scoped ignores cannot be applied without knowing the work dir. */\n disabledWithoutWorkDir?: boolean;\n};\n"],"names":[],"mappings":"AAsDO,MAAM,wBAAsC;AAE5C,MAAM,iBAA0C;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQO,SAAS,mBAAgC;AAC9C,SAAO,EAAE,UAAU,oBAAI,IAAA,GAAO,QAAQ,oBAAI,MAAI;AAChD;"}
@@ -23,6 +23,7 @@ function QueryBrowser({
23
23
  title,
24
24
  language = "text",
25
25
  initialQuery = "",
26
+ runToken,
26
27
  queryLabel = "Query",
27
28
  allowEmptyQuery = false,
28
29
  optionsSchema,
@@ -31,6 +32,7 @@ function QueryBrowser({
31
32
  onQueryChange,
32
33
  onOptionsChange,
33
34
  navigator,
35
+ navigatorSplit = 28,
34
36
  execute,
35
37
  lookupFilterValues,
36
38
  renderResults,
@@ -41,6 +43,7 @@ function QueryBrowser({
41
43
  const editor = react.useRef(null);
42
44
  const languageConfig = react.useRef(new state.Compartment());
43
45
  const executeRef = react.useRef(() => void 0);
46
+ const consumedRunToken = react.useRef(runToken);
44
47
  const onQueryChangeRef = react.useRef(onQueryChange);
45
48
  const [options, setOptions] = react.useState(
46
49
  initialOptions ?? {}
@@ -204,6 +207,14 @@ function QueryBrowser({
204
207
  lastRun.current = null;
205
208
  executedFilters.current = {};
206
209
  }, [id]);
210
+ react.useEffect(() => {
211
+ var _a2;
212
+ if (runToken === consumedRunToken.current) return;
213
+ consumedRunToken.current = runToken;
214
+ if (runToken == null) return;
215
+ (_a2 = editor.current) == null ? void 0 : _a2.dispatch({ selection: { anchor: 0 } });
216
+ executeRef.current();
217
+ }, [runToken]);
207
218
  const rows = (result == null ? void 0 : result.rows) ?? [];
208
219
  const described = (result == null ? void 0 : result.columns) ?? [];
209
220
  const columns = react.useMemo(
@@ -354,7 +365,7 @@ function QueryBrowser({
354
365
  error.diagnostics && /* @__PURE__ */ jsxRuntime.jsx(QueryBrowserDiagnosticsPanel.QueryBrowserDiagnosticsPanel, { diagnostics: error.diagnostics })
355
366
  ] }) : result && renderResults ? renderResults({ result, defaultView: defaultResults }) : defaultResults })
356
367
  ] });
357
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils.cn("h-[calc(100vh-15rem)] min-h-[32rem]", className), children: navigator ? /* @__PURE__ */ jsxRuntime.jsx(SplitPane.SplitPane, { defaultSplit: 28, left: navigator, right: workspace }) : workspace });
368
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils.cn("h-[calc(100vh-15rem)] min-h-[32rem]", className), children: navigator ? /* @__PURE__ */ jsxRuntime.jsx(SplitPane.SplitPane, { defaultSplit: navigatorSplit, left: navigator, right: workspace }) : workspace });
358
369
  }
359
370
  exports.QueryBrowser = QueryBrowser;
360
371
  //# sourceMappingURL=QueryBrowser.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBrowser.cjs","sources":["../../../src/data/query-browser/QueryBrowser.tsx"],"sourcesContent":["import { Compartment, EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { JsonSchemaForm } from \"../../components/JsonSchemaForm\";\nimport { cn } from \"../../lib/utils\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { Icon } from \"../Icon\";\nimport { UiPlay } from \"../../icons\";\nimport type { DataTablePagination } from \"../DataTable\";\nimport { inferColumns } from \"../data-table-utils\";\nimport type { DataTableFilterSelection } from \"../data-table-filter-values\";\nimport {\n serverColumnsToDataTableColumns,\n serverFiltersToFilterBar,\n type DataTableFilterLookup,\n type DataTableServerColumn,\n} from \"../data-table-server-filters\";\nimport { ErrorDetails } from \"../diagnostics/ErrorDetails\";\nimport type { ErrorDiagnostics } from \"../diagnostics/error-diagnostics\";\nimport {\n queryBrowserEditorExtensions,\n queryBrowserLanguageExtension,\n readQueryBrowserHistory,\n rememberQueryBrowserQuery,\n type QueryBrowserHistoryEntry,\n} from \"./QueryBrowser.editor\";\nimport { QueryBrowserDiagnosticsPanel } from \"./QueryBrowserDiagnosticsPanel\";\nimport { QueryBrowserResults } from \"./QueryBrowserResults\";\nimport { useDebugAction } from \"../useDebugAction\";\nimport {\n QueryBrowserExecutionError,\n type QueryBrowserDiagnostics,\n type QueryBrowserProps,\n type QueryBrowserRequest,\n type QueryBrowserResult,\n} from \"./QueryBrowser.types\";\n\nexport function QueryBrowser({\n id,\n title,\n language = \"text\",\n initialQuery = \"\",\n queryLabel = \"Query\",\n allowEmptyQuery = false,\n optionsSchema,\n initialOptions,\n completion,\n onQueryChange,\n onOptionsChange,\n navigator,\n execute,\n lookupFilterValues,\n renderResults,\n className,\n}: QueryBrowserProps) {\n const editorHost = useRef<HTMLDivElement | null>(null);\n const editor = useRef<EditorView | null>(null);\n const languageConfig = useRef(new Compartment());\n const executeRef = useRef<() => void>(() => undefined);\n const onQueryChangeRef = useRef(onQueryChange);\n const [options, setOptions] = useState<Record<string, unknown>>(\n initialOptions ?? {},\n );\n const [result, setResult] = useState<QueryBrowserResult | null>(null);\n const [error, setError] = useState<{\n message: string;\n query: string;\n diagnostics?: QueryBrowserDiagnostics;\n errorDetails?: ErrorDiagnostics;\n } | null>(null);\n const [pending, setPending] = useState(false);\n const [entries, setEntries] = useState<QueryBrowserHistoryEntry[]>(() =>\n readQueryBrowserHistory(id),\n );\n const [filters, setFilters] = useState<DataTableFilterSelection>({});\n // What the displayed result came from. A filter re-runs *this*, never the\n // editor's current text — otherwise changing a pill would execute a\n // half-typed edit nobody asked to run.\n const lastRun = useRef<{\n query: string;\n options: Record<string, unknown>;\n filters?: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n } | null>(null);\n const executedFilters = useRef<DataTableFilterSelection>({});\n\n // Every run goes through here so the record a filter re-runs from is refreshed\n // in one place: the query, its options, and the columns the source described,\n // which are what a subsequent selection binds to.\n const runRequest = useCallback(\n async (request: QueryBrowserRequest) => {\n setPending(true);\n setError(null);\n const started = performance.now();\n try {\n const next = await execute(request);\n setResult({\n ...next,\n durationMs: next.durationMs ?? performance.now() - started,\n });\n lastRun.current = {\n query: request.query,\n options: request.options,\n ...(request.filters ? { filters: request.filters } : {}),\n ...(next.columns ? { columns: next.columns } : {}),\n };\n } catch (err) {\n setError({\n message: err instanceof Error ? err.message : String(err),\n query: request.query,\n ...(err instanceof QueryBrowserExecutionError && err.diagnostics\n ? { diagnostics: err.diagnostics }\n : {}),\n ...(err instanceof QueryBrowserExecutionError && err.errorDetails\n ? { errorDetails: err.errorDetails }\n : {}),\n });\n } finally {\n setPending(false);\n }\n },\n [execute],\n );\n\n const currentQuery = useCallback(() => {\n const view = editor.current;\n if (!view) return initialQuery;\n const selection = view.state.selection.main;\n if (!selection.empty)\n return view.state.sliceDoc(selection.from, selection.to);\n return view.state.doc.toString();\n }, [initialQuery]);\n\n const run = useCallback(async () => {\n const query = currentQuery().trim();\n if ((!query && !allowEmptyQuery) || pending) return;\n if (query) setEntries(rememberQueryBrowserQuery(id, query));\n // A different statement is a different result set, so neither its filters\n // nor the columns they bind to survive: both name columns the new query may\n // not return.\n const repeat = lastRun.current?.query === query ? lastRun.current : null;\n const carried = repeat ? filters : {};\n if (carried !== filters) setFilters(carried);\n lastRun.current = { query, options };\n executedFilters.current = carried;\n await runRequest({\n query,\n options,\n ...(Object.keys(carried).length > 0 ? { filters: carried } : {}),\n ...(repeat?.columns ? { columns: repeat.columns } : {}),\n });\n }, [allowEmptyQuery, currentQuery, filters, id, options, pending, runRequest]);\n\n // A filter pill is not a draft the way query text is: it commits a discrete\n // value on selection, and the bar already debounces its free-text fields. So\n // a change re-runs the last executed query immediately rather than waiting\n // for Run, which is also how the profile catalog behaves.\n const rerunWithFilters = useCallback(\n async (selection: DataTableFilterSelection) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: a filter changed before any query had run\",\n );\n }\n await runRequest({\n ...previous,\n filters: selection,\n ...(result?.pagination\n ? { pagination: { limit: result.pagination.limit } }\n : {}),\n });\n },\n [result?.pagination, runRequest],\n );\n\n const rerunAt = useCallback(\n async (pagination: NonNullable<QueryBrowserRequest[\"pagination\"]>) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: pagination changed before any query had run\",\n );\n }\n await runRequest({ ...previous, pagination });\n },\n [runRequest],\n );\n\n // \"Debug\" reveals the console, which already holds the record for the run\n // that produced the rows on screen. It used to re-execute the query with a\n // `debug` flag — so the diagnostics described a *different* execution from\n // the one being looked at, and cost the backend a second full run to say so.\n const debugAction = useDebugAction();\n\n useEffect(() => {\n if (!lastRun.current) return;\n if (filters === executedFilters.current) return;\n executedFilters.current = filters;\n void rerunWithFilters(filters);\n }, [filters, rerunWithFilters]);\n\n executeRef.current = () => void run();\n onQueryChangeRef.current = onQueryChange;\n\n useEffect(() => {\n if (!editorHost.current) return;\n const view = new EditorView({\n parent: editorHost.current,\n state: EditorState.create({\n doc: initialQuery,\n extensions: queryBrowserEditorExtensions(\n () => executeRef.current(),\n (query) => onQueryChangeRef.current?.(query),\n languageConfig.current.of(\n queryBrowserLanguageExtension(language, completion),\n ),\n ),\n }),\n });\n editor.current = view;\n return () => {\n editor.current = null;\n view.destroy();\n };\n }, [id, language]);\n\n useEffect(() => {\n const view = editor.current;\n if (!view) return;\n view.dispatch({\n effects: languageConfig.current.reconfigure(\n queryBrowserLanguageExtension(language, completion),\n ),\n });\n }, [completion, language]);\n\n useEffect(() => {\n const view = editor.current;\n if (!view || view.state.doc.toString() === initialQuery) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: initialQuery },\n });\n }, [initialQuery]);\n\n useEffect(() => {\n setOptions(initialOptions ?? {});\n }, [initialOptions]);\n\n const updateOptions = useCallback(\n (next: Record<string, unknown>) => {\n setOptions(next);\n onOptionsChange?.(next);\n },\n [onOptionsChange],\n );\n\n useEffect(() => {\n setEntries(readQueryBrowserHistory(id));\n setResult(null);\n setError(null);\n setFilters({});\n lastRun.current = null;\n executedFilters.current = {};\n }, [id]);\n\n const rows = result?.rows ?? [];\n const described = result?.columns ?? [];\n const columns = useMemo(\n () =>\n described.length > 0\n ? serverColumnsToDataTableColumns<Record<string, unknown>>(described)\n : inferColumns(rows, { literalKeys: true }),\n [described, rows],\n );\n const lookupValues = useMemo<DataTableFilterLookup | undefined>(() => {\n if (!lookupFilterValues) return undefined;\n return (request) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: a filter lookup ran before any query had\",\n );\n }\n return lookupFilterValues({ ...request, ...previous, filters });\n };\n }, [filters, lookupFilterValues]);\n const filterConfig = useMemo(\n () =>\n serverFiltersToFilterBar(\n described,\n filters,\n setFilters,\n lookupValues ? { lookupValues } : {},\n ),\n [described, filters, lookupValues],\n );\n const serverFiltered =\n filterConfig.filters.length > 0 || filterConfig.timeRange !== undefined;\n const tablePagination = useMemo<DataTablePagination | undefined>(() => {\n const pagination = result?.pagination;\n if (!pagination) return undefined;\n const shared = {\n pageSize: pagination.limit,\n ...(pagination.total !== undefined ? { total: pagination.total } : {}),\n ...(pagination.totalRelation === \"eq\" ||\n pagination.totalRelation === \"gte\"\n ? { totalRelation: pagination.totalRelation }\n : {}),\n hasMore: pagination.hasMore,\n onPageSizeChange: (limit: number) => void rerunAt({ limit }),\n };\n if (pagination.mode === \"cursor\") {\n return {\n ...shared,\n page: 0,\n cursor: {\n ...(pagination.cursor ? { current: pagination.cursor } : {}),\n ...(pagination.nextCursor ? { next: pagination.nextCursor } : {}),\n onCursorChange: (cursor: string | undefined) =>\n void rerunAt({\n limit: pagination.limit,\n ...(cursor ? { cursor } : {}),\n }),\n },\n };\n }\n const page = Math.floor((pagination.offset ?? 0) / pagination.limit);\n return {\n ...shared,\n page,\n onPageChange: (nextPage: number) =>\n void rerunAt({\n limit: pagination.limit,\n offset: nextPage * pagination.limit,\n }),\n };\n }, [rerunAt, result?.pagination]);\n const defaultResults = (\n <QueryBrowserResults\n result={result}\n pending={pending}\n {...(title ? { title } : {})}\n queryLabel={queryLabel}\n columns={columns}\n filterConfig={filterConfig}\n serverFiltered={serverFiltered}\n {...(tablePagination ? { pagination: tablePagination } : {})}\n {...(debugAction ? { menuActions: [debugAction] } : {})}\n />\n );\n\n const workspace = (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden rounded-xl border bg-card\">\n <div className=\"flex flex-wrap items-center gap-2 border-b px-3 py-2\">\n <div className=\"min-w-0 flex-1\">\n {title && <h2 className=\"truncate text-sm font-semibold\">{title}</h2>}\n <p className=\"text-xs text-muted-foreground\">{queryLabel}</p>\n </div>\n {entries.length > 0 && (\n <select\n aria-label=\"Query history\"\n defaultValue=\"\"\n onChange={(event) => {\n const query = event.target.value;\n const view = editor.current;\n if (!view || !query) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: query },\n });\n event.target.value = \"\";\n }}\n className=\"h-8 max-w-52 rounded-md border bg-background px-2 text-xs\"\n >\n <option value=\"\">History</option>\n {entries.map((entry) => (\n <option key={`${entry.at}:${entry.query}`} value={entry.query}>\n {entry.query.replace(/\\s+/g, \" \").slice(0, 80)}\n </option>\n ))}\n </select>\n )}\n <Button\n size=\"sm\"\n onClick={() => void run()}\n loading={pending}\n loadingLabel={pending ? \"Running\" : undefined}\n >\n <Icon icon={UiPlay} className=\"size-4\" />\n Run\n </Button>\n </div>\n {optionsSchema &&\n Object.keys(optionsSchema.properties ?? {}).length > 0 && (\n <div className=\"border-b px-3 py-2\">\n <JsonSchemaForm\n schema={optionsSchema}\n value={options}\n onChange={updateOptions}\n size=\"sm\"\n inline\n showPreferencesMenu={false}\n persistPreferences={false}\n />\n </div>\n )}\n <div ref={editorHost} className=\"h-[34%] min-h-44 border-b\" />\n <div className=\"flex min-h-0 flex-1 flex-col overflow-auto p-3\">\n {error ? (\n <div className=\"space-y-3\">\n <ErrorDetails\n diagnostics={{\n ...(error.errorDetails ?? {\n message: error.message,\n context: [],\n }),\n context: [\n ...(error.errorDetails?.context ?? []),\n [\"Query\", error.query],\n [\"Language\", language],\n ],\n }}\n />\n {error.diagnostics && (\n <QueryBrowserDiagnosticsPanel diagnostics={error.diagnostics} />\n )}\n </div>\n ) : result && renderResults ? (\n renderResults({ result, defaultView: defaultResults })\n ) : (\n defaultResults\n )}\n </div>\n </div>\n );\n\n return (\n <div className={cn(\"h-[calc(100vh-15rem)] min-h-[32rem]\", className)}>\n {navigator ? (\n <SplitPane defaultSplit={28} left={navigator} right={workspace} />\n ) : (\n workspace\n )}\n </div>\n );\n}\n"],"names":["useRef","Compartment","useState","readQueryBrowserHistory","useCallback","QueryBrowserExecutionError","view","rememberQueryBrowserQuery","_a","useDebugAction","useEffect","EditorView","EditorState","queryBrowserEditorExtensions","queryBrowserLanguageExtension","useMemo","serverColumnsToDataTableColumns","inferColumns","serverFiltersToFilterBar","jsx","QueryBrowserResults","jsxs","Button","Icon","UiPlay","JsonSchemaForm","ErrorDetails","QueryBrowserDiagnosticsPanel","cn","SplitPane"],"mappings":"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"}
1
+ {"version":3,"file":"QueryBrowser.cjs","sources":["../../../src/data/query-browser/QueryBrowser.tsx"],"sourcesContent":["import { Compartment, EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { JsonSchemaForm } from \"../../components/JsonSchemaForm\";\nimport { cn } from \"../../lib/utils\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { Icon } from \"../Icon\";\nimport { UiPlay } from \"../../icons\";\nimport type { DataTablePagination } from \"../DataTable\";\nimport { inferColumns } from \"../data-table-utils\";\nimport type { DataTableFilterSelection } from \"../data-table-filter-values\";\nimport {\n serverColumnsToDataTableColumns,\n serverFiltersToFilterBar,\n type DataTableFilterLookup,\n type DataTableServerColumn,\n} from \"../data-table-server-filters\";\nimport { ErrorDetails } from \"../diagnostics/ErrorDetails\";\nimport type { ErrorDiagnostics } from \"../diagnostics/error-diagnostics\";\nimport {\n queryBrowserEditorExtensions,\n queryBrowserLanguageExtension,\n readQueryBrowserHistory,\n rememberQueryBrowserQuery,\n type QueryBrowserHistoryEntry,\n} from \"./QueryBrowser.editor\";\nimport { QueryBrowserDiagnosticsPanel } from \"./QueryBrowserDiagnosticsPanel\";\nimport { QueryBrowserResults } from \"./QueryBrowserResults\";\nimport { useDebugAction } from \"../useDebugAction\";\nimport {\n QueryBrowserExecutionError,\n type QueryBrowserDiagnostics,\n type QueryBrowserProps,\n type QueryBrowserRequest,\n type QueryBrowserResult,\n} from \"./QueryBrowser.types\";\n\nexport function QueryBrowser({\n id,\n title,\n language = \"text\",\n initialQuery = \"\",\n runToken,\n queryLabel = \"Query\",\n allowEmptyQuery = false,\n optionsSchema,\n initialOptions,\n completion,\n onQueryChange,\n onOptionsChange,\n navigator,\n navigatorSplit = 28,\n execute,\n lookupFilterValues,\n renderResults,\n className,\n}: QueryBrowserProps) {\n const editorHost = useRef<HTMLDivElement | null>(null);\n const editor = useRef<EditorView | null>(null);\n const languageConfig = useRef(new Compartment());\n const executeRef = useRef<() => void>(() => undefined);\n const consumedRunToken = useRef(runToken);\n const onQueryChangeRef = useRef(onQueryChange);\n const [options, setOptions] = useState<Record<string, unknown>>(\n initialOptions ?? {},\n );\n const [result, setResult] = useState<QueryBrowserResult | null>(null);\n const [error, setError] = useState<{\n message: string;\n query: string;\n diagnostics?: QueryBrowserDiagnostics;\n errorDetails?: ErrorDiagnostics;\n } | null>(null);\n const [pending, setPending] = useState(false);\n const [entries, setEntries] = useState<QueryBrowserHistoryEntry[]>(() =>\n readQueryBrowserHistory(id),\n );\n const [filters, setFilters] = useState<DataTableFilterSelection>({});\n // What the displayed result came from. A filter re-runs *this*, never the\n // editor's current text — otherwise changing a pill would execute a\n // half-typed edit nobody asked to run.\n const lastRun = useRef<{\n query: string;\n options: Record<string, unknown>;\n filters?: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n } | null>(null);\n const executedFilters = useRef<DataTableFilterSelection>({});\n\n // Every run goes through here so the record a filter re-runs from is refreshed\n // in one place: the query, its options, and the columns the source described,\n // which are what a subsequent selection binds to.\n const runRequest = useCallback(\n async (request: QueryBrowserRequest) => {\n setPending(true);\n setError(null);\n const started = performance.now();\n try {\n const next = await execute(request);\n setResult({\n ...next,\n durationMs: next.durationMs ?? performance.now() - started,\n });\n lastRun.current = {\n query: request.query,\n options: request.options,\n ...(request.filters ? { filters: request.filters } : {}),\n ...(next.columns ? { columns: next.columns } : {}),\n };\n } catch (err) {\n setError({\n message: err instanceof Error ? err.message : String(err),\n query: request.query,\n ...(err instanceof QueryBrowserExecutionError && err.diagnostics\n ? { diagnostics: err.diagnostics }\n : {}),\n ...(err instanceof QueryBrowserExecutionError && err.errorDetails\n ? { errorDetails: err.errorDetails }\n : {}),\n });\n } finally {\n setPending(false);\n }\n },\n [execute],\n );\n\n const currentQuery = useCallback(() => {\n const view = editor.current;\n if (!view) return initialQuery;\n const selection = view.state.selection.main;\n if (!selection.empty)\n return view.state.sliceDoc(selection.from, selection.to);\n return view.state.doc.toString();\n }, [initialQuery]);\n\n const run = useCallback(async () => {\n const query = currentQuery().trim();\n if ((!query && !allowEmptyQuery) || pending) return;\n if (query) setEntries(rememberQueryBrowserQuery(id, query));\n // A different statement is a different result set, so neither its filters\n // nor the columns they bind to survive: both name columns the new query may\n // not return.\n const repeat = lastRun.current?.query === query ? lastRun.current : null;\n const carried = repeat ? filters : {};\n if (carried !== filters) setFilters(carried);\n lastRun.current = { query, options };\n executedFilters.current = carried;\n await runRequest({\n query,\n options,\n ...(Object.keys(carried).length > 0 ? { filters: carried } : {}),\n ...(repeat?.columns ? { columns: repeat.columns } : {}),\n });\n }, [allowEmptyQuery, currentQuery, filters, id, options, pending, runRequest]);\n\n // A filter pill is not a draft the way query text is: it commits a discrete\n // value on selection, and the bar already debounces its free-text fields. So\n // a change re-runs the last executed query immediately rather than waiting\n // for Run, which is also how the profile catalog behaves.\n const rerunWithFilters = useCallback(\n async (selection: DataTableFilterSelection) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: a filter changed before any query had run\",\n );\n }\n await runRequest({\n ...previous,\n filters: selection,\n ...(result?.pagination\n ? { pagination: { limit: result.pagination.limit } }\n : {}),\n });\n },\n [result?.pagination, runRequest],\n );\n\n const rerunAt = useCallback(\n async (pagination: NonNullable<QueryBrowserRequest[\"pagination\"]>) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: pagination changed before any query had run\",\n );\n }\n await runRequest({ ...previous, pagination });\n },\n [runRequest],\n );\n\n // \"Debug\" reveals the console, which already holds the record for the run\n // that produced the rows on screen. It used to re-execute the query with a\n // `debug` flag — so the diagnostics described a *different* execution from\n // the one being looked at, and cost the backend a second full run to say so.\n const debugAction = useDebugAction();\n\n useEffect(() => {\n if (!lastRun.current) return;\n if (filters === executedFilters.current) return;\n executedFilters.current = filters;\n void rerunWithFilters(filters);\n }, [filters, rerunWithFilters]);\n\n executeRef.current = () => void run();\n onQueryChangeRef.current = onQueryChange;\n\n useEffect(() => {\n if (!editorHost.current) return;\n const view = new EditorView({\n parent: editorHost.current,\n state: EditorState.create({\n doc: initialQuery,\n extensions: queryBrowserEditorExtensions(\n () => executeRef.current(),\n (query) => onQueryChangeRef.current?.(query),\n languageConfig.current.of(\n queryBrowserLanguageExtension(language, completion),\n ),\n ),\n }),\n });\n editor.current = view;\n return () => {\n editor.current = null;\n view.destroy();\n };\n }, [id, language]);\n\n useEffect(() => {\n const view = editor.current;\n if (!view) return;\n view.dispatch({\n effects: languageConfig.current.reconfigure(\n queryBrowserLanguageExtension(language, completion),\n ),\n });\n }, [completion, language]);\n\n useEffect(() => {\n const view = editor.current;\n if (!view || view.state.doc.toString() === initialQuery) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: initialQuery },\n });\n }, [initialQuery]);\n\n useEffect(() => {\n setOptions(initialOptions ?? {});\n }, [initialOptions]);\n\n const updateOptions = useCallback(\n (next: Record<string, unknown>) => {\n setOptions(next);\n onOptionsChange?.(next);\n },\n [onOptionsChange],\n );\n\n useEffect(() => {\n setEntries(readQueryBrowserHistory(id));\n setResult(null);\n setError(null);\n setFilters({});\n lastRun.current = null;\n executedFilters.current = {};\n }, [id]);\n\n // Declared after the initialQuery sync so the editor already holds the seeded\n // query; the cursor is collapsed so a stale selection cannot narrow the run.\n useEffect(() => {\n if (runToken === consumedRunToken.current) return;\n consumedRunToken.current = runToken;\n if (runToken == null) return;\n editor.current?.dispatch({ selection: { anchor: 0 } });\n executeRef.current();\n }, [runToken]);\n\n const rows = result?.rows ?? [];\n const described = result?.columns ?? [];\n const columns = useMemo(\n () =>\n described.length > 0\n ? serverColumnsToDataTableColumns<Record<string, unknown>>(described)\n : inferColumns(rows, { literalKeys: true }),\n [described, rows],\n );\n const lookupValues = useMemo<DataTableFilterLookup | undefined>(() => {\n if (!lookupFilterValues) return undefined;\n return (request) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: a filter lookup ran before any query had\",\n );\n }\n return lookupFilterValues({ ...request, ...previous, filters });\n };\n }, [filters, lookupFilterValues]);\n const filterConfig = useMemo(\n () =>\n serverFiltersToFilterBar(\n described,\n filters,\n setFilters,\n lookupValues ? { lookupValues } : {},\n ),\n [described, filters, lookupValues],\n );\n const serverFiltered =\n filterConfig.filters.length > 0 || filterConfig.timeRange !== undefined;\n const tablePagination = useMemo<DataTablePagination | undefined>(() => {\n const pagination = result?.pagination;\n if (!pagination) return undefined;\n const shared = {\n pageSize: pagination.limit,\n ...(pagination.total !== undefined ? { total: pagination.total } : {}),\n ...(pagination.totalRelation === \"eq\" ||\n pagination.totalRelation === \"gte\"\n ? { totalRelation: pagination.totalRelation }\n : {}),\n hasMore: pagination.hasMore,\n onPageSizeChange: (limit: number) => void rerunAt({ limit }),\n };\n if (pagination.mode === \"cursor\") {\n return {\n ...shared,\n page: 0,\n cursor: {\n ...(pagination.cursor ? { current: pagination.cursor } : {}),\n ...(pagination.nextCursor ? { next: pagination.nextCursor } : {}),\n onCursorChange: (cursor: string | undefined) =>\n void rerunAt({\n limit: pagination.limit,\n ...(cursor ? { cursor } : {}),\n }),\n },\n };\n }\n const page = Math.floor((pagination.offset ?? 0) / pagination.limit);\n return {\n ...shared,\n page,\n onPageChange: (nextPage: number) =>\n void rerunAt({\n limit: pagination.limit,\n offset: nextPage * pagination.limit,\n }),\n };\n }, [rerunAt, result?.pagination]);\n const defaultResults = (\n <QueryBrowserResults\n result={result}\n pending={pending}\n {...(title ? { title } : {})}\n queryLabel={queryLabel}\n columns={columns}\n filterConfig={filterConfig}\n serverFiltered={serverFiltered}\n {...(tablePagination ? { pagination: tablePagination } : {})}\n {...(debugAction ? { menuActions: [debugAction] } : {})}\n />\n );\n\n const workspace = (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden rounded-xl border bg-card\">\n <div className=\"flex flex-wrap items-center gap-2 border-b px-3 py-2\">\n <div className=\"min-w-0 flex-1\">\n {title && <h2 className=\"truncate text-sm font-semibold\">{title}</h2>}\n <p className=\"text-xs text-muted-foreground\">{queryLabel}</p>\n </div>\n {entries.length > 0 && (\n <select\n aria-label=\"Query history\"\n defaultValue=\"\"\n onChange={(event) => {\n const query = event.target.value;\n const view = editor.current;\n if (!view || !query) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: query },\n });\n event.target.value = \"\";\n }}\n className=\"h-8 max-w-52 rounded-md border bg-background px-2 text-xs\"\n >\n <option value=\"\">History</option>\n {entries.map((entry) => (\n <option key={`${entry.at}:${entry.query}`} value={entry.query}>\n {entry.query.replace(/\\s+/g, \" \").slice(0, 80)}\n </option>\n ))}\n </select>\n )}\n <Button\n size=\"sm\"\n onClick={() => void run()}\n loading={pending}\n loadingLabel={pending ? \"Running\" : undefined}\n >\n <Icon icon={UiPlay} className=\"size-4\" />\n Run\n </Button>\n </div>\n {optionsSchema &&\n Object.keys(optionsSchema.properties ?? {}).length > 0 && (\n <div className=\"border-b px-3 py-2\">\n <JsonSchemaForm\n schema={optionsSchema}\n value={options}\n onChange={updateOptions}\n size=\"sm\"\n inline\n showPreferencesMenu={false}\n persistPreferences={false}\n />\n </div>\n )}\n <div ref={editorHost} className=\"h-[34%] min-h-44 border-b\" />\n <div className=\"flex min-h-0 flex-1 flex-col overflow-auto p-3\">\n {error ? (\n <div className=\"space-y-3\">\n <ErrorDetails\n diagnostics={{\n ...(error.errorDetails ?? {\n message: error.message,\n context: [],\n }),\n context: [\n ...(error.errorDetails?.context ?? []),\n [\"Query\", error.query],\n [\"Language\", language],\n ],\n }}\n />\n {error.diagnostics && (\n <QueryBrowserDiagnosticsPanel diagnostics={error.diagnostics} />\n )}\n </div>\n ) : result && renderResults ? (\n renderResults({ result, defaultView: defaultResults })\n ) : (\n defaultResults\n )}\n </div>\n </div>\n );\n\n return (\n <div className={cn(\"h-[calc(100vh-15rem)] min-h-[32rem]\", className)}>\n {navigator ? (\n <SplitPane defaultSplit={navigatorSplit} left={navigator} right={workspace} />\n ) : (\n workspace\n )}\n </div>\n );\n}\n"],"names":["useRef","Compartment","useState","readQueryBrowserHistory","useCallback","QueryBrowserExecutionError","view","rememberQueryBrowserQuery","_a","useDebugAction","useEffect","EditorView","EditorState","queryBrowserEditorExtensions","queryBrowserLanguageExtension","useMemo","serverColumnsToDataTableColumns","inferColumns","serverFiltersToFilterBar","jsx","QueryBrowserResults","jsxs","Button","Icon","UiPlay","JsonSchemaForm","ErrorDetails","QueryBrowserDiagnosticsPanel","cn","SplitPane"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import { QueryBrowserProps } from './QueryBrowser.types.js';
2
- export declare function QueryBrowser({ id, title, language, initialQuery, queryLabel, allowEmptyQuery, optionsSchema, initialOptions, completion, onQueryChange, onOptionsChange, navigator, execute, lookupFilterValues, renderResults, className, }: QueryBrowserProps): import("react").JSX.Element;
2
+ export declare function QueryBrowser({ id, title, language, initialQuery, runToken, queryLabel, allowEmptyQuery, optionsSchema, initialOptions, completion, onQueryChange, onOptionsChange, navigator, navigatorSplit, execute, lookupFilterValues, renderResults, className, }: QueryBrowserProps): import("react").JSX.Element;
3
3
  //# sourceMappingURL=QueryBrowser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBrowser.d.ts","sourceRoot":"","sources":["../../../src/data/query-browser/QueryBrowser.tsx"],"names":[],"mappings":"AA8BA,OAAO,EAGL,KAAK,iBAAiB,EAGvB,MAAM,sBAAsB,CAAC;AAE9B,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EACF,KAAK,EACL,QAAiB,EACjB,YAAiB,EACjB,UAAoB,EACpB,eAAuB,EACvB,aAAa,EACb,cAAc,EACd,UAAU,EACV,aAAa,EACb,eAAe,EACf,SAAS,EACT,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,SAAS,GACV,EAAE,iBAAiB,+BAuYnB"}
1
+ {"version":3,"file":"QueryBrowser.d.ts","sourceRoot":"","sources":["../../../src/data/query-browser/QueryBrowser.tsx"],"names":[],"mappings":"AA8BA,OAAO,EAGL,KAAK,iBAAiB,EAGvB,MAAM,sBAAsB,CAAC;AAE9B,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EACF,KAAK,EACL,QAAiB,EACjB,YAAiB,EACjB,QAAQ,EACR,UAAoB,EACpB,eAAuB,EACvB,aAAa,EACb,cAAc,EACd,UAAU,EACV,aAAa,EACb,eAAe,EACf,SAAS,EACT,cAAmB,EACnB,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,SAAS,GACV,EAAE,iBAAiB,+BAkZnB"}
@@ -4,6 +4,7 @@ const autocomplete = require("@codemirror/autocomplete");
4
4
  const commands = require("@codemirror/commands");
5
5
  const langJson = require("@codemirror/lang-json");
6
6
  const langSql = require("@codemirror/lang-sql");
7
+ const language = require("@codemirror/language");
7
8
  const view = require("@codemirror/view");
8
9
  const QueryBrowser_completion = require("./QueryBrowser.completion.cjs");
9
10
  const MAX_HISTORY = 50;
@@ -34,6 +35,9 @@ function rememberQueryBrowserQuery(id, query) {
34
35
  function queryBrowserEditorExtensions(execute, onQueryChange, languageExtension) {
35
36
  return [
36
37
  commands.history(),
38
+ view.lineNumbers(),
39
+ view.highlightActiveLine(),
40
+ language.syntaxHighlighting(language.defaultHighlightStyle),
37
41
  view.keymap.of([
38
42
  {
39
43
  key: "Mod-Enter",
@@ -42,6 +46,7 @@ function queryBrowserEditorExtensions(execute, onQueryChange, languageExtension)
42
46
  return true;
43
47
  }
44
48
  },
49
+ ...autocomplete.completionKeymap,
45
50
  ...commands.historyKeymap
46
51
  ]),
47
52
  view.EditorView.lineWrapping,
@@ -60,17 +65,20 @@ function queryBrowserEditorExtensions(execute, onQueryChange, languageExtension)
60
65
  languageExtension
61
66
  ];
62
67
  }
63
- function queryBrowserLanguageExtension(language, completion) {
64
- if (language === "sql") {
65
- if ((completion == null ? void 0 : completion.kind) !== "sql") return langSql.sql();
66
- return langSql.sql({
67
- dialect: QueryBrowser_completion.dialectFor(completion.dialect),
68
- schema: QueryBrowser_completion.sqlCompletionNamespace(completion.schemas),
69
- upperCaseKeywords: true,
70
- ...completion.defaultSchema ? { defaultSchema: completion.defaultSchema } : {}
71
- });
68
+ function queryBrowserLanguageExtension(language2, completion) {
69
+ if (language2 === "sql") {
70
+ if ((completion == null ? void 0 : completion.kind) !== "sql") return [langSql.sql(), autocomplete.autocompletion()];
71
+ return [
72
+ autocomplete.autocompletion(),
73
+ langSql.sql({
74
+ dialect: QueryBrowser_completion.dialectFor(completion.dialect),
75
+ schema: QueryBrowser_completion.sqlCompletionNamespace(completion.schemas),
76
+ upperCaseKeywords: true,
77
+ ...completion.defaultSchema ? { defaultSchema: completion.defaultSchema } : {}
78
+ })
79
+ ];
72
80
  }
73
- if (language === "json") {
81
+ if (language2 === "json") {
74
82
  if ((completion == null ? void 0 : completion.kind) !== "json-fields") return langJson.json();
75
83
  return [
76
84
  langJson.json(),