@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
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// src/file-findings/file-review/source-anchor.ts
|
|
2
|
+
var SOURCE_PREFIX = "s:";
|
|
3
|
+
/** Context kept on each side of a quote. */
|
|
4
|
+
var CONTEXT_CHARS = 24;
|
|
5
|
+
/** Longest quote shown in a thread label. */
|
|
6
|
+
var LABEL_CHARS = 60;
|
|
7
|
+
function sourceAnchor(locator) {
|
|
8
|
+
return `s:${JSON.stringify([
|
|
9
|
+
locator.line,
|
|
10
|
+
locator.prefix,
|
|
11
|
+
locator.quote,
|
|
12
|
+
locator.suffix
|
|
13
|
+
])}`;
|
|
14
|
+
}
|
|
15
|
+
/** The locator an `s:` anchor encodes; throws for a malformed one. */
|
|
16
|
+
function parseSourceAnchor(anchor) {
|
|
17
|
+
if (!anchor.startsWith("s:")) throw new Error(`not a source anchor: ${JSON.stringify(anchor)}`);
|
|
18
|
+
const parsed = JSON.parse(anchor.slice(2));
|
|
19
|
+
const [line, prefix, quote, suffix] = Array.isArray(parsed) ? parsed : [];
|
|
20
|
+
if (!Number.isInteger(line) || line < 1 || typeof prefix !== "string" || typeof quote !== "string" || typeof suffix !== "string") throw new Error(`malformed source anchor ${JSON.stringify(anchor)}`);
|
|
21
|
+
return {
|
|
22
|
+
line,
|
|
23
|
+
prefix,
|
|
24
|
+
quote,
|
|
25
|
+
suffix
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function lineStarts(source) {
|
|
29
|
+
const starts = [0];
|
|
30
|
+
for (let i = source.indexOf("\n"); i !== -1; i = source.indexOf("\n", i + 1)) starts.push(i + 1);
|
|
31
|
+
return starts;
|
|
32
|
+
}
|
|
33
|
+
/** The offset of a point; a column past the line's end (an empty line's placeholder) clamps to it. */
|
|
34
|
+
function offsetOf(source, starts, point) {
|
|
35
|
+
const start = starts[point.line - 1];
|
|
36
|
+
if (start === void 0) throw new Error(`line ${point.line} is outside the ${starts.length}-line source`);
|
|
37
|
+
const end = starts[point.line] === void 0 ? source.length : starts[point.line] - 1;
|
|
38
|
+
return Math.min(start + point.column, end);
|
|
39
|
+
}
|
|
40
|
+
/** 1-based line holding `offset`. */
|
|
41
|
+
function lineAt(starts, offset) {
|
|
42
|
+
let line = 1;
|
|
43
|
+
while (line < starts.length && starts[line] <= offset) line++;
|
|
44
|
+
return line;
|
|
45
|
+
}
|
|
46
|
+
/** The locator for the text between two points, or null when it is only whitespace. */
|
|
47
|
+
function locateSource(source, start, end) {
|
|
48
|
+
const starts = lineStarts(source);
|
|
49
|
+
const from = offsetOf(source, starts, start);
|
|
50
|
+
const to = offsetOf(source, starts, end);
|
|
51
|
+
const quote = source.slice(from, to);
|
|
52
|
+
if (!quote.trim()) return null;
|
|
53
|
+
return {
|
|
54
|
+
line: lineAt(starts, from),
|
|
55
|
+
prefix: source.slice(Math.max(0, from - CONTEXT_CHARS), from),
|
|
56
|
+
quote,
|
|
57
|
+
suffix: source.slice(to, to + CONTEXT_CHARS)
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Where the quote is now, cut into per-line spans: the occurrence with the
|
|
62
|
+
* same surrounding text that is nearest its original line. Empty when the
|
|
63
|
+
* quote or its context has changed.
|
|
64
|
+
*/
|
|
65
|
+
function resolveSource(source, locator) {
|
|
66
|
+
const needle = locator.prefix + locator.quote + locator.suffix;
|
|
67
|
+
const starts = lineStarts(source);
|
|
68
|
+
let best = null;
|
|
69
|
+
let bestDistance = Infinity;
|
|
70
|
+
for (let i = source.indexOf(needle); i !== -1; i = source.indexOf(needle, i + 1)) {
|
|
71
|
+
const at = i + locator.prefix.length;
|
|
72
|
+
const distance = Math.abs(lineAt(starts, at) - locator.line);
|
|
73
|
+
if (distance < bestDistance) {
|
|
74
|
+
best = at;
|
|
75
|
+
bestDistance = distance;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (best === null) return [];
|
|
79
|
+
const end = best + locator.quote.length;
|
|
80
|
+
const spans = [];
|
|
81
|
+
for (let line = lineAt(starts, best); line <= starts.length && starts[line - 1] < end; line++) {
|
|
82
|
+
const lineStart = starts[line - 1];
|
|
83
|
+
const lineEnd = starts[line] === void 0 ? source.length : starts[line] - 1;
|
|
84
|
+
const span = {
|
|
85
|
+
line,
|
|
86
|
+
start: Math.max(best, lineStart) - lineStart,
|
|
87
|
+
end: Math.min(end, lineEnd) - lineStart
|
|
88
|
+
};
|
|
89
|
+
if (span.end > span.start) spans.push(span);
|
|
90
|
+
}
|
|
91
|
+
return spans;
|
|
92
|
+
}
|
|
93
|
+
function describeSource(locator) {
|
|
94
|
+
const quote = locator.quote.replace(/\s+/g, " ").trim();
|
|
95
|
+
return `Line ${locator.line} · “${quote.length > LABEL_CHARS ? `${quote.slice(0, LABEL_CHARS)}…` : quote}”`;
|
|
96
|
+
}
|
|
97
|
+
exports.SOURCE_PREFIX = SOURCE_PREFIX;
|
|
98
|
+
exports.describeSource = describeSource;
|
|
99
|
+
exports.locateSource = locateSource;
|
|
100
|
+
exports.parseSourceAnchor = parseSourceAnchor;
|
|
101
|
+
exports.resolveSource = resolveSource;
|
|
102
|
+
exports.sourceAnchor = sourceAnchor;
|
|
103
|
+
|
|
104
|
+
//# sourceMappingURL=source-anchor.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-anchor.cjs","names":[],"sources":["../../../src/file-findings/file-review/source-anchor.ts"],"sourcesContent":["// Anchors on text in a source file that has no rendered form (code, config):\n// the quote is found again by the characters around it, and the line it was\n// on only picks between repeats, so edits elsewhere in the file never move it.\n\nimport type { SourceSpan } from \"./quote-anchor\";\n\n/** A quote in the file with the text right before and after it, and the 1-based line it started on. */\nexport type SourceLocator = { line: number; prefix: string; quote: string; suffix: string };\n\n/** A position in the file: 1-based line, 0-based column. */\nexport type SourcePoint = { line: number; column: number };\n\nexport const SOURCE_PREFIX = \"s:\";\n\n/** Context kept on each side of a quote. */\nconst CONTEXT_CHARS = 24;\n/** Longest quote shown in a thread label. */\nconst LABEL_CHARS = 60;\n\nexport function sourceAnchor(locator: SourceLocator): string {\n return `${SOURCE_PREFIX}${JSON.stringify([locator.line, locator.prefix, locator.quote, locator.suffix])}`;\n}\n\n/** The locator an `s:` anchor encodes; throws for a malformed one. */\nexport function parseSourceAnchor(anchor: string): SourceLocator {\n if (!anchor.startsWith(SOURCE_PREFIX)) throw new Error(`not a source anchor: ${JSON.stringify(anchor)}`);\n const parsed: unknown = JSON.parse(anchor.slice(SOURCE_PREFIX.length));\n const [line, prefix, quote, suffix] = Array.isArray(parsed) ? parsed : [];\n if (!Number.isInteger(line) || line < 1 || typeof prefix !== \"string\" || typeof quote !== \"string\" || typeof suffix !== \"string\") {\n throw new Error(`malformed source anchor ${JSON.stringify(anchor)}`);\n }\n return { line, prefix, quote, suffix };\n}\n\nfunction lineStarts(source: string): number[] {\n const starts = [0];\n for (let i = source.indexOf(\"\\n\"); i !== -1; i = source.indexOf(\"\\n\", i + 1)) starts.push(i + 1);\n return starts;\n}\n\n/** The offset of a point; a column past the line's end (an empty line's placeholder) clamps to it. */\nfunction offsetOf(source: string, starts: readonly number[], point: SourcePoint): number {\n const start = starts[point.line - 1];\n if (start === undefined) throw new Error(`line ${point.line} is outside the ${starts.length}-line source`);\n const end = starts[point.line] === undefined ? source.length : starts[point.line]! - 1;\n return Math.min(start + point.column, end);\n}\n\n/** 1-based line holding `offset`. */\nfunction lineAt(starts: readonly number[], offset: number): number {\n let line = 1;\n while (line < starts.length && starts[line]! <= offset) line++;\n return line;\n}\n\n/** The locator for the text between two points, or null when it is only whitespace. */\nexport function locateSource(source: string, start: SourcePoint, end: SourcePoint): SourceLocator | null {\n const starts = lineStarts(source);\n const from = offsetOf(source, starts, start);\n const to = offsetOf(source, starts, end);\n const quote = source.slice(from, to);\n if (!quote.trim()) return null;\n return {\n line: lineAt(starts, from),\n prefix: source.slice(Math.max(0, from - CONTEXT_CHARS), from),\n quote,\n suffix: source.slice(to, to + CONTEXT_CHARS),\n };\n}\n\n/**\n * Where the quote is now, cut into per-line spans: the occurrence with the\n * same surrounding text that is nearest its original line. Empty when the\n * quote or its context has changed.\n */\nexport function resolveSource(source: string, locator: SourceLocator): SourceSpan[] {\n const needle = locator.prefix + locator.quote + locator.suffix;\n const starts = lineStarts(source);\n let best: number | null = null;\n let bestDistance = Infinity;\n for (let i = source.indexOf(needle); i !== -1; i = source.indexOf(needle, i + 1)) {\n const at = i + locator.prefix.length;\n const distance = Math.abs(lineAt(starts, at) - locator.line);\n if (distance < bestDistance) {\n best = at;\n bestDistance = distance;\n }\n }\n if (best === null) return [];\n const end = best + locator.quote.length;\n const spans: SourceSpan[] = [];\n for (let line = lineAt(starts, best); line <= starts.length && starts[line - 1]! < end; line++) {\n const lineStart = starts[line - 1]!;\n const lineEnd = starts[line] === undefined ? source.length : starts[line]! - 1;\n const span = { line, start: Math.max(best, lineStart) - lineStart, end: Math.min(end, lineEnd) - lineStart };\n if (span.end > span.start) spans.push(span);\n }\n return spans;\n}\n\nexport function describeSource(locator: SourceLocator): string {\n const quote = locator.quote.replace(/\\s+/g, \" \").trim();\n return `Line ${locator.line} · “${quote.length > LABEL_CHARS ? `${quote.slice(0, LABEL_CHARS)}…` : quote}”`;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { SourceSpan } from './quote-anchor.js';
|
|
2
|
+
/** A quote in the file with the text right before and after it, and the 1-based line it started on. */
|
|
3
|
+
export type SourceLocator = {
|
|
4
|
+
line: number;
|
|
5
|
+
prefix: string;
|
|
6
|
+
quote: string;
|
|
7
|
+
suffix: string;
|
|
8
|
+
};
|
|
9
|
+
/** A position in the file: 1-based line, 0-based column. */
|
|
10
|
+
export type SourcePoint = {
|
|
11
|
+
line: number;
|
|
12
|
+
column: number;
|
|
13
|
+
};
|
|
14
|
+
export declare const SOURCE_PREFIX = "s:";
|
|
15
|
+
export declare function sourceAnchor(locator: SourceLocator): string;
|
|
16
|
+
/** The locator an `s:` anchor encodes; throws for a malformed one. */
|
|
17
|
+
export declare function parseSourceAnchor(anchor: string): SourceLocator;
|
|
18
|
+
/** The locator for the text between two points, or null when it is only whitespace. */
|
|
19
|
+
export declare function locateSource(source: string, start: SourcePoint, end: SourcePoint): SourceLocator | null;
|
|
20
|
+
/**
|
|
21
|
+
* Where the quote is now, cut into per-line spans: the occurrence with the
|
|
22
|
+
* same surrounding text that is nearest its original line. Empty when the
|
|
23
|
+
* quote or its context has changed.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveSource(source: string, locator: SourceLocator): SourceSpan[];
|
|
26
|
+
export declare function describeSource(locator: SourceLocator): string;
|
|
27
|
+
//# sourceMappingURL=source-anchor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-anchor.d.ts","sourceRoot":"","sources":["../../../src/file-findings/file-review/source-anchor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,uGAAuG;AACvG,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5F,4DAA4D;AAC5D,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,eAAO,MAAM,aAAa,OAAO,CAAC;AAOlC,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAE3D;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAQ/D;AAuBD,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,GAAG,aAAa,GAAG,IAAI,CAYvG;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,UAAU,EAAE,CAuBlF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAG7D"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// src/file-findings/file-review/source-anchor.ts
|
|
2
|
+
var SOURCE_PREFIX = "s:";
|
|
3
|
+
/** Context kept on each side of a quote. */
|
|
4
|
+
var CONTEXT_CHARS = 24;
|
|
5
|
+
/** Longest quote shown in a thread label. */
|
|
6
|
+
var LABEL_CHARS = 60;
|
|
7
|
+
function sourceAnchor(locator) {
|
|
8
|
+
return `s:${JSON.stringify([
|
|
9
|
+
locator.line,
|
|
10
|
+
locator.prefix,
|
|
11
|
+
locator.quote,
|
|
12
|
+
locator.suffix
|
|
13
|
+
])}`;
|
|
14
|
+
}
|
|
15
|
+
/** The locator an `s:` anchor encodes; throws for a malformed one. */
|
|
16
|
+
function parseSourceAnchor(anchor) {
|
|
17
|
+
if (!anchor.startsWith("s:")) throw new Error(`not a source anchor: ${JSON.stringify(anchor)}`);
|
|
18
|
+
const parsed = JSON.parse(anchor.slice(2));
|
|
19
|
+
const [line, prefix, quote, suffix] = Array.isArray(parsed) ? parsed : [];
|
|
20
|
+
if (!Number.isInteger(line) || line < 1 || typeof prefix !== "string" || typeof quote !== "string" || typeof suffix !== "string") throw new Error(`malformed source anchor ${JSON.stringify(anchor)}`);
|
|
21
|
+
return {
|
|
22
|
+
line,
|
|
23
|
+
prefix,
|
|
24
|
+
quote,
|
|
25
|
+
suffix
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function lineStarts(source) {
|
|
29
|
+
const starts = [0];
|
|
30
|
+
for (let i = source.indexOf("\n"); i !== -1; i = source.indexOf("\n", i + 1)) starts.push(i + 1);
|
|
31
|
+
return starts;
|
|
32
|
+
}
|
|
33
|
+
/** The offset of a point; a column past the line's end (an empty line's placeholder) clamps to it. */
|
|
34
|
+
function offsetOf(source, starts, point) {
|
|
35
|
+
const start = starts[point.line - 1];
|
|
36
|
+
if (start === void 0) throw new Error(`line ${point.line} is outside the ${starts.length}-line source`);
|
|
37
|
+
const end = starts[point.line] === void 0 ? source.length : starts[point.line] - 1;
|
|
38
|
+
return Math.min(start + point.column, end);
|
|
39
|
+
}
|
|
40
|
+
/** 1-based line holding `offset`. */
|
|
41
|
+
function lineAt(starts, offset) {
|
|
42
|
+
let line = 1;
|
|
43
|
+
while (line < starts.length && starts[line] <= offset) line++;
|
|
44
|
+
return line;
|
|
45
|
+
}
|
|
46
|
+
/** The locator for the text between two points, or null when it is only whitespace. */
|
|
47
|
+
function locateSource(source, start, end) {
|
|
48
|
+
const starts = lineStarts(source);
|
|
49
|
+
const from = offsetOf(source, starts, start);
|
|
50
|
+
const to = offsetOf(source, starts, end);
|
|
51
|
+
const quote = source.slice(from, to);
|
|
52
|
+
if (!quote.trim()) return null;
|
|
53
|
+
return {
|
|
54
|
+
line: lineAt(starts, from),
|
|
55
|
+
prefix: source.slice(Math.max(0, from - CONTEXT_CHARS), from),
|
|
56
|
+
quote,
|
|
57
|
+
suffix: source.slice(to, to + CONTEXT_CHARS)
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Where the quote is now, cut into per-line spans: the occurrence with the
|
|
62
|
+
* same surrounding text that is nearest its original line. Empty when the
|
|
63
|
+
* quote or its context has changed.
|
|
64
|
+
*/
|
|
65
|
+
function resolveSource(source, locator) {
|
|
66
|
+
const needle = locator.prefix + locator.quote + locator.suffix;
|
|
67
|
+
const starts = lineStarts(source);
|
|
68
|
+
let best = null;
|
|
69
|
+
let bestDistance = Infinity;
|
|
70
|
+
for (let i = source.indexOf(needle); i !== -1; i = source.indexOf(needle, i + 1)) {
|
|
71
|
+
const at = i + locator.prefix.length;
|
|
72
|
+
const distance = Math.abs(lineAt(starts, at) - locator.line);
|
|
73
|
+
if (distance < bestDistance) {
|
|
74
|
+
best = at;
|
|
75
|
+
bestDistance = distance;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (best === null) return [];
|
|
79
|
+
const end = best + locator.quote.length;
|
|
80
|
+
const spans = [];
|
|
81
|
+
for (let line = lineAt(starts, best); line <= starts.length && starts[line - 1] < end; line++) {
|
|
82
|
+
const lineStart = starts[line - 1];
|
|
83
|
+
const lineEnd = starts[line] === void 0 ? source.length : starts[line] - 1;
|
|
84
|
+
const span = {
|
|
85
|
+
line,
|
|
86
|
+
start: Math.max(best, lineStart) - lineStart,
|
|
87
|
+
end: Math.min(end, lineEnd) - lineStart
|
|
88
|
+
};
|
|
89
|
+
if (span.end > span.start) spans.push(span);
|
|
90
|
+
}
|
|
91
|
+
return spans;
|
|
92
|
+
}
|
|
93
|
+
function describeSource(locator) {
|
|
94
|
+
const quote = locator.quote.replace(/\s+/g, " ").trim();
|
|
95
|
+
return `Line ${locator.line} · “${quote.length > LABEL_CHARS ? `${quote.slice(0, LABEL_CHARS)}…` : quote}”`;
|
|
96
|
+
}
|
|
97
|
+
export { SOURCE_PREFIX, describeSource, locateSource, parseSourceAnchor, resolveSource, sourceAnchor };
|
|
98
|
+
|
|
99
|
+
//# sourceMappingURL=source-anchor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-anchor.js","names":[],"sources":["../../../src/file-findings/file-review/source-anchor.ts"],"sourcesContent":["// Anchors on text in a source file that has no rendered form (code, config):\n// the quote is found again by the characters around it, and the line it was\n// on only picks between repeats, so edits elsewhere in the file never move it.\n\nimport type { SourceSpan } from \"./quote-anchor\";\n\n/** A quote in the file with the text right before and after it, and the 1-based line it started on. */\nexport type SourceLocator = { line: number; prefix: string; quote: string; suffix: string };\n\n/** A position in the file: 1-based line, 0-based column. */\nexport type SourcePoint = { line: number; column: number };\n\nexport const SOURCE_PREFIX = \"s:\";\n\n/** Context kept on each side of a quote. */\nconst CONTEXT_CHARS = 24;\n/** Longest quote shown in a thread label. */\nconst LABEL_CHARS = 60;\n\nexport function sourceAnchor(locator: SourceLocator): string {\n return `${SOURCE_PREFIX}${JSON.stringify([locator.line, locator.prefix, locator.quote, locator.suffix])}`;\n}\n\n/** The locator an `s:` anchor encodes; throws for a malformed one. */\nexport function parseSourceAnchor(anchor: string): SourceLocator {\n if (!anchor.startsWith(SOURCE_PREFIX)) throw new Error(`not a source anchor: ${JSON.stringify(anchor)}`);\n const parsed: unknown = JSON.parse(anchor.slice(SOURCE_PREFIX.length));\n const [line, prefix, quote, suffix] = Array.isArray(parsed) ? parsed : [];\n if (!Number.isInteger(line) || line < 1 || typeof prefix !== \"string\" || typeof quote !== \"string\" || typeof suffix !== \"string\") {\n throw new Error(`malformed source anchor ${JSON.stringify(anchor)}`);\n }\n return { line, prefix, quote, suffix };\n}\n\nfunction lineStarts(source: string): number[] {\n const starts = [0];\n for (let i = source.indexOf(\"\\n\"); i !== -1; i = source.indexOf(\"\\n\", i + 1)) starts.push(i + 1);\n return starts;\n}\n\n/** The offset of a point; a column past the line's end (an empty line's placeholder) clamps to it. */\nfunction offsetOf(source: string, starts: readonly number[], point: SourcePoint): number {\n const start = starts[point.line - 1];\n if (start === undefined) throw new Error(`line ${point.line} is outside the ${starts.length}-line source`);\n const end = starts[point.line] === undefined ? source.length : starts[point.line]! - 1;\n return Math.min(start + point.column, end);\n}\n\n/** 1-based line holding `offset`. */\nfunction lineAt(starts: readonly number[], offset: number): number {\n let line = 1;\n while (line < starts.length && starts[line]! <= offset) line++;\n return line;\n}\n\n/** The locator for the text between two points, or null when it is only whitespace. */\nexport function locateSource(source: string, start: SourcePoint, end: SourcePoint): SourceLocator | null {\n const starts = lineStarts(source);\n const from = offsetOf(source, starts, start);\n const to = offsetOf(source, starts, end);\n const quote = source.slice(from, to);\n if (!quote.trim()) return null;\n return {\n line: lineAt(starts, from),\n prefix: source.slice(Math.max(0, from - CONTEXT_CHARS), from),\n quote,\n suffix: source.slice(to, to + CONTEXT_CHARS),\n };\n}\n\n/**\n * Where the quote is now, cut into per-line spans: the occurrence with the\n * same surrounding text that is nearest its original line. Empty when the\n * quote or its context has changed.\n */\nexport function resolveSource(source: string, locator: SourceLocator): SourceSpan[] {\n const needle = locator.prefix + locator.quote + locator.suffix;\n const starts = lineStarts(source);\n let best: number | null = null;\n let bestDistance = Infinity;\n for (let i = source.indexOf(needle); i !== -1; i = source.indexOf(needle, i + 1)) {\n const at = i + locator.prefix.length;\n const distance = Math.abs(lineAt(starts, at) - locator.line);\n if (distance < bestDistance) {\n best = at;\n bestDistance = distance;\n }\n }\n if (best === null) return [];\n const end = best + locator.quote.length;\n const spans: SourceSpan[] = [];\n for (let line = lineAt(starts, best); line <= starts.length && starts[line - 1]! < end; line++) {\n const lineStart = starts[line - 1]!;\n const lineEnd = starts[line] === undefined ? source.length : starts[line]! - 1;\n const span = { line, start: Math.max(best, lineStart) - lineStart, end: Math.min(end, lineEnd) - lineStart };\n if (span.end > span.start) spans.push(span);\n }\n return spans;\n}\n\nexport function describeSource(locator: SourceLocator): string {\n const quote = locator.quote.replace(/\\s+/g, \" \").trim();\n return `Line ${locator.line} · “${quote.length > LABEL_CHARS ? `${quote.slice(0, LABEL_CHARS)}…` : quote}”`;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// src/file-findings/file-review/source-marks.ts
|
|
2
|
+
/** The thread anchors a Source highlight covers; quote anchors hold spaces, so the attribute is a JSON list. */
|
|
3
|
+
var markAnchors = (el) => JSON.parse(el.dataset.sourceComment);
|
|
4
|
+
/** A source line cut wherever a syntax token or a comment highlight starts or ends. */
|
|
5
|
+
function lineSegments(text, line, marks, tokens) {
|
|
6
|
+
const here = marks.flatMap((m) => m.spans.filter((s) => s.line === line).map((s) => ({
|
|
7
|
+
...s,
|
|
8
|
+
anchor: m.anchor
|
|
9
|
+
})));
|
|
10
|
+
let at = 0;
|
|
11
|
+
const starts = (tokens ?? []).map((token) => {
|
|
12
|
+
const start = at;
|
|
13
|
+
at += token.content.length;
|
|
14
|
+
return {
|
|
15
|
+
start,
|
|
16
|
+
token
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
const cuts = [.../* @__PURE__ */ new Set([
|
|
20
|
+
0,
|
|
21
|
+
text.length,
|
|
22
|
+
...here.flatMap((s) => [s.start, s.end]),
|
|
23
|
+
...starts.map((t) => t.start)
|
|
24
|
+
])].filter((cut) => cut <= text.length).sort((a, b) => a - b);
|
|
25
|
+
return cuts.slice(0, -1).map((start, i) => {
|
|
26
|
+
const token = starts.filter((t) => t.start <= start).at(-1)?.token;
|
|
27
|
+
return {
|
|
28
|
+
start,
|
|
29
|
+
text: text.slice(start, cuts[i + 1]),
|
|
30
|
+
anchors: here.filter((s) => s.start <= start && s.end > start).map((s) => s.anchor),
|
|
31
|
+
...token ? { token } : {}
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/** The source points a selection runs between, or null when either end is outside the lines' text. */
|
|
36
|
+
function sourceRangeOf(range) {
|
|
37
|
+
const own = (node) => (node instanceof Element ? node : node.parentElement)?.closest("[data-source-text]");
|
|
38
|
+
const point = (node, offset) => {
|
|
39
|
+
const text = own(node);
|
|
40
|
+
if (!text) return null;
|
|
41
|
+
const lead = document.createRange();
|
|
42
|
+
lead.setStart(text, 0);
|
|
43
|
+
lead.setEnd(node, offset);
|
|
44
|
+
return {
|
|
45
|
+
line: Number(text.dataset.sourceText),
|
|
46
|
+
column: lead.toString().length
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
const start = point(range.startContainer, range.startOffset);
|
|
50
|
+
const end = point(range.endContainer, range.endOffset);
|
|
51
|
+
return start && end ? {
|
|
52
|
+
start,
|
|
53
|
+
end
|
|
54
|
+
} : null;
|
|
55
|
+
}
|
|
56
|
+
/** The line and columns a selection covers, or null when it is not inside a single line's text. */
|
|
57
|
+
function sourceSpanOf(range) {
|
|
58
|
+
const covered = sourceRangeOf(range);
|
|
59
|
+
if (!covered || covered.start.line !== covered.end.line) return null;
|
|
60
|
+
return {
|
|
61
|
+
line: covered.start.line,
|
|
62
|
+
start: covered.start.column,
|
|
63
|
+
end: covered.end.column
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
exports.lineSegments = lineSegments;
|
|
67
|
+
exports.markAnchors = markAnchors;
|
|
68
|
+
exports.sourceRangeOf = sourceRangeOf;
|
|
69
|
+
exports.sourceSpanOf = sourceSpanOf;
|
|
70
|
+
|
|
71
|
+
//# sourceMappingURL=source-marks.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-marks.cjs","names":[],"sources":["../../../src/file-findings/file-review/source-marks.ts"],"sourcesContent":["import type { HighlightedLine, HighlightedToken } from \"../../data/code-highlight\";\nimport type { SourceSpan } from \"./quote-anchor\";\nimport type { SourcePoint } from \"./source-anchor\";\n\n/** A comment thread's quote located in the source. */\nexport type SourceMark = { anchor: string; spans: SourceSpan[] };\n\n/** A run of one source line with one syntax token and one set of covering highlights. */\nexport type LineSegment = { start: number; text: string; anchors: string[]; token?: HighlightedToken };\n\n/** The thread anchors a Source highlight covers; quote anchors hold spaces, so the attribute is a JSON list. */\nexport const markAnchors = (el: HTMLElement): string[] => JSON.parse(el.dataset.sourceComment!);\n\n/** A source line cut wherever a syntax token or a comment highlight starts or ends. */\nexport function lineSegments(text: string, line: number, marks: readonly SourceMark[], tokens?: HighlightedLine): LineSegment[] {\n const here = marks.flatMap((m) => m.spans.filter((s) => s.line === line).map((s) => ({ ...s, anchor: m.anchor })));\n let at = 0;\n const starts = (tokens ?? []).map((token) => {\n const start = at;\n at += token.content.length;\n return { start, token };\n });\n const cuts = [...new Set([0, text.length, ...here.flatMap((s) => [s.start, s.end]), ...starts.map((t) => t.start)])]\n .filter((cut) => cut <= text.length)\n .sort((a, b) => a - b);\n return cuts.slice(0, -1).map((start, i) => {\n const token = starts.filter((t) => t.start <= start).at(-1)?.token;\n return {\n start,\n text: text.slice(start, cuts[i + 1]),\n anchors: here.filter((s) => s.start <= start && s.end > start).map((s) => s.anchor),\n ...(token ? { token } : {}),\n };\n });\n}\n\n/** The source points a selection runs between, or null when either end is outside the lines' text. */\nexport function sourceRangeOf(range: Range): { start: SourcePoint; end: SourcePoint } | null {\n const own = (node: Node) => (node instanceof Element ? node : node.parentElement)?.closest<HTMLElement>(\"[data-source-text]\");\n const point = (node: Node, offset: number): SourcePoint | null => {\n const text = own(node);\n if (!text) return null;\n const lead = document.createRange();\n lead.setStart(text, 0);\n lead.setEnd(node, offset);\n return { line: Number(text.dataset.sourceText), column: lead.toString().length };\n };\n const start = point(range.startContainer, range.startOffset);\n const end = point(range.endContainer, range.endOffset);\n return start && end ? { start, end } : null;\n}\n\n/** The line and columns a selection covers, or null when it is not inside a single line's text. */\nexport function sourceSpanOf(range: Range): SourceSpan | null {\n const covered = sourceRangeOf(range);\n if (!covered || covered.start.line !== covered.end.line) return null;\n return { line: covered.start.line, start: covered.start.column, end: covered.end.column };\n}\n"],"mappings":";;AAWA,IAAa,eAAe,OAA8B,KAAK,MAAM,GAAG,QAAQ,aAAc;;AAG9F,SAAgB,aAAa,MAAc,MAAc,OAA8B,QAAyC;CAC9H,MAAM,OAAO,MAAM,SAAS,MAAM,EAAE,MAAM,QAAQ,MAAM,EAAE,SAAS,IAAI,CAAC,CAAC,KAAK,OAAO;EAAE,GAAG;EAAG,QAAQ,EAAE;CAAO,EAAE,CAAC;CACjH,IAAI,KAAK;CACT,MAAM,UAAU,UAAU,CAAC,EAAA,CAAG,KAAK,UAAU;EAC3C,MAAM,QAAQ;EACd,MAAM,MAAM,QAAQ;EACpB,OAAO;GAAE;GAAO;EAAM;CACxB,CAAC;CACD,MAAM,OAAO,CAAC,mBAAG,IAAI,IAAI;EAAC;EAAG,KAAK;EAAQ,GAAG,KAAK,SAAS,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC;EAAG,GAAG,OAAO,KAAK,MAAM,EAAE,KAAK;CAAC,CAAC,CAAC,CAAC,CACjH,QAAQ,QAAQ,OAAO,KAAK,MAAM,CAAC,CACnC,MAAM,GAAG,MAAM,IAAI,CAAC;CACvB,OAAO,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK,OAAO,MAAM;EACzC,MAAM,QAAQ,OAAO,QAAQ,MAAM,EAAE,SAAS,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE;EAC7D,OAAO;GACL;GACA,MAAM,KAAK,MAAM,OAAO,KAAK,IAAI,EAAE;GACnC,SAAS,KAAK,QAAQ,MAAM,EAAE,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,MAAM;GAClF,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;EAC3B;CACF,CAAC;AACH;;AAGA,SAAgB,cAAc,OAA+D;CAC3F,MAAM,OAAO,UAAgB,gBAAgB,UAAU,OAAO,KAAK,cAAA,EAAgB,QAAqB,oBAAoB;CAC5H,MAAM,SAAS,MAAY,WAAuC;EAChE,MAAM,OAAO,IAAI,IAAI;EACrB,IAAI,CAAC,MAAM,OAAO;EAClB,MAAM,OAAO,SAAS,YAAY;EAClC,KAAK,SAAS,MAAM,CAAC;EACrB,KAAK,OAAO,MAAM,MAAM;EACxB,OAAO;GAAE,MAAM,OAAO,KAAK,QAAQ,UAAU;GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC;EAAO;CACjF;CACA,MAAM,QAAQ,MAAM,MAAM,gBAAgB,MAAM,WAAW;CAC3D,MAAM,MAAM,MAAM,MAAM,cAAc,MAAM,SAAS;CACrD,OAAO,SAAS,MAAM;EAAE;EAAO;CAAI,IAAI;AACzC;;AAGA,SAAgB,aAAa,OAAiC;CAC5D,MAAM,UAAU,cAAc,KAAK;CACnC,IAAI,CAAC,WAAW,QAAQ,MAAM,SAAS,QAAQ,IAAI,MAAM,OAAO;CAChE,OAAO;EAAE,MAAM,QAAQ,MAAM;EAAM,OAAO,QAAQ,MAAM;EAAQ,KAAK,QAAQ,IAAI;CAAO;AAC1F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { HighlightedLine, HighlightedToken } from '../../data/code-highlight.js';
|
|
2
|
+
import { SourceSpan } from './quote-anchor.js';
|
|
3
|
+
import { SourcePoint } from './source-anchor.js';
|
|
4
|
+
/** A comment thread's quote located in the source. */
|
|
5
|
+
export type SourceMark = {
|
|
6
|
+
anchor: string;
|
|
7
|
+
spans: SourceSpan[];
|
|
8
|
+
};
|
|
9
|
+
/** A run of one source line with one syntax token and one set of covering highlights. */
|
|
10
|
+
export type LineSegment = {
|
|
11
|
+
start: number;
|
|
12
|
+
text: string;
|
|
13
|
+
anchors: string[];
|
|
14
|
+
token?: HighlightedToken;
|
|
15
|
+
};
|
|
16
|
+
/** The thread anchors a Source highlight covers; quote anchors hold spaces, so the attribute is a JSON list. */
|
|
17
|
+
export declare const markAnchors: (el: HTMLElement) => string[];
|
|
18
|
+
/** A source line cut wherever a syntax token or a comment highlight starts or ends. */
|
|
19
|
+
export declare function lineSegments(text: string, line: number, marks: readonly SourceMark[], tokens?: HighlightedLine): LineSegment[];
|
|
20
|
+
/** The source points a selection runs between, or null when either end is outside the lines' text. */
|
|
21
|
+
export declare function sourceRangeOf(range: Range): {
|
|
22
|
+
start: SourcePoint;
|
|
23
|
+
end: SourcePoint;
|
|
24
|
+
} | null;
|
|
25
|
+
/** The line and columns a selection covers, or null when it is not inside a single line's text. */
|
|
26
|
+
export declare function sourceSpanOf(range: Range): SourceSpan | null;
|
|
27
|
+
//# sourceMappingURL=source-marks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-marks.d.ts","sourceRoot":"","sources":["../../../src/file-findings/file-review/source-marks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,sDAAsD;AACtD,MAAM,MAAM,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC;AAEjE,yFAAyF;AACzF,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAEvG,gHAAgH;AAChH,eAAO,MAAM,WAAW,GAAI,IAAI,WAAW,KAAG,MAAM,EAA2C,CAAC;AAEhG,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,WAAW,EAAE,CAoB9H;AAED,sGAAsG;AACtG,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,WAAW,CAAA;CAAE,GAAG,IAAI,CAa3F;AAED,mGAAmG;AACnG,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,GAAG,IAAI,CAI5D"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// src/file-findings/file-review/source-marks.ts
|
|
2
|
+
/** The thread anchors a Source highlight covers; quote anchors hold spaces, so the attribute is a JSON list. */
|
|
3
|
+
var markAnchors = (el) => JSON.parse(el.dataset.sourceComment);
|
|
4
|
+
/** A source line cut wherever a syntax token or a comment highlight starts or ends. */
|
|
5
|
+
function lineSegments(text, line, marks, tokens) {
|
|
6
|
+
const here = marks.flatMap((m) => m.spans.filter((s) => s.line === line).map((s) => ({
|
|
7
|
+
...s,
|
|
8
|
+
anchor: m.anchor
|
|
9
|
+
})));
|
|
10
|
+
let at = 0;
|
|
11
|
+
const starts = (tokens ?? []).map((token) => {
|
|
12
|
+
const start = at;
|
|
13
|
+
at += token.content.length;
|
|
14
|
+
return {
|
|
15
|
+
start,
|
|
16
|
+
token
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
const cuts = [.../* @__PURE__ */ new Set([
|
|
20
|
+
0,
|
|
21
|
+
text.length,
|
|
22
|
+
...here.flatMap((s) => [s.start, s.end]),
|
|
23
|
+
...starts.map((t) => t.start)
|
|
24
|
+
])].filter((cut) => cut <= text.length).sort((a, b) => a - b);
|
|
25
|
+
return cuts.slice(0, -1).map((start, i) => {
|
|
26
|
+
const token = starts.filter((t) => t.start <= start).at(-1)?.token;
|
|
27
|
+
return {
|
|
28
|
+
start,
|
|
29
|
+
text: text.slice(start, cuts[i + 1]),
|
|
30
|
+
anchors: here.filter((s) => s.start <= start && s.end > start).map((s) => s.anchor),
|
|
31
|
+
...token ? { token } : {}
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/** The source points a selection runs between, or null when either end is outside the lines' text. */
|
|
36
|
+
function sourceRangeOf(range) {
|
|
37
|
+
const own = (node) => (node instanceof Element ? node : node.parentElement)?.closest("[data-source-text]");
|
|
38
|
+
const point = (node, offset) => {
|
|
39
|
+
const text = own(node);
|
|
40
|
+
if (!text) return null;
|
|
41
|
+
const lead = document.createRange();
|
|
42
|
+
lead.setStart(text, 0);
|
|
43
|
+
lead.setEnd(node, offset);
|
|
44
|
+
return {
|
|
45
|
+
line: Number(text.dataset.sourceText),
|
|
46
|
+
column: lead.toString().length
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
const start = point(range.startContainer, range.startOffset);
|
|
50
|
+
const end = point(range.endContainer, range.endOffset);
|
|
51
|
+
return start && end ? {
|
|
52
|
+
start,
|
|
53
|
+
end
|
|
54
|
+
} : null;
|
|
55
|
+
}
|
|
56
|
+
/** The line and columns a selection covers, or null when it is not inside a single line's text. */
|
|
57
|
+
function sourceSpanOf(range) {
|
|
58
|
+
const covered = sourceRangeOf(range);
|
|
59
|
+
if (!covered || covered.start.line !== covered.end.line) return null;
|
|
60
|
+
return {
|
|
61
|
+
line: covered.start.line,
|
|
62
|
+
start: covered.start.column,
|
|
63
|
+
end: covered.end.column
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export { lineSegments, markAnchors, sourceRangeOf, sourceSpanOf };
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=source-marks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-marks.js","names":[],"sources":["../../../src/file-findings/file-review/source-marks.ts"],"sourcesContent":["import type { HighlightedLine, HighlightedToken } from \"../../data/code-highlight\";\nimport type { SourceSpan } from \"./quote-anchor\";\nimport type { SourcePoint } from \"./source-anchor\";\n\n/** A comment thread's quote located in the source. */\nexport type SourceMark = { anchor: string; spans: SourceSpan[] };\n\n/** A run of one source line with one syntax token and one set of covering highlights. */\nexport type LineSegment = { start: number; text: string; anchors: string[]; token?: HighlightedToken };\n\n/** The thread anchors a Source highlight covers; quote anchors hold spaces, so the attribute is a JSON list. */\nexport const markAnchors = (el: HTMLElement): string[] => JSON.parse(el.dataset.sourceComment!);\n\n/** A source line cut wherever a syntax token or a comment highlight starts or ends. */\nexport function lineSegments(text: string, line: number, marks: readonly SourceMark[], tokens?: HighlightedLine): LineSegment[] {\n const here = marks.flatMap((m) => m.spans.filter((s) => s.line === line).map((s) => ({ ...s, anchor: m.anchor })));\n let at = 0;\n const starts = (tokens ?? []).map((token) => {\n const start = at;\n at += token.content.length;\n return { start, token };\n });\n const cuts = [...new Set([0, text.length, ...here.flatMap((s) => [s.start, s.end]), ...starts.map((t) => t.start)])]\n .filter((cut) => cut <= text.length)\n .sort((a, b) => a - b);\n return cuts.slice(0, -1).map((start, i) => {\n const token = starts.filter((t) => t.start <= start).at(-1)?.token;\n return {\n start,\n text: text.slice(start, cuts[i + 1]),\n anchors: here.filter((s) => s.start <= start && s.end > start).map((s) => s.anchor),\n ...(token ? { token } : {}),\n };\n });\n}\n\n/** The source points a selection runs between, or null when either end is outside the lines' text. */\nexport function sourceRangeOf(range: Range): { start: SourcePoint; end: SourcePoint } | null {\n const own = (node: Node) => (node instanceof Element ? node : node.parentElement)?.closest<HTMLElement>(\"[data-source-text]\");\n const point = (node: Node, offset: number): SourcePoint | null => {\n const text = own(node);\n if (!text) return null;\n const lead = document.createRange();\n lead.setStart(text, 0);\n lead.setEnd(node, offset);\n return { line: Number(text.dataset.sourceText), column: lead.toString().length };\n };\n const start = point(range.startContainer, range.startOffset);\n const end = point(range.endContainer, range.endOffset);\n return start && end ? { start, end } : null;\n}\n\n/** The line and columns a selection covers, or null when it is not inside a single line's text. */\nexport function sourceSpanOf(range: Range): SourceSpan | null {\n const covered = sourceRangeOf(range);\n if (!covered || covered.start.line !== covered.end.line) return null;\n return { line: covered.start.line, start: covered.start.column, end: covered.end.column };\n}\n"],"mappings":";;AAWA,IAAa,eAAe,OAA8B,KAAK,MAAM,GAAG,QAAQ,aAAc;;AAG9F,SAAgB,aAAa,MAAc,MAAc,OAA8B,QAAyC;CAC9H,MAAM,OAAO,MAAM,SAAS,MAAM,EAAE,MAAM,QAAQ,MAAM,EAAE,SAAS,IAAI,CAAC,CAAC,KAAK,OAAO;EAAE,GAAG;EAAG,QAAQ,EAAE;CAAO,EAAE,CAAC;CACjH,IAAI,KAAK;CACT,MAAM,UAAU,UAAU,CAAC,EAAA,CAAG,KAAK,UAAU;EAC3C,MAAM,QAAQ;EACd,MAAM,MAAM,QAAQ;EACpB,OAAO;GAAE;GAAO;EAAM;CACxB,CAAC;CACD,MAAM,OAAO,CAAC,mBAAG,IAAI,IAAI;EAAC;EAAG,KAAK;EAAQ,GAAG,KAAK,SAAS,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC;EAAG,GAAG,OAAO,KAAK,MAAM,EAAE,KAAK;CAAC,CAAC,CAAC,CAAC,CACjH,QAAQ,QAAQ,OAAO,KAAK,MAAM,CAAC,CACnC,MAAM,GAAG,MAAM,IAAI,CAAC;CACvB,OAAO,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK,OAAO,MAAM;EACzC,MAAM,QAAQ,OAAO,QAAQ,MAAM,EAAE,SAAS,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE;EAC7D,OAAO;GACL;GACA,MAAM,KAAK,MAAM,OAAO,KAAK,IAAI,EAAE;GACnC,SAAS,KAAK,QAAQ,MAAM,EAAE,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,MAAM;GAClF,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;EAC3B;CACF,CAAC;AACH;;AAGA,SAAgB,cAAc,OAA+D;CAC3F,MAAM,OAAO,UAAgB,gBAAgB,UAAU,OAAO,KAAK,cAAA,EAAgB,QAAqB,oBAAoB;CAC5H,MAAM,SAAS,MAAY,WAAuC;EAChE,MAAM,OAAO,IAAI,IAAI;EACrB,IAAI,CAAC,MAAM,OAAO;EAClB,MAAM,OAAO,SAAS,YAAY;EAClC,KAAK,SAAS,MAAM,CAAC;EACrB,KAAK,OAAO,MAAM,MAAM;EACxB,OAAO;GAAE,MAAM,OAAO,KAAK,QAAQ,UAAU;GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC;EAAO;CACjF;CACA,MAAM,QAAQ,MAAM,MAAM,gBAAgB,MAAM,WAAW;CAC3D,MAAM,MAAM,MAAM,MAAM,cAAc,MAAM,SAAS;CACrD,OAAO,SAAS,MAAM;EAAE;EAAO;CAAI,IAAI;AACzC;;AAGA,SAAgB,aAAa,OAAiC;CAC5D,MAAM,UAAU,cAAc,KAAK;CACnC,IAAI,CAAC,WAAW,QAAQ,MAAM,SAAS,QAAQ,IAAI,MAAM,OAAO;CAChE,OAAO;EAAE,MAAM,QAAQ,MAAM;EAAM,OAAO,QAAQ,MAAM;EAAQ,KAAK,QAAQ,IAAI;CAAO;AAC1F"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
const require_comment_types = require("../comments/comment-types.cjs");
|
|
2
|
+
// src/file-findings/findings-comments.ts
|
|
3
|
+
/** Anchor of every comment for a finding on `line`. */
|
|
4
|
+
function lineAnchor(line) {
|
|
5
|
+
return `line:${line}`;
|
|
6
|
+
}
|
|
7
|
+
/** Anchor a rendered block registers for the source lines `start`..`end`. */
|
|
8
|
+
function blockAnchor(start, end) {
|
|
9
|
+
return `L${start}-${end}`;
|
|
10
|
+
}
|
|
11
|
+
var LINE_ANCHOR = /^line:(\d+)$/;
|
|
12
|
+
var BLOCK_ANCHOR = /^L(\d+)-(\d+)$/;
|
|
13
|
+
/** The line a `line:N` anchor names; throws for any other anchor. */
|
|
14
|
+
function lineOfAnchor(anchor) {
|
|
15
|
+
const match = LINE_ANCHOR.exec(anchor);
|
|
16
|
+
if (!match) throw new Error(`file-findings: expected a "line:<n>" anchor, got ${JSON.stringify(anchor)}`);
|
|
17
|
+
return Number(match[1]);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolves a `line:N` anchor to a registered `L<start>-<end>` block: the
|
|
21
|
+
* smallest block containing N, else the nearest block starting above N, else
|
|
22
|
+
* the document anchor when that is registered. A block anchor resolves to
|
|
23
|
+
* itself when registered. Anything else is a bug in the caller and throws.
|
|
24
|
+
*/
|
|
25
|
+
var lineRangeAnchorResolver = (anchor, registered) => {
|
|
26
|
+
if (anchor === "__document__" || BLOCK_ANCHOR.test(anchor)) return registered.includes(anchor) ? anchor : null;
|
|
27
|
+
const line = lineOfAnchor(anchor);
|
|
28
|
+
const blocks = registered.flatMap((candidate) => {
|
|
29
|
+
const match = BLOCK_ANCHOR.exec(candidate);
|
|
30
|
+
return match ? [{
|
|
31
|
+
anchor: candidate,
|
|
32
|
+
start: Number(match[1]),
|
|
33
|
+
end: Number(match[2])
|
|
34
|
+
}] : [];
|
|
35
|
+
});
|
|
36
|
+
const containing = blocks.filter((b) => b.start <= line && line <= b.end).sort((a, b) => a.end - a.start - (b.end - b.start) || b.start - a.start)[0];
|
|
37
|
+
if (containing) return containing.anchor;
|
|
38
|
+
const preceding = blocks.filter((b) => b.start <= line).sort((a, b) => b.start - a.start)[0];
|
|
39
|
+
if (preceding) return preceding.anchor;
|
|
40
|
+
return registered.includes("__document__") ? require_comment_types.DOCUMENT_ANCHOR : null;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Every severity is an unresolved, active comment: a finding has no
|
|
44
|
+
* resolve/close lifecycle here, it is shown for as long as the tool reports it.
|
|
45
|
+
*/
|
|
46
|
+
var FINDINGS_COMMENT_CONFIG = {
|
|
47
|
+
statuses: [
|
|
48
|
+
{
|
|
49
|
+
value: "error",
|
|
50
|
+
label: "Error",
|
|
51
|
+
tone: "danger",
|
|
52
|
+
stage: "active",
|
|
53
|
+
unresolved: true
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
value: "warning",
|
|
57
|
+
label: "Warning",
|
|
58
|
+
tone: "warning",
|
|
59
|
+
stage: "active",
|
|
60
|
+
unresolved: true
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
value: "info",
|
|
64
|
+
label: "Info",
|
|
65
|
+
tone: "info",
|
|
66
|
+
stage: "active",
|
|
67
|
+
unresolved: true
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
facets: [{
|
|
71
|
+
key: "severity",
|
|
72
|
+
label: "Severity",
|
|
73
|
+
options: [
|
|
74
|
+
{
|
|
75
|
+
value: "error",
|
|
76
|
+
label: "Error",
|
|
77
|
+
tone: "danger"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
value: "warning",
|
|
81
|
+
label: "Warning",
|
|
82
|
+
tone: "warning"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
value: "info",
|
|
86
|
+
label: "Info",
|
|
87
|
+
tone: "info"
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
}, {
|
|
91
|
+
key: "kind",
|
|
92
|
+
label: "Kind",
|
|
93
|
+
options: [{
|
|
94
|
+
value: "lint",
|
|
95
|
+
label: "Lint",
|
|
96
|
+
tone: "neutral"
|
|
97
|
+
}, {
|
|
98
|
+
value: "test",
|
|
99
|
+
label: "Test",
|
|
100
|
+
tone: "neutral"
|
|
101
|
+
}]
|
|
102
|
+
}]
|
|
103
|
+
};
|
|
104
|
+
var FINDING_TIME = "1970-01-01T00:00:00.000Z";
|
|
105
|
+
var ID_WIDTH = 6;
|
|
106
|
+
/**
|
|
107
|
+
* One root comment per finding, in order. The id is the finding's index
|
|
108
|
+
* zero-padded, so comment `i` belongs to `findings[i]` and ids sort in finding
|
|
109
|
+
* order. Anchor is `line:<n>`, author is the raising tool, status is the severity.
|
|
110
|
+
*/
|
|
111
|
+
function findingsToComments(findings) {
|
|
112
|
+
return findings.map((finding, index) => ({
|
|
113
|
+
id: `finding-${String(index).padStart(ID_WIDTH, "0")}`,
|
|
114
|
+
body: finding.rule ? `${finding.message}\n\n\`${finding.rule}\`` : finding.message,
|
|
115
|
+
createdAt: FINDING_TIME,
|
|
116
|
+
author: {
|
|
117
|
+
name: finding.source,
|
|
118
|
+
kind: "agent"
|
|
119
|
+
},
|
|
120
|
+
status: finding.severity,
|
|
121
|
+
anchor: lineAnchor(finding.line),
|
|
122
|
+
facets: {
|
|
123
|
+
severity: finding.severity,
|
|
124
|
+
source: finding.source,
|
|
125
|
+
kind: finding.kind
|
|
126
|
+
}
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
129
|
+
exports.FINDINGS_COMMENT_CONFIG = FINDINGS_COMMENT_CONFIG;
|
|
130
|
+
exports.blockAnchor = blockAnchor;
|
|
131
|
+
exports.findingsToComments = findingsToComments;
|
|
132
|
+
exports.lineAnchor = lineAnchor;
|
|
133
|
+
exports.lineOfAnchor = lineOfAnchor;
|
|
134
|
+
exports.lineRangeAnchorResolver = lineRangeAnchorResolver;
|
|
135
|
+
|
|
136
|
+
//# sourceMappingURL=findings-comments.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings-comments.cjs","names":["DOCUMENT_ANCHOR"],"sources":["../../src/file-findings/findings-comments.ts"],"sourcesContent":["// Findings as read-only clicky-ui comment threads, and the anchor scheme that\n// ties a finding's line to the rendered block (or editor line) showing it.\n\nimport { DOCUMENT_ANCHOR, type Comment, type CommentAnchor, type CommentConfig } from \"../comments/comment-types\";\nimport type { AnchorResolver } from \"../comments/comment-context\";\nimport type { FileFinding } from \"./types\";\n\n/** Anchor of every comment for a finding on `line`. */\nexport function lineAnchor(line: number): CommentAnchor {\n return `line:${line}`;\n}\n\n/** Anchor a rendered block registers for the source lines `start`..`end`. */\nexport function blockAnchor(start: number, end: number): CommentAnchor {\n return `L${start}-${end}`;\n}\n\nconst LINE_ANCHOR = /^line:(\\d+)$/;\nconst BLOCK_ANCHOR = /^L(\\d+)-(\\d+)$/;\n\n/** The line a `line:N` anchor names; throws for any other anchor. */\nexport function lineOfAnchor(anchor: CommentAnchor): number {\n const match = LINE_ANCHOR.exec(anchor);\n if (!match) throw new Error(`file-findings: expected a \"line:<n>\" anchor, got ${JSON.stringify(anchor)}`);\n return Number(match[1]);\n}\n\n/**\n * Resolves a `line:N` anchor to a registered `L<start>-<end>` block: the\n * smallest block containing N, else the nearest block starting above N, else\n * the document anchor when that is registered. A block anchor resolves to\n * itself when registered. Anything else is a bug in the caller and throws.\n */\nexport const lineRangeAnchorResolver: AnchorResolver = (anchor, registered) => {\n if (anchor === DOCUMENT_ANCHOR || BLOCK_ANCHOR.test(anchor)) return registered.includes(anchor) ? anchor : null;\n const line = lineOfAnchor(anchor);\n\n const blocks = registered.flatMap((candidate) => {\n const match = BLOCK_ANCHOR.exec(candidate);\n return match ? [{ anchor: candidate, start: Number(match[1]), end: Number(match[2]) }] : [];\n });\n const containing = blocks\n .filter((b) => b.start <= line && line <= b.end)\n .sort((a, b) => a.end - a.start - (b.end - b.start) || b.start - a.start)[0];\n if (containing) return containing.anchor;\n const preceding = blocks.filter((b) => b.start <= line).sort((a, b) => b.start - a.start)[0];\n if (preceding) return preceding.anchor;\n return registered.includes(DOCUMENT_ANCHOR) ? DOCUMENT_ANCHOR : null;\n};\n\n/**\n * Every severity is an unresolved, active comment: a finding has no\n * resolve/close lifecycle here, it is shown for as long as the tool reports it.\n */\nexport const FINDINGS_COMMENT_CONFIG: CommentConfig = {\n statuses: [\n { value: \"error\", label: \"Error\", tone: \"danger\", stage: \"active\", unresolved: true },\n { value: \"warning\", label: \"Warning\", tone: \"warning\", stage: \"active\", unresolved: true },\n { value: \"info\", label: \"Info\", tone: \"info\", stage: \"active\", unresolved: true },\n ],\n facets: [\n {\n key: \"severity\",\n label: \"Severity\",\n options: [\n { value: \"error\", label: \"Error\", tone: \"danger\" },\n { value: \"warning\", label: \"Warning\", tone: \"warning\" },\n { value: \"info\", label: \"Info\", tone: \"info\" },\n ],\n },\n {\n key: \"kind\",\n label: \"Kind\",\n options: [\n { value: \"lint\", label: \"Lint\", tone: \"neutral\" },\n { value: \"test\", label: \"Test\", tone: \"neutral\" },\n ],\n },\n ],\n};\n\n// A finding has no creation time of its own; one fixed instant keeps the\n// comments identical between renders and ordered by id alone.\nconst FINDING_TIME = \"1970-01-01T00:00:00.000Z\";\nconst ID_WIDTH = 6;\n\n/**\n * One root comment per finding, in order. The id is the finding's index\n * zero-padded, so comment `i` belongs to `findings[i]` and ids sort in finding\n * order. Anchor is `line:<n>`, author is the raising tool, status is the severity.\n */\nexport function findingsToComments(findings: readonly FileFinding[]): Comment[] {\n return findings.map((finding, index) => ({\n id: `finding-${String(index).padStart(ID_WIDTH, \"0\")}`,\n body: finding.rule ? `${finding.message}\\n\\n\\`${finding.rule}\\`` : finding.message,\n createdAt: FINDING_TIME,\n author: { name: finding.source, kind: \"agent\" },\n status: finding.severity,\n anchor: lineAnchor(finding.line),\n facets: { severity: finding.severity, source: finding.source, kind: finding.kind },\n }));\n}\n"],"mappings":";;;AAQA,SAAgB,WAAW,MAA6B;CACtD,OAAO,QAAQ;AACjB;;AAGA,SAAgB,YAAY,OAAe,KAA4B;CACrE,OAAO,IAAI,MAAM,GAAG;AACtB;AAEA,IAAM,cAAc;AACpB,IAAM,eAAe;;AAGrB,SAAgB,aAAa,QAA+B;CAC1D,MAAM,QAAQ,YAAY,KAAK,MAAM;CACrC,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,oDAAoD,KAAK,UAAU,MAAM,GAAG;CACxG,OAAO,OAAO,MAAM,EAAE;AACxB;;;;;;;AAQA,IAAa,2BAA2C,QAAQ,eAAe;CAC7E,IAAI,WAAA,kBAA8B,aAAa,KAAK,MAAM,GAAG,OAAO,WAAW,SAAS,MAAM,IAAI,SAAS;CAC3G,MAAM,OAAO,aAAa,MAAM;CAEhC,MAAM,SAAS,WAAW,SAAS,cAAc;EAC/C,MAAM,QAAQ,aAAa,KAAK,SAAS;EACzC,OAAO,QAAQ,CAAC;GAAE,QAAQ;GAAW,OAAO,OAAO,MAAM,EAAE;GAAG,KAAK,OAAO,MAAM,EAAE;EAAE,CAAC,IAAI,CAAC;CAC5F,CAAC;CACD,MAAM,aAAa,OAChB,QAAQ,MAAM,EAAE,SAAS,QAAQ,QAAQ,EAAE,GAAG,CAAC,CAC/C,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;CAC5E,IAAI,YAAY,OAAO,WAAW;CAClC,MAAM,YAAY,OAAO,QAAQ,MAAM,EAAE,SAAS,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;CAC1F,IAAI,WAAW,OAAO,UAAU;CAChC,OAAO,WAAW,SAAA,cAAwB,IAAIA,sBAAAA,kBAAkB;AAClE;;;;;AAMA,IAAa,0BAAyC;CACpD,UAAU;EACR;GAAE,OAAO;GAAS,OAAO;GAAS,MAAM;GAAU,OAAO;GAAU,YAAY;EAAK;EACpF;GAAE,OAAO;GAAW,OAAO;GAAW,MAAM;GAAW,OAAO;GAAU,YAAY;EAAK;EACzF;GAAE,OAAO;GAAQ,OAAO;GAAQ,MAAM;GAAQ,OAAO;GAAU,YAAY;EAAK;CAClF;CACA,QAAQ,CACN;EACE,KAAK;EACL,OAAO;EACP,SAAS;GACP;IAAE,OAAO;IAAS,OAAO;IAAS,MAAM;GAAS;GACjD;IAAE,OAAO;IAAW,OAAO;IAAW,MAAM;GAAU;GACtD;IAAE,OAAO;IAAQ,OAAO;IAAQ,MAAM;GAAO;EAC/C;CACF,GACA;EACE,KAAK;EACL,OAAO;EACP,SAAS,CACP;GAAE,OAAO;GAAQ,OAAO;GAAQ,MAAM;EAAU,GAChD;GAAE,OAAO;GAAQ,OAAO;GAAQ,MAAM;EAAU,CAClD;CACF,CACF;AACF;AAIA,IAAM,eAAe;AACrB,IAAM,WAAW;;;;;;AAOjB,SAAgB,mBAAmB,UAA6C;CAC9E,OAAO,SAAS,KAAK,SAAS,WAAW;EACvC,IAAI,WAAW,OAAO,KAAK,CAAC,CAAC,SAAS,UAAU,GAAG;EACnD,MAAM,QAAQ,OAAO,GAAG,QAAQ,QAAQ,QAAQ,QAAQ,KAAK,MAAM,QAAQ;EAC3E,WAAW;EACX,QAAQ;GAAE,MAAM,QAAQ;GAAQ,MAAM;EAAQ;EAC9C,QAAQ,QAAQ;EAChB,QAAQ,WAAW,QAAQ,IAAI;EAC/B,QAAQ;GAAE,UAAU,QAAQ;GAAU,QAAQ,QAAQ;GAAQ,MAAM,QAAQ;EAAK;CACnF,EAAE;AACJ"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Comment, CommentAnchor, CommentConfig } from '../comments/comment-types.js';
|
|
2
|
+
import { AnchorResolver } from '../comments/comment-context.js';
|
|
3
|
+
import { FileFinding } from './types.js';
|
|
4
|
+
/** Anchor of every comment for a finding on `line`. */
|
|
5
|
+
export declare function lineAnchor(line: number): CommentAnchor;
|
|
6
|
+
/** Anchor a rendered block registers for the source lines `start`..`end`. */
|
|
7
|
+
export declare function blockAnchor(start: number, end: number): CommentAnchor;
|
|
8
|
+
/** The line a `line:N` anchor names; throws for any other anchor. */
|
|
9
|
+
export declare function lineOfAnchor(anchor: CommentAnchor): number;
|
|
10
|
+
/**
|
|
11
|
+
* Resolves a `line:N` anchor to a registered `L<start>-<end>` block: the
|
|
12
|
+
* smallest block containing N, else the nearest block starting above N, else
|
|
13
|
+
* the document anchor when that is registered. A block anchor resolves to
|
|
14
|
+
* itself when registered. Anything else is a bug in the caller and throws.
|
|
15
|
+
*/
|
|
16
|
+
export declare const lineRangeAnchorResolver: AnchorResolver;
|
|
17
|
+
/**
|
|
18
|
+
* Every severity is an unresolved, active comment: a finding has no
|
|
19
|
+
* resolve/close lifecycle here, it is shown for as long as the tool reports it.
|
|
20
|
+
*/
|
|
21
|
+
export declare const FINDINGS_COMMENT_CONFIG: CommentConfig;
|
|
22
|
+
/**
|
|
23
|
+
* One root comment per finding, in order. The id is the finding's index
|
|
24
|
+
* zero-padded, so comment `i` belongs to `findings[i]` and ids sort in finding
|
|
25
|
+
* order. Anchor is `line:<n>`, author is the raising tool, status is the severity.
|
|
26
|
+
*/
|
|
27
|
+
export declare function findingsToComments(findings: readonly FileFinding[]): Comment[];
|
|
28
|
+
//# sourceMappingURL=findings-comments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings-comments.d.ts","sourceRoot":"","sources":["../../src/file-findings/findings-comments.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAClH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAEtD;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAErE;AAKD,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAI1D;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,cAerC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,aAyBrC,CAAC;AAOF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,EAAE,CAU9E"}
|