@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.
- package/dist/connections/ConnectionsPage.cjs +219 -0
- package/dist/connections/ConnectionsPage.cjs.map +1 -0
- package/dist/connections/ConnectionsPage.d.ts +23 -0
- package/dist/connections/ConnectionsPage.d.ts.map +1 -0
- package/dist/connections/ConnectionsPage.js +219 -0
- package/dist/connections/ConnectionsPage.js.map +1 -0
- package/dist/connections/connectionActionStatus.cjs +43 -0
- package/dist/connections/connectionActionStatus.cjs.map +1 -0
- package/dist/connections/connectionActionStatus.d.ts +5 -0
- package/dist/connections/connectionActionStatus.d.ts.map +1 -0
- package/dist/connections/connectionActionStatus.js +43 -0
- package/dist/connections/connectionActionStatus.js.map +1 -0
- package/dist/connections/connectionActionTypes.cjs +24 -0
- package/dist/connections/connectionActionTypes.cjs.map +1 -0
- package/dist/connections/connectionActionTypes.d.ts +36 -0
- package/dist/connections/connectionActionTypes.d.ts.map +1 -0
- package/dist/connections/connectionActionTypes.js +24 -0
- package/dist/connections/connectionActionTypes.js.map +1 -0
- package/dist/connections/connectionActions.cjs +11 -0
- package/dist/connections/connectionActions.cjs.map +1 -0
- package/dist/connections/connectionActions.d.ts +15 -0
- package/dist/connections/connectionActions.d.ts.map +1 -0
- package/dist/connections/connectionActions.js +11 -0
- package/dist/connections/connectionActions.js.map +1 -0
- package/dist/connections/connectionDashboard.cjs +185 -0
- package/dist/connections/connectionDashboard.cjs.map +1 -0
- package/dist/connections/connectionDashboard.d.ts +25 -0
- package/dist/connections/connectionDashboard.d.ts.map +1 -0
- package/dist/connections/connectionDashboard.js +185 -0
- package/dist/connections/connectionDashboard.js.map +1 -0
- package/dist/connections/connectionDashboardModel.cjs +43 -0
- package/dist/connections/connectionDashboardModel.cjs.map +1 -0
- package/dist/connections/connectionDashboardModel.d.ts +75 -0
- package/dist/connections/connectionDashboardModel.d.ts.map +1 -0
- package/dist/connections/connectionDashboardModel.js +43 -0
- package/dist/connections/connectionDashboardModel.js.map +1 -0
- package/dist/connections/connectionDashboardRenderer.cjs +21 -0
- package/dist/connections/connectionDashboardRenderer.cjs.map +1 -0
- package/dist/connections/connectionDashboardRenderer.d.ts +15 -0
- package/dist/connections/connectionDashboardRenderer.d.ts.map +1 -0
- package/dist/connections/connectionDashboardRenderer.js +21 -0
- package/dist/connections/connectionDashboardRenderer.js.map +1 -0
- package/dist/connections/connectionDashboardRow.cjs +169 -0
- package/dist/connections/connectionDashboardRow.cjs.map +1 -0
- package/dist/connections/connectionDashboardRow.d.ts +12 -0
- package/dist/connections/connectionDashboardRow.d.ts.map +1 -0
- package/dist/connections/connectionDashboardRow.js +169 -0
- package/dist/connections/connectionDashboardRow.js.map +1 -0
- package/dist/connections/connectionErrorView.cjs +8 -0
- package/dist/connections/connectionErrorView.cjs.map +1 -0
- package/dist/connections/connectionErrorView.d.ts +4 -0
- package/dist/connections/connectionErrorView.d.ts.map +1 -0
- package/dist/connections/connectionErrorView.js +8 -0
- package/dist/connections/connectionErrorView.js.map +1 -0
- package/dist/connections/connectionHealth.cjs +82 -0
- package/dist/connections/connectionHealth.cjs.map +1 -0
- package/dist/connections/connectionHealth.d.ts +33 -0
- package/dist/connections/connectionHealth.d.ts.map +1 -0
- package/dist/connections/connectionHealth.js +82 -0
- package/dist/connections/connectionHealth.js.map +1 -0
- package/dist/connections/connectionLogging.cjs +29 -0
- package/dist/connections/connectionLogging.cjs.map +1 -0
- package/dist/connections/connectionLogging.d.ts +11 -0
- package/dist/connections/connectionLogging.d.ts.map +1 -0
- package/dist/connections/connectionLogging.js +29 -0
- package/dist/connections/connectionLogging.js.map +1 -0
- package/dist/connections/connectionLoggingField.cjs +37 -0
- package/dist/connections/connectionLoggingField.cjs.map +1 -0
- package/dist/connections/connectionLoggingField.d.ts +12 -0
- package/dist/connections/connectionLoggingField.d.ts.map +1 -0
- package/dist/connections/connectionLoggingField.js +37 -0
- package/dist/connections/connectionLoggingField.js.map +1 -0
- package/dist/connections/connectionLoggingModel.cjs +16 -0
- package/dist/connections/connectionLoggingModel.cjs.map +1 -0
- package/dist/connections/connectionLoggingModel.d.ts +6 -0
- package/dist/connections/connectionLoggingModel.d.ts.map +1 -0
- package/dist/connections/connectionLoggingModel.js +16 -0
- package/dist/connections/connectionLoggingModel.js.map +1 -0
- package/dist/connections/connectionResolveView.cjs +24 -0
- package/dist/connections/connectionResolveView.cjs.map +1 -0
- package/dist/connections/connectionResolveView.d.ts +5 -0
- package/dist/connections/connectionResolveView.d.ts.map +1 -0
- package/dist/connections/connectionResolveView.js +24 -0
- package/dist/connections/connectionResolveView.js.map +1 -0
- package/dist/connections/connectionTestButton.cjs +58 -0
- package/dist/connections/connectionTestButton.cjs.map +1 -0
- package/dist/connections/connectionTestButton.d.ts +6 -0
- package/dist/connections/connectionTestButton.d.ts.map +1 -0
- package/dist/connections/connectionTestButton.js +58 -0
- package/dist/connections/connectionTestButton.js.map +1 -0
- package/dist/connections/connectionTestView.cjs +12 -0
- package/dist/connections/connectionTestView.cjs.map +1 -0
- package/dist/connections/connectionTestView.d.ts +5 -0
- package/dist/connections/connectionTestView.d.ts.map +1 -0
- package/dist/connections/connectionTestView.js +12 -0
- package/dist/connections/connectionTestView.js.map +1 -0
- package/dist/connections/connectionsPageModel.cjs +33 -0
- package/dist/connections/connectionsPageModel.cjs.map +1 -0
- package/dist/connections/connectionsPageModel.d.ts +24 -0
- package/dist/connections/connectionsPageModel.d.ts.map +1 -0
- package/dist/connections/connectionsPageModel.js +33 -0
- package/dist/connections/connectionsPageModel.js.map +1 -0
- package/dist/connections/iconProvider.cjs +20 -0
- package/dist/connections/iconProvider.cjs.map +1 -0
- package/dist/connections/iconProvider.d.ts +7 -0
- package/dist/connections/iconProvider.d.ts.map +1 -0
- package/dist/connections/iconProvider.js +20 -0
- package/dist/connections/iconProvider.js.map +1 -0
- package/dist/connections.cjs +45 -0
- package/dist/connections.cjs.map +1 -0
- package/dist/connections.d.ts +34 -0
- package/dist/connections.d.ts.map +1 -0
- package/dist/connections.js +45 -0
- package/dist/connections.js.map +1 -0
- package/dist/data/DataTable.cjs +18 -8
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +4 -0
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +18 -8
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/TaskManager.cjs +183 -159
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts +3 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +185 -161
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskManagerButton.cjs +1 -0
- package/dist/data/TaskManagerButton.cjs.map +1 -1
- package/dist/data/TaskManagerButton.js +1 -0
- package/dist/data/TaskManagerButton.js.map +1 -1
- package/dist/data/TaskProgress.cjs +13 -7
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +3 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +13 -7
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +52 -295
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js +47 -290
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
- package/dist/data/diagnostics/MetricTile.cjs +44 -0
- package/dist/data/diagnostics/MetricTile.cjs.map +1 -0
- package/dist/data/diagnostics/MetricTile.d.ts +13 -0
- package/dist/data/diagnostics/MetricTile.d.ts.map +1 -0
- package/dist/data/diagnostics/MetricTile.js +44 -0
- package/dist/data/diagnostics/MetricTile.js.map +1 -0
- package/dist/data/diagnostics/StackDumpView.cjs +227 -0
- package/dist/data/diagnostics/StackDumpView.cjs.map +1 -0
- package/dist/data/diagnostics/StackDumpView.d.ts +53 -0
- package/dist/data/diagnostics/StackDumpView.d.ts.map +1 -0
- package/dist/data/diagnostics/StackDumpView.js +227 -0
- package/dist/data/diagnostics/StackDumpView.js.map +1 -0
- package/dist/data/diagnostics/fixtures.d.ts +1 -0
- package/dist/data/diagnostics/fixtures.d.ts.map +1 -1
- package/dist/data/diagnostics/metric-tone.cjs +18 -0
- package/dist/data/diagnostics/metric-tone.cjs.map +1 -0
- package/dist/data/diagnostics/metric-tone.d.ts +6 -0
- package/dist/data/diagnostics/metric-tone.d.ts.map +1 -0
- package/dist/data/diagnostics/metric-tone.js +18 -0
- package/dist/data/diagnostics/metric-tone.js.map +1 -0
- package/dist/data/diagnostics/stacktrace.cjs +44 -0
- package/dist/data/diagnostics/stacktrace.cjs.map +1 -1
- package/dist/data/diagnostics/stacktrace.d.ts +7 -0
- package/dist/data/diagnostics/stacktrace.d.ts.map +1 -1
- package/dist/data/diagnostics/stacktrace.js +44 -0
- package/dist/data/diagnostics/stacktrace.js.map +1 -1
- package/dist/data/diagnostics/types.d.ts +2 -8
- package/dist/data/diagnostics/types.d.ts.map +1 -1
- package/dist/data/lint/LintDetail.cjs +339 -0
- package/dist/data/lint/LintDetail.cjs.map +1 -0
- package/dist/data/lint/LintDetail.d.ts +17 -0
- package/dist/data/lint/LintDetail.d.ts.map +1 -0
- package/dist/data/lint/LintDetail.js +339 -0
- package/dist/data/lint/LintDetail.js.map +1 -0
- package/dist/data/lint/LintFilterBar.cjs +103 -0
- package/dist/data/lint/LintFilterBar.cjs.map +1 -0
- package/dist/data/lint/LintFilterBar.d.ts +16 -0
- package/dist/data/lint/LintFilterBar.d.ts.map +1 -0
- package/dist/data/lint/LintFilterBar.js +103 -0
- package/dist/data/lint/LintFilterBar.js.map +1 -0
- package/dist/data/lint/LintResults.cjs +144 -0
- package/dist/data/lint/LintResults.cjs.map +1 -0
- package/dist/data/lint/LintResults.d.ts +39 -0
- package/dist/data/lint/LintResults.d.ts.map +1 -0
- package/dist/data/lint/LintResults.fixtures.d.ts +10 -0
- package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -0
- package/dist/data/lint/LintResults.js +144 -0
- package/dist/data/lint/LintResults.js.map +1 -0
- package/dist/data/lint/LintTreeNode.cjs +66 -0
- package/dist/data/lint/LintTreeNode.cjs.map +1 -0
- package/dist/data/lint/LintTreeNode.d.ts +7 -0
- package/dist/data/lint/LintTreeNode.d.ts.map +1 -0
- package/dist/data/lint/LintTreeNode.js +66 -0
- package/dist/data/lint/LintTreeNode.js.map +1 -0
- package/dist/data/lint/actions.cjs +195 -0
- package/dist/data/lint/actions.cjs.map +1 -0
- package/dist/data/lint/actions.d.ts +29 -0
- package/dist/data/lint/actions.d.ts.map +1 -0
- package/dist/data/lint/actions.js +195 -0
- package/dist/data/lint/actions.js.map +1 -0
- package/dist/data/lint/grouping-options.cjs +14 -0
- package/dist/data/lint/grouping-options.cjs.map +1 -0
- package/dist/data/lint/grouping-options.d.ts +9 -0
- package/dist/data/lint/grouping-options.d.ts.map +1 -0
- package/dist/data/lint/grouping-options.js +14 -0
- package/dist/data/lint/grouping-options.js.map +1 -0
- package/dist/data/lint/grouping.cjs +450 -0
- package/dist/data/lint/grouping.cjs.map +1 -0
- package/dist/data/lint/grouping.d.ts +10 -0
- package/dist/data/lint/grouping.d.ts.map +1 -0
- package/dist/data/lint/grouping.js +450 -0
- package/dist/data/lint/grouping.js.map +1 -0
- package/dist/data/lint/index.d.ts +10 -0
- package/dist/data/lint/index.d.ts.map +1 -0
- package/dist/data/lint/paths.cjs +35 -0
- package/dist/data/lint/paths.cjs.map +1 -0
- package/dist/data/lint/paths.d.ts +13 -0
- package/dist/data/lint/paths.d.ts.map +1 -0
- package/dist/data/lint/paths.js +35 -0
- package/dist/data/lint/paths.js.map +1 -0
- package/dist/data/lint/stats.cjs +76 -0
- package/dist/data/lint/stats.cjs.map +1 -0
- package/dist/data/lint/stats.d.ts +19 -0
- package/dist/data/lint/stats.d.ts.map +1 -0
- package/dist/data/lint/stats.js +76 -0
- package/dist/data/lint/stats.js.map +1 -0
- package/dist/data/lint/types.cjs +16 -0
- package/dist/data/lint/types.cjs.map +1 -0
- package/dist/data/lint/types.d.ts +93 -0
- package/dist/data/lint/types.d.ts.map +1 -0
- package/dist/data/lint/types.js +16 -0
- package/dist/data/lint/types.js.map +1 -0
- package/dist/data/test-runner/TestAttemptDetail.cjs +113 -0
- package/dist/data/test-runner/TestAttemptDetail.cjs.map +1 -0
- package/dist/data/test-runner/TestAttemptDetail.d.ts +19 -0
- package/dist/data/test-runner/TestAttemptDetail.d.ts.map +1 -0
- package/dist/data/test-runner/TestAttemptDetail.js +113 -0
- package/dist/data/test-runner/TestAttemptDetail.js.map +1 -0
- package/dist/data/test-runner/TestAttempts.cjs +36 -0
- package/dist/data/test-runner/TestAttempts.cjs.map +1 -0
- package/dist/data/test-runner/TestAttempts.d.ts +5 -0
- package/dist/data/test-runner/TestAttempts.d.ts.map +1 -0
- package/dist/data/test-runner/TestAttempts.js +36 -0
- package/dist/data/test-runner/TestAttempts.js.map +1 -0
- package/dist/data/test-runner/TestDetailPanel.cjs +13 -3
- package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.js +14 -4
- package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
- package/dist/data/test-runner/TestFailureDetail.cjs +9 -29
- package/dist/data/test-runner/TestFailureDetail.cjs.map +1 -1
- package/dist/data/test-runner/TestFailureDetail.d.ts +6 -6
- package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
- package/dist/data/test-runner/TestFailureDetail.js +9 -29
- package/dist/data/test-runner/TestFailureDetail.js.map +1 -1
- package/dist/data/test-runner/TestRunSummary.cjs +33 -0
- package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
- package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunSummary.js +34 -1
- package/dist/data/test-runner/TestRunSummary.js.map +1 -1
- package/dist/data/test-runner/TestRunner.cjs +3 -0
- package/dist/data/test-runner/TestRunner.cjs.map +1 -1
- package/dist/data/test-runner/TestRunner.d.ts +8 -1
- package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.js +3 -0
- package/dist/data/test-runner/TestRunner.js.map +1 -1
- package/dist/data/test-runner/TestTreeNode.cjs +3 -1
- package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
- package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
- package/dist/data/test-runner/TestTreeNode.js +3 -1
- package/dist/data/test-runner/TestTreeNode.js.map +1 -1
- package/dist/data/test-runner/adapter.cjs +9 -1
- package/dist/data/test-runner/adapter.cjs.map +1 -1
- package/dist/data/test-runner/adapter.d.ts +5 -0
- package/dist/data/test-runner/adapter.d.ts.map +1 -1
- package/dist/data/test-runner/adapter.js +9 -1
- package/dist/data/test-runner/adapter.js.map +1 -1
- package/dist/data/test-runner/attempts.cjs +62 -0
- package/dist/data/test-runner/attempts.cjs.map +1 -0
- package/dist/data/test-runner/attempts.d.ts +13 -0
- package/dist/data/test-runner/attempts.d.ts.map +1 -0
- package/dist/data/test-runner/attempts.js +62 -0
- package/dist/data/test-runner/attempts.js.map +1 -0
- package/dist/data/test-runner/context.cjs.map +1 -1
- package/dist/data/test-runner/context.d.ts +6 -0
- package/dist/data/test-runner/context.d.ts.map +1 -1
- package/dist/data/test-runner/context.js.map +1 -1
- package/dist/data/test-runner/index.d.ts +5 -1
- package/dist/data/test-runner/index.d.ts.map +1 -1
- package/dist/data/test-runner/marks.cjs +2 -0
- package/dist/data/test-runner/marks.cjs.map +1 -1
- package/dist/data/test-runner/marks.d.ts.map +1 -1
- package/dist/data/test-runner/marks.js +2 -0
- package/dist/data/test-runner/marks.js.map +1 -1
- package/dist/data/test-runner/process-metrics.cjs +15 -0
- package/dist/data/test-runner/process-metrics.cjs.map +1 -0
- package/dist/data/test-runner/process-metrics.d.ts +22 -0
- package/dist/data/test-runner/process-metrics.d.ts.map +1 -0
- package/dist/data/test-runner/process-metrics.js +15 -0
- package/dist/data/test-runner/process-metrics.js.map +1 -0
- package/dist/data/test-runner/status.cjs +11 -3
- package/dist/data/test-runner/status.cjs.map +1 -1
- package/dist/data/test-runner/status.d.ts +3 -1
- package/dist/data/test-runner/status.d.ts.map +1 -1
- package/dist/data/test-runner/status.js +11 -3
- package/dist/data/test-runner/status.js.map +1 -1
- package/dist/data/test-runner/types.d.ts +14 -0
- package/dist/data/test-runner/types.d.ts.map +1 -1
- package/dist/data/traces/GoProfileView.cjs +176 -0
- package/dist/data/traces/GoProfileView.cjs.map +1 -0
- package/dist/data/traces/GoProfileView.d.ts +30 -0
- package/dist/data/traces/GoProfileView.d.ts.map +1 -0
- package/dist/data/traces/GoProfileView.js +176 -0
- package/dist/data/traces/GoProfileView.js.map +1 -0
- package/dist/data/traces/ProcessFacetTable.cjs +79 -0
- package/dist/data/traces/ProcessFacetTable.cjs.map +1 -0
- package/dist/data/traces/ProcessFacetTable.d.ts +21 -0
- package/dist/data/traces/ProcessFacetTable.d.ts.map +1 -0
- package/dist/data/traces/ProcessFacetTable.js +79 -0
- package/dist/data/traces/ProcessFacetTable.js.map +1 -0
- package/dist/data/traces/ProcessRecordViews.cjs +41 -0
- package/dist/data/traces/ProcessRecordViews.cjs.map +1 -0
- package/dist/data/traces/ProcessRecordViews.d.ts +16 -0
- package/dist/data/traces/ProcessRecordViews.d.ts.map +1 -0
- package/dist/data/traces/ProcessRecordViews.js +41 -0
- package/dist/data/traces/ProcessRecordViews.js.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.cjs +316 -0
- package/dist/data/traces/ProcessTraceDetail.cjs.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.d.ts +39 -0
- package/dist/data/traces/ProcessTraceDetail.d.ts.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.js +316 -0
- package/dist/data/traces/ProcessTraceDetail.js.map +1 -0
- package/dist/data/traces/ProcessTraceTree.cjs +135 -0
- package/dist/data/traces/ProcessTraceTree.cjs.map +1 -0
- package/dist/data/traces/ProcessTraceTree.d.ts +41 -0
- package/dist/data/traces/ProcessTraceTree.d.ts.map +1 -0
- package/dist/data/traces/ProcessTraceTree.js +135 -0
- package/dist/data/traces/ProcessTraceTree.js.map +1 -0
- package/dist/data/traces/Sparkline.cjs +45 -0
- package/dist/data/traces/Sparkline.cjs.map +1 -0
- package/dist/data/traces/Sparkline.d.ts +29 -0
- package/dist/data/traces/Sparkline.d.ts.map +1 -0
- package/dist/data/traces/Sparkline.js +45 -0
- package/dist/data/traces/Sparkline.js.map +1 -0
- package/dist/data/traces/SqlTraceTable.cjs +104 -0
- package/dist/data/traces/SqlTraceTable.cjs.map +1 -0
- package/dist/data/traces/SqlTraceTable.d.ts +19 -0
- package/dist/data/traces/SqlTraceTable.d.ts.map +1 -0
- package/dist/data/traces/SqlTraceTable.js +104 -0
- package/dist/data/traces/SqlTraceTable.js.map +1 -0
- package/dist/data/traces/TerminalCastPlayer.cjs +162 -0
- package/dist/data/traces/TerminalCastPlayer.cjs.map +1 -0
- package/dist/data/traces/TerminalCastPlayer.js +162 -0
- package/dist/data/traces/TerminalCastPlayer.js.map +1 -0
- package/dist/data/traces/TraceHarView.cjs +15 -0
- package/dist/data/traces/TraceHarView.cjs.map +1 -0
- package/dist/data/traces/TraceHarView.js +15 -0
- package/dist/data/traces/TraceHarView.js.map +1 -0
- package/dist/data/traces/TraceView.cjs +63 -0
- package/dist/data/traces/TraceView.cjs.map +1 -0
- package/dist/data/traces/TraceView.d.ts +20 -0
- package/dist/data/traces/TraceView.d.ts.map +1 -0
- package/dist/data/traces/TraceView.js +63 -0
- package/dist/data/traces/TraceView.js.map +1 -0
- package/dist/data/traces/TraceWindowList.cjs +117 -0
- package/dist/data/traces/TraceWindowList.cjs.map +1 -0
- package/dist/data/traces/TraceWindowList.d.ts +48 -0
- package/dist/data/traces/TraceWindowList.d.ts.map +1 -0
- package/dist/data/traces/TraceWindowList.js +117 -0
- package/dist/data/traces/TraceWindowList.js.map +1 -0
- package/dist/data/traces/cast.cjs +81 -0
- package/dist/data/traces/cast.cjs.map +1 -0
- package/dist/data/traces/cast.js +81 -0
- package/dist/data/traces/cast.js.map +1 -0
- package/dist/data/traces/fixtures.d.ts +25 -1
- package/dist/data/traces/fixtures.d.ts.map +1 -1
- package/dist/data/traces/har-adapter.cjs +83 -0
- package/dist/data/traces/har-adapter.cjs.map +1 -0
- package/dist/data/traces/har-adapter.js +83 -0
- package/dist/data/traces/har-adapter.js.map +1 -0
- package/dist/data/traces/index.d.ts +19 -0
- package/dist/data/traces/index.d.ts.map +1 -0
- package/dist/data/traces/process-facets.cjs +48 -0
- package/dist/data/traces/process-facets.cjs.map +1 -0
- package/dist/data/traces/process-facets.d.ts +38 -0
- package/dist/data/traces/process-facets.d.ts.map +1 -0
- package/dist/data/traces/process-facets.js +48 -0
- package/dist/data/traces/process-facets.js.map +1 -0
- package/dist/data/traces/process-tree.cjs +85 -0
- package/dist/data/traces/process-tree.cjs.map +1 -0
- package/dist/data/traces/process-tree.d.ts +40 -0
- package/dist/data/traces/process-tree.d.ts.map +1 -0
- package/dist/data/traces/process-tree.js +85 -0
- package/dist/data/traces/process-tree.js.map +1 -0
- package/dist/data/traces/profile-aggregate.cjs +78 -0
- package/dist/data/traces/profile-aggregate.cjs.map +1 -0
- package/dist/data/traces/profile-aggregate.d.ts +41 -0
- package/dist/data/traces/profile-aggregate.d.ts.map +1 -0
- package/dist/data/traces/profile-aggregate.js +78 -0
- package/dist/data/traces/profile-aggregate.js.map +1 -0
- package/dist/data/traces/sql-trace.cjs +39 -0
- package/dist/data/traces/sql-trace.cjs.map +1 -0
- package/dist/data/traces/sql-trace.d.ts +31 -0
- package/dist/data/traces/sql-trace.d.ts.map +1 -0
- package/dist/data/traces/sql-trace.js +39 -0
- package/dist/data/traces/sql-trace.js.map +1 -0
- package/dist/data/traces/stack-checkpoints.cjs +22 -0
- package/dist/data/traces/stack-checkpoints.cjs.map +1 -0
- package/dist/data/traces/stack-checkpoints.d.ts +18 -0
- package/dist/data/traces/stack-checkpoints.d.ts.map +1 -0
- package/dist/data/traces/stack-checkpoints.js +22 -0
- package/dist/data/traces/stack-checkpoints.js.map +1 -0
- package/dist/data/traces/terminal-screen.cjs +270 -0
- package/dist/data/traces/terminal-screen.cjs.map +1 -0
- package/dist/data/traces/terminal-screen.js +270 -0
- package/dist/data/traces/terminal-screen.js.map +1 -0
- package/dist/data/traces/terminal-timeline.cjs +48 -0
- package/dist/data/traces/terminal-timeline.cjs.map +1 -0
- package/dist/data/traces/terminal-timeline.js +48 -0
- package/dist/data/traces/terminal-timeline.js.map +1 -0
- package/dist/data/traces/types.d.ts +121 -8
- package/dist/data/traces/types.d.ts.map +1 -1
- package/dist/data/verification/adapters.cjs +1 -0
- package/dist/data/verification/adapters.cjs.map +1 -1
- package/dist/data/verification/adapters.d.ts.map +1 -1
- package/dist/data/verification/adapters.js +1 -0
- package/dist/data/verification/adapters.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.cjs.map +1 -1
- package/dist/data/version-info.js +3 -3
- package/dist/data/version-info.js.map +1 -1
- package/dist/data.cjs +105 -5
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +5 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +101 -1
- package/dist/data.js.map +1 -1
- package/dist/index.cjs +107 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +101 -1
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const filterState = require("../test-runner/filterState.cjs");
|
|
4
|
+
const routePath = require("../test-runner/routePath.cjs");
|
|
5
|
+
const paths = require("./paths.cjs");
|
|
6
|
+
const stats = require("./stats.cjs");
|
|
7
|
+
const NO_RULE = "(no rule)";
|
|
8
|
+
const SUMMARY_FILE_LIMIT = 5;
|
|
9
|
+
function ruleKeyFor(v) {
|
|
10
|
+
var _a;
|
|
11
|
+
return ((_a = v.rule) == null ? void 0 : _a.method) || NO_RULE;
|
|
12
|
+
}
|
|
13
|
+
function byLine(violations) {
|
|
14
|
+
return violations.slice().sort((a, b) => (a.line ?? 0) - (b.line ?? 0));
|
|
15
|
+
}
|
|
16
|
+
function firstLine(s) {
|
|
17
|
+
const idx = s.indexOf("\n");
|
|
18
|
+
return idx === -1 ? s : s.slice(0, idx);
|
|
19
|
+
}
|
|
20
|
+
function groupBy(items, key) {
|
|
21
|
+
const out = /* @__PURE__ */ new Map();
|
|
22
|
+
for (const item of items) {
|
|
23
|
+
const list = out.get(key(item));
|
|
24
|
+
if (list) list.push(item);
|
|
25
|
+
else out.set(key(item), [item]);
|
|
26
|
+
}
|
|
27
|
+
return out;
|
|
28
|
+
}
|
|
29
|
+
function sortedKeys(map) {
|
|
30
|
+
return Array.from(map.keys()).sort();
|
|
31
|
+
}
|
|
32
|
+
function flattenLint(results, filters) {
|
|
33
|
+
const visible = results.filter((r) => filterState.matchesFilterState(r.linter, filters.linter));
|
|
34
|
+
const multiRoot = new Set(visible.flatMap((r) => r.work_dir ? [paths.normalizeLintPath(r.work_dir)] : [])).size > 1;
|
|
35
|
+
const out = [];
|
|
36
|
+
for (const result of visible) {
|
|
37
|
+
for (const v of result.violations ?? []) {
|
|
38
|
+
if (!filterState.matchesFilterState(stats.severityOf(v), filters.severity)) continue;
|
|
39
|
+
const rawFile = paths.relPath(v.file, result.work_dir);
|
|
40
|
+
const file = paths.decorateLintFile(rawFile, result.work_dir, multiRoot);
|
|
41
|
+
out.push({
|
|
42
|
+
linter: result.linter,
|
|
43
|
+
result,
|
|
44
|
+
v: { ...v, raw_file: rawFile, file },
|
|
45
|
+
file,
|
|
46
|
+
rawFile,
|
|
47
|
+
workDir: result.work_dir
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
function linterMetaOf(results) {
|
|
54
|
+
const meta = /* @__PURE__ */ new Map();
|
|
55
|
+
for (const r of results) if (!meta.has(r.linter)) meta.set(r.linter, r);
|
|
56
|
+
return meta;
|
|
57
|
+
}
|
|
58
|
+
function newTrie() {
|
|
59
|
+
return { name: "", path: void 0, rawPath: "", folders: /* @__PURE__ */ new Map(), leaves: /* @__PURE__ */ new Map() };
|
|
60
|
+
}
|
|
61
|
+
function trieLeaf(root, file, rawFile, create) {
|
|
62
|
+
const segments = paths.collapsedPathSegments(file);
|
|
63
|
+
const rawSegments = paths.collapsedPathSegments(rawFile);
|
|
64
|
+
if (segments.length === 0 || rawSegments.length === 0) {
|
|
65
|
+
throw new Error(`lint: cannot place violation, empty path (file=${JSON.stringify(file)}, raw=${JSON.stringify(rawFile)})`);
|
|
66
|
+
}
|
|
67
|
+
const folderSegments = segments.slice(0, -1);
|
|
68
|
+
const rawFolderSegments = rawSegments.slice(0, -1);
|
|
69
|
+
const rawOffset = folderSegments.length - rawFolderSegments.length;
|
|
70
|
+
let current = root;
|
|
71
|
+
folderSegments.forEach((segment, i) => {
|
|
72
|
+
let child = current.folders.get(segment);
|
|
73
|
+
if (!child) {
|
|
74
|
+
const rawCount = Math.max(0, Math.min(rawFolderSegments.length, i + 1 - rawOffset));
|
|
75
|
+
child = {
|
|
76
|
+
name: segment,
|
|
77
|
+
path: current.path ? `${current.path}/${segment}` : segment,
|
|
78
|
+
rawPath: rawFolderSegments.slice(0, rawCount).join("/"),
|
|
79
|
+
folders: /* @__PURE__ */ new Map(),
|
|
80
|
+
leaves: /* @__PURE__ */ new Map()
|
|
81
|
+
};
|
|
82
|
+
current.folders.set(segment, child);
|
|
83
|
+
}
|
|
84
|
+
current = child;
|
|
85
|
+
});
|
|
86
|
+
const basename = segments[segments.length - 1];
|
|
87
|
+
let leaf = current.leaves.get(basename);
|
|
88
|
+
if (!leaf) {
|
|
89
|
+
leaf = create();
|
|
90
|
+
current.leaves.set(basename, leaf);
|
|
91
|
+
}
|
|
92
|
+
return leaf;
|
|
93
|
+
}
|
|
94
|
+
function container(name, kind, children) {
|
|
95
|
+
const failed = children.some((c) => c.failed);
|
|
96
|
+
return { name, kind, children, failed, passed: !failed, skipped: false };
|
|
97
|
+
}
|
|
98
|
+
function uniqueWorkDir(children) {
|
|
99
|
+
const dirs = new Set(children.flatMap((c) => c.work_dir ? [c.work_dir] : []));
|
|
100
|
+
return dirs.size === 1 ? Array.from(dirs)[0] : void 0;
|
|
101
|
+
}
|
|
102
|
+
function withNoFileViolations(node, noFile) {
|
|
103
|
+
if (noFile.length === 0) return node;
|
|
104
|
+
const failed = node.failed || stats.worstSeverity(noFile) !== "info";
|
|
105
|
+
return { ...node, noFileViolations: byLine(noFile), failed, passed: !failed };
|
|
106
|
+
}
|
|
107
|
+
function violationLeaf(args) {
|
|
108
|
+
const failed = stats.worstSeverity(args.violations) !== "info";
|
|
109
|
+
return {
|
|
110
|
+
name: args.name,
|
|
111
|
+
kind: args.kind,
|
|
112
|
+
file: args.file,
|
|
113
|
+
target_path: args.rawFile,
|
|
114
|
+
work_dir: args.workDir,
|
|
115
|
+
linterName: args.linterName,
|
|
116
|
+
violations: byLine(args.violations),
|
|
117
|
+
failed,
|
|
118
|
+
passed: !failed,
|
|
119
|
+
skipped: false
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function linterNode(linterName, result, children, noFile = []) {
|
|
123
|
+
return withNoFileViolations({ ...container(linterName, "linter", children), linter: result, linterName }, noFile);
|
|
124
|
+
}
|
|
125
|
+
function linterErrorNode(result) {
|
|
126
|
+
const message = stats.linterErrorMessage(result);
|
|
127
|
+
return {
|
|
128
|
+
name: firstLine(message),
|
|
129
|
+
kind: "linter-error",
|
|
130
|
+
linterName: result.linter,
|
|
131
|
+
linter: result,
|
|
132
|
+
work_dir: result.work_dir,
|
|
133
|
+
failed: true,
|
|
134
|
+
passed: false,
|
|
135
|
+
skipped: false,
|
|
136
|
+
message
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function fileNodes(trie, linterName, ruleName) {
|
|
140
|
+
const folders = sortedKeys(trie.folders).map((key) => {
|
|
141
|
+
const folder = trie.folders.get(key);
|
|
142
|
+
const node = container(folder.name, "lint-folder", fileNodes(folder, linterName, ruleName));
|
|
143
|
+
return {
|
|
144
|
+
...node,
|
|
145
|
+
file: folder.path,
|
|
146
|
+
target_path: folder.rawPath,
|
|
147
|
+
linterName,
|
|
148
|
+
...ruleName ? { ruleName } : {},
|
|
149
|
+
work_dir: uniqueWorkDir(node.children)
|
|
150
|
+
};
|
|
151
|
+
});
|
|
152
|
+
const files = sortedKeys(trie.leaves).map((key) => {
|
|
153
|
+
const bucket = trie.leaves.get(key);
|
|
154
|
+
const fullPath = trie.path ? `${trie.path}/${key}` : key;
|
|
155
|
+
const leaf = violationLeaf({
|
|
156
|
+
name: key,
|
|
157
|
+
kind: "lint-file",
|
|
158
|
+
file: fullPath,
|
|
159
|
+
rawFile: bucket.rawFile,
|
|
160
|
+
linterName,
|
|
161
|
+
violations: bucket.violations,
|
|
162
|
+
workDir: bucket.workDir
|
|
163
|
+
});
|
|
164
|
+
return ruleName ? { ...leaf, ruleName } : leaf;
|
|
165
|
+
});
|
|
166
|
+
return [...folders, ...files];
|
|
167
|
+
}
|
|
168
|
+
function fileLinterNodes(trie, linterMeta) {
|
|
169
|
+
const folders = sortedKeys(trie.folders).map((key) => {
|
|
170
|
+
const folder = trie.folders.get(key);
|
|
171
|
+
const node = container(folder.name, "lint-folder", fileLinterNodes(folder, linterMeta));
|
|
172
|
+
return { ...node, file: folder.path, target_path: folder.rawPath, work_dir: uniqueWorkDir(node.children) };
|
|
173
|
+
});
|
|
174
|
+
const files = sortedKeys(trie.leaves).map((key) => {
|
|
175
|
+
var _a;
|
|
176
|
+
const linters = trie.leaves.get(key);
|
|
177
|
+
const fullPath = trie.path ? `${trie.path}/${key}` : key;
|
|
178
|
+
const linterDrafts = sortedKeys(linters).map((linterName) => {
|
|
179
|
+
var _a2;
|
|
180
|
+
const { workDir, rules } = linters.get(linterName);
|
|
181
|
+
const ruleLeaves = sortedKeys(rules).map((rule) => {
|
|
182
|
+
var _a3;
|
|
183
|
+
const violations = rules.get(rule);
|
|
184
|
+
return {
|
|
185
|
+
...violationLeaf({
|
|
186
|
+
name: rule,
|
|
187
|
+
kind: "lint-rule",
|
|
188
|
+
file: fullPath,
|
|
189
|
+
rawFile: ((_a3 = violations[0]) == null ? void 0 : _a3.raw_file) ?? fullPath,
|
|
190
|
+
linterName,
|
|
191
|
+
violations,
|
|
192
|
+
workDir
|
|
193
|
+
}),
|
|
194
|
+
ruleName: rule
|
|
195
|
+
};
|
|
196
|
+
});
|
|
197
|
+
return {
|
|
198
|
+
...linterNode(linterName, linterMeta.get(linterName), ruleLeaves),
|
|
199
|
+
file: fullPath,
|
|
200
|
+
target_path: (_a2 = ruleLeaves[0]) == null ? void 0 : _a2.target_path,
|
|
201
|
+
work_dir: workDir
|
|
202
|
+
};
|
|
203
|
+
});
|
|
204
|
+
return {
|
|
205
|
+
...container(key, "lint-file", linterDrafts),
|
|
206
|
+
file: fullPath,
|
|
207
|
+
target_path: (_a = linterDrafts[0]) == null ? void 0 : _a.target_path,
|
|
208
|
+
work_dir: uniqueWorkDir(linterDrafts)
|
|
209
|
+
};
|
|
210
|
+
});
|
|
211
|
+
return [...folders, ...files];
|
|
212
|
+
}
|
|
213
|
+
function fileTrieFor(flat) {
|
|
214
|
+
const trie = newTrie();
|
|
215
|
+
for (const f of flat) {
|
|
216
|
+
if (!f.file) continue;
|
|
217
|
+
trieLeaf(trie, f.file, f.rawFile ?? f.file, () => ({
|
|
218
|
+
rawFile: f.rawFile ?? f.file,
|
|
219
|
+
workDir: f.workDir,
|
|
220
|
+
violations: []
|
|
221
|
+
})).violations.push(f.v);
|
|
222
|
+
}
|
|
223
|
+
return trie;
|
|
224
|
+
}
|
|
225
|
+
function groupByLinterRuleFile(results, filters) {
|
|
226
|
+
const meta = linterMetaOf(results);
|
|
227
|
+
const byLinter = groupBy(flattenLint(results, filters), (f) => f.linter);
|
|
228
|
+
return Array.from(byLinter.keys()).sort().map((linterName) => {
|
|
229
|
+
const byRule = groupBy(byLinter.get(linterName), (f) => ruleKeyFor(f.v));
|
|
230
|
+
const ruleNodes = Array.from(byRule.keys()).sort().map((rule) => {
|
|
231
|
+
var _a;
|
|
232
|
+
const flats = byRule.get(rule);
|
|
233
|
+
const children = fileNodes(fileTrieFor(flats), linterName, rule);
|
|
234
|
+
const node = container(rule, "lint-rule-group", children);
|
|
235
|
+
return withNoFileViolations(
|
|
236
|
+
{
|
|
237
|
+
...node,
|
|
238
|
+
linterName,
|
|
239
|
+
ruleName: rule,
|
|
240
|
+
work_dir: uniqueWorkDir(children) ?? ((_a = meta.get(linterName)) == null ? void 0 : _a.work_dir)
|
|
241
|
+
},
|
|
242
|
+
flats.filter((f) => !f.file).map((f) => f.v)
|
|
243
|
+
);
|
|
244
|
+
});
|
|
245
|
+
return linterNode(linterName, meta.get(linterName), ruleNodes);
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
function groupByLinterFile(results, filters) {
|
|
249
|
+
const meta = linterMetaOf(results);
|
|
250
|
+
const byLinter = groupBy(flattenLint(results, filters), (f) => f.linter);
|
|
251
|
+
return Array.from(byLinter.keys()).sort().map((linterName) => {
|
|
252
|
+
const flats = byLinter.get(linterName);
|
|
253
|
+
return linterNode(
|
|
254
|
+
linterName,
|
|
255
|
+
meta.get(linterName),
|
|
256
|
+
fileNodes(fileTrieFor(flats), linterName),
|
|
257
|
+
flats.filter((f) => !f.file).map((f) => f.v)
|
|
258
|
+
);
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
function groupByFileLinterRule(results, filters) {
|
|
262
|
+
const meta = linterMetaOf(results);
|
|
263
|
+
const flat = flattenLint(results, filters);
|
|
264
|
+
const trie = newTrie();
|
|
265
|
+
for (const f of flat) {
|
|
266
|
+
if (!f.file) continue;
|
|
267
|
+
const linters = trieLeaf(trie, f.file, f.rawFile ?? f.file, () => /* @__PURE__ */ new Map());
|
|
268
|
+
let entry = linters.get(f.linter);
|
|
269
|
+
if (!entry) {
|
|
270
|
+
entry = { workDir: f.workDir, rules: /* @__PURE__ */ new Map() };
|
|
271
|
+
linters.set(f.linter, entry);
|
|
272
|
+
}
|
|
273
|
+
const rule = ruleKeyFor(f.v);
|
|
274
|
+
entry.rules.set(rule, [...entry.rules.get(rule) ?? [], f.v]);
|
|
275
|
+
}
|
|
276
|
+
const fileless = groupBy(flat.filter((f) => !f.file), (f) => f.linter);
|
|
277
|
+
const filelessNodes = Array.from(fileless.keys()).sort().map((linterName) => {
|
|
278
|
+
var _a;
|
|
279
|
+
const byRule = groupBy(fileless.get(linterName), (f) => ruleKeyFor(f.v));
|
|
280
|
+
const workDir = (_a = meta.get(linterName)) == null ? void 0 : _a.work_dir;
|
|
281
|
+
const leaves = Array.from(byRule.keys()).sort().map((rule) => ({
|
|
282
|
+
...violationLeaf({
|
|
283
|
+
name: rule,
|
|
284
|
+
kind: "lint-rule",
|
|
285
|
+
file: "",
|
|
286
|
+
rawFile: "",
|
|
287
|
+
linterName,
|
|
288
|
+
violations: byRule.get(rule).map((f) => f.v),
|
|
289
|
+
workDir
|
|
290
|
+
}),
|
|
291
|
+
ruleName: rule,
|
|
292
|
+
file: void 0,
|
|
293
|
+
target_path: void 0
|
|
294
|
+
}));
|
|
295
|
+
return linterNode(linterName, meta.get(linterName), leaves);
|
|
296
|
+
});
|
|
297
|
+
return [...fileLinterNodes(trie, meta), ...filelessNodes];
|
|
298
|
+
}
|
|
299
|
+
function summaryFileLabel(file, violations) {
|
|
300
|
+
if (!file) return "(no file)";
|
|
301
|
+
if (violations.length > 1) return `${file} (${violations.length})`;
|
|
302
|
+
const v = violations[0];
|
|
303
|
+
if (v == null ? void 0 : v.line) return v.column ? `${file}:${v.line}:${v.column}` : `${file}:${v.line}`;
|
|
304
|
+
return file;
|
|
305
|
+
}
|
|
306
|
+
function summaryRuleNode(rule, linterName, flats) {
|
|
307
|
+
var _a;
|
|
308
|
+
const byFile = groupBy(flats, (f) => f.file ?? "");
|
|
309
|
+
const keys = Array.from(byFile.keys());
|
|
310
|
+
const files = keys.slice(0, SUMMARY_FILE_LIMIT).map((key) => {
|
|
311
|
+
const group = byFile.get(key);
|
|
312
|
+
return {
|
|
313
|
+
...violationLeaf({
|
|
314
|
+
name: summaryFileLabel(group[0].file, group.map((f) => f.v)),
|
|
315
|
+
kind: "lint-file",
|
|
316
|
+
file: group[0].file ?? "",
|
|
317
|
+
rawFile: group[0].rawFile ?? "",
|
|
318
|
+
linterName,
|
|
319
|
+
violations: group.map((f) => f.v),
|
|
320
|
+
workDir: group[0].workDir
|
|
321
|
+
}),
|
|
322
|
+
file: group[0].file,
|
|
323
|
+
target_path: group[0].rawFile,
|
|
324
|
+
ruleName: rule
|
|
325
|
+
};
|
|
326
|
+
});
|
|
327
|
+
const remaining = keys.length - files.length;
|
|
328
|
+
if (remaining > 0) {
|
|
329
|
+
files.push({
|
|
330
|
+
name: `… ${remaining} more file${remaining === 1 ? "" : "s"}`,
|
|
331
|
+
kind: "lint-file",
|
|
332
|
+
linterName,
|
|
333
|
+
ruleName: rule,
|
|
334
|
+
failed: false,
|
|
335
|
+
passed: true,
|
|
336
|
+
skipped: false
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
const firstMessage = (_a = flats.find((f) => f.v.message)) == null ? void 0 : _a.v.message;
|
|
340
|
+
const name = firstMessage ? `${rule} (${flats.length}) — ${firstMessage}` : `${rule} (${flats.length})`;
|
|
341
|
+
return { ...container(name, "lint-rule-group", files), linterName, ruleName: rule };
|
|
342
|
+
}
|
|
343
|
+
function groupBySummary(results, filters) {
|
|
344
|
+
const meta = linterMetaOf(results);
|
|
345
|
+
const flatByLinter = groupBy(flattenLint(results, filters), (f) => f.linter);
|
|
346
|
+
const visible = results.filter((r) => filterState.matchesFilterState(r.linter, filters.linter));
|
|
347
|
+
const skipped = new Map(visible.filter((r) => r.skipped).map((r) => [r.linter, r.error || "skipped"]));
|
|
348
|
+
return Array.from(new Set(visible.map((r) => r.linter))).sort().map((linterName) => {
|
|
349
|
+
const flats = flatByLinter.get(linterName) ?? [];
|
|
350
|
+
if (flats.length === 0 && skipped.has(linterName)) {
|
|
351
|
+
return {
|
|
352
|
+
name: linterName,
|
|
353
|
+
kind: "linter",
|
|
354
|
+
linter: meta.get(linterName),
|
|
355
|
+
linterName,
|
|
356
|
+
skipped: true,
|
|
357
|
+
passed: false,
|
|
358
|
+
failed: false,
|
|
359
|
+
message: `skipped: ${skipped.get(linterName)}`
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
const byRule = groupBy(flats, (f) => ruleKeyFor(f.v));
|
|
363
|
+
const ruleOrder = Array.from(byRule.keys()).sort(
|
|
364
|
+
(a, b) => byRule.get(b).length - byRule.get(a).length || a.localeCompare(b)
|
|
365
|
+
);
|
|
366
|
+
return linterNode(
|
|
367
|
+
linterName,
|
|
368
|
+
meta.get(linterName),
|
|
369
|
+
ruleOrder.map((rule) => summaryRuleNode(rule, linterName, byRule.get(rule)))
|
|
370
|
+
);
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
function withLinterErrors(roots, results, filters) {
|
|
374
|
+
const errors = groupBy(
|
|
375
|
+
results.filter((r) => stats.isLinterErrored(r) && filterState.matchesFilterState(r.linter, filters.linter)),
|
|
376
|
+
(r) => r.linter
|
|
377
|
+
);
|
|
378
|
+
if (errors.size === 0) return roots;
|
|
379
|
+
const linters = new Map(roots.filter((n) => n.kind === "linter").map((n) => [n.name, n]));
|
|
380
|
+
for (const [name, failed] of errors) {
|
|
381
|
+
const errorNodes = failed.map(linterErrorNode);
|
|
382
|
+
const existing = linters.get(name);
|
|
383
|
+
linters.set(
|
|
384
|
+
name,
|
|
385
|
+
existing ? { ...existing, children: [...errorNodes, ...existing.children ?? []], failed: true, passed: false } : linterNode(name, failed[0], errorNodes)
|
|
386
|
+
);
|
|
387
|
+
}
|
|
388
|
+
const others = roots.filter((n) => n.kind !== "linter");
|
|
389
|
+
return [...others, ...sortedKeys(linters).map((name) => linters.get(name))];
|
|
390
|
+
}
|
|
391
|
+
function joinChainNames(parent, child) {
|
|
392
|
+
const p = parent.trim();
|
|
393
|
+
const c = child.trim();
|
|
394
|
+
return p && c ? `${p} > ${c}` : p || c;
|
|
395
|
+
}
|
|
396
|
+
function collapseFolderChains(nodes) {
|
|
397
|
+
return nodes.map((node) => {
|
|
398
|
+
if (!node.children || node.children.length === 0) return node;
|
|
399
|
+
const children = collapseFolderChains(node.children);
|
|
400
|
+
if (children.length === 1 && node.kind === "lint-folder") {
|
|
401
|
+
const [child] = children;
|
|
402
|
+
return { ...child, name: joinChainNames(node.name, child.name) };
|
|
403
|
+
}
|
|
404
|
+
return { ...node, children };
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
function annotateRoutePaths(nodes, parentSegments = []) {
|
|
408
|
+
const slugs = nodes.map((n) => routePath.slugify(n.name));
|
|
409
|
+
const totals = groupBy(slugs, (s) => s);
|
|
410
|
+
const seen = /* @__PURE__ */ new Map();
|
|
411
|
+
return nodes.map((node, i) => {
|
|
412
|
+
const slug = slugs[i];
|
|
413
|
+
const ordinal = (seen.get(slug) ?? 0) + 1;
|
|
414
|
+
seen.set(slug, ordinal);
|
|
415
|
+
const segment = totals.get(slug).length > 1 ? `${slug}~${ordinal}` : slug;
|
|
416
|
+
const segments = [...parentSegments, segment];
|
|
417
|
+
const { children, ...rest } = node;
|
|
418
|
+
return {
|
|
419
|
+
...rest,
|
|
420
|
+
route_path: segments.join("/"),
|
|
421
|
+
...children ? { children: annotateRoutePaths(children, segments) } : {}
|
|
422
|
+
};
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
const GROUPERS = {
|
|
426
|
+
"linter-rule-file": groupByLinterRuleFile,
|
|
427
|
+
"linter-file": groupByLinterFile,
|
|
428
|
+
"file-linter-rule": groupByFileLinterRule,
|
|
429
|
+
summary: groupBySummary
|
|
430
|
+
};
|
|
431
|
+
function buildLintTree({
|
|
432
|
+
results,
|
|
433
|
+
grouping,
|
|
434
|
+
filters
|
|
435
|
+
}) {
|
|
436
|
+
const grouped = withLinterErrors(GROUPERS[grouping](results, filters), results, filters);
|
|
437
|
+
return annotateRoutePaths(grouping === "summary" ? grouped : collapseFolderChains(grouped));
|
|
438
|
+
}
|
|
439
|
+
function findLintNode(nodes, path) {
|
|
440
|
+
if (!path) return null;
|
|
441
|
+
for (const node of nodes) {
|
|
442
|
+
if (node.route_path === path) return node;
|
|
443
|
+
const found = node.children ? findLintNode(node.children, path) : null;
|
|
444
|
+
if (found) return found;
|
|
445
|
+
}
|
|
446
|
+
return null;
|
|
447
|
+
}
|
|
448
|
+
exports.buildLintTree = buildLintTree;
|
|
449
|
+
exports.findLintNode = findLintNode;
|
|
450
|
+
//# sourceMappingURL=grouping.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping.cjs","sources":["../../../src/data/lint/grouping.ts"],"sourcesContent":["// Turns raw linter results into the selectable tree for each grouping. Ported\n// from gavel's testrunner/ui utils.ts. Differences from the original:\n// - a linter that failed to run is shown under every grouping (gavel only\n// showed it in `summary`), so a broken linter never reads as a clean run;\n// - single-child folder chains are really collapsed (\"pkg > sub > a.go\");\n// gavel's collapser never fired because folder nodes always carry a\n// passed/failed flag;\n// - file-scoped rule leaves in `file-linter-rule` carry their work_dir, so\n// ignore actions on them are not sent without one.\n\nimport { matchesFilterState } from \"../test-runner/filterState\";\nimport { slugify } from \"../test-runner/routePath\";\nimport { collapsedPathSegments, decorateLintFile, normalizeLintPath, relPath } from \"./paths\";\nimport { isLinterErrored, linterErrorMessage, severityOf, worstSeverity } from \"./stats\";\nimport type {\n LintFilters,\n LintGrouping,\n LintNode,\n LinterResult,\n Violation,\n} from \"./types\";\n\ntype Draft = Omit<LintNode, \"route_path\" | \"children\"> & { children?: Draft[] };\n\ntype FlatViolation = {\n linter: string;\n result: LinterResult;\n v: Violation;\n file: string | undefined;\n rawFile: string | undefined;\n workDir: string | undefined;\n};\n\ntype FileBucket = { rawFile: string; workDir: string | undefined; violations: Violation[] };\n\ntype Trie<L> = {\n name: string;\n path: string | undefined;\n rawPath: string;\n folders: Map<string, Trie<L>>;\n leaves: Map<string, L>;\n};\n\nconst NO_RULE = \"(no rule)\";\nconst SUMMARY_FILE_LIMIT = 5;\n\nfunction ruleKeyFor(v: Violation): string {\n return v.rule?.method || NO_RULE;\n}\n\nfunction byLine(violations: readonly Violation[]): Violation[] {\n return violations.slice().sort((a, b) => (a.line ?? 0) - (b.line ?? 0));\n}\n\nfunction firstLine(s: string): string {\n const idx = s.indexOf(\"\\n\");\n return idx === -1 ? s : s.slice(0, idx);\n}\n\nfunction groupBy<T, K>(items: readonly T[], key: (item: T) => K): Map<K, T[]> {\n const out = new Map<K, T[]>();\n for (const item of items) {\n const list = out.get(key(item));\n if (list) list.push(item);\n else out.set(key(item), [item]);\n }\n return out;\n}\n\nfunction sortedKeys<V>(map: Map<string, V>): string[] {\n return Array.from(map.keys()).sort();\n}\n\n// ---------------------------------------------------------------------------\n// Flattening\n\nfunction flattenLint(results: readonly LinterResult[], filters: LintFilters): FlatViolation[] {\n const visible = results.filter((r) => matchesFilterState(r.linter, filters.linter));\n const multiRoot = new Set(visible.flatMap((r) => (r.work_dir ? [normalizeLintPath(r.work_dir)] : []))).size > 1;\n const out: FlatViolation[] = [];\n for (const result of visible) {\n for (const v of result.violations ?? []) {\n if (!matchesFilterState(severityOf(v), filters.severity)) continue;\n const rawFile = relPath(v.file, result.work_dir);\n const file = decorateLintFile(rawFile, result.work_dir, multiRoot);\n out.push({\n linter: result.linter,\n result,\n v: { ...v, raw_file: rawFile, file },\n file,\n rawFile,\n workDir: result.work_dir,\n });\n }\n }\n return out;\n}\n\nfunction linterMetaOf(results: readonly LinterResult[]): Map<string, LinterResult> {\n const meta = new Map<string, LinterResult>();\n for (const r of results) if (!meta.has(r.linter)) meta.set(r.linter, r);\n return meta;\n}\n\n// ---------------------------------------------------------------------------\n// Path trie\n\nfunction newTrie<L>(): Trie<L> {\n return { name: \"\", path: undefined, rawPath: \"\", folders: new Map(), leaves: new Map() };\n}\n\n/** The leaf for `file`, created through `create` on first sight; folders are made on the way. */\nfunction trieLeaf<L>(root: Trie<L>, file: string, rawFile: string, create: () => L): L {\n const segments = collapsedPathSegments(file);\n const rawSegments = collapsedPathSegments(rawFile);\n if (segments.length === 0 || rawSegments.length === 0) {\n throw new Error(`lint: cannot place violation, empty path (file=${JSON.stringify(file)}, raw=${JSON.stringify(rawFile)})`);\n }\n const folderSegments = segments.slice(0, -1);\n const rawFolderSegments = rawSegments.slice(0, -1);\n // The decorated path may carry extra leading segments (the work dir label)\n // that the raw, work_dir-relative path does not.\n const rawOffset = folderSegments.length - rawFolderSegments.length;\n let current = root;\n folderSegments.forEach((segment, i) => {\n let child = current.folders.get(segment);\n if (!child) {\n const rawCount = Math.max(0, Math.min(rawFolderSegments.length, i + 1 - rawOffset));\n child = {\n name: segment,\n path: current.path ? `${current.path}/${segment}` : segment,\n rawPath: rawFolderSegments.slice(0, rawCount).join(\"/\"),\n folders: new Map(),\n leaves: new Map(),\n };\n current.folders.set(segment, child);\n }\n current = child;\n });\n const basename = segments[segments.length - 1]!;\n let leaf = current.leaves.get(basename);\n if (!leaf) {\n leaf = create();\n current.leaves.set(basename, leaf);\n }\n return leaf;\n}\n\n// ---------------------------------------------------------------------------\n// Node builders\n\nfunction container(name: string, kind: Draft[\"kind\"], children: Draft[]): Draft {\n const failed = children.some((c) => c.failed);\n return { name, kind, children, failed, passed: !failed, skipped: false };\n}\n\nfunction uniqueWorkDir(children: readonly Draft[]): string | undefined {\n const dirs = new Set(children.flatMap((c) => (c.work_dir ? [c.work_dir] : [])));\n return dirs.size === 1 ? Array.from(dirs)[0] : undefined;\n}\n\nfunction withNoFileViolations(node: Draft, noFile: readonly Violation[]): Draft {\n if (noFile.length === 0) return node;\n const failed = node.failed || worstSeverity(noFile) !== \"info\";\n return { ...node, noFileViolations: byLine(noFile), failed, passed: !failed };\n}\n\nfunction violationLeaf(args: {\n name: string;\n kind: \"lint-file\" | \"lint-rule\";\n file: string;\n rawFile: string;\n linterName: string;\n violations: readonly Violation[];\n workDir: string | undefined;\n}): Draft {\n const failed = worstSeverity(args.violations) !== \"info\";\n return {\n name: args.name,\n kind: args.kind,\n file: args.file,\n target_path: args.rawFile,\n work_dir: args.workDir,\n linterName: args.linterName,\n violations: byLine(args.violations),\n failed,\n passed: !failed,\n skipped: false,\n };\n}\n\nfunction linterNode(\n linterName: string,\n result: LinterResult | undefined,\n children: Draft[],\n noFile: readonly Violation[] = [],\n): Draft {\n return withNoFileViolations({ ...container(linterName, \"linter\", children), linter: result, linterName }, noFile);\n}\n\nfunction linterErrorNode(result: LinterResult): Draft {\n const message = linterErrorMessage(result);\n return {\n name: firstLine(message),\n kind: \"linter-error\",\n linterName: result.linter,\n linter: result,\n work_dir: result.work_dir,\n failed: true,\n passed: false,\n skipped: false,\n message,\n };\n}\n\nfunction fileNodes(trie: Trie<FileBucket>, linterName: string, ruleName?: string): Draft[] {\n const folders = sortedKeys(trie.folders).map((key) => {\n const folder = trie.folders.get(key)!;\n const node = container(folder.name, \"lint-folder\", fileNodes(folder, linterName, ruleName));\n return {\n ...node,\n file: folder.path,\n target_path: folder.rawPath,\n linterName,\n ...(ruleName ? { ruleName } : {}),\n work_dir: uniqueWorkDir(node.children!),\n };\n });\n const files = sortedKeys(trie.leaves).map((key) => {\n const bucket = trie.leaves.get(key)!;\n const fullPath = trie.path ? `${trie.path}/${key}` : key;\n const leaf = violationLeaf({\n name: key,\n kind: \"lint-file\",\n file: fullPath,\n rawFile: bucket.rawFile,\n linterName,\n violations: bucket.violations,\n workDir: bucket.workDir,\n });\n return ruleName ? { ...leaf, ruleName } : leaf;\n });\n return [...folders, ...files];\n}\n\ntype FileLinters = Map<string, { workDir: string | undefined; rules: Map<string, Violation[]> }>;\n\nfunction fileLinterNodes(trie: Trie<FileLinters>, linterMeta: Map<string, LinterResult>): Draft[] {\n const folders = sortedKeys(trie.folders).map((key) => {\n const folder = trie.folders.get(key)!;\n const node = container(folder.name, \"lint-folder\", fileLinterNodes(folder, linterMeta));\n return { ...node, file: folder.path, target_path: folder.rawPath, work_dir: uniqueWorkDir(node.children!) };\n });\n const files = sortedKeys(trie.leaves).map((key) => {\n const linters = trie.leaves.get(key)!;\n const fullPath = trie.path ? `${trie.path}/${key}` : key;\n const linterDrafts = sortedKeys(linters).map((linterName) => {\n const { workDir, rules } = linters.get(linterName)!;\n const ruleLeaves = sortedKeys(rules).map((rule) => {\n const violations = rules.get(rule)!;\n return {\n ...violationLeaf({\n name: rule,\n kind: \"lint-rule\",\n file: fullPath,\n rawFile: violations[0]?.raw_file ?? fullPath,\n linterName,\n violations,\n workDir,\n }),\n ruleName: rule,\n };\n });\n return {\n ...linterNode(linterName, linterMeta.get(linterName), ruleLeaves),\n file: fullPath,\n target_path: ruleLeaves[0]?.target_path,\n work_dir: workDir,\n };\n });\n return {\n ...container(key, \"lint-file\", linterDrafts),\n file: fullPath,\n target_path: linterDrafts[0]?.target_path,\n work_dir: uniqueWorkDir(linterDrafts),\n };\n });\n return [...folders, ...files];\n}\n\n// ---------------------------------------------------------------------------\n// Groupings\n\nfunction fileTrieFor(flat: readonly FlatViolation[]): Trie<FileBucket> {\n const trie = newTrie<FileBucket>();\n for (const f of flat) {\n if (!f.file) continue;\n trieLeaf(trie, f.file, f.rawFile ?? f.file, () => ({\n rawFile: f.rawFile ?? f.file!,\n workDir: f.workDir,\n violations: [],\n })).violations.push(f.v);\n }\n return trie;\n}\n\nfunction groupByLinterRuleFile(results: readonly LinterResult[], filters: LintFilters): Draft[] {\n const meta = linterMetaOf(results);\n const byLinter = groupBy(flattenLint(results, filters), (f) => f.linter);\n return Array.from(byLinter.keys())\n .sort()\n .map((linterName) => {\n const byRule = groupBy(byLinter.get(linterName)!, (f) => ruleKeyFor(f.v));\n const ruleNodes = Array.from(byRule.keys())\n .sort()\n .map((rule) => {\n const flats = byRule.get(rule)!;\n const children = fileNodes(fileTrieFor(flats), linterName, rule);\n const node = container(rule, \"lint-rule-group\", children);\n return withNoFileViolations(\n {\n ...node,\n linterName,\n ruleName: rule,\n work_dir: uniqueWorkDir(children) ?? meta.get(linterName)?.work_dir,\n },\n flats.filter((f) => !f.file).map((f) => f.v),\n );\n });\n return linterNode(linterName, meta.get(linterName), ruleNodes);\n });\n}\n\nfunction groupByLinterFile(results: readonly LinterResult[], filters: LintFilters): Draft[] {\n const meta = linterMetaOf(results);\n const byLinter = groupBy(flattenLint(results, filters), (f) => f.linter);\n return Array.from(byLinter.keys())\n .sort()\n .map((linterName) => {\n const flats = byLinter.get(linterName)!;\n return linterNode(\n linterName,\n meta.get(linterName),\n fileNodes(fileTrieFor(flats), linterName),\n flats.filter((f) => !f.file).map((f) => f.v),\n );\n });\n}\n\nfunction groupByFileLinterRule(results: readonly LinterResult[], filters: LintFilters): Draft[] {\n const meta = linterMetaOf(results);\n const flat = flattenLint(results, filters);\n const trie = newTrie<FileLinters>();\n for (const f of flat) {\n if (!f.file) continue;\n const linters = trieLeaf(trie, f.file, f.rawFile ?? f.file, () => new Map());\n let entry = linters.get(f.linter);\n if (!entry) {\n entry = { workDir: f.workDir, rules: new Map() };\n linters.set(f.linter, entry);\n }\n const rule = ruleKeyFor(f.v);\n entry.rules.set(rule, [...(entry.rules.get(rule) ?? []), f.v]);\n }\n\n const fileless = groupBy(flat.filter((f) => !f.file), (f) => f.linter);\n const filelessNodes = Array.from(fileless.keys())\n .sort()\n .map((linterName) => {\n const byRule = groupBy(fileless.get(linterName)!, (f) => ruleKeyFor(f.v));\n const workDir = meta.get(linterName)?.work_dir;\n const leaves = Array.from(byRule.keys())\n .sort()\n .map((rule) => ({\n ...violationLeaf({\n name: rule,\n kind: \"lint-rule\",\n file: \"\",\n rawFile: \"\",\n linterName,\n violations: byRule.get(rule)!.map((f) => f.v),\n workDir,\n }),\n ruleName: rule,\n file: undefined,\n target_path: undefined,\n }));\n return linterNode(linterName, meta.get(linterName), leaves);\n });\n\n return [...fileLinterNodes(trie, meta), ...filelessNodes];\n}\n\nfunction summaryFileLabel(file: string | undefined, violations: readonly Violation[]): string {\n if (!file) return \"(no file)\";\n if (violations.length > 1) return `${file} (${violations.length})`;\n const v = violations[0];\n if (v?.line) return v.column ? `${file}:${v.line}:${v.column}` : `${file}:${v.line}`;\n return file;\n}\n\nfunction summaryRuleNode(rule: string, linterName: string, flats: readonly FlatViolation[]): Draft {\n const byFile = groupBy(flats, (f) => f.file ?? \"\");\n const keys = Array.from(byFile.keys());\n const files: Draft[] = keys.slice(0, SUMMARY_FILE_LIMIT).map((key) => {\n const group = byFile.get(key)!;\n return {\n ...violationLeaf({\n name: summaryFileLabel(group[0]!.file, group.map((f) => f.v)),\n kind: \"lint-file\",\n file: group[0]!.file ?? \"\",\n rawFile: group[0]!.rawFile ?? \"\",\n linterName,\n violations: group.map((f) => f.v),\n workDir: group[0]!.workDir,\n }),\n file: group[0]!.file,\n target_path: group[0]!.rawFile,\n ruleName: rule,\n };\n });\n const remaining = keys.length - files.length;\n if (remaining > 0) {\n files.push({\n name: `… ${remaining} more file${remaining === 1 ? \"\" : \"s\"}`,\n kind: \"lint-file\",\n linterName,\n ruleName: rule,\n failed: false,\n passed: true,\n skipped: false,\n });\n }\n const firstMessage = flats.find((f) => f.v.message)?.v.message;\n const name = firstMessage ? `${rule} (${flats.length}) — ${firstMessage}` : `${rule} (${flats.length})`;\n return { ...container(name, \"lint-rule-group\", files), linterName, ruleName: rule };\n}\n\nfunction groupBySummary(results: readonly LinterResult[], filters: LintFilters): Draft[] {\n const meta = linterMetaOf(results);\n const flatByLinter = groupBy(flattenLint(results, filters), (f) => f.linter);\n const visible = results.filter((r) => matchesFilterState(r.linter, filters.linter));\n const skipped = new Map(visible.filter((r) => r.skipped).map((r) => [r.linter, r.error || \"skipped\"]));\n // Like the CLI --summary: every linter that ran is listed, even a clean one.\n return Array.from(new Set(visible.map((r) => r.linter)))\n .sort()\n .map((linterName) => {\n const flats = flatByLinter.get(linterName) ?? [];\n if (flats.length === 0 && skipped.has(linterName)) {\n return {\n name: linterName,\n kind: \"linter\" as const,\n linter: meta.get(linterName),\n linterName,\n skipped: true,\n passed: false,\n failed: false,\n message: `skipped: ${skipped.get(linterName)}`,\n };\n }\n const byRule = groupBy(flats, (f) => ruleKeyFor(f.v));\n const ruleOrder = Array.from(byRule.keys()).sort(\n (a, b) => byRule.get(b)!.length - byRule.get(a)!.length || a.localeCompare(b),\n );\n return linterNode(\n linterName,\n meta.get(linterName),\n ruleOrder.map((rule) => summaryRuleNode(rule, linterName, byRule.get(rule)!)),\n );\n });\n}\n\n/** Linters that failed to run get an error leaf in every grouping, merged into an existing linter node. */\nfunction withLinterErrors(roots: Draft[], results: readonly LinterResult[], filters: LintFilters): Draft[] {\n const errors = groupBy(\n results.filter((r) => isLinterErrored(r) && matchesFilterState(r.linter, filters.linter)),\n (r) => r.linter,\n );\n if (errors.size === 0) return roots;\n const linters = new Map(roots.filter((n) => n.kind === \"linter\").map((n) => [n.name, n]));\n for (const [name, failed] of errors) {\n const errorNodes = failed.map(linterErrorNode);\n const existing = linters.get(name);\n linters.set(\n name,\n existing\n ? { ...existing, children: [...errorNodes, ...(existing.children ?? [])], failed: true, passed: false }\n : linterNode(name, failed[0], errorNodes),\n );\n }\n const others = roots.filter((n) => n.kind !== \"linter\");\n return [...others, ...sortedKeys(linters).map((name) => linters.get(name)!)];\n}\n\n// ---------------------------------------------------------------------------\n// Collapsing, route paths, lookup\n\nfunction joinChainNames(parent: string, child: string): string {\n const p = parent.trim();\n const c = child.trim();\n return p && c ? `${p} > ${c}` : p || c;\n}\n\n/** Folds a folder that has a single child into that child: `pkg > sub > a.go`. */\nfunction collapseFolderChains(nodes: Draft[]): Draft[] {\n return nodes.map((node) => {\n if (!node.children || node.children.length === 0) return node;\n const children = collapseFolderChains(node.children);\n if (children.length === 1 && node.kind === \"lint-folder\") {\n const [child] = children;\n return { ...child!, name: joinChainNames(node.name, child!.name) };\n }\n return { ...node, children };\n });\n}\n\n/** Stable, unique route path per node: slug segments joined by `/`, siblings with equal slugs get `~N`. */\nfunction annotateRoutePaths(nodes: Draft[], parentSegments: string[] = []): LintNode[] {\n const slugs = nodes.map((n) => slugify(n.name));\n const totals = groupBy(slugs, (s) => s);\n const seen = new Map<string, number>();\n return nodes.map((node, i) => {\n const slug = slugs[i]!;\n const ordinal = (seen.get(slug) ?? 0) + 1;\n seen.set(slug, ordinal);\n const segment = totals.get(slug)!.length > 1 ? `${slug}~${ordinal}` : slug;\n const segments = [...parentSegments, segment];\n const { children, ...rest } = node;\n return {\n ...rest,\n route_path: segments.join(\"/\"),\n ...(children ? { children: annotateRoutePaths(children, segments) } : {}),\n };\n });\n}\n\nconst GROUPERS: Record<LintGrouping, (results: readonly LinterResult[], filters: LintFilters) => Draft[]> = {\n \"linter-rule-file\": groupByLinterRuleFile,\n \"linter-file\": groupByLinterFile,\n \"file-linter-rule\": groupByFileLinterRule,\n summary: groupBySummary,\n};\n\n/** The tree for one grouping: filtered, with failed linters shown, ready for `Tree`. */\nexport function buildLintTree({\n results,\n grouping,\n filters,\n}: {\n results: readonly LinterResult[];\n grouping: LintGrouping;\n filters: LintFilters;\n}): LintNode[] {\n const grouped = withLinterErrors(GROUPERS[grouping](results, filters), results, filters);\n // Summary keeps its linter -> rule -> file branches as built.\n return annotateRoutePaths(grouping === \"summary\" ? grouped : collapseFolderChains(grouped));\n}\n\n/** Depth-first lookup of the node whose route_path equals `path`, or null. */\nexport function findLintNode(nodes: readonly LintNode[], path: string): LintNode | null {\n if (!path) return null;\n for (const node of nodes) {\n if (node.route_path === path) return node;\n const found = node.children ? findLintNode(node.children, path) : null;\n if (found) return found;\n }\n return null;\n}\n"],"names":["matchesFilterState","normalizeLintPath","severityOf","relPath","decorateLintFile","collapsedPathSegments","worstSeverity","linterErrorMessage","_a","isLinterErrored","slugify"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { LintFilters, LintGrouping, LintNode, LinterResult } from './types.js';
|
|
2
|
+
/** The tree for one grouping: filtered, with failed linters shown, ready for `Tree`. */
|
|
3
|
+
export declare function buildLintTree({ results, grouping, filters, }: {
|
|
4
|
+
results: readonly LinterResult[];
|
|
5
|
+
grouping: LintGrouping;
|
|
6
|
+
filters: LintFilters;
|
|
7
|
+
}): LintNode[];
|
|
8
|
+
/** Depth-first lookup of the node whose route_path equals `path`, or null. */
|
|
9
|
+
export declare function findLintNode(nodes: readonly LintNode[], path: string): LintNode | null;
|
|
10
|
+
//# sourceMappingURL=grouping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../../../src/data/lint/grouping.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,YAAY,EAEb,MAAM,SAAS,CAAC;AA2gBjB,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,QAAQ,EACR,OAAO,GACR,EAAE;IACD,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;CACtB,GAAG,QAAQ,EAAE,CAIb;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAQtF"}
|