@flanksource/clicky-ui 0.3.55 → 0.3.56
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/NOTICE.md +6 -0
- package/dist/ai.cjs +6 -0
- package/dist/ai.js +3 -1
- package/dist/chat.cjs +2 -0
- package/dist/chat.d.ts +1 -0
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +2 -1
- package/dist/comments/CommentCard.cjs +37 -7
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts +11 -1
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +37 -7
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentCardParts.cjs +9 -4
- package/dist/comments/CommentCardParts.cjs.map +1 -1
- package/dist/comments/CommentCardParts.d.ts.map +1 -1
- package/dist/comments/CommentCardParts.js +9 -4
- package/dist/comments/CommentCardParts.js.map +1 -1
- package/dist/comments/CommentComposer.cjs +8 -8
- package/dist/comments/CommentComposer.cjs.map +1 -1
- package/dist/comments/CommentComposer.d.ts.map +1 -1
- package/dist/comments/CommentComposer.js +8 -8
- package/dist/comments/CommentComposer.js.map +1 -1
- package/dist/comments/CommentProvider.cjs +5 -1
- package/dist/comments/CommentProvider.cjs.map +1 -1
- package/dist/comments/CommentProvider.d.ts +1 -1
- package/dist/comments/CommentProvider.d.ts.map +1 -1
- package/dist/comments/CommentProvider.js +5 -1
- package/dist/comments/CommentProvider.js.map +1 -1
- package/dist/comments/CommentSidePanel.cjs +17 -11
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.d.ts +6 -0
- package/dist/comments/CommentSidePanel.d.ts.map +1 -1
- package/dist/comments/CommentSidePanel.js +17 -11
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/CommentThread.cjs +4 -1
- package/dist/comments/CommentThread.cjs.map +1 -1
- package/dist/comments/CommentThread.d.ts +4 -1
- package/dist/comments/CommentThread.d.ts.map +1 -1
- package/dist/comments/CommentThread.js +4 -1
- package/dist/comments/CommentThread.js.map +1 -1
- package/dist/comments/CommentThreadList.cjs +6 -3
- package/dist/comments/CommentThreadList.cjs.map +1 -1
- package/dist/comments/CommentThreadList.d.ts +7 -2
- package/dist/comments/CommentThreadList.d.ts.map +1 -1
- package/dist/comments/CommentThreadList.js +6 -3
- package/dist/comments/CommentThreadList.js.map +1 -1
- package/dist/comments/MentionTextarea.cjs +1 -1
- package/dist/comments/MentionTextarea.cjs.map +1 -1
- package/dist/comments/MentionTextarea.d.ts.map +1 -1
- package/dist/comments/MentionTextarea.js +1 -1
- package/dist/comments/MentionTextarea.js.map +1 -1
- package/dist/comments/comment-assign.cjs +68 -0
- package/dist/comments/comment-assign.cjs.map +1 -0
- package/dist/comments/comment-assign.d.ts +31 -0
- package/dist/comments/comment-assign.d.ts.map +1 -0
- package/dist/comments/comment-assign.js +67 -0
- package/dist/comments/comment-assign.js.map +1 -0
- package/dist/comments/comment-types.cjs.map +1 -1
- package/dist/comments/comment-types.d.ts +39 -0
- package/dist/comments/comment-types.d.ts.map +1 -1
- package/dist/comments/comment-types.js.map +1 -1
- package/dist/comments/comment-utils.cjs +2 -0
- package/dist/comments/comment-utils.cjs.map +1 -1
- package/dist/comments/comment-utils.d.ts +2 -0
- package/dist/comments/comment-utils.d.ts.map +1 -1
- package/dist/comments/comment-utils.js +2 -0
- package/dist/comments/comment-utils.js.map +1 -1
- package/dist/comments.cjs +3 -0
- package/dist/comments.d.ts +1 -0
- package/dist/comments.d.ts.map +1 -1
- package/dist/comments.js +2 -1
- package/dist/components/ComboboxMenu.cjs +23 -13
- package/dist/components/ComboboxMenu.cjs.map +1 -1
- package/dist/components/ComboboxMenu.d.ts.map +1 -1
- package/dist/components/ComboboxMenu.js +23 -13
- package/dist/components/ComboboxMenu.js.map +1 -1
- package/dist/components/FilterBar.cjs +29 -6
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +3 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +29 -6
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/ItemActions.cjs +1 -1
- package/dist/components/ItemActions.cjs.map +1 -1
- package/dist/components/ItemActions.js +1 -1
- package/dist/components/ItemActions.js.map +1 -1
- package/dist/components/ListMenu.cjs +33 -3
- package/dist/components/ListMenu.cjs.map +1 -1
- package/dist/components/ListMenu.d.ts +4 -1
- package/dist/components/ListMenu.d.ts.map +1 -1
- package/dist/components/ListMenu.js +33 -3
- package/dist/components/ListMenu.js.map +1 -1
- package/dist/components/ListMenuItems.cjs +80 -0
- package/dist/components/ListMenuItems.cjs.map +1 -0
- package/dist/components/ListMenuItems.d.ts +8 -0
- package/dist/components/ListMenuItems.d.ts.map +1 -0
- package/dist/components/ListMenuItems.js +80 -0
- package/dist/components/ListMenuItems.js.map +1 -0
- package/dist/components/LocalPathPicker.cjs +182 -0
- package/dist/components/LocalPathPicker.cjs.map +1 -0
- package/dist/components/LocalPathPicker.d.ts +11 -0
- package/dist/components/LocalPathPicker.d.ts.map +1 -0
- package/dist/components/LocalPathPicker.js +182 -0
- package/dist/components/LocalPathPicker.js.map +1 -0
- package/dist/components/LocalPathTree.cjs +89 -0
- package/dist/components/LocalPathTree.cjs.map +1 -0
- package/dist/components/LocalPathTree.d.ts +9 -0
- package/dist/components/LocalPathTree.d.ts.map +1 -0
- package/dist/components/LocalPathTree.js +89 -0
- package/dist/components/LocalPathTree.js.map +1 -0
- package/dist/components/RangeSlider.cjs +10 -30
- package/dist/components/RangeSlider.cjs.map +1 -1
- package/dist/components/RangeSlider.d.ts.map +1 -1
- package/dist/components/RangeSlider.js +4 -24
- package/dist/components/RangeSlider.js.map +1 -1
- package/dist/components/Slider.cjs +79 -0
- package/dist/components/Slider.cjs.map +1 -0
- package/dist/components/Slider.d.ts +23 -0
- package/dist/components/Slider.d.ts.map +1 -0
- package/dist/components/Slider.js +79 -0
- package/dist/components/Slider.js.map +1 -0
- package/dist/components/combobox-types.d.ts +4 -1
- package/dist/components/combobox-types.d.ts.map +1 -1
- package/dist/components/filter-bar-field-utils.cjs +3 -5
- package/dist/components/filter-bar-field-utils.cjs.map +1 -1
- package/dist/components/filter-bar-field-utils.d.ts.map +1 -1
- package/dist/components/filter-bar-field-utils.js +3 -5
- package/dist/components/filter-bar-field-utils.js.map +1 -1
- package/dist/components/filter-bar-tree-model.cjs +22 -0
- package/dist/components/filter-bar-tree-model.cjs.map +1 -0
- package/dist/components/filter-bar-tree-model.d.ts +33 -0
- package/dist/components/filter-bar-tree-model.d.ts.map +1 -0
- package/dist/components/filter-bar-tree-model.js +21 -0
- package/dist/components/filter-bar-tree-model.js.map +1 -0
- package/dist/components/filter-bar-tree.cjs +84 -0
- package/dist/components/filter-bar-tree.cjs.map +1 -0
- package/dist/components/filter-bar-tree.d.ts +7 -0
- package/dist/components/filter-bar-tree.d.ts.map +1 -0
- package/dist/components/filter-bar-tree.js +84 -0
- package/dist/components/filter-bar-tree.js.map +1 -0
- package/dist/components/json-schema-form-debug-glyph-map.cjs +2 -0
- package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -1
- package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -1
- package/dist/components/json-schema-form-debug-glyph-map.js +2 -0
- package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -1
- package/dist/components/json-schema-form-help-links.cjs +18 -0
- package/dist/components/json-schema-form-help-links.cjs.map +1 -0
- package/dist/components/json-schema-form-help-links.d.ts +5 -0
- package/dist/components/json-schema-form-help-links.d.ts.map +1 -0
- package/dist/components/json-schema-form-help-links.js +18 -0
- package/dist/components/json-schema-form-help-links.js.map +1 -0
- package/dist/components/json-schema-form-help-model.cjs +7 -0
- package/dist/components/json-schema-form-help-model.cjs.map +1 -0
- package/dist/components/json-schema-form-help-model.d.ts +3 -0
- package/dist/components/json-schema-form-help-model.d.ts.map +1 -0
- package/dist/components/json-schema-form-help-model.js +7 -0
- package/dist/components/json-schema-form-help-model.js.map +1 -0
- package/dist/components/json-schema-form-json.cjs +48 -0
- package/dist/components/json-schema-form-json.cjs.map +1 -0
- package/dist/components/json-schema-form-json.d.ts +7 -0
- package/dist/components/json-schema-form-json.d.ts.map +1 -0
- package/dist/components/json-schema-form-json.js +48 -0
- package/dist/components/json-schema-form-json.js.map +1 -0
- package/dist/components/json-schema-form-layout.cjs +7 -5
- package/dist/components/json-schema-form-layout.cjs.map +1 -1
- package/dist/components/json-schema-form-layout.d.ts +2 -2
- package/dist/components/json-schema-form-layout.d.ts.map +1 -1
- package/dist/components/json-schema-form-layout.js +7 -5
- package/dist/components/json-schema-form-layout.js.map +1 -1
- package/dist/components/json-schema-form-object.cjs +2 -13
- package/dist/components/json-schema-form-object.cjs.map +1 -1
- package/dist/components/json-schema-form-object.d.ts.map +1 -1
- package/dist/components/json-schema-form-object.js +2 -13
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-refs.cjs +1 -1
- package/dist/components/json-schema-form-refs.cjs.map +1 -1
- package/dist/components/json-schema-form-refs.d.ts.map +1 -1
- package/dist/components/json-schema-form-refs.js +1 -1
- package/dist/components/json-schema-form-refs.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +20 -6
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +20 -6
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +22 -2
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +22 -2
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +5 -1
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-union-model.cjs +46 -0
- package/dist/components/json-schema-form-union-model.cjs.map +1 -0
- package/dist/components/json-schema-form-union-model.d.ts +6 -0
- package/dist/components/json-schema-form-union-model.d.ts.map +1 -0
- package/dist/components/json-schema-form-union-model.js +43 -0
- package/dist/components/json-schema-form-union-model.js.map +1 -0
- package/dist/components/json-schema-form-union.cjs +52 -0
- package/dist/components/json-schema-form-union.cjs.map +1 -0
- package/dist/components/json-schema-form-union.d.ts +7 -0
- package/dist/components/json-schema-form-union.d.ts.map +1 -0
- package/dist/components/json-schema-form-union.js +52 -0
- package/dist/components/json-schema-form-union.js.map +1 -0
- package/dist/components/list-menu-virtual.cjs +5 -0
- package/dist/components/list-menu-virtual.cjs.map +1 -0
- package/dist/components/list-menu-virtual.d.ts +12 -0
- package/dist/components/list-menu-virtual.d.ts.map +1 -0
- package/dist/components/list-menu-virtual.js +6 -0
- package/dist/components/list-menu-virtual.js.map +1 -0
- package/dist/components/local-path.cjs +12 -0
- package/dist/components/local-path.cjs.map +1 -0
- package/dist/components/local-path.d.ts +14 -0
- package/dist/components/local-path.d.ts.map +1 -0
- package/dist/components/local-path.js +12 -0
- package/dist/components/local-path.js.map +1 -0
- package/dist/components/slider-shared.cjs +32 -0
- package/dist/components/slider-shared.cjs.map +1 -0
- package/dist/components/slider-shared.d.ts +18 -0
- package/dist/components/slider-shared.d.ts.map +1 -0
- package/dist/components/slider-shared.js +27 -0
- package/dist/components/slider-shared.js.map +1 -0
- package/dist/components.cjs +8 -0
- package/dist/components.d.ts +6 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +5 -1
- package/dist/connections/ConnectionsPage.cjs +51 -19
- package/dist/connections/ConnectionsPage.cjs.map +1 -1
- package/dist/connections/ConnectionsPage.d.ts +9 -1
- package/dist/connections/ConnectionsPage.d.ts.map +1 -1
- package/dist/connections/ConnectionsPage.js +52 -20
- package/dist/connections/ConnectionsPage.js.map +1 -1
- package/dist/connections/connectionDashboard.cjs +13 -8
- package/dist/connections/connectionDashboard.cjs.map +1 -1
- package/dist/connections/connectionDashboard.d.ts +8 -3
- package/dist/connections/connectionDashboard.d.ts.map +1 -1
- package/dist/connections/connectionDashboard.js +14 -9
- package/dist/connections/connectionDashboard.js.map +1 -1
- package/dist/connections/connectionDashboardModel.cjs.map +1 -1
- package/dist/connections/connectionDashboardModel.d.ts +4 -0
- package/dist/connections/connectionDashboardModel.d.ts.map +1 -1
- package/dist/connections/connectionDashboardModel.js.map +1 -1
- package/dist/connections/connectionDashboardRow.cjs +75 -55
- package/dist/connections/connectionDashboardRow.cjs.map +1 -1
- package/dist/connections/connectionDashboardRow.d.ts +3 -2
- package/dist/connections/connectionDashboardRow.d.ts.map +1 -1
- package/dist/connections/connectionDashboardRow.js +75 -55
- package/dist/connections/connectionDashboardRow.js.map +1 -1
- package/dist/connections/connectionNamespaceField.cjs +17 -0
- package/dist/connections/connectionNamespaceField.cjs.map +1 -0
- package/dist/connections/connectionNamespaceField.d.ts +10 -0
- package/dist/connections/connectionNamespaceField.d.ts.map +1 -0
- package/dist/connections/connectionNamespaceField.js +17 -0
- package/dist/connections/connectionNamespaceField.js.map +1 -0
- package/dist/connections/connectionSchemaFormExtensions.cjs +98 -0
- package/dist/connections/connectionSchemaFormExtensions.cjs.map +1 -0
- package/dist/connections/connectionSchemaFormExtensions.d.ts +41 -0
- package/dist/connections/connectionSchemaFormExtensions.d.ts.map +1 -0
- package/dist/connections/connectionSchemaFormExtensions.js +96 -0
- package/dist/connections/connectionSchemaFormExtensions.js.map +1 -0
- package/dist/connections/connectionsPageModel.cjs +11 -0
- package/dist/connections/connectionsPageModel.cjs.map +1 -1
- package/dist/connections/connectionsPageModel.d.ts +5 -0
- package/dist/connections/connectionsPageModel.d.ts.map +1 -1
- package/dist/connections/connectionsPageModel.js +11 -1
- package/dist/connections/connectionsPageModel.js.map +1 -1
- package/dist/connections.cjs +5 -0
- package/dist/connections.d.ts +2 -1
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +3 -2
- package/dist/data/AvatarBadge.cjs +3 -3
- package/dist/data/AvatarBadge.cjs.map +1 -1
- package/dist/data/AvatarBadge.js +3 -3
- package/dist/data/AvatarBadge.js.map +1 -1
- package/dist/data/CodeDiff.cjs +2 -0
- package/dist/data/CodeDiff.cjs.map +1 -1
- package/dist/data/CodeDiff.js +2 -0
- package/dist/data/CodeDiff.js.map +1 -1
- package/dist/data/DataTable.cjs +3 -2
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +3 -2
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/Gauge.cjs +1 -1
- package/dist/data/Gauge.cjs.map +1 -1
- package/dist/data/Gauge.js +1 -1
- package/dist/data/Gauge.js.map +1 -1
- package/dist/data/HighlightedTokens.cjs +2 -10
- package/dist/data/HighlightedTokens.cjs.map +1 -1
- package/dist/data/HighlightedTokens.d.ts.map +1 -1
- package/dist/data/HighlightedTokens.js +1 -9
- package/dist/data/HighlightedTokens.js.map +1 -1
- package/dist/data/Markdown.cjs +38 -11
- package/dist/data/Markdown.cjs.map +1 -1
- package/dist/data/Markdown.d.ts +9 -1
- package/dist/data/Markdown.d.ts.map +1 -1
- package/dist/data/Markdown.js +39 -12
- package/dist/data/Markdown.js.map +1 -1
- package/dist/data/MultiGaugeBar.cjs +157 -0
- package/dist/data/MultiGaugeBar.cjs.map +1 -0
- package/dist/data/MultiGaugeBar.d.ts +29 -0
- package/dist/data/MultiGaugeBar.d.ts.map +1 -0
- package/dist/data/MultiGaugeBar.js +157 -0
- package/dist/data/MultiGaugeBar.js.map +1 -0
- package/dist/data/OpenInFilesLink.cjs +27 -0
- package/dist/data/OpenInFilesLink.cjs.map +1 -0
- package/dist/data/OpenInFilesLink.d.ts +15 -0
- package/dist/data/OpenInFilesLink.d.ts.map +1 -0
- package/dist/data/OpenInFilesLink.js +27 -0
- package/dist/data/OpenInFilesLink.js.map +1 -0
- package/dist/data/ProgressBar.cjs +5 -3
- package/dist/data/ProgressBar.cjs.map +1 -1
- package/dist/data/ProgressBar.d.ts +5 -1
- package/dist/data/ProgressBar.d.ts.map +1 -1
- package/dist/data/ProgressBar.js +5 -3
- package/dist/data/ProgressBar.js.map +1 -1
- package/dist/data/ProgressBars.cjs +13 -5
- package/dist/data/ProgressBars.cjs.map +1 -1
- package/dist/data/ProgressBars.d.ts +6 -1
- package/dist/data/ProgressBars.d.ts.map +1 -1
- package/dist/data/ProgressBars.js +13 -5
- package/dist/data/ProgressBars.js.map +1 -1
- package/dist/data/Properties.cjs +3 -3
- package/dist/data/Properties.cjs.map +1 -1
- package/dist/data/Properties.js +3 -3
- package/dist/data/Properties.js.map +1 -1
- package/dist/data/TaskProgress.cjs +14 -6
- 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 +14 -6
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskPrompts.cjs +96 -0
- package/dist/data/TaskPrompts.cjs.map +1 -0
- package/dist/data/TaskPrompts.d.ts +6 -0
- package/dist/data/TaskPrompts.d.ts.map +1 -0
- package/dist/data/TaskPrompts.js +96 -0
- package/dist/data/TaskPrompts.js.map +1 -0
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +3 -0
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/TimeseriesCoreBars.cjs +7 -3
- package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.js +8 -4
- package/dist/data/TimeseriesCoreBars.js.map +1 -1
- package/dist/data/TimeseriesGauge.cjs +12 -5
- package/dist/data/TimeseriesGauge.cjs.map +1 -1
- package/dist/data/TimeseriesGauge.d.ts.map +1 -1
- package/dist/data/TimeseriesGauge.js +13 -6
- package/dist/data/TimeseriesGauge.js.map +1 -1
- package/dist/data/TimeseriesPanel.cjs +10 -9
- package/dist/data/TimeseriesPanel.cjs.map +1 -1
- package/dist/data/TimeseriesPanel.d.ts +1 -1
- package/dist/data/TimeseriesPanel.d.ts.map +1 -1
- package/dist/data/TimeseriesPanel.js +11 -10
- package/dist/data/TimeseriesPanel.js.map +1 -1
- package/dist/data/TimeseriesPanel.model.cjs +62 -10
- package/dist/data/TimeseriesPanel.model.cjs.map +1 -1
- package/dist/data/TimeseriesPanel.model.d.ts +40 -1
- package/dist/data/TimeseriesPanel.model.d.ts.map +1 -1
- package/dist/data/TimeseriesPanel.model.js +62 -11
- package/dist/data/TimeseriesPanel.model.js.map +1 -1
- package/dist/data/WorkloadCard.cjs +7 -3
- package/dist/data/WorkloadCard.cjs.map +1 -1
- package/dist/data/WorkloadCard.d.ts +3 -1
- package/dist/data/WorkloadCard.d.ts.map +1 -1
- package/dist/data/WorkloadCard.js +7 -3
- package/dist/data/WorkloadCard.js.map +1 -1
- package/dist/data/WorkloadCard.model.cjs.map +1 -1
- package/dist/data/WorkloadCard.model.d.ts +2 -0
- package/dist/data/WorkloadCard.model.d.ts.map +1 -1
- package/dist/data/WorkloadCard.model.js.map +1 -1
- package/dist/data/ai/ChatWindow.placement.cjs +2 -1
- package/dist/data/ai/ChatWindow.placement.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.placement.d.ts +1 -1
- package/dist/data/ai/ChatWindow.placement.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.placement.js +2 -1
- package/dist/data/ai/ChatWindow.placement.js.map +1 -1
- package/dist/data/ai/SpecRuntimeBar.cjs +2 -2
- package/dist/data/ai/SpecRuntimeBar.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeBar.d.ts +4 -1
- package/dist/data/ai/SpecRuntimeBar.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeBar.js +2 -2
- package/dist/data/ai/SpecRuntimeBar.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.cjs +2 -2
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +2 -2
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.js +2 -2
- package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
- package/dist/data/ai/ThreadPicker.cjs +2 -2
- package/dist/data/ai/ThreadPicker.cjs.map +1 -1
- package/dist/data/ai/ThreadPicker.js +2 -2
- package/dist/data/ai/ThreadPicker.js.map +1 -1
- package/dist/data/ai/index.d.ts +2 -0
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/use-prompt-run-stream.cjs +126 -0
- package/dist/data/ai/use-prompt-run-stream.cjs.map +1 -0
- package/dist/data/ai/use-prompt-run-stream.d.ts +52 -0
- package/dist/data/ai/use-prompt-run-stream.d.ts.map +1 -0
- package/dist/data/ai/use-prompt-run-stream.js +126 -0
- package/dist/data/ai/use-prompt-run-stream.js.map +1 -0
- package/dist/data/cache-browser/CacheBrowser.cjs +1 -0
- package/dist/data/cache-browser/CacheBrowser.cjs.map +1 -1
- package/dist/data/cache-browser/CacheBrowser.d.ts.map +1 -1
- package/dist/data/cache-browser/CacheBrowser.js +1 -0
- package/dist/data/cache-browser/CacheBrowser.js.map +1 -1
- package/dist/data/charts/BarChart.cjs +194 -0
- package/dist/data/charts/BarChart.cjs.map +1 -0
- package/dist/data/charts/BarChart.d.ts +19 -0
- package/dist/data/charts/BarChart.d.ts.map +1 -0
- package/dist/data/charts/BarChart.js +194 -0
- package/dist/data/charts/BarChart.js.map +1 -0
- package/dist/data/charts/ChartLegend.cjs +54 -0
- package/dist/data/charts/ChartLegend.cjs.map +1 -0
- package/dist/data/charts/ChartLegend.d.ts +17 -0
- package/dist/data/charts/ChartLegend.d.ts.map +1 -0
- package/dist/data/charts/ChartLegend.js +54 -0
- package/dist/data/charts/ChartLegend.js.map +1 -0
- package/dist/data/charts/Sparkline.cjs +56 -0
- package/dist/data/charts/Sparkline.cjs.map +1 -0
- package/dist/data/charts/Sparkline.d.ts +15 -0
- package/dist/data/charts/Sparkline.d.ts.map +1 -0
- package/dist/data/charts/Sparkline.js +56 -0
- package/dist/data/charts/Sparkline.js.map +1 -0
- package/dist/data/charts/StackedBarChart.cjs +241 -0
- package/dist/data/charts/StackedBarChart.cjs.map +1 -0
- package/dist/data/charts/StackedBarChart.d.ts +20 -0
- package/dist/data/charts/StackedBarChart.d.ts.map +1 -0
- package/dist/data/charts/StackedBarChart.js +241 -0
- package/dist/data/charts/StackedBarChart.js.map +1 -0
- package/dist/data/charts/TrendChart.cjs +157 -0
- package/dist/data/charts/TrendChart.cjs.map +1 -0
- package/dist/data/charts/TrendChart.d.ts +20 -0
- package/dist/data/charts/TrendChart.d.ts.map +1 -0
- package/dist/data/charts/TrendChart.js +157 -0
- package/dist/data/charts/TrendChart.js.map +1 -0
- package/dist/data/charts/chart-marks.cjs +115 -0
- package/dist/data/charts/chart-marks.cjs.map +1 -0
- package/dist/data/charts/chart-marks.d.ts +39 -0
- package/dist/data/charts/chart-marks.d.ts.map +1 -0
- package/dist/data/charts/chart-marks.js +112 -0
- package/dist/data/charts/chart-marks.js.map +1 -0
- package/dist/data/charts/chart-palette.cjs +74 -0
- package/dist/data/charts/chart-palette.cjs.map +1 -0
- package/dist/data/charts/chart-palette.d.ts +58 -0
- package/dist/data/charts/chart-palette.d.ts.map +1 -0
- package/dist/data/charts/chart-palette.js +72 -0
- package/dist/data/charts/chart-palette.js.map +1 -0
- package/dist/data/charts/chart-scale.cjs +115 -0
- package/dist/data/charts/chart-scale.cjs.map +1 -0
- package/dist/data/charts/chart-scale.d.ts +41 -0
- package/dist/data/charts/chart-scale.d.ts.map +1 -0
- package/dist/data/charts/chart-scale.js +104 -0
- package/dist/data/charts/chart-scale.js.map +1 -0
- package/dist/data/charts/chart.test-utils.d.ts +7 -0
- package/dist/data/charts/chart.test-utils.d.ts.map +1 -0
- package/dist/data/charts/index.d.ts +7 -0
- package/dist/data/charts/index.d.ts.map +1 -0
- package/dist/data/chat/MessageActions.cjs +1 -1
- package/dist/data/chat/MessageActions.cjs.map +1 -1
- package/dist/data/chat/MessageActions.js +1 -1
- package/dist/data/chat/MessageActions.js.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.cjs +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.cjs.map +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.js +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.cjs +9 -2
- package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.d.ts +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.js +9 -2
- package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -1
- package/dist/data/diagnostics/ProblemActions.cjs +37 -0
- package/dist/data/diagnostics/ProblemActions.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemActions.d.ts +6 -0
- package/dist/data/diagnostics/ProblemActions.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemActions.js +37 -0
- package/dist/data/diagnostics/ProblemActions.js.map +1 -0
- package/dist/data/diagnostics/ProblemFacet.cjs +33 -0
- package/dist/data/diagnostics/ProblemFacet.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemFacet.d.ts +9 -0
- package/dist/data/diagnostics/ProblemFacet.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemFacet.js +33 -0
- package/dist/data/diagnostics/ProblemFacet.js.map +1 -0
- package/dist/data/diagnostics/ProblemRow.cjs +62 -0
- package/dist/data/diagnostics/ProblemRow.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemRow.d.ts +14 -0
- package/dist/data/diagnostics/ProblemRow.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemRow.js +62 -0
- package/dist/data/diagnostics/ProblemRow.js.map +1 -0
- package/dist/data/diagnostics/ProblemViewOptions.cjs +18 -0
- package/dist/data/diagnostics/ProblemViewOptions.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemViewOptions.d.ts +6 -0
- package/dist/data/diagnostics/ProblemViewOptions.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemViewOptions.js +18 -0
- package/dist/data/diagnostics/ProblemViewOptions.js.map +1 -0
- package/dist/data/diagnostics/StackFrameRow.cjs +1 -1
- package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
- package/dist/data/diagnostics/StackFrameRow.js +1 -1
- package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
- package/dist/data/diagnostics/diagnostic-identity.cjs +14 -0
- package/dist/data/diagnostics/diagnostic-identity.cjs.map +1 -0
- package/dist/data/diagnostics/diagnostic-identity.d.ts +3 -0
- package/dist/data/diagnostics/diagnostic-identity.d.ts.map +1 -0
- package/dist/data/diagnostics/diagnostic-identity.js +14 -0
- package/dist/data/diagnostics/diagnostic-identity.js.map +1 -0
- package/dist/data/diagnostics/use-problem-expansion.cjs +16 -0
- package/dist/data/diagnostics/use-problem-expansion.cjs.map +1 -0
- package/dist/data/diagnostics/use-problem-expansion.d.ts +3 -0
- package/dist/data/diagnostics/use-problem-expansion.d.ts.map +1 -0
- package/dist/data/diagnostics/use-problem-expansion.js +16 -0
- package/dist/data/diagnostics/use-problem-expansion.js.map +1 -0
- package/dist/data/git/GitChangeList.cjs +9 -6
- package/dist/data/git/GitChangeList.cjs.map +1 -1
- package/dist/data/git/GitChangeList.d.ts +6 -0
- package/dist/data/git/GitChangeList.d.ts.map +1 -1
- package/dist/data/git/GitChangeList.js +9 -6
- package/dist/data/git/GitChangeList.js.map +1 -1
- package/dist/data/git/pickers/GitPickersDemo.d.ts.map +1 -1
- package/dist/data/git/pickers/ReferencePicker.cjs +1 -0
- package/dist/data/git/pickers/ReferencePicker.cjs.map +1 -1
- package/dist/data/git/pickers/ReferencePicker.js +1 -0
- package/dist/data/git/pickers/ReferencePicker.js.map +1 -1
- package/dist/data/lint/LintDetail.cjs +230 -189
- package/dist/data/lint/LintDetail.cjs.map +1 -1
- package/dist/data/lint/LintDetail.d.ts +25 -3
- package/dist/data/lint/LintDetail.d.ts.map +1 -1
- package/dist/data/lint/LintDetail.js +231 -192
- package/dist/data/lint/LintDetail.js.map +1 -1
- package/dist/data/lint/LintFilterBar.cjs +78 -83
- package/dist/data/lint/LintFilterBar.cjs.map +1 -1
- package/dist/data/lint/LintFilterBar.d.ts +23 -6
- package/dist/data/lint/LintFilterBar.d.ts.map +1 -1
- package/dist/data/lint/LintFilterBar.js +78 -85
- package/dist/data/lint/LintFilterBar.js.map +1 -1
- package/dist/data/lint/LintIgnoreMenu.cjs +59 -0
- package/dist/data/lint/LintIgnoreMenu.cjs.map +1 -0
- package/dist/data/lint/LintIgnoreMenu.d.ts +20 -0
- package/dist/data/lint/LintIgnoreMenu.d.ts.map +1 -0
- package/dist/data/lint/LintIgnoreMenu.js +58 -0
- package/dist/data/lint/LintIgnoreMenu.js.map +1 -0
- package/dist/data/lint/LintResults.cjs +59 -14
- package/dist/data/lint/LintResults.cjs.map +1 -1
- package/dist/data/lint/LintResults.d.ts +25 -1
- package/dist/data/lint/LintResults.d.ts.map +1 -1
- package/dist/data/lint/LintResults.fixtures.d.ts +19 -0
- package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -1
- package/dist/data/lint/LintResults.js +60 -15
- package/dist/data/lint/LintResults.js.map +1 -1
- package/dist/data/lint/LintTable.cjs +156 -0
- package/dist/data/lint/LintTable.cjs.map +1 -0
- package/dist/data/lint/LintTable.d.ts +13 -0
- package/dist/data/lint/LintTable.d.ts.map +1 -0
- package/dist/data/lint/LintTable.js +156 -0
- package/dist/data/lint/LintTable.js.map +1 -0
- package/dist/data/lint/LintTreeNode.cjs +42 -19
- package/dist/data/lint/LintTreeNode.cjs.map +1 -1
- package/dist/data/lint/LintTreeNode.d.ts +7 -2
- package/dist/data/lint/LintTreeNode.d.ts.map +1 -1
- package/dist/data/lint/LintTreeNode.js +44 -21
- package/dist/data/lint/LintTreeNode.js.map +1 -1
- package/dist/data/lint/ViolationSnippet.cjs +113 -0
- package/dist/data/lint/ViolationSnippet.cjs.map +1 -0
- package/dist/data/lint/ViolationSnippet.d.ts +20 -0
- package/dist/data/lint/ViolationSnippet.d.ts.map +1 -0
- package/dist/data/lint/ViolationSnippet.js +112 -0
- package/dist/data/lint/ViolationSnippet.js.map +1 -0
- package/dist/data/lint/actions.cjs +44 -16
- package/dist/data/lint/actions.cjs.map +1 -1
- package/dist/data/lint/actions.d.ts +7 -3
- package/dist/data/lint/actions.d.ts.map +1 -1
- package/dist/data/lint/actions.js +44 -16
- package/dist/data/lint/actions.js.map +1 -1
- package/dist/data/lint/grouping.cjs +105 -8
- package/dist/data/lint/grouping.cjs.map +1 -1
- package/dist/data/lint/grouping.d.ts +21 -1
- package/dist/data/lint/grouping.d.ts.map +1 -1
- package/dist/data/lint/grouping.js +105 -10
- package/dist/data/lint/grouping.js.map +1 -1
- package/dist/data/lint/ignore-menu-items.cjs +18 -0
- package/dist/data/lint/ignore-menu-items.cjs.map +1 -0
- package/dist/data/lint/ignore-menu-items.d.ts +6 -0
- package/dist/data/lint/ignore-menu-items.d.ts.map +1 -0
- package/dist/data/lint/ignore-menu-items.js +17 -0
- package/dist/data/lint/ignore-menu-items.js.map +1 -0
- package/dist/data/lint/index.d.ts +7 -5
- package/dist/data/lint/index.d.ts.map +1 -1
- package/dist/data/lint/stats.cjs +19 -4
- package/dist/data/lint/stats.cjs.map +1 -1
- package/dist/data/lint/stats.d.ts +13 -3
- package/dist/data/lint/stats.d.ts.map +1 -1
- package/dist/data/lint/stats.js +17 -5
- package/dist/data/lint/stats.js.map +1 -1
- package/dist/data/lint/types.cjs +8 -0
- package/dist/data/lint/types.cjs.map +1 -1
- package/dist/data/lint/types.d.ts +47 -0
- package/dist/data/lint/types.d.ts.map +1 -1
- package/dist/data/lint/types.js +8 -1
- package/dist/data/lint/types.js.map +1 -1
- package/dist/data/lint/violation-menu-items.cjs +31 -0
- package/dist/data/lint/violation-menu-items.cjs.map +1 -0
- package/dist/data/lint/violation-menu-items.d.ts +12 -0
- package/dist/data/lint/violation-menu-items.d.ts.map +1 -0
- package/dist/data/lint/violation-menu-items.js +31 -0
- package/dist/data/lint/violation-menu-items.js.map +1 -0
- package/dist/data/markdown-source-blocks.cjs +38 -0
- package/dist/data/markdown-source-blocks.cjs.map +1 -0
- package/dist/data/markdown-source-blocks.d.ts +32 -0
- package/dist/data/markdown-source-blocks.d.ts.map +1 -0
- package/dist/data/markdown-source-blocks.js +35 -0
- package/dist/data/markdown-source-blocks.js.map +1 -0
- package/dist/data/test-runner/FilterFacet.cjs +52 -0
- package/dist/data/test-runner/FilterFacet.cjs.map +1 -0
- package/dist/data/test-runner/FilterFacet.d.ts +13 -0
- package/dist/data/test-runner/FilterFacet.d.ts.map +1 -0
- package/dist/data/test-runner/FilterFacet.js +52 -0
- package/dist/data/test-runner/FilterFacet.js.map +1 -0
- package/dist/data/test-runner/MatrixMarks.cjs +19 -29
- package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
- package/dist/data/test-runner/MatrixMarks.d.ts +4 -4
- package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
- package/dist/data/test-runner/MatrixMarks.js +19 -29
- package/dist/data/test-runner/MatrixMarks.js.map +1 -1
- package/dist/data/test-runner/TestAttemptDetail.cjs +1 -1
- package/dist/data/test-runner/TestAttemptDetail.js +1 -1
- package/dist/data/test-runner/TestDetailPanel.cjs +11 -0
- 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 +11 -0
- package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
- package/dist/data/test-runner/TestFilterBar.cjs +3 -44
- package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
- package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
- package/dist/data/test-runner/TestFilterBar.js +3 -44
- package/dist/data/test-runner/TestFilterBar.js.map +1 -1
- package/dist/data/test-runner/TestRunner.cjs +3 -1
- package/dist/data/test-runner/TestRunner.cjs.map +1 -1
- package/dist/data/test-runner/TestRunner.d.ts +7 -1
- package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.js +3 -1
- package/dist/data/test-runner/TestRunner.js.map +1 -1
- package/dist/data/test-runner/context.cjs.map +1 -1
- package/dist/data/test-runner/context.d.ts +3 -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/types.d.ts +2 -0
- package/dist/data/test-runner/types.d.ts.map +1 -1
- package/dist/data/timeseries-query.cjs +98 -2
- package/dist/data/timeseries-query.cjs.map +1 -1
- package/dist/data/timeseries-query.d.ts +31 -5
- package/dist/data/timeseries-query.d.ts.map +1 -1
- package/dist/data/timeseries-query.js +98 -3
- package/dist/data/timeseries-query.js.map +1 -1
- package/dist/data/timeseries-stream-provider.cjs +38 -0
- package/dist/data/timeseries-stream-provider.cjs.map +1 -0
- package/dist/data/timeseries-stream-provider.d.ts +26 -0
- package/dist/data/timeseries-stream-provider.d.ts.map +1 -0
- package/dist/data/timeseries-stream-provider.js +38 -0
- package/dist/data/timeseries-stream-provider.js.map +1 -0
- package/dist/data/timeseries-stream.cjs +304 -0
- package/dist/data/timeseries-stream.cjs.map +1 -0
- package/dist/data/timeseries-stream.d.ts +81 -0
- package/dist/data/timeseries-stream.d.ts.map +1 -0
- package/dist/data/timeseries-stream.fixtures.d.ts +36 -0
- package/dist/data/timeseries-stream.fixtures.d.ts.map +1 -0
- package/dist/data/timeseries-stream.js +296 -0
- package/dist/data/timeseries-stream.js.map +1 -0
- package/dist/data/token-style.cjs +13 -0
- package/dist/data/token-style.cjs.map +1 -0
- package/dist/data/token-style.d.ts +4 -0
- package/dist/data/token-style.d.ts.map +1 -0
- package/dist/data/token-style.js +13 -0
- package/dist/data/token-style.js.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.cjs +1 -1
- package/dist/data/traces/ProcessTraceDetail.js +1 -1
- package/dist/data/traces/index.d.ts +1 -1
- package/dist/data/traces/index.d.ts.map +1 -1
- package/dist/data/use-data-table-virtual.d.ts +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data/workload-panel/MemoryStack.cjs +49 -0
- package/dist/data/workload-panel/MemoryStack.cjs.map +1 -0
- package/dist/data/workload-panel/MemoryStack.d.ts +11 -0
- package/dist/data/workload-panel/MemoryStack.d.ts.map +1 -0
- package/dist/data/workload-panel/MemoryStack.js +48 -0
- package/dist/data/workload-panel/MemoryStack.js.map +1 -0
- package/dist/data/workload-panel/Metrics.cjs +197 -0
- package/dist/data/workload-panel/Metrics.cjs.map +1 -0
- package/dist/data/workload-panel/Metrics.d.ts +11 -0
- package/dist/data/workload-panel/Metrics.d.ts.map +1 -0
- package/dist/data/workload-panel/Metrics.js +196 -0
- package/dist/data/workload-panel/Metrics.js.map +1 -0
- package/dist/data/workload-panel/WorkloadPanel.cjs +66 -0
- package/dist/data/workload-panel/WorkloadPanel.cjs.map +1 -0
- package/dist/data/workload-panel/WorkloadPanel.d.ts +3 -0
- package/dist/data/workload-panel/WorkloadPanel.d.ts.map +1 -0
- package/dist/data/workload-panel/WorkloadPanel.js +66 -0
- package/dist/data/workload-panel/WorkloadPanel.js.map +1 -0
- package/dist/data/workload-panel/fixtures.d.ts +60 -0
- package/dist/data/workload-panel/fixtures.d.ts.map +1 -0
- package/dist/data/workload-panel/model.cjs +137 -0
- package/dist/data/workload-panel/model.cjs.map +1 -0
- package/dist/data/workload-panel/model.d.ts +53 -0
- package/dist/data/workload-panel/model.d.ts.map +1 -0
- package/dist/data/workload-panel/model.js +133 -0
- package/dist/data/workload-panel/model.js.map +1 -0
- package/dist/data/workload-panel/types.d.ts +56 -0
- package/dist/data/workload-panel/types.d.ts.map +1 -0
- package/dist/data.cjs +57 -6
- package/dist/data.d.ts +9 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +27 -10
- package/dist/file-findings/AnnotatedCode.cjs +243 -0
- package/dist/file-findings/AnnotatedCode.cjs.map +1 -0
- package/dist/file-findings/AnnotatedCode.d.ts +30 -0
- package/dist/file-findings/AnnotatedCode.d.ts.map +1 -0
- package/dist/file-findings/AnnotatedCode.js +243 -0
- package/dist/file-findings/AnnotatedCode.js.map +1 -0
- package/dist/file-findings/FileFindingsView.cjs +213 -0
- package/dist/file-findings/FileFindingsView.cjs.map +1 -0
- package/dist/file-findings/FileFindingsView.d.ts +35 -0
- package/dist/file-findings/FileFindingsView.d.ts.map +1 -0
- package/dist/file-findings/FileFindingsView.js +213 -0
- package/dist/file-findings/FileFindingsView.js.map +1 -0
- package/dist/file-findings/LazyAnnotatedCode.cjs +22 -0
- package/dist/file-findings/LazyAnnotatedCode.cjs.map +1 -0
- package/dist/file-findings/LazyAnnotatedCode.d.ts +5 -0
- package/dist/file-findings/LazyAnnotatedCode.d.ts.map +1 -0
- package/dist/file-findings/LazyAnnotatedCode.js +22 -0
- package/dist/file-findings/LazyAnnotatedCode.js.map +1 -0
- package/dist/file-findings/adapters.cjs +155 -0
- package/dist/file-findings/adapters.cjs.map +1 -0
- package/dist/file-findings/adapters.d.ts +24 -0
- package/dist/file-findings/adapters.d.ts.map +1 -0
- package/dist/file-findings/adapters.js +153 -0
- package/dist/file-findings/adapters.js.map +1 -0
- package/dist/file-findings/file-review/CommentDraft.cjs +97 -0
- package/dist/file-findings/file-review/CommentDraft.cjs.map +1 -0
- package/dist/file-findings/file-review/CommentDraft.d.ts +25 -0
- package/dist/file-findings/file-review/CommentDraft.d.ts.map +1 -0
- package/dist/file-findings/file-review/CommentDraft.js +97 -0
- package/dist/file-findings/file-review/CommentDraft.js.map +1 -0
- package/dist/file-findings/file-review/FileReview.cjs +863 -0
- package/dist/file-findings/file-review/FileReview.cjs.map +1 -0
- package/dist/file-findings/file-review/FileReview.d.ts +79 -0
- package/dist/file-findings/file-review/FileReview.d.ts.map +1 -0
- package/dist/file-findings/file-review/FileReview.fixtures.d.ts +25 -0
- package/dist/file-findings/file-review/FileReview.fixtures.d.ts.map +1 -0
- package/dist/file-findings/file-review/FileReview.js +863 -0
- package/dist/file-findings/file-review/FileReview.js.map +1 -0
- package/dist/file-findings/file-review/InlineAuthors.cjs +77 -0
- package/dist/file-findings/file-review/InlineAuthors.cjs.map +1 -0
- package/dist/file-findings/file-review/InlineAuthors.d.ts +9 -0
- package/dist/file-findings/file-review/InlineAuthors.d.ts.map +1 -0
- package/dist/file-findings/file-review/InlineAuthors.js +77 -0
- package/dist/file-findings/file-review/InlineAuthors.js.map +1 -0
- package/dist/file-findings/file-review/InlineThread.cjs +77 -0
- package/dist/file-findings/file-review/InlineThread.cjs.map +1 -0
- package/dist/file-findings/file-review/InlineThread.d.ts +27 -0
- package/dist/file-findings/file-review/InlineThread.d.ts.map +1 -0
- package/dist/file-findings/file-review/InlineThread.js +77 -0
- package/dist/file-findings/file-review/InlineThread.js.map +1 -0
- package/dist/file-findings/file-review/ProblemsList.cjs +164 -0
- package/dist/file-findings/file-review/ProblemsList.cjs.map +1 -0
- package/dist/file-findings/file-review/ProblemsList.d.ts +15 -0
- package/dist/file-findings/file-review/ProblemsList.d.ts.map +1 -0
- package/dist/file-findings/file-review/ProblemsList.js +164 -0
- package/dist/file-findings/file-review/ProblemsList.js.map +1 -0
- package/dist/file-findings/file-review/SourceView.cjs +179 -0
- package/dist/file-findings/file-review/SourceView.cjs.map +1 -0
- package/dist/file-findings/file-review/SourceView.d.ts +29 -0
- package/dist/file-findings/file-review/SourceView.d.ts.map +1 -0
- package/dist/file-findings/file-review/SourceView.js +179 -0
- package/dist/file-findings/file-review/SourceView.js.map +1 -0
- package/dist/file-findings/file-review/blame.cjs +35 -0
- package/dist/file-findings/file-review/blame.cjs.map +1 -0
- package/dist/file-findings/file-review/blame.d.ts +28 -0
- package/dist/file-findings/file-review/blame.d.ts.map +1 -0
- package/dist/file-findings/file-review/blame.js +33 -0
- package/dist/file-findings/file-review/blame.js.map +1 -0
- package/dist/file-findings/file-review/geometry.cjs +101 -0
- package/dist/file-findings/file-review/geometry.cjs.map +1 -0
- package/dist/file-findings/file-review/geometry.d.ts +45 -0
- package/dist/file-findings/file-review/geometry.d.ts.map +1 -0
- package/dist/file-findings/file-review/geometry.js +98 -0
- package/dist/file-findings/file-review/geometry.js.map +1 -0
- package/dist/file-findings/file-review/hooks.cjs +101 -0
- package/dist/file-findings/file-review/hooks.cjs.map +1 -0
- package/dist/file-findings/file-review/hooks.d.ts +22 -0
- package/dist/file-findings/file-review/hooks.d.ts.map +1 -0
- package/dist/file-findings/file-review/hooks.js +99 -0
- package/dist/file-findings/file-review/hooks.js.map +1 -0
- package/dist/file-findings/file-review/marks.cjs +52 -0
- package/dist/file-findings/file-review/marks.cjs.map +1 -0
- package/dist/file-findings/file-review/marks.d.ts +23 -0
- package/dist/file-findings/file-review/marks.d.ts.map +1 -0
- package/dist/file-findings/file-review/marks.js +47 -0
- package/dist/file-findings/file-review/marks.js.map +1 -0
- package/dist/file-findings/file-review/problem-filters.cjs +14 -0
- package/dist/file-findings/file-review/problem-filters.cjs.map +1 -0
- package/dist/file-findings/file-review/problem-filters.d.ts +10 -0
- package/dist/file-findings/file-review/problem-filters.d.ts.map +1 -0
- package/dist/file-findings/file-review/problem-filters.js +13 -0
- package/dist/file-findings/file-review/problem-filters.js.map +1 -0
- package/dist/file-findings/file-review/quote-anchor.cjs +234 -0
- package/dist/file-findings/file-review/quote-anchor.cjs.map +1 -0
- package/dist/file-findings/file-review/quote-anchor.d.ts +54 -0
- package/dist/file-findings/file-review/quote-anchor.d.ts.map +1 -0
- package/dist/file-findings/file-review/quote-anchor.js +226 -0
- package/dist/file-findings/file-review/quote-anchor.js.map +1 -0
- package/dist/file-findings/file-review/source-anchor.cjs +104 -0
- package/dist/file-findings/file-review/source-anchor.cjs.map +1 -0
- package/dist/file-findings/file-review/source-anchor.d.ts +27 -0
- package/dist/file-findings/file-review/source-anchor.d.ts.map +1 -0
- package/dist/file-findings/file-review/source-anchor.js +99 -0
- package/dist/file-findings/file-review/source-anchor.js.map +1 -0
- package/dist/file-findings/file-review/source-marks.cjs +71 -0
- package/dist/file-findings/file-review/source-marks.cjs.map +1 -0
- package/dist/file-findings/file-review/source-marks.d.ts +27 -0
- package/dist/file-findings/file-review/source-marks.d.ts.map +1 -0
- package/dist/file-findings/file-review/source-marks.js +68 -0
- package/dist/file-findings/file-review/source-marks.js.map +1 -0
- package/dist/file-findings/findings-comments.cjs +136 -0
- package/dist/file-findings/findings-comments.cjs.map +1 -0
- package/dist/file-findings/findings-comments.d.ts +28 -0
- package/dist/file-findings/findings-comments.d.ts.map +1 -0
- package/dist/file-findings/findings-comments.js +131 -0
- package/dist/file-findings/findings-comments.js.map +1 -0
- package/dist/file-findings/findings-languages.cjs +53 -0
- package/dist/file-findings/findings-languages.cjs.map +1 -0
- package/dist/file-findings/findings-languages.d.ts +11 -0
- package/dist/file-findings/findings-languages.d.ts.map +1 -0
- package/dist/file-findings/findings-languages.js +53 -0
- package/dist/file-findings/findings-languages.js.map +1 -0
- package/dist/file-findings/mdx-source.cjs +48 -0
- package/dist/file-findings/mdx-source.cjs.map +1 -0
- package/dist/file-findings/mdx-source.d.ts +7 -0
- package/dist/file-findings/mdx-source.d.ts.map +1 -0
- package/dist/file-findings/mdx-source.js +48 -0
- package/dist/file-findings/mdx-source.js.map +1 -0
- package/dist/file-findings/monaco-language.cjs +73 -0
- package/dist/file-findings/monaco-language.cjs.map +1 -0
- package/dist/file-findings/monaco-language.d.ts +11 -0
- package/dist/file-findings/monaco-language.d.ts.map +1 -0
- package/dist/file-findings/monaco-language.js +72 -0
- package/dist/file-findings/monaco-language.js.map +1 -0
- package/dist/file-findings/severity-counts.cjs +20 -0
- package/dist/file-findings/severity-counts.cjs.map +1 -0
- package/dist/file-findings/severity-counts.d.ts +5 -0
- package/dist/file-findings/severity-counts.d.ts.map +1 -0
- package/dist/file-findings/severity-counts.js +19 -0
- package/dist/file-findings/severity-counts.js.map +1 -0
- package/dist/file-findings/types.cjs +12 -0
- package/dist/file-findings/types.cjs.map +1 -0
- package/dist/file-findings/types.d.ts +43 -0
- package/dist/file-findings/types.d.ts.map +1 -0
- package/dist/file-findings/types.js +11 -0
- package/dist/file-findings/types.js.map +1 -0
- package/dist/file-findings.cjs +47 -0
- package/dist/file-findings.d.ts +15 -0
- package/dist/file-findings.d.ts.map +1 -0
- package/dist/file-findings.js +15 -0
- package/dist/hooks/event-hub.cjs +22 -8
- package/dist/hooks/event-hub.cjs.map +1 -1
- package/dist/hooks/event-hub.d.ts.map +1 -1
- package/dist/hooks/event-hub.js +22 -8
- package/dist/hooks/event-hub.js.map +1 -1
- package/dist/icons/components/UiBrowser.cjs +51 -0
- package/dist/icons/components/UiBrowser.cjs.map +1 -0
- package/dist/icons/components/UiBrowser.d.ts +15 -0
- package/dist/icons/components/UiBrowser.d.ts.map +1 -0
- package/dist/icons/components/UiBrowser.js +48 -0
- package/dist/icons/components/UiBrowser.js.map +1 -0
- package/dist/icons/components/UiCreditCard.cjs +51 -0
- package/dist/icons/components/UiCreditCard.cjs.map +1 -0
- package/dist/icons/components/UiCreditCard.d.ts +15 -0
- package/dist/icons/components/UiCreditCard.d.ts.map +1 -0
- package/dist/icons/components/UiCreditCard.js +48 -0
- package/dist/icons/components/UiCreditCard.js.map +1 -0
- package/dist/icons/components/UiShoppingCart.cjs +51 -0
- package/dist/icons/components/UiShoppingCart.cjs.map +1 -0
- package/dist/icons/components/UiShoppingCart.d.ts +15 -0
- package/dist/icons/components/UiShoppingCart.d.ts.map +1 -0
- package/dist/icons/components/UiShoppingCart.js +48 -0
- package/dist/icons/components/UiShoppingCart.js.map +1 -0
- package/dist/icons/index.d.ts +6 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +6 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +6 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +9 -0
- package/dist/icons.js +4 -1
- package/dist/index.cjs +75 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -12
- package/dist/layout/AppShell.cjs +37 -21
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +13 -2
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +37 -21
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +7 -6
- package/dist/layout/AppShell.nav.cjs.map +1 -1
- package/dist/layout/AppShell.nav.d.ts.map +1 -1
- package/dist/layout/AppShell.nav.js +7 -6
- package/dist/layout/AppShell.nav.js.map +1 -1
- package/dist/layout/SplitPane.cjs +16 -6
- package/dist/layout/SplitPane.cjs.map +1 -1
- package/dist/layout/SplitPane.d.ts +12 -2
- package/dist/layout/SplitPane.d.ts.map +1 -1
- package/dist/layout/SplitPane.js +16 -6
- package/dist/layout/SplitPane.js.map +1 -1
- package/dist/layout/Workspace.cjs +37 -33
- package/dist/layout/Workspace.cjs.map +1 -1
- package/dist/layout/Workspace.d.ts.map +1 -1
- package/dist/layout/Workspace.js +37 -33
- package/dist/layout/Workspace.js.map +1 -1
- package/dist/layout/Workspace.regions.cjs +3 -3
- package/dist/layout/Workspace.regions.cjs.map +1 -1
- package/dist/layout/Workspace.regions.js +3 -3
- package/dist/layout/Workspace.regions.js.map +1 -1
- package/dist/lib/breakpoints.cjs +102 -0
- package/dist/lib/breakpoints.cjs.map +1 -0
- package/dist/lib/breakpoints.d.ts +36 -0
- package/dist/lib/breakpoints.d.ts.map +1 -0
- package/dist/lib/breakpoints.js +99 -0
- package/dist/lib/breakpoints.js.map +1 -0
- package/dist/lib/combobox.cjs +2 -1
- package/dist/lib/combobox.cjs.map +1 -1
- package/dist/lib/combobox.d.ts +1 -1
- package/dist/lib/combobox.d.ts.map +1 -1
- package/dist/lib/combobox.js +2 -1
- package/dist/lib/combobox.js.map +1 -1
- package/dist/lib/path-tree.cjs +21 -0
- package/dist/lib/path-tree.cjs.map +1 -1
- package/dist/lib/path-tree.d.ts +15 -0
- package/dist/lib/path-tree.d.ts.map +1 -1
- package/dist/lib/path-tree.js +21 -1
- package/dist/lib/path-tree.js.map +1 -1
- package/dist/overlay/Modal.cjs +2 -1
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +2 -1
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/overlay/dropdownMenuContext.d.ts +1 -1
- package/dist/profiles/editor/profileEditor.cjs +1 -1
- package/dist/profiles/editor/profileEditor.cjs.map +1 -1
- package/dist/profiles/editor/profileEditor.js +1 -1
- package/dist/profiles/editor/profileEditor.js.map +1 -1
- package/dist/profiles/editor/profileEditorSections.cjs +2 -2
- package/dist/profiles/editor/profileEditorSections.cjs.map +1 -1
- package/dist/profiles/editor/profileEditorSections.js +2 -2
- package/dist/profiles/editor/profileEditorSections.js.map +1 -1
- package/dist/profiles/query/prometheusResults.cjs +24 -36
- package/dist/profiles/query/prometheusResults.cjs.map +1 -1
- package/dist/profiles/query/prometheusResults.d.ts.map +1 -1
- package/dist/profiles/query/prometheusResults.js +24 -36
- package/dist/profiles/query/prometheusResults.js.map +1 -1
- package/dist/rpc/CommandForm.cjs +1 -1
- package/dist/rpc/CommandForm.cjs.map +1 -1
- package/dist/rpc/CommandForm.js +1 -1
- package/dist/rpc/CommandForm.js.map +1 -1
- package/dist/rpc/classify.cjs +1 -1
- package/dist/rpc/classify.cjs.map +1 -1
- package/dist/rpc/classify.d.ts.map +1 -1
- package/dist/rpc/classify.js +1 -1
- package/dist/rpc/classify.js.map +1 -1
- package/dist/rpc/useOperations.d.ts +24 -24
- package/dist/rpc.cjs +0 -2
- package/dist/rpc.d.ts +0 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +1 -2
- package/dist/styles.css +1 -1
- package/dist/utils.cjs +6 -0
- package/dist/utils.d.ts +2 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +3 -2
- package/package.json +9 -3
- package/schemas/json-schema-form.schema.json +9 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.cjs","names":["matchesFilterState","normalizeLintPath","severityOf","relPath","decorateLintFile","collapsedPathSegments","worstSeverity","linterErrorMessage","isLinterErrored","slugify"],"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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"grouping.cjs","names":["matchesFilterState","normalizeLintPath","severityOf","relPath","decorateLintFile","collapsedPathSegments","worstSeverity","linterErrorMessage","isLinterErrored","isLinterInFlight","lintNodeCount","slugify"],"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 {\n isLinterErrored,\n isLinterInFlight,\n linterErrorMessage,\n lintNodeCount,\n severityOf,\n worstSeverity,\n} 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\n/** A violation with its linter and paths resolved, as every view lists it. */\nexport type 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\n/** Every violation the filters keep, with work-dir-relative and display paths. */\nexport function 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\nfunction linterNamesIn(nodes: readonly Draft[], into = new Set<string>()): Set<string> {\n for (const node of nodes) {\n if (node.kind === \"linter\" && node.linterName) into.add(node.linterName);\n linterNamesIn(node.children ?? [], into);\n }\n return into;\n}\n\n/**\n * Linters still queued or running appear in every grouping even before they\n * report a violation, and have no verdict (`passed` stays false) until they finish.\n */\nfunction withInFlightLinters(roots: Draft[], results: readonly LinterResult[], filters: LintFilters): Draft[] {\n const present = linterNamesIn(roots);\n const missing = new Map<string, LinterResult>();\n for (const r of results) {\n if (isLinterInFlight(r) && matchesFilterState(r.linter, filters.linter) && !present.has(r.linter)) {\n missing.set(r.linter, r);\n }\n }\n const markPending = (nodes: Draft[]): Draft[] =>\n nodes.map((node) => {\n const children = node.children ? markPending(node.children) : undefined;\n const inFlight = node.kind === \"linter\" && node.linter !== undefined && isLinterInFlight(node.linter);\n return { ...node, ...(children ? { children } : {}), ...(inFlight ? { passed: false } : {}) };\n });\n if (missing.size === 0) return markPending(roots);\n const added = Array.from(missing.values()).map((r) => linterNode(r.linter, r, []));\n const linters = new Map([...roots.filter((n) => n.kind === \"linter\"), ...added].map((n) => [n.name, n]));\n return markPending([...roots.filter((n) => n.kind !== \"linter\"), ...sortedKeys(linters).map((k) => linters.get(k)!)]);\n}\n\n// ---------------------------------------------------------------------------\n// Linter ordering and nesting (linter-first groupings)\n\nconst STATUS_BUCKETS = [\"running\", \"pending\", \"failed\", \"findings\", \"passed\"] as const;\ntype StatusBucket = (typeof STATUS_BUCKETS)[number];\n\n/** Where a linter node sorts: its own state, or a nested linter's if that is more urgent. */\nfunction statusBucket(node: Draft): number {\n const own: StatusBucket =\n node.linter?.status === \"running\"\n ? \"running\"\n : node.linter?.status === \"pending\"\n ? \"pending\"\n : node.children?.some((c) => c.kind === \"linter-error\")\n ? \"failed\"\n : lintNodeCount(node) > 0\n ? \"findings\"\n : \"passed\";\n const nested = (node.children ?? []).filter((c) => c.kind === \"linter\").map(statusBucket);\n return Math.min(STATUS_BUCKETS.indexOf(own), ...nested);\n}\n\n/** Running → pending → failed → with findings → passed; by name within a bucket (the sort is stable). */\nfunction sortLinterNodes(nodes: Draft[]): Draft[] {\n return nodes\n .map((node) => ({ node, bucket: statusBucket(node) }))\n .sort((a, b) => a.bucket - b.bucket || (a.node.name < b.node.name ? -1 : a.node.name > b.node.name ? 1 : 0))\n .map(({ node }) => node);\n}\n\n/**\n * Results named `<parent>/<child>` where a `<parent>` result exists (the linters\n * a prompt run's agent ran) become linter nodes beneath the parent's node,\n * shown by their child name. Without a visible parent they stay top-level.\n */\nfunction nestChildLinters(roots: Draft[], results: readonly LinterResult[], filters: LintFilters): Draft[] {\n const visible = results.filter((r) => matchesFilterState(r.linter, filters.linter));\n const meta = linterMetaOf(visible);\n const parentOf = (name: string): string | undefined => {\n for (let i = name.lastIndexOf(\"/\"); i > 0; i = name.lastIndexOf(\"/\", i - 1)) {\n if (meta.has(name.slice(0, i))) return name.slice(0, i);\n }\n return undefined;\n };\n const nodes = new Map(roots.filter((n) => n.kind === \"linter\").map((n) => [n.name, n]));\n const childrenOf = groupBy(\n Array.from(meta.keys()).filter((name) => parentOf(name) !== undefined),\n (name) => parentOf(name)!,\n );\n if (childrenOf.size === 0) return roots;\n\n const attach = (name: string, nestedUnder?: string): Draft => {\n const node = nodes.get(name) ?? linterNode(name, meta.get(name), []);\n const nested = (childrenOf.get(name) ?? []).map((child) => attach(child, name));\n const label = nestedUnder ? { name: name.slice(nestedUnder.length + 1), nestedUnder } : {};\n if (nested.length === 0) return { ...node, ...label };\n const own = node.children ?? [];\n const failed = node.failed || nested.some((n) => n.failed);\n return {\n ...node,\n ...label,\n children: [\n ...own.filter((c) => c.kind === \"linter-error\"),\n ...sortLinterNodes(nested),\n ...own.filter((c) => c.kind !== \"linter-error\"),\n ],\n failed,\n passed: node.passed && !failed && nested.every((n) => n.passed || n.skipped),\n };\n };\n\n const topLevel = new Set([...nodes.keys(), ...childrenOf.keys()]);\n return [\n ...roots.filter((n) => n.kind !== \"linter\"),\n ...Array.from(topLevel)\n .filter((name) => parentOf(name) === undefined)\n .map((name) => attach(name)),\n ];\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.replace(/\\/+$/, \"\")}/${c.replace(/^\\/+/, \"\")}` : p || c;\n}\n\n/**\n * Folds a folder (a node of `folderKind`) that has a single child into that\n * child: `pkg/sub/a.go`. Generic so other path trees can reuse it.\n */\nexport function collapseFolderChains<N extends { name: string; kind: string; children?: N[] | undefined }>(\n nodes: N[],\n folderKind: N[\"kind\"],\n): N[] {\n return nodes.map((node) => {\n if (!node.children || node.children.length === 0) return node;\n const children = collapseFolderChains(node.children, folderKind);\n if (children.length === 1 && node.kind === folderKind) {\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 = withInFlightLinters(\n withLinterErrors(GROUPERS[grouping](results, filters), results, filters),\n results,\n filters,\n );\n // The file-rooted grouping has no linter roots to order or nest.\n const ordered = grouping === \"file-linter-rule\" ? grouped : sortLinterNodes(nestChildLinters(grouped, results, filters));\n // Summary keeps its linter -> rule -> file branches as built.\n return annotateRoutePaths(grouping === \"summary\" ? ordered : collapseFolderChains(ordered, \"lint-folder\"));\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"],"mappings":";;;;;AAmDA,IAAM,UAAU;AAChB,IAAM,qBAAqB;AAE3B,SAAS,WAAW,GAAsB;CACxC,OAAO,EAAE,MAAM,UAAU;AAC3B;AAEA,SAAS,OAAO,YAA+C;CAC7D,OAAO,WAAW,MAAM,CAAC,CAAC,MAAM,GAAG,OAAO,EAAE,QAAQ,MAAM,EAAE,QAAQ,EAAE;AACxE;AAEA,SAAS,UAAU,GAAmB;CACpC,MAAM,MAAM,EAAE,QAAQ,IAAI;CAC1B,OAAO,QAAQ,KAAK,IAAI,EAAE,MAAM,GAAG,GAAG;AACxC;AAEA,SAAS,QAAc,OAAqB,KAAkC;CAC5E,MAAM,sBAAM,IAAI,IAAY;CAC5B,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC;EAC9B,IAAI,MAAM,KAAK,KAAK,IAAI;OACnB,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;CAChC;CACA,OAAO;AACT;AAEA,SAAS,WAAc,KAA+B;CACpD,OAAO,MAAM,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK;AACrC;;AAMA,SAAgB,YAAY,SAAkC,SAAuC;CACnG,MAAM,UAAU,QAAQ,QAAQ,MAAMA,oBAAAA,mBAAmB,EAAE,QAAQ,QAAQ,MAAM,CAAC;CAClF,MAAM,YAAY,IAAI,IAAI,QAAQ,SAAS,MAAO,EAAE,WAAW,CAACC,cAAAA,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAE,CAAC,CAAC,CAAC,OAAO;CAC9G,MAAM,MAAuB,CAAC;CAC9B,KAAK,MAAM,UAAU,SACnB,KAAK,MAAM,KAAK,OAAO,cAAc,CAAC,GAAG;EACvC,IAAI,CAACD,oBAAAA,mBAAmBE,cAAAA,WAAW,CAAC,GAAG,QAAQ,QAAQ,GAAG;EAC1D,MAAM,UAAUC,cAAAA,QAAQ,EAAE,MAAM,OAAO,QAAQ;EAC/C,MAAM,OAAOC,cAAAA,iBAAiB,SAAS,OAAO,UAAU,SAAS;EACjE,IAAI,KAAK;GACP,QAAQ,OAAO;GACf;GACA,GAAG;IAAE,GAAG;IAAG,UAAU;IAAS;GAAK;GACnC;GACA;GACA,SAAS,OAAO;EAClB,CAAC;CACH;CAEF,OAAO;AACT;AAEA,SAAS,aAAa,SAA6D;CACjF,MAAM,uBAAO,IAAI,IAA0B;CAC3C,KAAK,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE,MAAM,GAAG,KAAK,IAAI,EAAE,QAAQ,CAAC;CACtE,OAAO;AACT;AAKA,SAAS,UAAsB;CAC7B,OAAO;EAAE,MAAM;EAAI,MAAM,KAAA;EAAW,SAAS;EAAI,yBAAS,IAAI,IAAI;EAAG,wBAAQ,IAAI,IAAI;CAAE;AACzF;;AAGA,SAAS,SAAY,MAAe,MAAc,SAAiB,QAAoB;CACrF,MAAM,WAAWC,cAAAA,sBAAsB,IAAI;CAC3C,MAAM,cAAcA,cAAAA,sBAAsB,OAAO;CACjD,IAAI,SAAS,WAAW,KAAK,YAAY,WAAW,GAClD,MAAM,IAAI,MAAM,kDAAkD,KAAK,UAAU,IAAI,EAAE,QAAQ,KAAK,UAAU,OAAO,EAAE,EAAE;CAE3H,MAAM,iBAAiB,SAAS,MAAM,GAAG,EAAE;CAC3C,MAAM,oBAAoB,YAAY,MAAM,GAAG,EAAE;CAGjD,MAAM,YAAY,eAAe,SAAS,kBAAkB;CAC5D,IAAI,UAAU;CACd,eAAe,SAAS,SAAS,MAAM;EACrC,IAAI,QAAQ,QAAQ,QAAQ,IAAI,OAAO;EACvC,IAAI,CAAC,OAAO;GACV,MAAM,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,kBAAkB,QAAQ,IAAI,IAAI,SAAS,CAAC;GAClF,QAAQ;IACN,MAAM;IACN,MAAM,QAAQ,OAAO,GAAG,QAAQ,KAAK,GAAG,YAAY;IACpD,SAAS,kBAAkB,MAAM,GAAG,QAAQ,CAAC,CAAC,KAAK,GAAG;IACtD,yBAAS,IAAI,IAAI;IACjB,wBAAQ,IAAI,IAAI;GAClB;GACA,QAAQ,QAAQ,IAAI,SAAS,KAAK;EACpC;EACA,UAAU;CACZ,CAAC;CACD,MAAM,WAAW,SAAS,SAAS,SAAS;CAC5C,IAAI,OAAO,QAAQ,OAAO,IAAI,QAAQ;CACtC,IAAI,CAAC,MAAM;EACT,OAAO,OAAO;EACd,QAAQ,OAAO,IAAI,UAAU,IAAI;CACnC;CACA,OAAO;AACT;AAKA,SAAS,UAAU,MAAc,MAAqB,UAA0B;CAC9E,MAAM,SAAS,SAAS,MAAM,MAAM,EAAE,MAAM;CAC5C,OAAO;EAAE;EAAM;EAAM;EAAU;EAAQ,QAAQ,CAAC;EAAQ,SAAS;CAAM;AACzE;AAEA,SAAS,cAAc,UAAgD;CACrE,MAAM,OAAO,IAAI,IAAI,SAAS,SAAS,MAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAE,CAAC;CAC9E,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,KAAK,KAAA;AACjD;AAEA,SAAS,qBAAqB,MAAa,QAAqC;CAC9E,IAAI,OAAO,WAAW,GAAG,OAAO;CAChC,MAAM,SAAS,KAAK,UAAUC,cAAAA,cAAc,MAAM,MAAM;CACxD,OAAO;EAAE,GAAG;EAAM,kBAAkB,OAAO,MAAM;EAAG;EAAQ,QAAQ,CAAC;CAAO;AAC9E;AAEA,SAAS,cAAc,MAQb;CACR,MAAM,SAASA,cAAAA,cAAc,KAAK,UAAU,MAAM;CAClD,OAAO;EACL,MAAM,KAAK;EACX,MAAM,KAAK;EACX,MAAM,KAAK;EACX,aAAa,KAAK;EAClB,UAAU,KAAK;EACf,YAAY,KAAK;EACjB,YAAY,OAAO,KAAK,UAAU;EAClC;EACA,QAAQ,CAAC;EACT,SAAS;CACX;AACF;AAEA,SAAS,WACP,YACA,QACA,UACA,SAA+B,CAAC,GACzB;CACP,OAAO,qBAAqB;EAAE,GAAG,UAAU,YAAY,UAAU,QAAQ;EAAG,QAAQ;EAAQ;CAAW,GAAG,MAAM;AAClH;AAEA,SAAS,gBAAgB,QAA6B;CACpD,MAAM,UAAUC,cAAAA,mBAAmB,MAAM;CACzC,OAAO;EACL,MAAM,UAAU,OAAO;EACvB,MAAM;EACN,YAAY,OAAO;EACnB,QAAQ;EACR,UAAU,OAAO;EACjB,QAAQ;EACR,QAAQ;EACR,SAAS;EACT;CACF;AACF;AAEA,SAAS,UAAU,MAAwB,YAAoB,UAA4B;CACzF,MAAM,UAAU,WAAW,KAAK,OAAO,CAAC,CAAC,KAAK,QAAQ;EACpD,MAAM,SAAS,KAAK,QAAQ,IAAI,GAAG;EACnC,MAAM,OAAO,UAAU,OAAO,MAAM,eAAe,UAAU,QAAQ,YAAY,QAAQ,CAAC;EAC1F,OAAO;GACL,GAAG;GACH,MAAM,OAAO;GACb,aAAa,OAAO;GACpB;GACA,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;GAC/B,UAAU,cAAc,KAAK,QAAS;EACxC;CACF,CAAC;CACD,MAAM,QAAQ,WAAW,KAAK,MAAM,CAAC,CAAC,KAAK,QAAQ;EACjD,MAAM,SAAS,KAAK,OAAO,IAAI,GAAG;EAElC,MAAM,OAAO,cAAc;GACzB,MAAM;GACN,MAAM;GACN,MAJe,KAAK,OAAO,GAAG,KAAK,KAAK,GAAG,QAAQ;GAKnD,SAAS,OAAO;GAChB;GACA,YAAY,OAAO;GACnB,SAAS,OAAO;EAClB,CAAC;EACD,OAAO,WAAW;GAAE,GAAG;GAAM;EAAS,IAAI;CAC5C,CAAC;CACD,OAAO,CAAC,GAAG,SAAS,GAAG,KAAK;AAC9B;AAIA,SAAS,gBAAgB,MAAyB,YAAgD;CAChG,MAAM,UAAU,WAAW,KAAK,OAAO,CAAC,CAAC,KAAK,QAAQ;EACpD,MAAM,SAAS,KAAK,QAAQ,IAAI,GAAG;EACnC,MAAM,OAAO,UAAU,OAAO,MAAM,eAAe,gBAAgB,QAAQ,UAAU,CAAC;EACtF,OAAO;GAAE,GAAG;GAAM,MAAM,OAAO;GAAM,aAAa,OAAO;GAAS,UAAU,cAAc,KAAK,QAAS;EAAE;CAC5G,CAAC;CACD,MAAM,QAAQ,WAAW,KAAK,MAAM,CAAC,CAAC,KAAK,QAAQ;EACjD,MAAM,UAAU,KAAK,OAAO,IAAI,GAAG;EACnC,MAAM,WAAW,KAAK,OAAO,GAAG,KAAK,KAAK,GAAG,QAAQ;EACrD,MAAM,eAAe,WAAW,OAAO,CAAC,CAAC,KAAK,eAAe;GAC3D,MAAM,EAAE,SAAS,UAAU,QAAQ,IAAI,UAAU;GACjD,MAAM,aAAa,WAAW,KAAK,CAAC,CAAC,KAAK,SAAS;IACjD,MAAM,aAAa,MAAM,IAAI,IAAI;IACjC,OAAO;KACL,GAAG,cAAc;MACf,MAAM;MACN,MAAM;MACN,MAAM;MACN,SAAS,WAAW,EAAE,EAAE,YAAY;MACpC;MACA;MACA;KACF,CAAC;KACD,UAAU;IACZ;GACF,CAAC;GACD,OAAO;IACL,GAAG,WAAW,YAAY,WAAW,IAAI,UAAU,GAAG,UAAU;IAChE,MAAM;IACN,aAAa,WAAW,EAAE,EAAE;IAC5B,UAAU;GACZ;EACF,CAAC;EACD,OAAO;GACL,GAAG,UAAU,KAAK,aAAa,YAAY;GAC3C,MAAM;GACN,aAAa,aAAa,EAAE,EAAE;GAC9B,UAAU,cAAc,YAAY;EACtC;CACF,CAAC;CACD,OAAO,CAAC,GAAG,SAAS,GAAG,KAAK;AAC9B;AAKA,SAAS,YAAY,MAAkD;CACrE,MAAM,OAAO,QAAoB;CACjC,KAAK,MAAM,KAAK,MAAM;EACpB,IAAI,CAAC,EAAE,MAAM;EACb,SAAS,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa;GACjD,SAAS,EAAE,WAAW,EAAE;GACxB,SAAS,EAAE;GACX,YAAY,CAAC;EACf,EAAE,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC;CACzB;CACA,OAAO;AACT;AAEA,SAAS,sBAAsB,SAAkC,SAA+B;CAC9F,MAAM,OAAO,aAAa,OAAO;CACjC,MAAM,WAAW,QAAQ,YAAY,SAAS,OAAO,IAAI,MAAM,EAAE,MAAM;CACvE,OAAO,MAAM,KAAK,SAAS,KAAK,CAAC,CAAC,CAC/B,KAAK,CAAC,CACN,KAAK,eAAe;EACnB,MAAM,SAAS,QAAQ,SAAS,IAAI,UAAU,IAAK,MAAM,WAAW,EAAE,CAAC,CAAC;EACxE,MAAM,YAAY,MAAM,KAAK,OAAO,KAAK,CAAC,CAAC,CACxC,KAAK,CAAC,CACN,KAAK,SAAS;GACb,MAAM,QAAQ,OAAO,IAAI,IAAI;GAC7B,MAAM,WAAW,UAAU,YAAY,KAAK,GAAG,YAAY,IAAI;GAE/D,OAAO,qBACL;IACE,GAHS,UAAU,MAAM,mBAAmB,QAGzC;IACH;IACA,UAAU;IACV,UAAU,cAAc,QAAQ,KAAK,KAAK,IAAI,UAAU,CAAC,EAAE;GAC7D,GACA,MAAM,QAAQ,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAC7C;EACF,CAAC;EACH,OAAO,WAAW,YAAY,KAAK,IAAI,UAAU,GAAG,SAAS;CAC/D,CAAC;AACL;AAEA,SAAS,kBAAkB,SAAkC,SAA+B;CAC1F,MAAM,OAAO,aAAa,OAAO;CACjC,MAAM,WAAW,QAAQ,YAAY,SAAS,OAAO,IAAI,MAAM,EAAE,MAAM;CACvE,OAAO,MAAM,KAAK,SAAS,KAAK,CAAC,CAAC,CAC/B,KAAK,CAAC,CACN,KAAK,eAAe;EACnB,MAAM,QAAQ,SAAS,IAAI,UAAU;EACrC,OAAO,WACL,YACA,KAAK,IAAI,UAAU,GACnB,UAAU,YAAY,KAAK,GAAG,UAAU,GACxC,MAAM,QAAQ,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAC7C;CACF,CAAC;AACL;AAEA,SAAS,sBAAsB,SAAkC,SAA+B;CAC9F,MAAM,OAAO,aAAa,OAAO;CACjC,MAAM,OAAO,YAAY,SAAS,OAAO;CACzC,MAAM,OAAO,QAAqB;CAClC,KAAK,MAAM,KAAK,MAAM;EACpB,IAAI,CAAC,EAAE,MAAM;EACb,MAAM,UAAU,SAAS,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,4BAAY,IAAI,IAAI,CAAC;EAC3E,IAAI,QAAQ,QAAQ,IAAI,EAAE,MAAM;EAChC,IAAI,CAAC,OAAO;GACV,QAAQ;IAAE,SAAS,EAAE;IAAS,uBAAO,IAAI,IAAI;GAAE;GAC/C,QAAQ,IAAI,EAAE,QAAQ,KAAK;EAC7B;EACA,MAAM,OAAO,WAAW,EAAE,CAAC;EAC3B,MAAM,MAAM,IAAI,MAAM,CAAC,GAAI,MAAM,MAAM,IAAI,IAAI,KAAK,CAAC,GAAI,EAAE,CAAC,CAAC;CAC/D;CAEA,MAAM,WAAW,QAAQ,KAAK,QAAQ,MAAM,CAAC,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM;CACrE,MAAM,gBAAgB,MAAM,KAAK,SAAS,KAAK,CAAC,CAAC,CAC9C,KAAK,CAAC,CACN,KAAK,eAAe;EACnB,MAAM,SAAS,QAAQ,SAAS,IAAI,UAAU,IAAK,MAAM,WAAW,EAAE,CAAC,CAAC;EACxE,MAAM,UAAU,KAAK,IAAI,UAAU,CAAC,EAAE;EACtC,MAAM,SAAS,MAAM,KAAK,OAAO,KAAK,CAAC,CAAC,CACrC,KAAK,CAAC,CACN,KAAK,UAAU;GACd,GAAG,cAAc;IACf,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT;IACA,YAAY,OAAO,IAAI,IAAI,CAAC,CAAE,KAAK,MAAM,EAAE,CAAC;IAC5C;GACF,CAAC;GACD,UAAU;GACV,MAAM,KAAA;GACN,aAAa,KAAA;EACf,EAAE;EACJ,OAAO,WAAW,YAAY,KAAK,IAAI,UAAU,GAAG,MAAM;CAC5D,CAAC;CAEH,OAAO,CAAC,GAAG,gBAAgB,MAAM,IAAI,GAAG,GAAG,aAAa;AAC1D;AAEA,SAAS,iBAAiB,MAA0B,YAA0C;CAC5F,IAAI,CAAC,MAAM,OAAO;CAClB,IAAI,WAAW,SAAS,GAAG,OAAO,GAAG,KAAK,IAAI,WAAW,OAAO;CAChE,MAAM,IAAI,WAAW;CACrB,IAAI,GAAG,MAAM,OAAO,EAAE,SAAS,GAAG,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,WAAW,GAAG,KAAK,GAAG,EAAE;CAC9E,OAAO;AACT;AAEA,SAAS,gBAAgB,MAAc,YAAoB,OAAwC;CACjG,MAAM,SAAS,QAAQ,QAAQ,MAAM,EAAE,QAAQ,EAAE;CACjD,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,CAAC;CACrC,MAAM,QAAiB,KAAK,MAAM,GAAG,kBAAkB,CAAC,CAAC,KAAK,QAAQ;EACpE,MAAM,QAAQ,OAAO,IAAI,GAAG;EAC5B,OAAO;GACL,GAAG,cAAc;IACf,MAAM,iBAAiB,MAAM,EAAE,CAAE,MAAM,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;IAC5D,MAAM;IACN,MAAM,MAAM,EAAE,CAAE,QAAQ;IACxB,SAAS,MAAM,EAAE,CAAE,WAAW;IAC9B;IACA,YAAY,MAAM,KAAK,MAAM,EAAE,CAAC;IAChC,SAAS,MAAM,EAAE,CAAE;GACrB,CAAC;GACD,MAAM,MAAM,EAAE,CAAE;GAChB,aAAa,MAAM,EAAE,CAAE;GACvB,UAAU;EACZ;CACF,CAAC;CACD,MAAM,YAAY,KAAK,SAAS,MAAM;CACtC,IAAI,YAAY,GACd,MAAM,KAAK;EACT,MAAM,KAAK,UAAU,YAAY,cAAc,IAAI,KAAK;EACxD,MAAM;EACN;EACA,UAAU;EACV,QAAQ;EACR,QAAQ;EACR,SAAS;CACX,CAAC;CAEH,MAAM,eAAe,MAAM,MAAM,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;CAEvD,OAAO;EAAE,GAAG,UADC,eAAe,GAAG,KAAK,IAAI,MAAM,OAAO,MAAM,iBAAiB,GAAG,KAAK,IAAI,MAAM,OAAO,IACzE,mBAAmB,KAAK;EAAG;EAAY,UAAU;CAAK;AACpF;AAEA,SAAS,eAAe,SAAkC,SAA+B;CACvF,MAAM,OAAO,aAAa,OAAO;CACjC,MAAM,eAAe,QAAQ,YAAY,SAAS,OAAO,IAAI,MAAM,EAAE,MAAM;CAC3E,MAAM,UAAU,QAAQ,QAAQ,MAAMP,oBAAAA,mBAAmB,EAAE,QAAQ,QAAQ,MAAM,CAAC;CAClF,MAAM,UAAU,IAAI,IAAI,QAAQ,QAAQ,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,SAAS,CAAC,CAAC;CAErG,OAAO,MAAM,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CACrD,KAAK,CAAC,CACN,KAAK,eAAe;EACnB,MAAM,QAAQ,aAAa,IAAI,UAAU,KAAK,CAAC;EAC/C,IAAI,MAAM,WAAW,KAAK,QAAQ,IAAI,UAAU,GAC9C,OAAO;GACL,MAAM;GACN,MAAM;GACN,QAAQ,KAAK,IAAI,UAAU;GAC3B;GACA,SAAS;GACT,QAAQ;GACR,QAAQ;GACR,SAAS,YAAY,QAAQ,IAAI,UAAU;EAC7C;EAEF,MAAM,SAAS,QAAQ,QAAQ,MAAM,WAAW,EAAE,CAAC,CAAC;EACpD,MAAM,YAAY,MAAM,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC,MACzC,GAAG,MAAM,OAAO,IAAI,CAAC,CAAC,CAAE,SAAS,OAAO,IAAI,CAAC,CAAC,CAAE,UAAU,EAAE,cAAc,CAAC,CAC9E;EACA,OAAO,WACL,YACA,KAAK,IAAI,UAAU,GACnB,UAAU,KAAK,SAAS,gBAAgB,MAAM,YAAY,OAAO,IAAI,IAAI,CAAE,CAAC,CAC9E;CACF,CAAC;AACL;;AAGA,SAAS,iBAAiB,OAAgB,SAAkC,SAA+B;CACzG,MAAM,SAAS,QACb,QAAQ,QAAQ,MAAMQ,cAAAA,gBAAgB,CAAC,KAAKR,oBAAAA,mBAAmB,EAAE,QAAQ,QAAQ,MAAM,CAAC,IACvF,MAAM,EAAE,MACX;CACA,IAAI,OAAO,SAAS,GAAG,OAAO;CAC9B,MAAM,UAAU,IAAI,IAAI,MAAM,QAAQ,MAAM,EAAE,SAAS,QAAQ,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;CACxF,KAAK,MAAM,CAAC,MAAM,WAAW,QAAQ;EACnC,MAAM,aAAa,OAAO,IAAI,eAAe;EAC7C,MAAM,WAAW,QAAQ,IAAI,IAAI;EACjC,QAAQ,IACN,MACA,WACI;GAAE,GAAG;GAAU,UAAU,CAAC,GAAG,YAAY,GAAI,SAAS,YAAY,CAAC,CAAE;GAAG,QAAQ;GAAM,QAAQ;EAAM,IACpG,WAAW,MAAM,OAAO,IAAI,UAAU,CAC5C;CACF;CAEA,OAAO,CAAC,GADO,MAAM,QAAQ,MAAM,EAAE,SAAS,QACnC,GAAQ,GAAG,WAAW,OAAO,CAAC,CAAC,KAAK,SAAS,QAAQ,IAAI,IAAI,CAAE,CAAC;AAC7E;AAEA,SAAS,cAAc,OAAyB,uBAAO,IAAI,IAAY,GAAgB;CACrF,KAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,KAAK,SAAS,YAAY,KAAK,YAAY,KAAK,IAAI,KAAK,UAAU;EACvE,cAAc,KAAK,YAAY,CAAC,GAAG,IAAI;CACzC;CACA,OAAO;AACT;;;;;AAMA,SAAS,oBAAoB,OAAgB,SAAkC,SAA+B;CAC5G,MAAM,UAAU,cAAc,KAAK;CACnC,MAAM,0BAAU,IAAI,IAA0B;CAC9C,KAAK,MAAM,KAAK,SACd,IAAIS,cAAAA,iBAAiB,CAAC,KAAKT,oBAAAA,mBAAmB,EAAE,QAAQ,QAAQ,MAAM,KAAK,CAAC,QAAQ,IAAI,EAAE,MAAM,GAC9F,QAAQ,IAAI,EAAE,QAAQ,CAAC;CAG3B,MAAM,eAAe,UACnB,MAAM,KAAK,SAAS;EAClB,MAAM,WAAW,KAAK,WAAW,YAAY,KAAK,QAAQ,IAAI,KAAA;EAC9D,MAAM,WAAW,KAAK,SAAS,YAAY,KAAK,WAAW,KAAA,KAAaS,cAAAA,iBAAiB,KAAK,MAAM;EACpG,OAAO;GAAE,GAAG;GAAM,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;GAAI,GAAI,WAAW,EAAE,QAAQ,MAAM,IAAI,CAAC;EAAG;CAC9F,CAAC;CACH,IAAI,QAAQ,SAAS,GAAG,OAAO,YAAY,KAAK;CAChD,MAAM,QAAQ,MAAM,KAAK,QAAQ,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,WAAW,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;CACjF,MAAM,UAAU,IAAI,IAAI,CAAC,GAAG,MAAM,QAAQ,MAAM,EAAE,SAAS,QAAQ,GAAG,GAAG,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;CACvG,OAAO,YAAY,CAAC,GAAG,MAAM,QAAQ,MAAM,EAAE,SAAS,QAAQ,GAAG,GAAG,WAAW,OAAO,CAAC,CAAC,KAAK,MAAM,QAAQ,IAAI,CAAC,CAAE,CAAC,CAAC;AACtH;AAKA,IAAM,iBAAiB;CAAC;CAAW;CAAW;CAAU;CAAY;AAAQ;;AAI5E,SAAS,aAAa,MAAqB;CACzC,MAAM,MACJ,KAAK,QAAQ,WAAW,YACpB,YACA,KAAK,QAAQ,WAAW,YACtB,YACA,KAAK,UAAU,MAAM,MAAM,EAAE,SAAS,cAAc,IAClD,WACAC,cAAAA,cAAc,IAAI,IAAI,IACpB,aACA;CACZ,MAAM,UAAU,KAAK,YAAY,CAAC,EAAA,CAAG,QAAQ,MAAM,EAAE,SAAS,QAAQ,CAAC,CAAC,IAAI,YAAY;CACxF,OAAO,KAAK,IAAI,eAAe,QAAQ,GAAG,GAAG,GAAG,MAAM;AACxD;;AAGA,SAAS,gBAAgB,OAAyB;CAChD,OAAO,MACJ,KAAK,UAAU;EAAE;EAAM,QAAQ,aAAa,IAAI;CAAE,EAAE,CAAC,CACrD,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,OAAO,KAAK,EAAE,KAAK,OAAO,EAAE,KAAK,OAAO,IAAI,EAAE,CAAC,CAC3G,KAAK,EAAE,WAAW,IAAI;AAC3B;;;;;;AAOA,SAAS,iBAAiB,OAAgB,SAAkC,SAA+B;CAEzG,MAAM,OAAO,aADG,QAAQ,QAAQ,MAAMV,oBAAAA,mBAAmB,EAAE,QAAQ,QAAQ,MAAM,CACvD,CAAO;CACjC,MAAM,YAAY,SAAqC;EACrD,KAAK,IAAI,IAAI,KAAK,YAAY,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,YAAY,KAAK,IAAI,CAAC,GACxE,IAAI,KAAK,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,KAAK,MAAM,GAAG,CAAC;CAG1D;CACA,MAAM,QAAQ,IAAI,IAAI,MAAM,QAAQ,MAAM,EAAE,SAAS,QAAQ,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;CACtF,MAAM,aAAa,QACjB,MAAM,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,SAAS,SAAS,IAAI,MAAM,KAAA,CAAS,IACpE,SAAS,SAAS,IAAI,CACzB;CACA,IAAI,WAAW,SAAS,GAAG,OAAO;CAElC,MAAM,UAAU,MAAc,gBAAgC;EAC5D,MAAM,OAAO,MAAM,IAAI,IAAI,KAAK,WAAW,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC;EACnE,MAAM,UAAU,WAAW,IAAI,IAAI,KAAK,CAAC,EAAA,CAAG,KAAK,UAAU,OAAO,OAAO,IAAI,CAAC;EAC9E,MAAM,QAAQ,cAAc;GAAE,MAAM,KAAK,MAAM,YAAY,SAAS,CAAC;GAAG;EAAY,IAAI,CAAC;EACzF,IAAI,OAAO,WAAW,GAAG,OAAO;GAAE,GAAG;GAAM,GAAG;EAAM;EACpD,MAAM,MAAM,KAAK,YAAY,CAAC;EAC9B,MAAM,SAAS,KAAK,UAAU,OAAO,MAAM,MAAM,EAAE,MAAM;EACzD,OAAO;GACL,GAAG;GACH,GAAG;GACH,UAAU;IACR,GAAG,IAAI,QAAQ,MAAM,EAAE,SAAS,cAAc;IAC9C,GAAG,gBAAgB,MAAM;IACzB,GAAG,IAAI,QAAQ,MAAM,EAAE,SAAS,cAAc;GAChD;GACA;GACA,QAAQ,KAAK,UAAU,CAAC,UAAU,OAAO,OAAO,MAAM,EAAE,UAAU,EAAE,OAAO;EAC7E;CACF;CAEA,MAAM,2BAAW,IAAI,IAAI,CAAC,GAAG,MAAM,KAAK,GAAG,GAAG,WAAW,KAAK,CAAC,CAAC;CAChE,OAAO,CACL,GAAG,MAAM,QAAQ,MAAM,EAAE,SAAS,QAAQ,GAC1C,GAAG,MAAM,KAAK,QAAQ,CAAC,CACpB,QAAQ,SAAS,SAAS,IAAI,MAAM,KAAA,CAAS,CAAC,CAC9C,KAAK,SAAS,OAAO,IAAI,CAAC,CAC/B;AACF;AAKA,SAAS,eAAe,QAAgB,OAAuB;CAC7D,MAAM,IAAI,OAAO,KAAK;CACtB,MAAM,IAAI,MAAM,KAAK;CACrB,OAAO,KAAK,IAAI,GAAG,EAAE,QAAQ,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,QAAQ,EAAE,MAAM,KAAK;AAC7E;;;;;AAMA,SAAgB,qBACd,OACA,YACK;CACL,OAAO,MAAM,KAAK,SAAS;EACzB,IAAI,CAAC,KAAK,YAAY,KAAK,SAAS,WAAW,GAAG,OAAO;EACzD,MAAM,WAAW,qBAAqB,KAAK,UAAU,UAAU;EAC/D,IAAI,SAAS,WAAW,KAAK,KAAK,SAAS,YAAY;GACrD,MAAM,CAAC,SAAS;GAChB,OAAO;IAAE,GAAG;IAAQ,MAAM,eAAe,KAAK,MAAM,MAAO,IAAI;GAAE;EACnE;EACA,OAAO;GAAE,GAAG;GAAM;EAAS;CAC7B,CAAC;AACH;;AAGA,SAAS,mBAAmB,OAAgB,iBAA2B,CAAC,GAAe;CACrF,MAAM,QAAQ,MAAM,KAAK,MAAMW,kBAAAA,QAAQ,EAAE,IAAI,CAAC;CAC9C,MAAM,SAAS,QAAQ,QAAQ,MAAM,CAAC;CACtC,MAAM,uBAAO,IAAI,IAAoB;CACrC,OAAO,MAAM,KAAK,MAAM,MAAM;EAC5B,MAAM,OAAO,MAAM;EACnB,MAAM,WAAW,KAAK,IAAI,IAAI,KAAK,KAAK;EACxC,KAAK,IAAI,MAAM,OAAO;EACtB,MAAM,UAAU,OAAO,IAAI,IAAI,CAAC,CAAE,SAAS,IAAI,GAAG,KAAK,GAAG,YAAY;EACtE,MAAM,WAAW,CAAC,GAAG,gBAAgB,OAAO;EAC5C,MAAM,EAAE,UAAU,GAAG,SAAS;EAC9B,OAAO;GACL,GAAG;GACH,YAAY,SAAS,KAAK,GAAG;GAC7B,GAAI,WAAW,EAAE,UAAU,mBAAmB,UAAU,QAAQ,EAAE,IAAI,CAAC;EACzE;CACF,CAAC;AACH;AAEA,IAAM,WAAsG;CAC1G,oBAAoB;CACpB,eAAe;CACf,oBAAoB;CACpB,SAAS;AACX;;AAGA,SAAgB,cAAc,EAC5B,SACA,UACA,WAKa;CACb,MAAM,UAAU,oBACd,iBAAiB,SAAS,SAAS,CAAC,SAAS,OAAO,GAAG,SAAS,OAAO,GACvE,SACA,OACF;CAEA,MAAM,UAAU,aAAa,qBAAqB,UAAU,gBAAgB,iBAAiB,SAAS,SAAS,OAAO,CAAC;CAEvH,OAAO,mBAAmB,aAAa,YAAY,UAAU,qBAAqB,SAAS,aAAa,CAAC;AAC3G;;AAGA,SAAgB,aAAa,OAA4B,MAA+B;CACtF,IAAI,CAAC,MAAM,OAAO;CAClB,KAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,KAAK,eAAe,MAAM,OAAO;EACrC,MAAM,QAAQ,KAAK,WAAW,aAAa,KAAK,UAAU,IAAI,IAAI;EAClE,IAAI,OAAO,OAAO;CACpB;CACA,OAAO;AACT"}
|
|
@@ -1,4 +1,24 @@
|
|
|
1
|
-
import { LintFilters, LintGrouping, LintNode, LinterResult } from './types.js';
|
|
1
|
+
import { LintFilters, LintGrouping, LintNode, LinterResult, Violation } from './types.js';
|
|
2
|
+
/** A violation with its linter and paths resolved, as every view lists it. */
|
|
3
|
+
export type FlatViolation = {
|
|
4
|
+
linter: string;
|
|
5
|
+
result: LinterResult;
|
|
6
|
+
v: Violation;
|
|
7
|
+
file: string | undefined;
|
|
8
|
+
rawFile: string | undefined;
|
|
9
|
+
workDir: string | undefined;
|
|
10
|
+
};
|
|
11
|
+
/** Every violation the filters keep, with work-dir-relative and display paths. */
|
|
12
|
+
export declare function flattenLint(results: readonly LinterResult[], filters: LintFilters): FlatViolation[];
|
|
13
|
+
/**
|
|
14
|
+
* Folds a folder (a node of `folderKind`) that has a single child into that
|
|
15
|
+
* child: `pkg/sub/a.go`. Generic so other path trees can reuse it.
|
|
16
|
+
*/
|
|
17
|
+
export declare function collapseFolderChains<N extends {
|
|
18
|
+
name: string;
|
|
19
|
+
kind: string;
|
|
20
|
+
children?: N[] | undefined;
|
|
21
|
+
}>(nodes: N[], folderKind: N["kind"]): N[];
|
|
2
22
|
/** The tree for one grouping: filtered, with failed linters shown, ready for `Tree`. */
|
|
3
23
|
export declare function buildLintTree({ results, grouping, filters, }: {
|
|
4
24
|
results: readonly LinterResult[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../../../src/data/lint/grouping.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../../../src/data/lint/grouping.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,SAAS,EACV,MAAM,SAAS,CAAC;AAIjB,8EAA8E;AAC9E,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,CAAC,EAAE,SAAS,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,CAAC;AA6CF,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CAoBnG;AAugBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,CAAA;CAAE,EACvG,KAAK,EAAE,CAAC,EAAE,EACV,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,GACpB,CAAC,EAAE,CAUL;AA6BD,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,CAUb;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAQtF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { matchesFilterState } from "../test-runner/filterState.js";
|
|
2
|
-
import { slugify } from "../test-runner/routePath.js";
|
|
3
2
|
import { collapsedPathSegments, decorateLintFile, normalizeLintPath, relPath } from "./paths.js";
|
|
4
|
-
import {
|
|
3
|
+
import { slugify } from "../test-runner/routePath.js";
|
|
4
|
+
import { isLinterErrored, isLinterInFlight, lintNodeCount, linterErrorMessage, severityOf, worstSeverity } from "./stats.js";
|
|
5
5
|
// src/data/lint/grouping.ts
|
|
6
6
|
var NO_RULE = "(no rule)";
|
|
7
7
|
var SUMMARY_FILE_LIMIT = 5;
|
|
@@ -27,6 +27,7 @@ function groupBy(items, key) {
|
|
|
27
27
|
function sortedKeys(map) {
|
|
28
28
|
return Array.from(map.keys()).sort();
|
|
29
29
|
}
|
|
30
|
+
/** Every violation the filters keep, with work-dir-relative and display paths. */
|
|
30
31
|
function flattenLint(results, filters) {
|
|
31
32
|
const visible = results.filter((r) => matchesFilterState(r.linter, filters.linter));
|
|
32
33
|
const multiRoot = new Set(visible.flatMap((r) => r.work_dir ? [normalizeLintPath(r.work_dir)] : [])).size > 1;
|
|
@@ -396,17 +397,110 @@ function withLinterErrors(roots, results, filters) {
|
|
|
396
397
|
}
|
|
397
398
|
return [...roots.filter((n) => n.kind !== "linter"), ...sortedKeys(linters).map((name) => linters.get(name))];
|
|
398
399
|
}
|
|
400
|
+
function linterNamesIn(nodes, into = /* @__PURE__ */ new Set()) {
|
|
401
|
+
for (const node of nodes) {
|
|
402
|
+
if (node.kind === "linter" && node.linterName) into.add(node.linterName);
|
|
403
|
+
linterNamesIn(node.children ?? [], into);
|
|
404
|
+
}
|
|
405
|
+
return into;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Linters still queued or running appear in every grouping even before they
|
|
409
|
+
* report a violation, and have no verdict (`passed` stays false) until they finish.
|
|
410
|
+
*/
|
|
411
|
+
function withInFlightLinters(roots, results, filters) {
|
|
412
|
+
const present = linterNamesIn(roots);
|
|
413
|
+
const missing = /* @__PURE__ */ new Map();
|
|
414
|
+
for (const r of results) if (isLinterInFlight(r) && matchesFilterState(r.linter, filters.linter) && !present.has(r.linter)) missing.set(r.linter, r);
|
|
415
|
+
const markPending = (nodes) => nodes.map((node) => {
|
|
416
|
+
const children = node.children ? markPending(node.children) : void 0;
|
|
417
|
+
const inFlight = node.kind === "linter" && node.linter !== void 0 && isLinterInFlight(node.linter);
|
|
418
|
+
return {
|
|
419
|
+
...node,
|
|
420
|
+
...children ? { children } : {},
|
|
421
|
+
...inFlight ? { passed: false } : {}
|
|
422
|
+
};
|
|
423
|
+
});
|
|
424
|
+
if (missing.size === 0) return markPending(roots);
|
|
425
|
+
const added = Array.from(missing.values()).map((r) => linterNode(r.linter, r, []));
|
|
426
|
+
const linters = new Map([...roots.filter((n) => n.kind === "linter"), ...added].map((n) => [n.name, n]));
|
|
427
|
+
return markPending([...roots.filter((n) => n.kind !== "linter"), ...sortedKeys(linters).map((k) => linters.get(k))]);
|
|
428
|
+
}
|
|
429
|
+
var STATUS_BUCKETS = [
|
|
430
|
+
"running",
|
|
431
|
+
"pending",
|
|
432
|
+
"failed",
|
|
433
|
+
"findings",
|
|
434
|
+
"passed"
|
|
435
|
+
];
|
|
436
|
+
/** Where a linter node sorts: its own state, or a nested linter's if that is more urgent. */
|
|
437
|
+
function statusBucket(node) {
|
|
438
|
+
const own = node.linter?.status === "running" ? "running" : node.linter?.status === "pending" ? "pending" : node.children?.some((c) => c.kind === "linter-error") ? "failed" : lintNodeCount(node) > 0 ? "findings" : "passed";
|
|
439
|
+
const nested = (node.children ?? []).filter((c) => c.kind === "linter").map(statusBucket);
|
|
440
|
+
return Math.min(STATUS_BUCKETS.indexOf(own), ...nested);
|
|
441
|
+
}
|
|
442
|
+
/** Running → pending → failed → with findings → passed; by name within a bucket (the sort is stable). */
|
|
443
|
+
function sortLinterNodes(nodes) {
|
|
444
|
+
return nodes.map((node) => ({
|
|
445
|
+
node,
|
|
446
|
+
bucket: statusBucket(node)
|
|
447
|
+
})).sort((a, b) => a.bucket - b.bucket || (a.node.name < b.node.name ? -1 : a.node.name > b.node.name ? 1 : 0)).map(({ node }) => node);
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Results named `<parent>/<child>` where a `<parent>` result exists (the linters
|
|
451
|
+
* a prompt run's agent ran) become linter nodes beneath the parent's node,
|
|
452
|
+
* shown by their child name. Without a visible parent they stay top-level.
|
|
453
|
+
*/
|
|
454
|
+
function nestChildLinters(roots, results, filters) {
|
|
455
|
+
const meta = linterMetaOf(results.filter((r) => matchesFilterState(r.linter, filters.linter)));
|
|
456
|
+
const parentOf = (name) => {
|
|
457
|
+
for (let i = name.lastIndexOf("/"); i > 0; i = name.lastIndexOf("/", i - 1)) if (meta.has(name.slice(0, i))) return name.slice(0, i);
|
|
458
|
+
};
|
|
459
|
+
const nodes = new Map(roots.filter((n) => n.kind === "linter").map((n) => [n.name, n]));
|
|
460
|
+
const childrenOf = groupBy(Array.from(meta.keys()).filter((name) => parentOf(name) !== void 0), (name) => parentOf(name));
|
|
461
|
+
if (childrenOf.size === 0) return roots;
|
|
462
|
+
const attach = (name, nestedUnder) => {
|
|
463
|
+
const node = nodes.get(name) ?? linterNode(name, meta.get(name), []);
|
|
464
|
+
const nested = (childrenOf.get(name) ?? []).map((child) => attach(child, name));
|
|
465
|
+
const label = nestedUnder ? {
|
|
466
|
+
name: name.slice(nestedUnder.length + 1),
|
|
467
|
+
nestedUnder
|
|
468
|
+
} : {};
|
|
469
|
+
if (nested.length === 0) return {
|
|
470
|
+
...node,
|
|
471
|
+
...label
|
|
472
|
+
};
|
|
473
|
+
const own = node.children ?? [];
|
|
474
|
+
const failed = node.failed || nested.some((n) => n.failed);
|
|
475
|
+
return {
|
|
476
|
+
...node,
|
|
477
|
+
...label,
|
|
478
|
+
children: [
|
|
479
|
+
...own.filter((c) => c.kind === "linter-error"),
|
|
480
|
+
...sortLinterNodes(nested),
|
|
481
|
+
...own.filter((c) => c.kind !== "linter-error")
|
|
482
|
+
],
|
|
483
|
+
failed,
|
|
484
|
+
passed: node.passed && !failed && nested.every((n) => n.passed || n.skipped)
|
|
485
|
+
};
|
|
486
|
+
};
|
|
487
|
+
const topLevel = /* @__PURE__ */ new Set([...nodes.keys(), ...childrenOf.keys()]);
|
|
488
|
+
return [...roots.filter((n) => n.kind !== "linter"), ...Array.from(topLevel).filter((name) => parentOf(name) === void 0).map((name) => attach(name))];
|
|
489
|
+
}
|
|
399
490
|
function joinChainNames(parent, child) {
|
|
400
491
|
const p = parent.trim();
|
|
401
492
|
const c = child.trim();
|
|
402
|
-
return p && c ? `${p}
|
|
493
|
+
return p && c ? `${p.replace(/\/+$/, "")}/${c.replace(/^\/+/, "")}` : p || c;
|
|
403
494
|
}
|
|
404
|
-
/**
|
|
405
|
-
|
|
495
|
+
/**
|
|
496
|
+
* Folds a folder (a node of `folderKind`) that has a single child into that
|
|
497
|
+
* child: `pkg/sub/a.go`. Generic so other path trees can reuse it.
|
|
498
|
+
*/
|
|
499
|
+
function collapseFolderChains(nodes, folderKind) {
|
|
406
500
|
return nodes.map((node) => {
|
|
407
501
|
if (!node.children || node.children.length === 0) return node;
|
|
408
|
-
const children = collapseFolderChains(node.children);
|
|
409
|
-
if (children.length === 1 && node.kind ===
|
|
502
|
+
const children = collapseFolderChains(node.children, folderKind);
|
|
503
|
+
if (children.length === 1 && node.kind === folderKind) {
|
|
410
504
|
const [child] = children;
|
|
411
505
|
return {
|
|
412
506
|
...child,
|
|
@@ -446,8 +540,9 @@ var GROUPERS = {
|
|
|
446
540
|
};
|
|
447
541
|
/** The tree for one grouping: filtered, with failed linters shown, ready for `Tree`. */
|
|
448
542
|
function buildLintTree({ results, grouping, filters }) {
|
|
449
|
-
const grouped = withLinterErrors(GROUPERS[grouping](results, filters), results, filters);
|
|
450
|
-
|
|
543
|
+
const grouped = withInFlightLinters(withLinterErrors(GROUPERS[grouping](results, filters), results, filters), results, filters);
|
|
544
|
+
const ordered = grouping === "file-linter-rule" ? grouped : sortLinterNodes(nestChildLinters(grouped, results, filters));
|
|
545
|
+
return annotateRoutePaths(grouping === "summary" ? ordered : collapseFolderChains(ordered, "lint-folder"));
|
|
451
546
|
}
|
|
452
547
|
/** Depth-first lookup of the node whose route_path equals `path`, or null. */
|
|
453
548
|
function findLintNode(nodes, path) {
|
|
@@ -459,6 +554,6 @@ function findLintNode(nodes, path) {
|
|
|
459
554
|
}
|
|
460
555
|
return null;
|
|
461
556
|
}
|
|
462
|
-
export { buildLintTree, findLintNode };
|
|
557
|
+
export { buildLintTree, collapseFolderChains, findLintNode, flattenLint };
|
|
463
558
|
|
|
464
559
|
//# sourceMappingURL=grouping.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.js","names":[],"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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"grouping.js","names":[],"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 {\n isLinterErrored,\n isLinterInFlight,\n linterErrorMessage,\n lintNodeCount,\n severityOf,\n worstSeverity,\n} 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\n/** A violation with its linter and paths resolved, as every view lists it. */\nexport type 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\n/** Every violation the filters keep, with work-dir-relative and display paths. */\nexport function 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\nfunction linterNamesIn(nodes: readonly Draft[], into = new Set<string>()): Set<string> {\n for (const node of nodes) {\n if (node.kind === \"linter\" && node.linterName) into.add(node.linterName);\n linterNamesIn(node.children ?? [], into);\n }\n return into;\n}\n\n/**\n * Linters still queued or running appear in every grouping even before they\n * report a violation, and have no verdict (`passed` stays false) until they finish.\n */\nfunction withInFlightLinters(roots: Draft[], results: readonly LinterResult[], filters: LintFilters): Draft[] {\n const present = linterNamesIn(roots);\n const missing = new Map<string, LinterResult>();\n for (const r of results) {\n if (isLinterInFlight(r) && matchesFilterState(r.linter, filters.linter) && !present.has(r.linter)) {\n missing.set(r.linter, r);\n }\n }\n const markPending = (nodes: Draft[]): Draft[] =>\n nodes.map((node) => {\n const children = node.children ? markPending(node.children) : undefined;\n const inFlight = node.kind === \"linter\" && node.linter !== undefined && isLinterInFlight(node.linter);\n return { ...node, ...(children ? { children } : {}), ...(inFlight ? { passed: false } : {}) };\n });\n if (missing.size === 0) return markPending(roots);\n const added = Array.from(missing.values()).map((r) => linterNode(r.linter, r, []));\n const linters = new Map([...roots.filter((n) => n.kind === \"linter\"), ...added].map((n) => [n.name, n]));\n return markPending([...roots.filter((n) => n.kind !== \"linter\"), ...sortedKeys(linters).map((k) => linters.get(k)!)]);\n}\n\n// ---------------------------------------------------------------------------\n// Linter ordering and nesting (linter-first groupings)\n\nconst STATUS_BUCKETS = [\"running\", \"pending\", \"failed\", \"findings\", \"passed\"] as const;\ntype StatusBucket = (typeof STATUS_BUCKETS)[number];\n\n/** Where a linter node sorts: its own state, or a nested linter's if that is more urgent. */\nfunction statusBucket(node: Draft): number {\n const own: StatusBucket =\n node.linter?.status === \"running\"\n ? \"running\"\n : node.linter?.status === \"pending\"\n ? \"pending\"\n : node.children?.some((c) => c.kind === \"linter-error\")\n ? \"failed\"\n : lintNodeCount(node) > 0\n ? \"findings\"\n : \"passed\";\n const nested = (node.children ?? []).filter((c) => c.kind === \"linter\").map(statusBucket);\n return Math.min(STATUS_BUCKETS.indexOf(own), ...nested);\n}\n\n/** Running → pending → failed → with findings → passed; by name within a bucket (the sort is stable). */\nfunction sortLinterNodes(nodes: Draft[]): Draft[] {\n return nodes\n .map((node) => ({ node, bucket: statusBucket(node) }))\n .sort((a, b) => a.bucket - b.bucket || (a.node.name < b.node.name ? -1 : a.node.name > b.node.name ? 1 : 0))\n .map(({ node }) => node);\n}\n\n/**\n * Results named `<parent>/<child>` where a `<parent>` result exists (the linters\n * a prompt run's agent ran) become linter nodes beneath the parent's node,\n * shown by their child name. Without a visible parent they stay top-level.\n */\nfunction nestChildLinters(roots: Draft[], results: readonly LinterResult[], filters: LintFilters): Draft[] {\n const visible = results.filter((r) => matchesFilterState(r.linter, filters.linter));\n const meta = linterMetaOf(visible);\n const parentOf = (name: string): string | undefined => {\n for (let i = name.lastIndexOf(\"/\"); i > 0; i = name.lastIndexOf(\"/\", i - 1)) {\n if (meta.has(name.slice(0, i))) return name.slice(0, i);\n }\n return undefined;\n };\n const nodes = new Map(roots.filter((n) => n.kind === \"linter\").map((n) => [n.name, n]));\n const childrenOf = groupBy(\n Array.from(meta.keys()).filter((name) => parentOf(name) !== undefined),\n (name) => parentOf(name)!,\n );\n if (childrenOf.size === 0) return roots;\n\n const attach = (name: string, nestedUnder?: string): Draft => {\n const node = nodes.get(name) ?? linterNode(name, meta.get(name), []);\n const nested = (childrenOf.get(name) ?? []).map((child) => attach(child, name));\n const label = nestedUnder ? { name: name.slice(nestedUnder.length + 1), nestedUnder } : {};\n if (nested.length === 0) return { ...node, ...label };\n const own = node.children ?? [];\n const failed = node.failed || nested.some((n) => n.failed);\n return {\n ...node,\n ...label,\n children: [\n ...own.filter((c) => c.kind === \"linter-error\"),\n ...sortLinterNodes(nested),\n ...own.filter((c) => c.kind !== \"linter-error\"),\n ],\n failed,\n passed: node.passed && !failed && nested.every((n) => n.passed || n.skipped),\n };\n };\n\n const topLevel = new Set([...nodes.keys(), ...childrenOf.keys()]);\n return [\n ...roots.filter((n) => n.kind !== \"linter\"),\n ...Array.from(topLevel)\n .filter((name) => parentOf(name) === undefined)\n .map((name) => attach(name)),\n ];\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.replace(/\\/+$/, \"\")}/${c.replace(/^\\/+/, \"\")}` : p || c;\n}\n\n/**\n * Folds a folder (a node of `folderKind`) that has a single child into that\n * child: `pkg/sub/a.go`. Generic so other path trees can reuse it.\n */\nexport function collapseFolderChains<N extends { name: string; kind: string; children?: N[] | undefined }>(\n nodes: N[],\n folderKind: N[\"kind\"],\n): N[] {\n return nodes.map((node) => {\n if (!node.children || node.children.length === 0) return node;\n const children = collapseFolderChains(node.children, folderKind);\n if (children.length === 1 && node.kind === folderKind) {\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 = withInFlightLinters(\n withLinterErrors(GROUPERS[grouping](results, filters), results, filters),\n results,\n filters,\n );\n // The file-rooted grouping has no linter roots to order or nest.\n const ordered = grouping === \"file-linter-rule\" ? grouped : sortLinterNodes(nestChildLinters(grouped, results, filters));\n // Summary keeps its linter -> rule -> file branches as built.\n return annotateRoutePaths(grouping === \"summary\" ? ordered : collapseFolderChains(ordered, \"lint-folder\"));\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"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const require_UiEyeClosed = require("../../icons/components/UiEyeClosed.cjs");
|
|
2
|
+
// src/data/lint/ignore-menu-items.ts
|
|
3
|
+
function isIgnoreActionDisabled(action, busy) {
|
|
4
|
+
return busy || Boolean(action.disabledWithoutWorkDir) && !action.req.work_dir;
|
|
5
|
+
}
|
|
6
|
+
function ignoreMenuItems(actions, onIgnore, busy) {
|
|
7
|
+
return actions.map((action) => ({
|
|
8
|
+
label: action.label,
|
|
9
|
+
icon: require_UiEyeClosed.UiEyeClosed,
|
|
10
|
+
title: action.title,
|
|
11
|
+
disabled: isIgnoreActionDisabled(action, busy),
|
|
12
|
+
onSelect: () => void onIgnore(action)
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
exports.ignoreMenuItems = ignoreMenuItems;
|
|
16
|
+
exports.isIgnoreActionDisabled = isIgnoreActionDisabled;
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=ignore-menu-items.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore-menu-items.cjs","names":["UiEyeClosed"],"sources":["../../../src/data/lint/ignore-menu-items.ts"],"sourcesContent":["import type { DropdownMenuItem } from \"../../overlay/DropdownMenu\";\nimport { UiEyeClosed } from \"../../icons\";\nimport type { LintAction } from \"./types\";\n\nexport type IgnoreHandler = (action: LintAction) => void | Promise<void>;\n\nexport function isIgnoreActionDisabled(action: LintAction, busy: boolean): boolean {\n return busy || (Boolean(action.disabledWithoutWorkDir) && !action.req.work_dir);\n}\n\nexport function ignoreMenuItems(actions: readonly LintAction[], onIgnore: IgnoreHandler, busy: boolean): DropdownMenuItem[] {\n return actions.map((action) => ({\n label: action.label,\n icon: UiEyeClosed,\n title: action.title,\n disabled: isIgnoreActionDisabled(action, busy),\n onSelect: () => void onIgnore(action),\n }));\n}\n"],"mappings":";;AAMA,SAAgB,uBAAuB,QAAoB,MAAwB;CACjF,OAAO,QAAS,QAAQ,OAAO,sBAAsB,KAAK,CAAC,OAAO,IAAI;AACxE;AAEA,SAAgB,gBAAgB,SAAgC,UAAyB,MAAmC;CAC1H,OAAO,QAAQ,KAAK,YAAY;EAC9B,OAAO,OAAO;EACd,MAAMA,oBAAAA;EACN,OAAO,OAAO;EACd,UAAU,uBAAuB,QAAQ,IAAI;EAC7C,gBAAgB,KAAK,SAAS,MAAM;CACtC,EAAE;AACJ"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DropdownMenuItem } from '../../overlay/DropdownMenu.js';
|
|
2
|
+
import { LintAction } from './types.js';
|
|
3
|
+
export type IgnoreHandler = (action: LintAction) => void | Promise<void>;
|
|
4
|
+
export declare function isIgnoreActionDisabled(action: LintAction, busy: boolean): boolean;
|
|
5
|
+
export declare function ignoreMenuItems(actions: readonly LintAction[], onIgnore: IgnoreHandler, busy: boolean): DropdownMenuItem[];
|
|
6
|
+
//# sourceMappingURL=ignore-menu-items.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore-menu-items.d.ts","sourceRoot":"","sources":["../../../src/data/lint/ignore-menu-items.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAEjF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAQ1H"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { UiEyeClosed } from "../../icons/components/UiEyeClosed.js";
|
|
2
|
+
// src/data/lint/ignore-menu-items.ts
|
|
3
|
+
function isIgnoreActionDisabled(action, busy) {
|
|
4
|
+
return busy || Boolean(action.disabledWithoutWorkDir) && !action.req.work_dir;
|
|
5
|
+
}
|
|
6
|
+
function ignoreMenuItems(actions, onIgnore, busy) {
|
|
7
|
+
return actions.map((action) => ({
|
|
8
|
+
label: action.label,
|
|
9
|
+
icon: UiEyeClosed,
|
|
10
|
+
title: action.title,
|
|
11
|
+
disabled: isIgnoreActionDisabled(action, busy),
|
|
12
|
+
onSelect: () => void onIgnore(action)
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
export { ignoreMenuItems, isIgnoreActionDisabled };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=ignore-menu-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore-menu-items.js","names":[],"sources":["../../../src/data/lint/ignore-menu-items.ts"],"sourcesContent":["import type { DropdownMenuItem } from \"../../overlay/DropdownMenu\";\nimport { UiEyeClosed } from \"../../icons\";\nimport type { LintAction } from \"./types\";\n\nexport type IgnoreHandler = (action: LintAction) => void | Promise<void>;\n\nexport function isIgnoreActionDisabled(action: LintAction, busy: boolean): boolean {\n return busy || (Boolean(action.disabledWithoutWorkDir) && !action.req.work_dir);\n}\n\nexport function ignoreMenuItems(actions: readonly LintAction[], onIgnore: IgnoreHandler, busy: boolean): DropdownMenuItem[] {\n return actions.map((action) => ({\n label: action.label,\n icon: UiEyeClosed,\n title: action.title,\n disabled: isIgnoreActionDisabled(action, busy),\n onSelect: () => void onIgnore(action),\n }));\n}\n"],"mappings":";;AAMA,SAAgB,uBAAuB,QAAoB,MAAwB;CACjF,OAAO,QAAS,QAAQ,OAAO,sBAAsB,KAAK,CAAC,OAAO,IAAI;AACxE;AAEA,SAAgB,gBAAgB,SAAgC,UAAyB,MAAmC;CAC1H,OAAO,QAAQ,KAAK,YAAY;EAC9B,OAAO,OAAO;EACd,MAAM;EACN,OAAO,OAAO;EACd,UAAU,uBAAuB,QAAQ,IAAI;EAC7C,gBAAgB,KAAK,SAAS,MAAM;CACtC,EAAE;AACJ"}
|