@flanksource/clicky-ui 0.3.49 → 0.3.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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 +76 -34
- package/dist/data/traces/ProcessTraceTree.cjs.map +1 -1
- package/dist/data/traces/ProcessTraceTree.d.ts +21 -4
- package/dist/data/traces/ProcessTraceTree.d.ts.map +1 -1
- package/dist/data/traces/ProcessTraceTree.js +72 -30
- package/dist/data/traces/ProcessTraceTree.js.map +1 -1
- package/dist/data/traces/Sparkline.cjs +27 -5
- package/dist/data/traces/Sparkline.cjs.map +1 -1
- package/dist/data/traces/Sparkline.d.ts +17 -1
- package/dist/data/traces/Sparkline.d.ts.map +1 -1
- package/dist/data/traces/Sparkline.js +28 -6
- package/dist/data/traces/Sparkline.js.map +1 -1
- package/dist/data/traces/TraceView.cjs +9 -0
- package/dist/data/traces/TraceView.cjs.map +1 -1
- package/dist/data/traces/TraceView.d.ts +4 -2
- package/dist/data/traces/TraceView.d.ts.map +1 -1
- package/dist/data/traces/TraceView.js +9 -0
- package/dist/data/traces/TraceView.js.map +1 -1
- 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/fixtures.d.ts +25 -1
- package/dist/data/traces/fixtures.d.ts.map +1 -1
- package/dist/data/traces/index.d.ts +10 -3
- package/dist/data/traces/index.d.ts.map +1 -1
- 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 +36 -4
- package/dist/data/traces/process-tree.cjs.map +1 -1
- package/dist/data/traces/process-tree.d.ts +20 -1
- package/dist/data/traces/process-tree.d.ts.map +1 -1
- package/dist/data/traces/process-tree.js +36 -4
- package/dist/data/traces/process-tree.js.map +1 -1
- 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/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/types.d.ts +120 -5
- 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.js +3 -3
- package/dist/data.cjs +85 -7
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +4 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +81 -3
- package/dist/data.js.map +1 -1
- package/dist/index.cjs +87 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +81 -3
- 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"}
|