@flanksource/clicky-ui 0.3.25 → 0.3.27
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 +1 -0
- package/dist/ai.cjs +4 -0
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +6 -2
- package/dist/ai.js.map +1 -1
- package/dist/chat.cjs +8 -0
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.js +9 -1
- package/dist/chat.js.map +1 -1
- package/dist/comments/CommentCard.cjs +89 -14
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +90 -15
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentComposer.cjs +25 -2
- package/dist/comments/CommentComposer.cjs.map +1 -1
- package/dist/comments/CommentComposer.d.ts.map +1 -1
- package/dist/comments/CommentComposer.js +25 -2
- package/dist/comments/CommentComposer.js.map +1 -1
- package/dist/comments/CommentProvider.cjs +21 -14
- 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 +21 -14
- package/dist/comments/CommentProvider.js.map +1 -1
- package/dist/comments/CommentSidePanel.cjs +1 -1
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.js +1 -1
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/comment-types.cjs.map +1 -1
- package/dist/comments/comment-types.d.ts +6 -0
- package/dist/comments/comment-types.d.ts.map +1 -1
- package/dist/comments/comment-types.js.map +1 -1
- package/dist/components/DimensionField.cjs +56 -0
- package/dist/components/DimensionField.cjs.map +1 -0
- package/dist/components/DimensionField.d.ts +17 -0
- package/dist/components/DimensionField.d.ts.map +1 -0
- package/dist/components/DimensionField.js +56 -0
- package/dist/components/DimensionField.js.map +1 -0
- package/dist/components.cjs +4 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +2 -0
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +4 -0
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +4 -5
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +4 -5
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/FixtureEditor/fixture-frontmatter.cjs +4 -0
- package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -1
- package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -1
- package/dist/data/FixtureEditor/fixture-frontmatter.js +4 -0
- package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -1
- package/dist/data/TaskExecDetails.cjs +8 -3
- package/dist/data/TaskExecDetails.cjs.map +1 -1
- package/dist/data/TaskExecDetails.d.ts +4 -0
- package/dist/data/TaskExecDetails.d.ts.map +1 -1
- package/dist/data/TaskExecDetails.js +9 -4
- package/dist/data/TaskExecDetails.js.map +1 -1
- package/dist/data/TaskManagerButton.cjs +101 -7
- package/dist/data/TaskManagerButton.cjs.map +1 -1
- package/dist/data/TaskManagerButton.d.ts +6 -1
- package/dist/data/TaskManagerButton.d.ts.map +1 -1
- package/dist/data/TaskManagerButton.js +103 -9
- package/dist/data/TaskManagerButton.js.map +1 -1
- package/dist/data/TaskProcessDetails.cjs +2 -0
- package/dist/data/TaskProcessDetails.cjs.map +1 -1
- package/dist/data/TaskProcessDetails.d.ts.map +1 -1
- package/dist/data/TaskProcessDetails.js +2 -0
- package/dist/data/TaskProcessDetails.js.map +1 -1
- package/dist/data/TaskProgress.cjs +14 -4
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.js +14 -4
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +1 -0
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +18 -23
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +19 -24
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.cjs +12 -21
- package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.d.ts +3 -2
- package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.js +12 -21
- package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.cjs +21 -38
- package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts +5 -5
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.js +21 -38
- package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
- package/dist/data/ai/ChatWindow.types.d.ts +2 -2
- package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowManager.cjs +2 -2
- package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
- package/dist/data/ai/ChatWindowManager.js +2 -2
- package/dist/data/ai/ChatWindowManager.js.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.cjs +4 -2
- package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.d.ts +15 -3
- package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.js +4 -2
- package/dist/data/ai/ChatWindowRequestBody.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.cjs +2 -3
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +2 -3
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.cjs +1 -0
- package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.d.ts +1 -1
- package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.js +1 -0
- package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
- package/dist/data/ai/RuntimeModePicker.cjs +11 -9
- package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
- package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
- package/dist/data/ai/RuntimeModePicker.js +12 -10
- package/dist/data/ai/RuntimeModePicker.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +5 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +5 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.cjs +4 -0
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +2 -0
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.js +4 -0
- package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +5 -5
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +6 -5
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +5 -5
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolPreferences.model.cjs +61 -37
- package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.model.d.ts +32 -13
- package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.model.js +62 -38
- package/dist/data/ai/ToolPreferences.model.js.map +1 -1
- package/dist/data/ai/ToolPreferencesList.cjs +17 -20
- package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
- package/dist/data/ai/ToolPreferencesList.d.ts +16 -7
- package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferencesList.js +18 -21
- package/dist/data/ai/ToolPreferencesList.js.map +1 -1
- package/dist/data/ai/chat-window-context.cjs +1 -1
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +7 -7
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +1 -1
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/index.d.ts +3 -1
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/chat/Chat.cjs +4 -2
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +4 -2
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/Chat.runtime.cjs +14 -3
- package/dist/data/chat/Chat.runtime.cjs.map +1 -1
- package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
- package/dist/data/chat/Chat.runtime.js +15 -4
- package/dist/data/chat/Chat.runtime.js.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.cjs +2 -1
- package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.js +2 -1
- package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
- package/dist/data/chat/index.d.ts +2 -1
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/tool-policy.cjs +132 -0
- package/dist/data/chat/tool-policy.cjs.map +1 -0
- package/dist/data/chat/tool-policy.d.ts +81 -0
- package/dist/data/chat/tool-policy.d.ts.map +1 -0
- package/dist/data/chat/tool-policy.js +132 -0
- package/dist/data/chat/tool-policy.js.map +1 -0
- package/dist/data/chat/types.cjs +20 -0
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +22 -2
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js +20 -0
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/debugConsoleSignal.cjs +64 -0
- package/dist/data/debugConsoleSignal.cjs.map +1 -0
- package/dist/data/debugConsoleSignal.d.ts +83 -0
- package/dist/data/debugConsoleSignal.d.ts.map +1 -0
- package/dist/data/debugConsoleSignal.js +64 -0
- package/dist/data/debugConsoleSignal.js.map +1 -0
- package/dist/data/har/HarPanel.cjs +20 -14
- package/dist/data/har/HarPanel.cjs.map +1 -1
- package/dist/data/har/HarPanel.d.ts.map +1 -1
- package/dist/data/har/HarPanel.js +20 -14
- package/dist/data/har/HarPanel.js.map +1 -1
- package/dist/data/har/types.d.ts +18 -0
- package/dist/data/har/types.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.cjs +4 -42
- package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.js +5 -43
- package/dist/data/query-browser/QueryBrowser.js.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.d.ts +0 -1
- package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.cjs +26 -41
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.js +28 -43
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.cjs +65 -0
- package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.d.ts +11 -3
- package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.js +65 -0
- package/dist/data/runtime/RuntimeBar.model.js.map +1 -1
- package/dist/data/runtime/model-capabilities.cjs +8 -5
- package/dist/data/runtime/model-capabilities.cjs.map +1 -1
- package/dist/data/runtime/model-capabilities.d.ts +6 -1
- package/dist/data/runtime/model-capabilities.d.ts.map +1 -1
- package/dist/data/runtime/model-capabilities.js +8 -5
- package/dist/data/runtime/model-capabilities.js.map +1 -1
- package/dist/data/runtime/runtime-mode.cjs +17 -0
- package/dist/data/runtime/runtime-mode.cjs.map +1 -1
- package/dist/data/runtime/runtime-mode.d.ts +6 -0
- package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
- package/dist/data/runtime/runtime-mode.js +17 -0
- package/dist/data/runtime/runtime-mode.js.map +1 -1
- package/dist/data/useDebugAction.cjs +29 -0
- package/dist/data/useDebugAction.cjs.map +1 -0
- package/dist/data/useDebugAction.d.ts +16 -0
- package/dist/data/useDebugAction.d.ts.map +1 -0
- package/dist/data/useDebugAction.js +29 -0
- package/dist/data/useDebugAction.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +16 -8
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +3 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +16 -8
- package/dist/devtools/DebugConsole.cjs +138 -0
- package/dist/devtools/DebugConsole.cjs.map +1 -0
- package/dist/devtools/DebugConsole.d.ts +23 -0
- package/dist/devtools/DebugConsole.d.ts.map +1 -0
- package/dist/devtools/DebugConsole.js +138 -0
- package/dist/devtools/DebugConsole.js.map +1 -0
- package/dist/devtools/DebugConsoleButton.cjs +59 -0
- package/dist/devtools/DebugConsoleButton.cjs.map +1 -0
- package/dist/devtools/DebugConsoleButton.d.ts +20 -0
- package/dist/devtools/DebugConsoleButton.d.ts.map +1 -0
- package/dist/devtools/DebugConsoleButton.js +59 -0
- package/dist/devtools/DebugConsoleButton.js.map +1 -0
- package/dist/devtools/DebugConsoleDock.cjs +112 -0
- package/dist/devtools/DebugConsoleDock.cjs.map +1 -0
- package/dist/devtools/DebugConsoleDock.d.ts +26 -0
- package/dist/devtools/DebugConsoleDock.d.ts.map +1 -0
- package/dist/devtools/DebugConsoleDock.js +112 -0
- package/dist/devtools/DebugConsoleDock.js.map +1 -0
- package/dist/devtools/ExecutionDetail.cjs +135 -0
- package/dist/devtools/ExecutionDetail.cjs.map +1 -0
- package/dist/devtools/ExecutionDetail.d.ts +19 -0
- package/dist/devtools/ExecutionDetail.d.ts.map +1 -0
- package/dist/devtools/ExecutionDetail.js +135 -0
- package/dist/devtools/ExecutionDetail.js.map +1 -0
- package/dist/devtools/debugClient.cjs +172 -0
- package/dist/devtools/debugClient.cjs.map +1 -0
- package/dist/devtools/debugClient.d.ts +98 -0
- package/dist/devtools/debugClient.d.ts.map +1 -0
- package/dist/devtools/debugClient.js +172 -0
- package/dist/devtools/debugClient.js.map +1 -0
- package/dist/devtools/debugStore.cjs +115 -0
- package/dist/devtools/debugStore.cjs.map +1 -0
- package/dist/devtools/debugStore.d.ts +83 -0
- package/dist/devtools/debugStore.d.ts.map +1 -0
- package/dist/devtools/debugStore.js +115 -0
- package/dist/devtools/debugStore.js.map +1 -0
- package/dist/devtools/dockState.cjs +51 -0
- package/dist/devtools/dockState.cjs.map +1 -0
- package/dist/devtools/dockState.d.ts +31 -0
- package/dist/devtools/dockState.d.ts.map +1 -0
- package/dist/devtools/dockState.js +51 -0
- package/dist/devtools/dockState.js.map +1 -0
- package/dist/devtools/tabs/ConsoleTab.cjs +36 -0
- package/dist/devtools/tabs/ConsoleTab.cjs.map +1 -0
- package/dist/devtools/tabs/ConsoleTab.d.ts +19 -0
- package/dist/devtools/tabs/ConsoleTab.d.ts.map +1 -0
- package/dist/devtools/tabs/ConsoleTab.js +36 -0
- package/dist/devtools/tabs/ConsoleTab.js.map +1 -0
- package/dist/devtools/tabs/InspectionCaches.cjs +150 -0
- package/dist/devtools/tabs/InspectionCaches.cjs.map +1 -0
- package/dist/devtools/tabs/InspectionCaches.d.ts +23 -0
- package/dist/devtools/tabs/InspectionCaches.d.ts.map +1 -0
- package/dist/devtools/tabs/InspectionCaches.js +150 -0
- package/dist/devtools/tabs/InspectionCaches.js.map +1 -0
- package/dist/devtools/tabs/InspectionTab.cjs +316 -0
- package/dist/devtools/tabs/InspectionTab.cjs.map +1 -0
- package/dist/devtools/tabs/InspectionTab.d.ts +27 -0
- package/dist/devtools/tabs/InspectionTab.d.ts.map +1 -0
- package/dist/devtools/tabs/InspectionTab.js +316 -0
- package/dist/devtools/tabs/InspectionTab.js.map +1 -0
- package/dist/devtools/tabs/NetworkTab.cjs +91 -0
- package/dist/devtools/tabs/NetworkTab.cjs.map +1 -0
- package/dist/devtools/tabs/NetworkTab.d.ts +20 -0
- package/dist/devtools/tabs/NetworkTab.d.ts.map +1 -0
- package/dist/devtools/tabs/NetworkTab.js +91 -0
- package/dist/devtools/tabs/NetworkTab.js.map +1 -0
- package/dist/devtools/tabs/QueriesTab.cjs +85 -0
- package/dist/devtools/tabs/QueriesTab.cjs.map +1 -0
- package/dist/devtools/tabs/QueriesTab.d.ts +24 -0
- package/dist/devtools/tabs/QueriesTab.d.ts.map +1 -0
- package/dist/devtools/tabs/QueriesTab.js +85 -0
- package/dist/devtools/tabs/QueriesTab.js.map +1 -0
- package/dist/devtools/types.cjs +26 -0
- package/dist/devtools/types.cjs.map +1 -0
- package/dist/devtools/types.d.ts +235 -0
- package/dist/devtools/types.d.ts.map +1 -0
- package/dist/devtools/types.js +26 -0
- package/dist/devtools/types.js.map +1 -0
- package/dist/devtools/useDebugStream.cjs +46 -0
- package/dist/devtools/useDebugStream.cjs.map +1 -0
- package/dist/devtools/useDebugStream.d.ts +23 -0
- package/dist/devtools/useDebugStream.d.ts.map +1 -0
- package/dist/devtools/useDebugStream.js +46 -0
- package/dist/devtools/useDebugStream.js.map +1 -0
- package/dist/devtools.cjs +51 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.ts +37 -0
- package/dist/devtools.d.ts.map +1 -0
- package/dist/devtools.js +51 -0
- package/dist/devtools.js.map +1 -0
- package/dist/icons/components/UiOpenScad.cjs +10 -0
- package/dist/icons/components/UiOpenScad.cjs.map +1 -0
- package/dist/icons/components/UiOpenScad.d.ts +9 -0
- package/dist/icons/components/UiOpenScad.d.ts.map +1 -0
- package/dist/icons/components/UiOpenScad.js +10 -0
- package/dist/icons/components/UiOpenScad.js.map +1 -0
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +2 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +2 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +2 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +2 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +20 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +20 -8
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +15 -10
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +11 -0
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +15 -10
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +170 -49
- 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 +170 -49
- package/dist/layout/AppShell.nav.js.map +1 -1
- package/dist/overlay/CellActions.cjs +18 -124
- package/dist/overlay/CellActions.cjs.map +1 -1
- package/dist/overlay/CellActions.d.ts +1 -1
- package/dist/overlay/CellActions.d.ts.map +1 -1
- package/dist/overlay/CellActions.js +18 -124
- package/dist/overlay/CellActions.js.map +1 -1
- package/dist/overlay/ContextMenu.cjs +144 -0
- package/dist/overlay/ContextMenu.cjs.map +1 -0
- package/dist/overlay/ContextMenu.d.ts +8 -0
- package/dist/overlay/ContextMenu.d.ts.map +1 -0
- package/dist/overlay/ContextMenu.js +144 -0
- package/dist/overlay/ContextMenu.js.map +1 -0
- package/dist/profiles/connections/connectionBrowserModel.cjs +14 -65
- package/dist/profiles/connections/connectionBrowserModel.cjs.map +1 -1
- package/dist/profiles/connections/connectionBrowserModel.d.ts +35 -35
- package/dist/profiles/connections/connectionBrowserModel.d.ts.map +1 -1
- package/dist/profiles/connections/connectionBrowserModel.js +14 -65
- package/dist/profiles/connections/connectionBrowserModel.js.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.cjs +29 -9
- package/dist/profiles/connections/connectionQueryWorkspace.cjs.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.d.ts +3 -2
- package/dist/profiles/connections/connectionQueryWorkspace.d.ts.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.js +30 -10
- package/dist/profiles/connections/connectionQueryWorkspace.js.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs +15 -0
- package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts +22 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.js +15 -0
- package/dist/profiles/connections/connectionQueryWorkspaceModel.js.map +1 -1
- package/dist/profiles/connections/index.d.ts +1 -0
- package/dist/profiles/connections/index.d.ts.map +1 -1
- package/dist/profiles/connections/inspectionStatus.cjs +44 -0
- package/dist/profiles/connections/inspectionStatus.cjs.map +1 -0
- package/dist/profiles/connections/inspectionStatus.d.ts +5 -0
- package/dist/profiles/connections/inspectionStatus.d.ts.map +1 -0
- package/dist/profiles/connections/inspectionStatus.js +44 -0
- package/dist/profiles/connections/inspectionStatus.js.map +1 -0
- package/dist/profiles/connections/useInspection.cjs +123 -0
- package/dist/profiles/connections/useInspection.cjs.map +1 -0
- package/dist/profiles/connections/useInspection.d.ts +35 -0
- package/dist/profiles/connections/useInspection.d.ts.map +1 -0
- package/dist/profiles/connections/useInspection.js +123 -0
- package/dist/profiles/connections/useInspection.js.map +1 -0
- package/dist/profiles/editor/profileBuilderWorkspace.cjs +55 -23
- package/dist/profiles/editor/profileBuilderWorkspace.cjs.map +1 -1
- package/dist/profiles/editor/profileBuilderWorkspace.d.ts.map +1 -1
- package/dist/profiles/editor/profileBuilderWorkspace.js +56 -24
- package/dist/profiles/editor/profileBuilderWorkspace.js.map +1 -1
- package/dist/profiles/elasticsearch/esQueryBuilder.cjs +12 -3
- package/dist/profiles/elasticsearch/esQueryBuilder.cjs.map +1 -1
- package/dist/profiles/elasticsearch/esQueryBuilder.d.ts +2 -2
- package/dist/profiles/elasticsearch/esQueryBuilder.d.ts.map +1 -1
- package/dist/profiles/elasticsearch/esQueryBuilder.js +12 -3
- package/dist/profiles/elasticsearch/esQueryBuilder.js.map +1 -1
- package/dist/profiles/fields/profileFieldEditor.cjs +137 -22
- package/dist/profiles/fields/profileFieldEditor.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldEditor.d.ts.map +1 -1
- package/dist/profiles/fields/profileFieldEditor.js +137 -22
- package/dist/profiles/fields/profileFieldEditor.js.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.cjs +171 -82
- package/dist/profiles/fields/profileFieldFilterEditor.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.d.ts +0 -9
- package/dist/profiles/fields/profileFieldFilterEditor.d.ts.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.js +174 -85
- package/dist/profiles/fields/profileFieldFilterEditor.js.map +1 -1
- package/dist/profiles/fields/profileFieldIcons.cjs +6 -3
- package/dist/profiles/fields/profileFieldIcons.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldIcons.js +6 -3
- package/dist/profiles/fields/profileFieldIcons.js.map +1 -1
- package/dist/profiles/query/profileSampleFilterLookup.cjs +34 -0
- package/dist/profiles/query/profileSampleFilterLookup.cjs.map +1 -0
- package/dist/profiles/query/profileSampleFilterLookup.d.ts +12 -0
- package/dist/profiles/query/profileSampleFilterLookup.d.ts.map +1 -0
- package/dist/profiles/query/profileSampleFilterLookup.js +34 -0
- package/dist/profiles/query/profileSampleFilterLookup.js.map +1 -0
- package/dist/profiles/query/profileSamplePayload.cjs +6 -4
- package/dist/profiles/query/profileSamplePayload.cjs.map +1 -1
- package/dist/profiles/query/profileSamplePayload.d.ts +11 -4
- package/dist/profiles/query/profileSamplePayload.d.ts.map +1 -1
- package/dist/profiles/query/profileSamplePayload.js +6 -4
- package/dist/profiles/query/profileSamplePayload.js.map +1 -1
- package/dist/profiles/query/profileSampleResult.cjs +26 -0
- package/dist/profiles/query/profileSampleResult.cjs.map +1 -0
- package/dist/profiles/query/profileSampleResult.d.ts +11 -0
- package/dist/profiles/query/profileSampleResult.d.ts.map +1 -0
- package/dist/profiles/query/profileSampleResult.js +26 -0
- package/dist/profiles/query/profileSampleResult.js.map +1 -0
- package/dist/profiles/query/queryTargetPicker.cjs +5 -3
- package/dist/profiles/query/queryTargetPicker.cjs.map +1 -1
- package/dist/profiles/query/queryTargetPicker.d.ts +3 -2
- package/dist/profiles/query/queryTargetPicker.d.ts.map +1 -1
- package/dist/profiles/query/queryTargetPicker.js +5 -3
- package/dist/profiles/query/queryTargetPicker.js.map +1 -1
- package/dist/profiles/wizard/profileWizard.cjs +14 -5
- package/dist/profiles/wizard/profileWizard.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizard.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizard.js +15 -6
- package/dist/profiles/wizard/profileWizard.js.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.cjs +35 -6
- package/dist/profiles/wizard/profileWizardModel.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.d.ts +29 -4
- package/dist/profiles/wizard/profileWizardModel.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.js +35 -6
- package/dist/profiles/wizard/profileWizardModel.js.map +1 -1
- package/dist/profiles/wizard/profileWizardQueryStep.cjs +44 -11
- package/dist/profiles/wizard/profileWizardQueryStep.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardQueryStep.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardQueryStep.js +46 -13
- package/dist/profiles/wizard/profileWizardQueryStep.js.map +1 -1
- package/dist/profiles/wizard/profileWizardSteps.cjs +33 -2
- package/dist/profiles/wizard/profileWizardSteps.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardSteps.d.ts +11 -2
- package/dist/profiles/wizard/profileWizardSteps.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardSteps.js +33 -2
- package/dist/profiles/wizard/profileWizardSteps.js.map +1 -1
- package/dist/profiles.cjs +8 -2
- package/dist/profiles.cjs.map +1 -1
- package/dist/profiles.js +10 -4
- package/dist/profiles.js.map +1 -1
- package/dist/rpc/FilterForm.cjs +21 -237
- package/dist/rpc/FilterForm.cjs.map +1 -1
- package/dist/rpc/FilterForm.d.ts +3 -1
- package/dist/rpc/FilterForm.d.ts.map +1 -1
- package/dist/rpc/FilterForm.js +21 -237
- package/dist/rpc/FilterForm.js.map +1 -1
- package/dist/rpc/FilterFormFields.cjs +240 -0
- package/dist/rpc/FilterFormFields.cjs.map +1 -0
- package/dist/rpc/FilterFormFields.d.ts +12 -0
- package/dist/rpc/FilterFormFields.d.ts.map +1 -0
- package/dist/rpc/FilterFormFields.js +240 -0
- package/dist/rpc/FilterFormFields.js.map +1 -0
- package/dist/rpc/router.cjs +3 -2
- package/dist/rpc/router.cjs.map +1 -1
- package/dist/rpc/router.d.ts.map +1 -1
- package/dist/rpc/router.js +3 -2
- package/dist/rpc/router.js.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +3 -1
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
- package/dist/data/query-info/QueryInfoDialog.cjs +0 -106
- package/dist/data/query-info/QueryInfoDialog.cjs.map +0 -1
- package/dist/data/query-info/QueryInfoDialog.d.ts +0 -16
- package/dist/data/query-info/QueryInfoDialog.d.ts.map +0 -1
- package/dist/data/query-info/QueryInfoDialog.js +0 -106
- package/dist/data/query-info/QueryInfoDialog.js.map +0 -1
- package/dist/data/query-info/index.d.ts +0 -4
- package/dist/data/query-info/index.d.ts.map +0 -1
- package/dist/data/query-info/queryInfo.cjs +0 -42
- package/dist/data/query-info/queryInfo.cjs.map +0 -1
- package/dist/data/query-info/queryInfo.d.ts +0 -45
- package/dist/data/query-info/queryInfo.d.ts.map +0 -1
- package/dist/data/query-info/queryInfo.js +0 -42
- package/dist/data/query-info/queryInfo.js.map +0 -1
- package/dist/data/query-info/useQueryInfo.cjs +0 -48
- package/dist/data/query-info/useQueryInfo.cjs.map +0 -1
- package/dist/data/query-info/useQueryInfo.d.ts +0 -26
- package/dist/data/query-info/useQueryInfo.d.ts.map +0 -1
- package/dist/data/query-info/useQueryInfo.js +0 -48
- package/dist/data/query-info/useQueryInfo.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HarPanel.d.ts","sourceRoot":"","sources":["../../../src/data/har/HarPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG;IAC1B,6BAA6B;IAC7B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA8CF,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,MAAM,EACN,UAAuC,EACvC,SAAS,GACV,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"HarPanel.d.ts","sourceRoot":"","sources":["../../../src/data/har/HarPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG;IAC1B,6BAA6B;IAC7B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA8CF,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,MAAM,EACN,UAAuC,EACvC,SAAS,GACV,EAAE,aAAa,2CAiCf"}
|
|
@@ -56,20 +56,26 @@ function HarPanel({
|
|
|
56
56
|
if (!entries || entries.length === 0) {
|
|
57
57
|
return /* @__PURE__ */ jsx("div", { className: "p-density-6 text-center text-muted-foreground text-sm", children: emptyLabel });
|
|
58
58
|
}
|
|
59
|
-
return
|
|
60
|
-
DataTable
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
59
|
+
return (
|
|
60
|
+
// A flex column, not a plain block: DataTable sizes itself as `flex-1
|
|
61
|
+
// min-h-0` so its own scroll region can be bounded, and in a block parent
|
|
62
|
+
// that resolves to content height — the table grows past the panel and
|
|
63
|
+
// nothing scrolls.
|
|
64
|
+
/* @__PURE__ */ jsx("div", { className: `flex h-full min-h-0 flex-col ${className ?? ""}`, children: /* @__PURE__ */ jsx(
|
|
65
|
+
DataTable,
|
|
66
|
+
{
|
|
67
|
+
data: filteredEntries,
|
|
68
|
+
columns: COLS,
|
|
69
|
+
autoFilter: true,
|
|
70
|
+
showGlobalFilter: search === void 0,
|
|
71
|
+
globalFilterPlaceholder: "Filter URL, method, or body…",
|
|
72
|
+
defaultSort: { key: "time", dir: "asc" },
|
|
73
|
+
emptyMessage: emptyLabel,
|
|
74
|
+
getRowId: (entry, index) => `${entry.startedDateTime ?? index}-${entry.request.method}-${entry.request.url}-${entry.time}`,
|
|
75
|
+
renderExpandedRow: (entry) => /* @__PURE__ */ jsx(HarRowDetails, { entry })
|
|
76
|
+
}
|
|
77
|
+
) })
|
|
78
|
+
);
|
|
73
79
|
}
|
|
74
80
|
function HarRowDetails({ entry }) {
|
|
75
81
|
var _a, _b;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HarPanel.js","sources":["../../../src/data/har/HarPanel.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { DataTable, type DataTableColumn } from \"../DataTable\";\nimport { JsonView } from \"../JsonView\";\nimport type { HAREntry } from \"./types\";\n\nexport type HarPanelProps = {\n /** HAR entries to render. */\n entries: HAREntry[];\n /** Optional external search term. When omitted, the internal DataTable search is shown. */\n search?: string;\n /** Empty-state label for no entries or no matches. */\n emptyLabel?: string;\n /** Classes applied to the panel root. */\n className?: string;\n};\n\nconst COLS: DataTableColumn<HAREntry>[] = [\n {\n key: \"request.method\",\n label: \"Method\",\n shrink: true,\n },\n {\n key: \"request.url\",\n label: \"URL\",\n grow: true,\n render: (value) => <span title={String(value ?? \"\")}>{String(value ?? \"\")}</span>,\n },\n {\n key: \"response.status\",\n label: \"Status\",\n shrink: true,\n render: (value) => (\n <span className={statusColor(Number(value ?? 0))}>{String(value ?? \"\")}</span>\n ),\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"time\",\n label: \"Time\",\n align: \"right\",\n shrink: true,\n render: (value) => `${Number(value ?? 0).toFixed(0)}ms`,\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"response.bodySize\",\n label: \"Size\",\n align: \"right\",\n shrink: true,\n render: (value) => formatBytes(Number(value ?? 0)),\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"response.content.mimeType\",\n label: \"Type\",\n shrink: true,\n },\n];\n\nexport function HarPanel({\n entries,\n search,\n emptyLabel = \"No HTTP traffic captured\",\n className,\n}: HarPanelProps) {\n const filteredEntries = useMemo(() => {\n if (search === undefined || search.trim() === \"\") return entries;\n return entries.filter((entry) => matchesSearch(search.trim().toLowerCase(), entry));\n }, [entries, search]);\n\n if (!entries || entries.length === 0) {\n return (\n <div className=\"p-density-6 text-center text-muted-foreground text-sm\">{emptyLabel}</div>\n );\n }\n\n return (\n <div className={`h-full ${className ?? \"\"}`}>\n <DataTable\n data={filteredEntries}\n columns={COLS}\n autoFilter\n showGlobalFilter={search === undefined}\n globalFilterPlaceholder=\"Filter URL, method, or body…\"\n defaultSort={{ key: \"time\", dir: \"asc\" }}\n emptyMessage={emptyLabel}\n getRowId={(entry, index) =>\n `${entry.startedDateTime ?? index}-${entry.request.method}-${entry.request.url}-${entry.time}`\n }\n renderExpandedRow={(entry) => <HarRowDetails entry={entry} />}\n />\n </div>\n );\n}\n\nfunction HarRowDetails({ entry }: { entry: HAREntry }) {\n return (\n <>\n <div className=\"grid grid-cols-2 gap-density-4\">\n <div>\n <HeaderList\n title=\"Request Headers\"\n {...(entry.request.headers ? { headers: entry.request.headers } : {})}\n />\n {entry.request.postData?.text && (\n <div className=\"mt-density-2\">\n <div className=\"font-semibold text-foreground mb-1\">Request Body</div>\n <div className=\"bg-background p-density-2 rounded border border-border overflow-auto max-h-48\">\n <BodyView\n text={entry.request.postData.text}\n {...(entry.request.postData.mimeType\n ? { mimeType: entry.request.postData.mimeType }\n : {})}\n />\n </div>\n </div>\n )}\n </div>\n <div>\n <HeaderList\n title=\"Response Headers\"\n {...(entry.response.headers ? { headers: entry.response.headers } : {})}\n />\n </div>\n </div>\n {entry.response.content?.text && (\n <div className=\"mt-density-3\">\n <div className=\"font-semibold text-foreground mb-1\">Response Body</div>\n <div className=\"bg-background p-density-2 rounded border border-border overflow-auto max-h-64\">\n <BodyView\n text={entry.response.content.text}\n {...(entry.response.content.mimeType\n ? { mimeType: entry.response.content.mimeType }\n : {})}\n />\n </div>\n </div>\n )}\n </>\n );\n}\n\nfunction HeaderList({\n title,\n headers,\n}: {\n title: string;\n headers?: { name: string; value: string }[];\n}) {\n return (\n <>\n <div className=\"font-semibold text-foreground mb-1\">{title}</div>\n <div className=\"space-y-0.5\">\n {headers?.map((h, i) => (\n <div key={i} className=\"whitespace-nowrap\">\n <span className=\"text-purple-600 dark:text-purple-400\">{h.name}:</span> {h.value}\n </div>\n ))}\n </div>\n </>\n );\n}\n\nfunction BodyView({ text, mimeType }: { text: string; mimeType?: string }) {\n if (isJsonType(mimeType)) {\n const parsed = tryParseJson(text);\n if (parsed !== null) return <JsonView data={parsed} />;\n }\n return <pre className=\"whitespace-pre-wrap break-all\">{text}</pre>;\n}\n\nfunction tryParseJson(text: string): unknown | null {\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n\nfunction isJsonType(mime?: string): boolean {\n return !!mime && (mime.includes(\"json\") || mime.includes(\"javascript\"));\n}\n\nfunction matchesSearch(needle: string, entry: HAREntry): boolean {\n return [\n entry.request.method,\n entry.request.url,\n entry.request.postData?.text,\n entry.response.content?.text,\n ].some((value) => !!value && value.toLowerCase().includes(needle));\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 0) return \"\";\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)}MB`;\n}\n\nfunction statusColor(status: number): string {\n if (status >= 500) return \"text-red-600\";\n if (status >= 400) return \"text-amber-600\";\n if (status >= 300) return \"text-blue-600\";\n if (status >= 200) return \"text-green-600\";\n return \"text-muted-foreground\";\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HarPanel.js","sources":["../../../src/data/har/HarPanel.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { DataTable, type DataTableColumn } from \"../DataTable\";\nimport { JsonView } from \"../JsonView\";\nimport type { HAREntry } from \"./types\";\n\nexport type HarPanelProps = {\n /** HAR entries to render. */\n entries: HAREntry[];\n /** Optional external search term. When omitted, the internal DataTable search is shown. */\n search?: string;\n /** Empty-state label for no entries or no matches. */\n emptyLabel?: string;\n /** Classes applied to the panel root. */\n className?: string;\n};\n\nconst COLS: DataTableColumn<HAREntry>[] = [\n {\n key: \"request.method\",\n label: \"Method\",\n shrink: true,\n },\n {\n key: \"request.url\",\n label: \"URL\",\n grow: true,\n render: (value) => <span title={String(value ?? \"\")}>{String(value ?? \"\")}</span>,\n },\n {\n key: \"response.status\",\n label: \"Status\",\n shrink: true,\n render: (value) => (\n <span className={statusColor(Number(value ?? 0))}>{String(value ?? \"\")}</span>\n ),\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"time\",\n label: \"Time\",\n align: \"right\",\n shrink: true,\n render: (value) => `${Number(value ?? 0).toFixed(0)}ms`,\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"response.bodySize\",\n label: \"Size\",\n align: \"right\",\n shrink: true,\n render: (value) => formatBytes(Number(value ?? 0)),\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"response.content.mimeType\",\n label: \"Type\",\n shrink: true,\n },\n];\n\nexport function HarPanel({\n entries,\n search,\n emptyLabel = \"No HTTP traffic captured\",\n className,\n}: HarPanelProps) {\n const filteredEntries = useMemo(() => {\n if (search === undefined || search.trim() === \"\") return entries;\n return entries.filter((entry) => matchesSearch(search.trim().toLowerCase(), entry));\n }, [entries, search]);\n\n if (!entries || entries.length === 0) {\n return (\n <div className=\"p-density-6 text-center text-muted-foreground text-sm\">{emptyLabel}</div>\n );\n }\n\n return (\n // A flex column, not a plain block: DataTable sizes itself as `flex-1\n // min-h-0` so its own scroll region can be bounded, and in a block parent\n // that resolves to content height — the table grows past the panel and\n // nothing scrolls.\n <div className={`flex h-full min-h-0 flex-col ${className ?? \"\"}`}>\n <DataTable\n data={filteredEntries}\n columns={COLS}\n autoFilter\n showGlobalFilter={search === undefined}\n globalFilterPlaceholder=\"Filter URL, method, or body…\"\n defaultSort={{ key: \"time\", dir: \"asc\" }}\n emptyMessage={emptyLabel}\n getRowId={(entry, index) =>\n `${entry.startedDateTime ?? index}-${entry.request.method}-${entry.request.url}-${entry.time}`\n }\n renderExpandedRow={(entry) => <HarRowDetails entry={entry} />}\n />\n </div>\n );\n}\n\nfunction HarRowDetails({ entry }: { entry: HAREntry }) {\n return (\n <>\n <div className=\"grid grid-cols-2 gap-density-4\">\n <div>\n <HeaderList\n title=\"Request Headers\"\n {...(entry.request.headers ? { headers: entry.request.headers } : {})}\n />\n {entry.request.postData?.text && (\n <div className=\"mt-density-2\">\n <div className=\"font-semibold text-foreground mb-1\">Request Body</div>\n <div className=\"bg-background p-density-2 rounded border border-border overflow-auto max-h-48\">\n <BodyView\n text={entry.request.postData.text}\n {...(entry.request.postData.mimeType\n ? { mimeType: entry.request.postData.mimeType }\n : {})}\n />\n </div>\n </div>\n )}\n </div>\n <div>\n <HeaderList\n title=\"Response Headers\"\n {...(entry.response.headers ? { headers: entry.response.headers } : {})}\n />\n </div>\n </div>\n {entry.response.content?.text && (\n <div className=\"mt-density-3\">\n <div className=\"font-semibold text-foreground mb-1\">Response Body</div>\n <div className=\"bg-background p-density-2 rounded border border-border overflow-auto max-h-64\">\n <BodyView\n text={entry.response.content.text}\n {...(entry.response.content.mimeType\n ? { mimeType: entry.response.content.mimeType }\n : {})}\n />\n </div>\n </div>\n )}\n </>\n );\n}\n\nfunction HeaderList({\n title,\n headers,\n}: {\n title: string;\n headers?: { name: string; value: string }[];\n}) {\n return (\n <>\n <div className=\"font-semibold text-foreground mb-1\">{title}</div>\n <div className=\"space-y-0.5\">\n {headers?.map((h, i) => (\n <div key={i} className=\"whitespace-nowrap\">\n <span className=\"text-purple-600 dark:text-purple-400\">{h.name}:</span> {h.value}\n </div>\n ))}\n </div>\n </>\n );\n}\n\nfunction BodyView({ text, mimeType }: { text: string; mimeType?: string }) {\n if (isJsonType(mimeType)) {\n const parsed = tryParseJson(text);\n if (parsed !== null) return <JsonView data={parsed} />;\n }\n return <pre className=\"whitespace-pre-wrap break-all\">{text}</pre>;\n}\n\nfunction tryParseJson(text: string): unknown | null {\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n\nfunction isJsonType(mime?: string): boolean {\n return !!mime && (mime.includes(\"json\") || mime.includes(\"javascript\"));\n}\n\nfunction matchesSearch(needle: string, entry: HAREntry): boolean {\n return [\n entry.request.method,\n entry.request.url,\n entry.request.postData?.text,\n entry.response.content?.text,\n ].some((value) => !!value && value.toLowerCase().includes(needle));\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 0) return \"\";\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)}MB`;\n}\n\nfunction statusColor(status: number): string {\n if (status >= 500) return \"text-red-600\";\n if (status >= 400) return \"text-amber-600\";\n if (status >= 300) return \"text-blue-600\";\n if (status >= 200) return \"text-green-600\";\n return \"text-muted-foreground\";\n}\n"],"names":[],"mappings":"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"}
|
package/dist/data/har/types.d.ts
CHANGED
|
@@ -44,4 +44,22 @@ export interface HAREntry extends Record<string, unknown> {
|
|
|
44
44
|
receive?: number;
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
|
+
export interface HARCreator {
|
|
48
|
+
name: string;
|
|
49
|
+
version: string;
|
|
50
|
+
}
|
|
51
|
+
export interface HARLog {
|
|
52
|
+
version: string;
|
|
53
|
+
creator: HARCreator;
|
|
54
|
+
pages?: unknown[];
|
|
55
|
+
entries: HAREntry[];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A whole HAR 1.2 document — the envelope `HAREntry[]` arrives in, and the shape
|
|
59
|
+
* a file has to be in for Chrome devtools to import it. Panels take entries;
|
|
60
|
+
* anything that saves or loads a capture takes this.
|
|
61
|
+
*/
|
|
62
|
+
export interface HARFile {
|
|
63
|
+
log: HARLog;
|
|
64
|
+
}
|
|
47
65
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/har/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAS,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/har/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAS,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;CACb"}
|
|
@@ -15,7 +15,7 @@ const ErrorDetails = require("../diagnostics/ErrorDetails.cjs");
|
|
|
15
15
|
const QueryBrowser_editor = require("./QueryBrowser.editor.cjs");
|
|
16
16
|
const QueryBrowserDiagnosticsPanel = require("./QueryBrowserDiagnosticsPanel.cjs");
|
|
17
17
|
const QueryBrowserResults = require("./QueryBrowserResults.cjs");
|
|
18
|
-
const
|
|
18
|
+
const useDebugAction = require("../useDebugAction.cjs");
|
|
19
19
|
const QueryBrowser_types = require("./QueryBrowser.types.cjs");
|
|
20
20
|
const UiPlay = require("../../icons/components/UiPlay.cjs");
|
|
21
21
|
function QueryBrowser({
|
|
@@ -137,42 +137,7 @@ function QueryBrowser({
|
|
|
137
137
|
},
|
|
138
138
|
[runRequest]
|
|
139
139
|
);
|
|
140
|
-
const
|
|
141
|
-
var _a2;
|
|
142
|
-
const previous = lastRun.current;
|
|
143
|
-
if (!previous) {
|
|
144
|
-
throw new Error("Run a query before asking what it sends");
|
|
145
|
-
}
|
|
146
|
-
const pagination = result == null ? void 0 : result.pagination;
|
|
147
|
-
try {
|
|
148
|
-
const probe = await execute({
|
|
149
|
-
...previous,
|
|
150
|
-
...pagination ? {
|
|
151
|
-
pagination: {
|
|
152
|
-
limit: pagination.limit,
|
|
153
|
-
...pagination.offset !== void 0 ? { offset: pagination.offset } : {},
|
|
154
|
-
...pagination.cursor ? { cursor: pagination.cursor } : {}
|
|
155
|
-
}
|
|
156
|
-
} : {},
|
|
157
|
-
debug: true
|
|
158
|
-
});
|
|
159
|
-
return {
|
|
160
|
-
...((_a2 = probe.diagnostics) == null ? void 0 : _a2.provider) ? { provider: probe.diagnostics.provider } : {},
|
|
161
|
-
...probe.rows ? { rows: probe.rows.length } : {},
|
|
162
|
-
...probe.durationMs !== void 0 ? { durationMs: probe.durationMs } : {},
|
|
163
|
-
...probe.diagnostics ? { diagnostics: probe.diagnostics } : {}
|
|
164
|
-
};
|
|
165
|
-
} catch (err) {
|
|
166
|
-
if (err instanceof QueryBrowser_types.QueryBrowserExecutionError) {
|
|
167
|
-
return {
|
|
168
|
-
error: err.message,
|
|
169
|
-
...err.diagnostics ? { diagnostics: err.diagnostics } : {}
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
throw err;
|
|
173
|
-
}
|
|
174
|
-
}, [execute, result == null ? void 0 : result.pagination]);
|
|
175
|
-
const queryInfo = useQueryInfo.useQueryInfo({ load: loadQueryInfo, title: queryLabel });
|
|
140
|
+
const debugAction = useDebugAction.useDebugAction();
|
|
176
141
|
react.useEffect(() => {
|
|
177
142
|
if (!lastRun.current) return;
|
|
178
143
|
if (filters === executedFilters.current) return;
|
|
@@ -312,7 +277,7 @@ function QueryBrowser({
|
|
|
312
277
|
filterConfig,
|
|
313
278
|
serverFiltered,
|
|
314
279
|
...tablePagination ? { pagination: tablePagination } : {},
|
|
315
|
-
...
|
|
280
|
+
...debugAction ? { menuActions: [debugAction] } : {}
|
|
316
281
|
}
|
|
317
282
|
);
|
|
318
283
|
const workspace = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-0 flex-col overflow-hidden rounded-xl border bg-card", children: [
|
|
@@ -389,10 +354,7 @@ function QueryBrowser({
|
|
|
389
354
|
error.diagnostics && /* @__PURE__ */ jsxRuntime.jsx(QueryBrowserDiagnosticsPanel.QueryBrowserDiagnosticsPanel, { diagnostics: error.diagnostics })
|
|
390
355
|
] }) : result && renderResults ? renderResults({ result, defaultView: defaultResults }) : defaultResults })
|
|
391
356
|
] });
|
|
392
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
393
|
-
navigator ? /* @__PURE__ */ jsxRuntime.jsx(SplitPane.SplitPane, { defaultSplit: 28, left: navigator, right: workspace }) : workspace,
|
|
394
|
-
queryInfo.dialog
|
|
395
|
-
] });
|
|
357
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils.cn("h-[calc(100vh-15rem)] min-h-[32rem]", className), children: navigator ? /* @__PURE__ */ jsxRuntime.jsx(SplitPane.SplitPane, { defaultSplit: 28, left: navigator, right: workspace }) : workspace });
|
|
396
358
|
}
|
|
397
359
|
exports.QueryBrowser = QueryBrowser;
|
|
398
360
|
//# sourceMappingURL=QueryBrowser.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBrowser.cjs","sources":["../../../src/data/query-browser/QueryBrowser.tsx"],"sourcesContent":["import { Compartment, EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { JsonSchemaForm } from \"../../components/JsonSchemaForm\";\nimport { cn } from \"../../lib/utils\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { Icon } from \"../Icon\";\nimport { UiPlay } from \"../../icons\";\nimport type { DataTablePagination } from \"../DataTable\";\nimport { inferColumns } from \"../data-table-utils\";\nimport type { DataTableFilterSelection } from \"../data-table-filter-values\";\nimport {\n serverColumnsToDataTableColumns,\n serverFiltersToFilterBar,\n type DataTableFilterLookup,\n type DataTableServerColumn,\n} from \"../data-table-server-filters\";\nimport { ErrorDetails } from \"../diagnostics/ErrorDetails\";\nimport type { ErrorDiagnostics } from \"../diagnostics/error-diagnostics\";\nimport {\n queryBrowserEditorExtensions,\n queryBrowserLanguageExtension,\n readQueryBrowserHistory,\n rememberQueryBrowserQuery,\n type QueryBrowserHistoryEntry,\n} from \"./QueryBrowser.editor\";\nimport { QueryBrowserDiagnosticsPanel } from \"./QueryBrowserDiagnosticsPanel\";\nimport { QueryBrowserResults } from \"./QueryBrowserResults\";\nimport { useQueryInfo } from \"../query-info/useQueryInfo\";\nimport type { QueryExecutionInfo } from \"../query-info/queryInfo\";\nimport {\n QueryBrowserExecutionError,\n type QueryBrowserDiagnostics,\n type QueryBrowserProps,\n type QueryBrowserRequest,\n type QueryBrowserResult,\n} from \"./QueryBrowser.types\";\n\nexport function QueryBrowser({\n id,\n title,\n language = \"text\",\n initialQuery = \"\",\n queryLabel = \"Query\",\n allowEmptyQuery = false,\n optionsSchema,\n initialOptions,\n completion,\n onQueryChange,\n onOptionsChange,\n navigator,\n execute,\n lookupFilterValues,\n renderResults,\n className,\n}: QueryBrowserProps) {\n const editorHost = useRef<HTMLDivElement | null>(null);\n const editor = useRef<EditorView | null>(null);\n const languageConfig = useRef(new Compartment());\n const executeRef = useRef<() => void>(() => undefined);\n const onQueryChangeRef = useRef(onQueryChange);\n const [options, setOptions] = useState<Record<string, unknown>>(\n initialOptions ?? {},\n );\n const [result, setResult] = useState<QueryBrowserResult | null>(null);\n const [error, setError] = useState<{\n message: string;\n query: string;\n diagnostics?: QueryBrowserDiagnostics;\n errorDetails?: ErrorDiagnostics;\n } | null>(null);\n const [pending, setPending] = useState(false);\n const [entries, setEntries] = useState<QueryBrowserHistoryEntry[]>(() =>\n readQueryBrowserHistory(id),\n );\n const [filters, setFilters] = useState<DataTableFilterSelection>({});\n // What the displayed result came from. A filter re-runs *this*, never the\n // editor's current text — otherwise changing a pill would execute a\n // half-typed edit nobody asked to run.\n const lastRun = useRef<{\n query: string;\n options: Record<string, unknown>;\n filters?: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n } | null>(null);\n const executedFilters = useRef<DataTableFilterSelection>({});\n\n // Every run goes through here so the record a filter re-runs from is refreshed\n // in one place: the query, its options, and the columns the source described,\n // which are what a subsequent selection binds to.\n const runRequest = useCallback(\n async (request: QueryBrowserRequest) => {\n setPending(true);\n setError(null);\n const started = performance.now();\n try {\n const next = await execute(request);\n setResult({\n ...next,\n durationMs: next.durationMs ?? performance.now() - started,\n });\n lastRun.current = {\n query: request.query,\n options: request.options,\n ...(request.filters ? { filters: request.filters } : {}),\n ...(next.columns ? { columns: next.columns } : {}),\n };\n } catch (err) {\n setError({\n message: err instanceof Error ? err.message : String(err),\n query: request.query,\n ...(err instanceof QueryBrowserExecutionError && err.diagnostics\n ? { diagnostics: err.diagnostics }\n : {}),\n ...(err instanceof QueryBrowserExecutionError && err.errorDetails\n ? { errorDetails: err.errorDetails }\n : {}),\n });\n } finally {\n setPending(false);\n }\n },\n [execute],\n );\n\n const currentQuery = useCallback(() => {\n const view = editor.current;\n if (!view) return initialQuery;\n const selection = view.state.selection.main;\n if (!selection.empty)\n return view.state.sliceDoc(selection.from, selection.to);\n return view.state.doc.toString();\n }, [initialQuery]);\n\n const run = useCallback(async () => {\n const query = currentQuery().trim();\n if ((!query && !allowEmptyQuery) || pending) return;\n if (query) setEntries(rememberQueryBrowserQuery(id, query));\n // A different statement is a different result set, so neither its filters\n // nor the columns they bind to survive: both name columns the new query may\n // not return.\n const repeat = lastRun.current?.query === query ? lastRun.current : null;\n const carried = repeat ? filters : {};\n if (carried !== filters) setFilters(carried);\n lastRun.current = { query, options };\n executedFilters.current = carried;\n await runRequest({\n query,\n options,\n ...(Object.keys(carried).length > 0 ? { filters: carried } : {}),\n ...(repeat?.columns ? { columns: repeat.columns } : {}),\n });\n }, [allowEmptyQuery, currentQuery, filters, id, options, pending, runRequest]);\n\n // A filter pill is not a draft the way query text is: it commits a discrete\n // value on selection, and the bar already debounces its free-text fields. So\n // a change re-runs the last executed query immediately rather than waiting\n // for Run, which is also how the profile catalog behaves.\n const rerunWithFilters = useCallback(\n async (selection: DataTableFilterSelection) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: a filter changed before any query had run\",\n );\n }\n await runRequest({\n ...previous,\n filters: selection,\n ...(result?.pagination\n ? { pagination: { limit: result.pagination.limit } }\n : {}),\n });\n },\n [result?.pagination, runRequest],\n );\n\n const rerunAt = useCallback(\n async (pagination: NonNullable<QueryBrowserRequest[\"pagination\"]>) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: pagination changed before any query had run\",\n );\n }\n await runRequest({ ...previous, pagination });\n },\n [runRequest],\n );\n\n // \"Debug\" runs the displayed query again with diagnostics on rather than\n // reading them off the result: a debug run costs a second execution, and one\n // paid on every query so the answer is there if asked for is the wrong trade.\n const loadQueryInfo = useCallback(async (): Promise<QueryExecutionInfo> => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\"Run a query before asking what it sends\");\n }\n const pagination = result?.pagination;\n try {\n const probe = await execute({\n ...previous,\n ...(pagination\n ? {\n pagination: {\n limit: pagination.limit,\n ...(pagination.offset !== undefined\n ? { offset: pagination.offset }\n : {}),\n ...(pagination.cursor ? { cursor: pagination.cursor } : {}),\n },\n }\n : {}),\n debug: true,\n });\n return {\n ...(probe.diagnostics?.provider\n ? { provider: probe.diagnostics.provider }\n : {}),\n ...(probe.rows ? { rows: probe.rows.length } : {}),\n ...(probe.durationMs !== undefined\n ? { durationMs: probe.durationMs }\n : {}),\n ...(probe.diagnostics ? { diagnostics: probe.diagnostics } : {}),\n };\n } catch (err) {\n if (err instanceof QueryBrowserExecutionError) {\n return {\n error: err.message,\n ...(err.diagnostics ? { diagnostics: err.diagnostics } : {}),\n };\n }\n throw err;\n }\n }, [execute, result?.pagination]);\n const queryInfo = useQueryInfo({ load: loadQueryInfo, title: queryLabel });\n\n useEffect(() => {\n if (!lastRun.current) return;\n if (filters === executedFilters.current) return;\n executedFilters.current = filters;\n void rerunWithFilters(filters);\n }, [filters, rerunWithFilters]);\n\n executeRef.current = () => void run();\n onQueryChangeRef.current = onQueryChange;\n\n useEffect(() => {\n if (!editorHost.current) return;\n const view = new EditorView({\n parent: editorHost.current,\n state: EditorState.create({\n doc: initialQuery,\n extensions: queryBrowserEditorExtensions(\n () => executeRef.current(),\n (query) => onQueryChangeRef.current?.(query),\n languageConfig.current.of(\n queryBrowserLanguageExtension(language, completion),\n ),\n ),\n }),\n });\n editor.current = view;\n return () => {\n editor.current = null;\n view.destroy();\n };\n }, [id, language]);\n\n useEffect(() => {\n const view = editor.current;\n if (!view) return;\n view.dispatch({\n effects: languageConfig.current.reconfigure(\n queryBrowserLanguageExtension(language, completion),\n ),\n });\n }, [completion, language]);\n\n useEffect(() => {\n const view = editor.current;\n if (!view || view.state.doc.toString() === initialQuery) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: initialQuery },\n });\n }, [initialQuery]);\n\n useEffect(() => {\n setOptions(initialOptions ?? {});\n }, [initialOptions]);\n\n const updateOptions = useCallback(\n (next: Record<string, unknown>) => {\n setOptions(next);\n onOptionsChange?.(next);\n },\n [onOptionsChange],\n );\n\n useEffect(() => {\n setEntries(readQueryBrowserHistory(id));\n setResult(null);\n setError(null);\n setFilters({});\n lastRun.current = null;\n executedFilters.current = {};\n }, [id]);\n\n const rows = result?.rows ?? [];\n const described = result?.columns ?? [];\n const columns = useMemo(\n () =>\n described.length > 0\n ? serverColumnsToDataTableColumns<Record<string, unknown>>(described)\n : inferColumns(rows, { literalKeys: true }),\n [described, rows],\n );\n const lookupValues = useMemo<DataTableFilterLookup | undefined>(() => {\n if (!lookupFilterValues) return undefined;\n return (request) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: a filter lookup ran before any query had\",\n );\n }\n return lookupFilterValues({ ...request, ...previous, filters });\n };\n }, [filters, lookupFilterValues]);\n const filterConfig = useMemo(\n () =>\n serverFiltersToFilterBar(\n described,\n filters,\n setFilters,\n lookupValues ? { lookupValues } : {},\n ),\n [described, filters, lookupValues],\n );\n const serverFiltered =\n filterConfig.filters.length > 0 || filterConfig.timeRange !== undefined;\n const tablePagination = useMemo<DataTablePagination | undefined>(() => {\n const pagination = result?.pagination;\n if (!pagination) return undefined;\n const shared = {\n pageSize: pagination.limit,\n ...(pagination.total !== undefined ? { total: pagination.total } : {}),\n ...(pagination.totalRelation === \"eq\" ||\n pagination.totalRelation === \"gte\"\n ? { totalRelation: pagination.totalRelation }\n : {}),\n hasMore: pagination.hasMore,\n onPageSizeChange: (limit: number) => void rerunAt({ limit }),\n };\n if (pagination.mode === \"cursor\") {\n return {\n ...shared,\n page: 0,\n cursor: {\n ...(pagination.cursor ? { current: pagination.cursor } : {}),\n ...(pagination.nextCursor ? { next: pagination.nextCursor } : {}),\n onCursorChange: (cursor: string | undefined) =>\n void rerunAt({\n limit: pagination.limit,\n ...(cursor ? { cursor } : {}),\n }),\n },\n };\n }\n const page = Math.floor((pagination.offset ?? 0) / pagination.limit);\n return {\n ...shared,\n page,\n onPageChange: (nextPage: number) =>\n void rerunAt({\n limit: pagination.limit,\n offset: nextPage * pagination.limit,\n }),\n };\n }, [rerunAt, result?.pagination]);\n const defaultResults = (\n <QueryBrowserResults\n result={result}\n pending={pending}\n {...(title ? { title } : {})}\n queryLabel={queryLabel}\n columns={columns}\n filterConfig={filterConfig}\n serverFiltered={serverFiltered}\n {...(tablePagination ? { pagination: tablePagination } : {})}\n {...(queryInfo.action ? { menuActions: [queryInfo.action] } : {})}\n />\n );\n\n const workspace = (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden rounded-xl border bg-card\">\n <div className=\"flex flex-wrap items-center gap-2 border-b px-3 py-2\">\n <div className=\"min-w-0 flex-1\">\n {title && <h2 className=\"truncate text-sm font-semibold\">{title}</h2>}\n <p className=\"text-xs text-muted-foreground\">{queryLabel}</p>\n </div>\n {entries.length > 0 && (\n <select\n aria-label=\"Query history\"\n defaultValue=\"\"\n onChange={(event) => {\n const query = event.target.value;\n const view = editor.current;\n if (!view || !query) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: query },\n });\n event.target.value = \"\";\n }}\n className=\"h-8 max-w-52 rounded-md border bg-background px-2 text-xs\"\n >\n <option value=\"\">History</option>\n {entries.map((entry) => (\n <option key={`${entry.at}:${entry.query}`} value={entry.query}>\n {entry.query.replace(/\\s+/g, \" \").slice(0, 80)}\n </option>\n ))}\n </select>\n )}\n <Button\n size=\"sm\"\n onClick={() => void run()}\n loading={pending}\n loadingLabel={pending ? \"Running\" : undefined}\n >\n <Icon icon={UiPlay} className=\"size-4\" />\n Run\n </Button>\n </div>\n {optionsSchema &&\n Object.keys(optionsSchema.properties ?? {}).length > 0 && (\n <div className=\"border-b px-3 py-2\">\n <JsonSchemaForm\n schema={optionsSchema}\n value={options}\n onChange={updateOptions}\n size=\"sm\"\n inline\n showPreferencesMenu={false}\n persistPreferences={false}\n />\n </div>\n )}\n <div ref={editorHost} className=\"h-[34%] min-h-44 border-b\" />\n <div className=\"flex min-h-0 flex-1 flex-col overflow-auto p-3\">\n {error ? (\n <div className=\"space-y-3\">\n <ErrorDetails\n diagnostics={{\n ...(error.errorDetails ?? {\n message: error.message,\n context: [],\n }),\n context: [\n ...(error.errorDetails?.context ?? []),\n [\"Query\", error.query],\n [\"Language\", language],\n ],\n }}\n />\n {error.diagnostics && (\n <QueryBrowserDiagnosticsPanel diagnostics={error.diagnostics} />\n )}\n </div>\n ) : result && renderResults ? (\n renderResults({ result, defaultView: defaultResults })\n ) : (\n defaultResults\n )}\n </div>\n </div>\n );\n\n return (\n <div className={cn(\"h-[calc(100vh-15rem)] min-h-[32rem]\", className)}>\n {navigator ? (\n <SplitPane defaultSplit={28} left={navigator} right={workspace} />\n ) : (\n workspace\n )}\n {queryInfo.dialog}\n </div>\n );\n}\n"],"names":["useRef","Compartment","useState","readQueryBrowserHistory","useCallback","QueryBrowserExecutionError","view","rememberQueryBrowserQuery","_a","useQueryInfo","useEffect","EditorView","EditorState","queryBrowserEditorExtensions","queryBrowserLanguageExtension","useMemo","serverColumnsToDataTableColumns","inferColumns","serverFiltersToFilterBar","jsx","QueryBrowserResults","jsxs","Button","Icon","UiPlay","JsonSchemaForm","ErrorDetails","QueryBrowserDiagnosticsPanel","cn","SplitPane"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QueryBrowser.cjs","sources":["../../../src/data/query-browser/QueryBrowser.tsx"],"sourcesContent":["import { Compartment, EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { JsonSchemaForm } from \"../../components/JsonSchemaForm\";\nimport { cn } from \"../../lib/utils\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { Icon } from \"../Icon\";\nimport { UiPlay } from \"../../icons\";\nimport type { DataTablePagination } from \"../DataTable\";\nimport { inferColumns } from \"../data-table-utils\";\nimport type { DataTableFilterSelection } from \"../data-table-filter-values\";\nimport {\n serverColumnsToDataTableColumns,\n serverFiltersToFilterBar,\n type DataTableFilterLookup,\n type DataTableServerColumn,\n} from \"../data-table-server-filters\";\nimport { ErrorDetails } from \"../diagnostics/ErrorDetails\";\nimport type { ErrorDiagnostics } from \"../diagnostics/error-diagnostics\";\nimport {\n queryBrowserEditorExtensions,\n queryBrowserLanguageExtension,\n readQueryBrowserHistory,\n rememberQueryBrowserQuery,\n type QueryBrowserHistoryEntry,\n} from \"./QueryBrowser.editor\";\nimport { QueryBrowserDiagnosticsPanel } from \"./QueryBrowserDiagnosticsPanel\";\nimport { QueryBrowserResults } from \"./QueryBrowserResults\";\nimport { useDebugAction } from \"../useDebugAction\";\nimport {\n QueryBrowserExecutionError,\n type QueryBrowserDiagnostics,\n type QueryBrowserProps,\n type QueryBrowserRequest,\n type QueryBrowserResult,\n} from \"./QueryBrowser.types\";\n\nexport function QueryBrowser({\n id,\n title,\n language = \"text\",\n initialQuery = \"\",\n queryLabel = \"Query\",\n allowEmptyQuery = false,\n optionsSchema,\n initialOptions,\n completion,\n onQueryChange,\n onOptionsChange,\n navigator,\n execute,\n lookupFilterValues,\n renderResults,\n className,\n}: QueryBrowserProps) {\n const editorHost = useRef<HTMLDivElement | null>(null);\n const editor = useRef<EditorView | null>(null);\n const languageConfig = useRef(new Compartment());\n const executeRef = useRef<() => void>(() => undefined);\n const onQueryChangeRef = useRef(onQueryChange);\n const [options, setOptions] = useState<Record<string, unknown>>(\n initialOptions ?? {},\n );\n const [result, setResult] = useState<QueryBrowserResult | null>(null);\n const [error, setError] = useState<{\n message: string;\n query: string;\n diagnostics?: QueryBrowserDiagnostics;\n errorDetails?: ErrorDiagnostics;\n } | null>(null);\n const [pending, setPending] = useState(false);\n const [entries, setEntries] = useState<QueryBrowserHistoryEntry[]>(() =>\n readQueryBrowserHistory(id),\n );\n const [filters, setFilters] = useState<DataTableFilterSelection>({});\n // What the displayed result came from. A filter re-runs *this*, never the\n // editor's current text — otherwise changing a pill would execute a\n // half-typed edit nobody asked to run.\n const lastRun = useRef<{\n query: string;\n options: Record<string, unknown>;\n filters?: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n } | null>(null);\n const executedFilters = useRef<DataTableFilterSelection>({});\n\n // Every run goes through here so the record a filter re-runs from is refreshed\n // in one place: the query, its options, and the columns the source described,\n // which are what a subsequent selection binds to.\n const runRequest = useCallback(\n async (request: QueryBrowserRequest) => {\n setPending(true);\n setError(null);\n const started = performance.now();\n try {\n const next = await execute(request);\n setResult({\n ...next,\n durationMs: next.durationMs ?? performance.now() - started,\n });\n lastRun.current = {\n query: request.query,\n options: request.options,\n ...(request.filters ? { filters: request.filters } : {}),\n ...(next.columns ? { columns: next.columns } : {}),\n };\n } catch (err) {\n setError({\n message: err instanceof Error ? err.message : String(err),\n query: request.query,\n ...(err instanceof QueryBrowserExecutionError && err.diagnostics\n ? { diagnostics: err.diagnostics }\n : {}),\n ...(err instanceof QueryBrowserExecutionError && err.errorDetails\n ? { errorDetails: err.errorDetails }\n : {}),\n });\n } finally {\n setPending(false);\n }\n },\n [execute],\n );\n\n const currentQuery = useCallback(() => {\n const view = editor.current;\n if (!view) return initialQuery;\n const selection = view.state.selection.main;\n if (!selection.empty)\n return view.state.sliceDoc(selection.from, selection.to);\n return view.state.doc.toString();\n }, [initialQuery]);\n\n const run = useCallback(async () => {\n const query = currentQuery().trim();\n if ((!query && !allowEmptyQuery) || pending) return;\n if (query) setEntries(rememberQueryBrowserQuery(id, query));\n // A different statement is a different result set, so neither its filters\n // nor the columns they bind to survive: both name columns the new query may\n // not return.\n const repeat = lastRun.current?.query === query ? lastRun.current : null;\n const carried = repeat ? filters : {};\n if (carried !== filters) setFilters(carried);\n lastRun.current = { query, options };\n executedFilters.current = carried;\n await runRequest({\n query,\n options,\n ...(Object.keys(carried).length > 0 ? { filters: carried } : {}),\n ...(repeat?.columns ? { columns: repeat.columns } : {}),\n });\n }, [allowEmptyQuery, currentQuery, filters, id, options, pending, runRequest]);\n\n // A filter pill is not a draft the way query text is: it commits a discrete\n // value on selection, and the bar already debounces its free-text fields. So\n // a change re-runs the last executed query immediately rather than waiting\n // for Run, which is also how the profile catalog behaves.\n const rerunWithFilters = useCallback(\n async (selection: DataTableFilterSelection) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: a filter changed before any query had run\",\n );\n }\n await runRequest({\n ...previous,\n filters: selection,\n ...(result?.pagination\n ? { pagination: { limit: result.pagination.limit } }\n : {}),\n });\n },\n [result?.pagination, runRequest],\n );\n\n const rerunAt = useCallback(\n async (pagination: NonNullable<QueryBrowserRequest[\"pagination\"]>) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: pagination changed before any query had run\",\n );\n }\n await runRequest({ ...previous, pagination });\n },\n [runRequest],\n );\n\n // \"Debug\" reveals the console, which already holds the record for the run\n // that produced the rows on screen. It used to re-execute the query with a\n // `debug` flag — so the diagnostics described a *different* execution from\n // the one being looked at, and cost the backend a second full run to say so.\n const debugAction = useDebugAction();\n\n useEffect(() => {\n if (!lastRun.current) return;\n if (filters === executedFilters.current) return;\n executedFilters.current = filters;\n void rerunWithFilters(filters);\n }, [filters, rerunWithFilters]);\n\n executeRef.current = () => void run();\n onQueryChangeRef.current = onQueryChange;\n\n useEffect(() => {\n if (!editorHost.current) return;\n const view = new EditorView({\n parent: editorHost.current,\n state: EditorState.create({\n doc: initialQuery,\n extensions: queryBrowserEditorExtensions(\n () => executeRef.current(),\n (query) => onQueryChangeRef.current?.(query),\n languageConfig.current.of(\n queryBrowserLanguageExtension(language, completion),\n ),\n ),\n }),\n });\n editor.current = view;\n return () => {\n editor.current = null;\n view.destroy();\n };\n }, [id, language]);\n\n useEffect(() => {\n const view = editor.current;\n if (!view) return;\n view.dispatch({\n effects: languageConfig.current.reconfigure(\n queryBrowserLanguageExtension(language, completion),\n ),\n });\n }, [completion, language]);\n\n useEffect(() => {\n const view = editor.current;\n if (!view || view.state.doc.toString() === initialQuery) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: initialQuery },\n });\n }, [initialQuery]);\n\n useEffect(() => {\n setOptions(initialOptions ?? {});\n }, [initialOptions]);\n\n const updateOptions = useCallback(\n (next: Record<string, unknown>) => {\n setOptions(next);\n onOptionsChange?.(next);\n },\n [onOptionsChange],\n );\n\n useEffect(() => {\n setEntries(readQueryBrowserHistory(id));\n setResult(null);\n setError(null);\n setFilters({});\n lastRun.current = null;\n executedFilters.current = {};\n }, [id]);\n\n const rows = result?.rows ?? [];\n const described = result?.columns ?? [];\n const columns = useMemo(\n () =>\n described.length > 0\n ? serverColumnsToDataTableColumns<Record<string, unknown>>(described)\n : inferColumns(rows, { literalKeys: true }),\n [described, rows],\n );\n const lookupValues = useMemo<DataTableFilterLookup | undefined>(() => {\n if (!lookupFilterValues) return undefined;\n return (request) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: a filter lookup ran before any query had\",\n );\n }\n return lookupFilterValues({ ...request, ...previous, filters });\n };\n }, [filters, lookupFilterValues]);\n const filterConfig = useMemo(\n () =>\n serverFiltersToFilterBar(\n described,\n filters,\n setFilters,\n lookupValues ? { lookupValues } : {},\n ),\n [described, filters, lookupValues],\n );\n const serverFiltered =\n filterConfig.filters.length > 0 || filterConfig.timeRange !== undefined;\n const tablePagination = useMemo<DataTablePagination | undefined>(() => {\n const pagination = result?.pagination;\n if (!pagination) return undefined;\n const shared = {\n pageSize: pagination.limit,\n ...(pagination.total !== undefined ? { total: pagination.total } : {}),\n ...(pagination.totalRelation === \"eq\" ||\n pagination.totalRelation === \"gte\"\n ? { totalRelation: pagination.totalRelation }\n : {}),\n hasMore: pagination.hasMore,\n onPageSizeChange: (limit: number) => void rerunAt({ limit }),\n };\n if (pagination.mode === \"cursor\") {\n return {\n ...shared,\n page: 0,\n cursor: {\n ...(pagination.cursor ? { current: pagination.cursor } : {}),\n ...(pagination.nextCursor ? { next: pagination.nextCursor } : {}),\n onCursorChange: (cursor: string | undefined) =>\n void rerunAt({\n limit: pagination.limit,\n ...(cursor ? { cursor } : {}),\n }),\n },\n };\n }\n const page = Math.floor((pagination.offset ?? 0) / pagination.limit);\n return {\n ...shared,\n page,\n onPageChange: (nextPage: number) =>\n void rerunAt({\n limit: pagination.limit,\n offset: nextPage * pagination.limit,\n }),\n };\n }, [rerunAt, result?.pagination]);\n const defaultResults = (\n <QueryBrowserResults\n result={result}\n pending={pending}\n {...(title ? { title } : {})}\n queryLabel={queryLabel}\n columns={columns}\n filterConfig={filterConfig}\n serverFiltered={serverFiltered}\n {...(tablePagination ? { pagination: tablePagination } : {})}\n {...(debugAction ? { menuActions: [debugAction] } : {})}\n />\n );\n\n const workspace = (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden rounded-xl border bg-card\">\n <div className=\"flex flex-wrap items-center gap-2 border-b px-3 py-2\">\n <div className=\"min-w-0 flex-1\">\n {title && <h2 className=\"truncate text-sm font-semibold\">{title}</h2>}\n <p className=\"text-xs text-muted-foreground\">{queryLabel}</p>\n </div>\n {entries.length > 0 && (\n <select\n aria-label=\"Query history\"\n defaultValue=\"\"\n onChange={(event) => {\n const query = event.target.value;\n const view = editor.current;\n if (!view || !query) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: query },\n });\n event.target.value = \"\";\n }}\n className=\"h-8 max-w-52 rounded-md border bg-background px-2 text-xs\"\n >\n <option value=\"\">History</option>\n {entries.map((entry) => (\n <option key={`${entry.at}:${entry.query}`} value={entry.query}>\n {entry.query.replace(/\\s+/g, \" \").slice(0, 80)}\n </option>\n ))}\n </select>\n )}\n <Button\n size=\"sm\"\n onClick={() => void run()}\n loading={pending}\n loadingLabel={pending ? \"Running\" : undefined}\n >\n <Icon icon={UiPlay} className=\"size-4\" />\n Run\n </Button>\n </div>\n {optionsSchema &&\n Object.keys(optionsSchema.properties ?? {}).length > 0 && (\n <div className=\"border-b px-3 py-2\">\n <JsonSchemaForm\n schema={optionsSchema}\n value={options}\n onChange={updateOptions}\n size=\"sm\"\n inline\n showPreferencesMenu={false}\n persistPreferences={false}\n />\n </div>\n )}\n <div ref={editorHost} className=\"h-[34%] min-h-44 border-b\" />\n <div className=\"flex min-h-0 flex-1 flex-col overflow-auto p-3\">\n {error ? (\n <div className=\"space-y-3\">\n <ErrorDetails\n diagnostics={{\n ...(error.errorDetails ?? {\n message: error.message,\n context: [],\n }),\n context: [\n ...(error.errorDetails?.context ?? []),\n [\"Query\", error.query],\n [\"Language\", language],\n ],\n }}\n />\n {error.diagnostics && (\n <QueryBrowserDiagnosticsPanel diagnostics={error.diagnostics} />\n )}\n </div>\n ) : result && renderResults ? (\n renderResults({ result, defaultView: defaultResults })\n ) : (\n defaultResults\n )}\n </div>\n </div>\n );\n\n return (\n <div className={cn(\"h-[calc(100vh-15rem)] min-h-[32rem]\", className)}>\n {navigator ? (\n <SplitPane defaultSplit={28} left={navigator} right={workspace} />\n ) : (\n workspace\n )}\n </div>\n );\n}\n"],"names":["useRef","Compartment","useState","readQueryBrowserHistory","useCallback","QueryBrowserExecutionError","view","rememberQueryBrowserQuery","_a","useDebugAction","useEffect","EditorView","EditorState","queryBrowserEditorExtensions","queryBrowserLanguageExtension","useMemo","serverColumnsToDataTableColumns","inferColumns","serverFiltersToFilterBar","jsx","QueryBrowserResults","jsxs","Button","Icon","UiPlay","JsonSchemaForm","ErrorDetails","QueryBrowserDiagnosticsPanel","cn","SplitPane"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBrowser.d.ts","sourceRoot":"","sources":["../../../src/data/query-browser/QueryBrowser.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QueryBrowser.d.ts","sourceRoot":"","sources":["../../../src/data/query-browser/QueryBrowser.tsx"],"names":[],"mappings":"AA8BA,OAAO,EAGL,KAAK,iBAAiB,EAGvB,MAAM,sBAAsB,CAAC;AAE9B,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EACF,KAAK,EACL,QAAiB,EACjB,YAAiB,EACjB,UAAoB,EACpB,eAAuB,EACvB,aAAa,EACb,cAAc,EACd,UAAU,EACV,aAAa,EACb,eAAe,EACf,SAAS,EACT,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,SAAS,GACV,EAAE,iBAAiB,2CAuYnB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Compartment, EditorState } from "@codemirror/state";
|
|
3
3
|
import { EditorView } from "@codemirror/view";
|
|
4
4
|
import { useRef, useState, useCallback, useEffect, useMemo } from "react";
|
|
@@ -13,7 +13,7 @@ import { ErrorDetails } from "../diagnostics/ErrorDetails.js";
|
|
|
13
13
|
import { readQueryBrowserHistory, rememberQueryBrowserQuery, queryBrowserEditorExtensions, queryBrowserLanguageExtension } from "./QueryBrowser.editor.js";
|
|
14
14
|
import { QueryBrowserDiagnosticsPanel } from "./QueryBrowserDiagnosticsPanel.js";
|
|
15
15
|
import { QueryBrowserResults } from "./QueryBrowserResults.js";
|
|
16
|
-
import {
|
|
16
|
+
import { useDebugAction } from "../useDebugAction.js";
|
|
17
17
|
import { QueryBrowserExecutionError } from "./QueryBrowser.types.js";
|
|
18
18
|
import { UiPlay } from "../../icons/components/UiPlay.js";
|
|
19
19
|
function QueryBrowser({
|
|
@@ -135,42 +135,7 @@ function QueryBrowser({
|
|
|
135
135
|
},
|
|
136
136
|
[runRequest]
|
|
137
137
|
);
|
|
138
|
-
const
|
|
139
|
-
var _a2;
|
|
140
|
-
const previous = lastRun.current;
|
|
141
|
-
if (!previous) {
|
|
142
|
-
throw new Error("Run a query before asking what it sends");
|
|
143
|
-
}
|
|
144
|
-
const pagination = result == null ? void 0 : result.pagination;
|
|
145
|
-
try {
|
|
146
|
-
const probe = await execute({
|
|
147
|
-
...previous,
|
|
148
|
-
...pagination ? {
|
|
149
|
-
pagination: {
|
|
150
|
-
limit: pagination.limit,
|
|
151
|
-
...pagination.offset !== void 0 ? { offset: pagination.offset } : {},
|
|
152
|
-
...pagination.cursor ? { cursor: pagination.cursor } : {}
|
|
153
|
-
}
|
|
154
|
-
} : {},
|
|
155
|
-
debug: true
|
|
156
|
-
});
|
|
157
|
-
return {
|
|
158
|
-
...((_a2 = probe.diagnostics) == null ? void 0 : _a2.provider) ? { provider: probe.diagnostics.provider } : {},
|
|
159
|
-
...probe.rows ? { rows: probe.rows.length } : {},
|
|
160
|
-
...probe.durationMs !== void 0 ? { durationMs: probe.durationMs } : {},
|
|
161
|
-
...probe.diagnostics ? { diagnostics: probe.diagnostics } : {}
|
|
162
|
-
};
|
|
163
|
-
} catch (err) {
|
|
164
|
-
if (err instanceof QueryBrowserExecutionError) {
|
|
165
|
-
return {
|
|
166
|
-
error: err.message,
|
|
167
|
-
...err.diagnostics ? { diagnostics: err.diagnostics } : {}
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
throw err;
|
|
171
|
-
}
|
|
172
|
-
}, [execute, result == null ? void 0 : result.pagination]);
|
|
173
|
-
const queryInfo = useQueryInfo({ load: loadQueryInfo, title: queryLabel });
|
|
138
|
+
const debugAction = useDebugAction();
|
|
174
139
|
useEffect(() => {
|
|
175
140
|
if (!lastRun.current) return;
|
|
176
141
|
if (filters === executedFilters.current) return;
|
|
@@ -310,7 +275,7 @@ function QueryBrowser({
|
|
|
310
275
|
filterConfig,
|
|
311
276
|
serverFiltered,
|
|
312
277
|
...tablePagination ? { pagination: tablePagination } : {},
|
|
313
|
-
...
|
|
278
|
+
...debugAction ? { menuActions: [debugAction] } : {}
|
|
314
279
|
}
|
|
315
280
|
);
|
|
316
281
|
const workspace = /* @__PURE__ */ jsxs("div", { className: "flex h-full min-h-0 flex-col overflow-hidden rounded-xl border bg-card", children: [
|
|
@@ -387,10 +352,7 @@ function QueryBrowser({
|
|
|
387
352
|
error.diagnostics && /* @__PURE__ */ jsx(QueryBrowserDiagnosticsPanel, { diagnostics: error.diagnostics })
|
|
388
353
|
] }) : result && renderResults ? renderResults({ result, defaultView: defaultResults }) : defaultResults })
|
|
389
354
|
] });
|
|
390
|
-
return /* @__PURE__ */
|
|
391
|
-
navigator ? /* @__PURE__ */ jsx(SplitPane, { defaultSplit: 28, left: navigator, right: workspace }) : workspace,
|
|
392
|
-
queryInfo.dialog
|
|
393
|
-
] });
|
|
355
|
+
return /* @__PURE__ */ jsx("div", { className: cn("h-[calc(100vh-15rem)] min-h-[32rem]", className), children: navigator ? /* @__PURE__ */ jsx(SplitPane, { defaultSplit: 28, left: navigator, right: workspace }) : workspace });
|
|
394
356
|
}
|
|
395
357
|
export {
|
|
396
358
|
QueryBrowser
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBrowser.js","sources":["../../../src/data/query-browser/QueryBrowser.tsx"],"sourcesContent":["import { Compartment, EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { JsonSchemaForm } from \"../../components/JsonSchemaForm\";\nimport { cn } from \"../../lib/utils\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { Icon } from \"../Icon\";\nimport { UiPlay } from \"../../icons\";\nimport type { DataTablePagination } from \"../DataTable\";\nimport { inferColumns } from \"../data-table-utils\";\nimport type { DataTableFilterSelection } from \"../data-table-filter-values\";\nimport {\n serverColumnsToDataTableColumns,\n serverFiltersToFilterBar,\n type DataTableFilterLookup,\n type DataTableServerColumn,\n} from \"../data-table-server-filters\";\nimport { ErrorDetails } from \"../diagnostics/ErrorDetails\";\nimport type { ErrorDiagnostics } from \"../diagnostics/error-diagnostics\";\nimport {\n queryBrowserEditorExtensions,\n queryBrowserLanguageExtension,\n readQueryBrowserHistory,\n rememberQueryBrowserQuery,\n type QueryBrowserHistoryEntry,\n} from \"./QueryBrowser.editor\";\nimport { QueryBrowserDiagnosticsPanel } from \"./QueryBrowserDiagnosticsPanel\";\nimport { QueryBrowserResults } from \"./QueryBrowserResults\";\nimport { useQueryInfo } from \"../query-info/useQueryInfo\";\nimport type { QueryExecutionInfo } from \"../query-info/queryInfo\";\nimport {\n QueryBrowserExecutionError,\n type QueryBrowserDiagnostics,\n type QueryBrowserProps,\n type QueryBrowserRequest,\n type QueryBrowserResult,\n} from \"./QueryBrowser.types\";\n\nexport function QueryBrowser({\n id,\n title,\n language = \"text\",\n initialQuery = \"\",\n queryLabel = \"Query\",\n allowEmptyQuery = false,\n optionsSchema,\n initialOptions,\n completion,\n onQueryChange,\n onOptionsChange,\n navigator,\n execute,\n lookupFilterValues,\n renderResults,\n className,\n}: QueryBrowserProps) {\n const editorHost = useRef<HTMLDivElement | null>(null);\n const editor = useRef<EditorView | null>(null);\n const languageConfig = useRef(new Compartment());\n const executeRef = useRef<() => void>(() => undefined);\n const onQueryChangeRef = useRef(onQueryChange);\n const [options, setOptions] = useState<Record<string, unknown>>(\n initialOptions ?? {},\n );\n const [result, setResult] = useState<QueryBrowserResult | null>(null);\n const [error, setError] = useState<{\n message: string;\n query: string;\n diagnostics?: QueryBrowserDiagnostics;\n errorDetails?: ErrorDiagnostics;\n } | null>(null);\n const [pending, setPending] = useState(false);\n const [entries, setEntries] = useState<QueryBrowserHistoryEntry[]>(() =>\n readQueryBrowserHistory(id),\n );\n const [filters, setFilters] = useState<DataTableFilterSelection>({});\n // What the displayed result came from. A filter re-runs *this*, never the\n // editor's current text — otherwise changing a pill would execute a\n // half-typed edit nobody asked to run.\n const lastRun = useRef<{\n query: string;\n options: Record<string, unknown>;\n filters?: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n } | null>(null);\n const executedFilters = useRef<DataTableFilterSelection>({});\n\n // Every run goes through here so the record a filter re-runs from is refreshed\n // in one place: the query, its options, and the columns the source described,\n // which are what a subsequent selection binds to.\n const runRequest = useCallback(\n async (request: QueryBrowserRequest) => {\n setPending(true);\n setError(null);\n const started = performance.now();\n try {\n const next = await execute(request);\n setResult({\n ...next,\n durationMs: next.durationMs ?? performance.now() - started,\n });\n lastRun.current = {\n query: request.query,\n options: request.options,\n ...(request.filters ? { filters: request.filters } : {}),\n ...(next.columns ? { columns: next.columns } : {}),\n };\n } catch (err) {\n setError({\n message: err instanceof Error ? err.message : String(err),\n query: request.query,\n ...(err instanceof QueryBrowserExecutionError && err.diagnostics\n ? { diagnostics: err.diagnostics }\n : {}),\n ...(err instanceof QueryBrowserExecutionError && err.errorDetails\n ? { errorDetails: err.errorDetails }\n : {}),\n });\n } finally {\n setPending(false);\n }\n },\n [execute],\n );\n\n const currentQuery = useCallback(() => {\n const view = editor.current;\n if (!view) return initialQuery;\n const selection = view.state.selection.main;\n if (!selection.empty)\n return view.state.sliceDoc(selection.from, selection.to);\n return view.state.doc.toString();\n }, [initialQuery]);\n\n const run = useCallback(async () => {\n const query = currentQuery().trim();\n if ((!query && !allowEmptyQuery) || pending) return;\n if (query) setEntries(rememberQueryBrowserQuery(id, query));\n // A different statement is a different result set, so neither its filters\n // nor the columns they bind to survive: both name columns the new query may\n // not return.\n const repeat = lastRun.current?.query === query ? lastRun.current : null;\n const carried = repeat ? filters : {};\n if (carried !== filters) setFilters(carried);\n lastRun.current = { query, options };\n executedFilters.current = carried;\n await runRequest({\n query,\n options,\n ...(Object.keys(carried).length > 0 ? { filters: carried } : {}),\n ...(repeat?.columns ? { columns: repeat.columns } : {}),\n });\n }, [allowEmptyQuery, currentQuery, filters, id, options, pending, runRequest]);\n\n // A filter pill is not a draft the way query text is: it commits a discrete\n // value on selection, and the bar already debounces its free-text fields. So\n // a change re-runs the last executed query immediately rather than waiting\n // for Run, which is also how the profile catalog behaves.\n const rerunWithFilters = useCallback(\n async (selection: DataTableFilterSelection) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: a filter changed before any query had run\",\n );\n }\n await runRequest({\n ...previous,\n filters: selection,\n ...(result?.pagination\n ? { pagination: { limit: result.pagination.limit } }\n : {}),\n });\n },\n [result?.pagination, runRequest],\n );\n\n const rerunAt = useCallback(\n async (pagination: NonNullable<QueryBrowserRequest[\"pagination\"]>) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: pagination changed before any query had run\",\n );\n }\n await runRequest({ ...previous, pagination });\n },\n [runRequest],\n );\n\n // \"Debug\" runs the displayed query again with diagnostics on rather than\n // reading them off the result: a debug run costs a second execution, and one\n // paid on every query so the answer is there if asked for is the wrong trade.\n const loadQueryInfo = useCallback(async (): Promise<QueryExecutionInfo> => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\"Run a query before asking what it sends\");\n }\n const pagination = result?.pagination;\n try {\n const probe = await execute({\n ...previous,\n ...(pagination\n ? {\n pagination: {\n limit: pagination.limit,\n ...(pagination.offset !== undefined\n ? { offset: pagination.offset }\n : {}),\n ...(pagination.cursor ? { cursor: pagination.cursor } : {}),\n },\n }\n : {}),\n debug: true,\n });\n return {\n ...(probe.diagnostics?.provider\n ? { provider: probe.diagnostics.provider }\n : {}),\n ...(probe.rows ? { rows: probe.rows.length } : {}),\n ...(probe.durationMs !== undefined\n ? { durationMs: probe.durationMs }\n : {}),\n ...(probe.diagnostics ? { diagnostics: probe.diagnostics } : {}),\n };\n } catch (err) {\n if (err instanceof QueryBrowserExecutionError) {\n return {\n error: err.message,\n ...(err.diagnostics ? { diagnostics: err.diagnostics } : {}),\n };\n }\n throw err;\n }\n }, [execute, result?.pagination]);\n const queryInfo = useQueryInfo({ load: loadQueryInfo, title: queryLabel });\n\n useEffect(() => {\n if (!lastRun.current) return;\n if (filters === executedFilters.current) return;\n executedFilters.current = filters;\n void rerunWithFilters(filters);\n }, [filters, rerunWithFilters]);\n\n executeRef.current = () => void run();\n onQueryChangeRef.current = onQueryChange;\n\n useEffect(() => {\n if (!editorHost.current) return;\n const view = new EditorView({\n parent: editorHost.current,\n state: EditorState.create({\n doc: initialQuery,\n extensions: queryBrowserEditorExtensions(\n () => executeRef.current(),\n (query) => onQueryChangeRef.current?.(query),\n languageConfig.current.of(\n queryBrowserLanguageExtension(language, completion),\n ),\n ),\n }),\n });\n editor.current = view;\n return () => {\n editor.current = null;\n view.destroy();\n };\n }, [id, language]);\n\n useEffect(() => {\n const view = editor.current;\n if (!view) return;\n view.dispatch({\n effects: languageConfig.current.reconfigure(\n queryBrowserLanguageExtension(language, completion),\n ),\n });\n }, [completion, language]);\n\n useEffect(() => {\n const view = editor.current;\n if (!view || view.state.doc.toString() === initialQuery) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: initialQuery },\n });\n }, [initialQuery]);\n\n useEffect(() => {\n setOptions(initialOptions ?? {});\n }, [initialOptions]);\n\n const updateOptions = useCallback(\n (next: Record<string, unknown>) => {\n setOptions(next);\n onOptionsChange?.(next);\n },\n [onOptionsChange],\n );\n\n useEffect(() => {\n setEntries(readQueryBrowserHistory(id));\n setResult(null);\n setError(null);\n setFilters({});\n lastRun.current = null;\n executedFilters.current = {};\n }, [id]);\n\n const rows = result?.rows ?? [];\n const described = result?.columns ?? [];\n const columns = useMemo(\n () =>\n described.length > 0\n ? serverColumnsToDataTableColumns<Record<string, unknown>>(described)\n : inferColumns(rows, { literalKeys: true }),\n [described, rows],\n );\n const lookupValues = useMemo<DataTableFilterLookup | undefined>(() => {\n if (!lookupFilterValues) return undefined;\n return (request) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: a filter lookup ran before any query had\",\n );\n }\n return lookupFilterValues({ ...request, ...previous, filters });\n };\n }, [filters, lookupFilterValues]);\n const filterConfig = useMemo(\n () =>\n serverFiltersToFilterBar(\n described,\n filters,\n setFilters,\n lookupValues ? { lookupValues } : {},\n ),\n [described, filters, lookupValues],\n );\n const serverFiltered =\n filterConfig.filters.length > 0 || filterConfig.timeRange !== undefined;\n const tablePagination = useMemo<DataTablePagination | undefined>(() => {\n const pagination = result?.pagination;\n if (!pagination) return undefined;\n const shared = {\n pageSize: pagination.limit,\n ...(pagination.total !== undefined ? { total: pagination.total } : {}),\n ...(pagination.totalRelation === \"eq\" ||\n pagination.totalRelation === \"gte\"\n ? { totalRelation: pagination.totalRelation }\n : {}),\n hasMore: pagination.hasMore,\n onPageSizeChange: (limit: number) => void rerunAt({ limit }),\n };\n if (pagination.mode === \"cursor\") {\n return {\n ...shared,\n page: 0,\n cursor: {\n ...(pagination.cursor ? { current: pagination.cursor } : {}),\n ...(pagination.nextCursor ? { next: pagination.nextCursor } : {}),\n onCursorChange: (cursor: string | undefined) =>\n void rerunAt({\n limit: pagination.limit,\n ...(cursor ? { cursor } : {}),\n }),\n },\n };\n }\n const page = Math.floor((pagination.offset ?? 0) / pagination.limit);\n return {\n ...shared,\n page,\n onPageChange: (nextPage: number) =>\n void rerunAt({\n limit: pagination.limit,\n offset: nextPage * pagination.limit,\n }),\n };\n }, [rerunAt, result?.pagination]);\n const defaultResults = (\n <QueryBrowserResults\n result={result}\n pending={pending}\n {...(title ? { title } : {})}\n queryLabel={queryLabel}\n columns={columns}\n filterConfig={filterConfig}\n serverFiltered={serverFiltered}\n {...(tablePagination ? { pagination: tablePagination } : {})}\n {...(queryInfo.action ? { menuActions: [queryInfo.action] } : {})}\n />\n );\n\n const workspace = (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden rounded-xl border bg-card\">\n <div className=\"flex flex-wrap items-center gap-2 border-b px-3 py-2\">\n <div className=\"min-w-0 flex-1\">\n {title && <h2 className=\"truncate text-sm font-semibold\">{title}</h2>}\n <p className=\"text-xs text-muted-foreground\">{queryLabel}</p>\n </div>\n {entries.length > 0 && (\n <select\n aria-label=\"Query history\"\n defaultValue=\"\"\n onChange={(event) => {\n const query = event.target.value;\n const view = editor.current;\n if (!view || !query) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: query },\n });\n event.target.value = \"\";\n }}\n className=\"h-8 max-w-52 rounded-md border bg-background px-2 text-xs\"\n >\n <option value=\"\">History</option>\n {entries.map((entry) => (\n <option key={`${entry.at}:${entry.query}`} value={entry.query}>\n {entry.query.replace(/\\s+/g, \" \").slice(0, 80)}\n </option>\n ))}\n </select>\n )}\n <Button\n size=\"sm\"\n onClick={() => void run()}\n loading={pending}\n loadingLabel={pending ? \"Running\" : undefined}\n >\n <Icon icon={UiPlay} className=\"size-4\" />\n Run\n </Button>\n </div>\n {optionsSchema &&\n Object.keys(optionsSchema.properties ?? {}).length > 0 && (\n <div className=\"border-b px-3 py-2\">\n <JsonSchemaForm\n schema={optionsSchema}\n value={options}\n onChange={updateOptions}\n size=\"sm\"\n inline\n showPreferencesMenu={false}\n persistPreferences={false}\n />\n </div>\n )}\n <div ref={editorHost} className=\"h-[34%] min-h-44 border-b\" />\n <div className=\"flex min-h-0 flex-1 flex-col overflow-auto p-3\">\n {error ? (\n <div className=\"space-y-3\">\n <ErrorDetails\n diagnostics={{\n ...(error.errorDetails ?? {\n message: error.message,\n context: [],\n }),\n context: [\n ...(error.errorDetails?.context ?? []),\n [\"Query\", error.query],\n [\"Language\", language],\n ],\n }}\n />\n {error.diagnostics && (\n <QueryBrowserDiagnosticsPanel diagnostics={error.diagnostics} />\n )}\n </div>\n ) : result && renderResults ? (\n renderResults({ result, defaultView: defaultResults })\n ) : (\n defaultResults\n )}\n </div>\n </div>\n );\n\n return (\n <div className={cn(\"h-[calc(100vh-15rem)] min-h-[32rem]\", className)}>\n {navigator ? (\n <SplitPane defaultSplit={28} left={navigator} right={workspace} />\n ) : (\n workspace\n )}\n {queryInfo.dialog}\n </div>\n );\n}\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QueryBrowser.js","sources":["../../../src/data/query-browser/QueryBrowser.tsx"],"sourcesContent":["import { Compartment, EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { JsonSchemaForm } from \"../../components/JsonSchemaForm\";\nimport { cn } from \"../../lib/utils\";\nimport { SplitPane } from \"../../layout/SplitPane\";\nimport { Icon } from \"../Icon\";\nimport { UiPlay } from \"../../icons\";\nimport type { DataTablePagination } from \"../DataTable\";\nimport { inferColumns } from \"../data-table-utils\";\nimport type { DataTableFilterSelection } from \"../data-table-filter-values\";\nimport {\n serverColumnsToDataTableColumns,\n serverFiltersToFilterBar,\n type DataTableFilterLookup,\n type DataTableServerColumn,\n} from \"../data-table-server-filters\";\nimport { ErrorDetails } from \"../diagnostics/ErrorDetails\";\nimport type { ErrorDiagnostics } from \"../diagnostics/error-diagnostics\";\nimport {\n queryBrowserEditorExtensions,\n queryBrowserLanguageExtension,\n readQueryBrowserHistory,\n rememberQueryBrowserQuery,\n type QueryBrowserHistoryEntry,\n} from \"./QueryBrowser.editor\";\nimport { QueryBrowserDiagnosticsPanel } from \"./QueryBrowserDiagnosticsPanel\";\nimport { QueryBrowserResults } from \"./QueryBrowserResults\";\nimport { useDebugAction } from \"../useDebugAction\";\nimport {\n QueryBrowserExecutionError,\n type QueryBrowserDiagnostics,\n type QueryBrowserProps,\n type QueryBrowserRequest,\n type QueryBrowserResult,\n} from \"./QueryBrowser.types\";\n\nexport function QueryBrowser({\n id,\n title,\n language = \"text\",\n initialQuery = \"\",\n queryLabel = \"Query\",\n allowEmptyQuery = false,\n optionsSchema,\n initialOptions,\n completion,\n onQueryChange,\n onOptionsChange,\n navigator,\n execute,\n lookupFilterValues,\n renderResults,\n className,\n}: QueryBrowserProps) {\n const editorHost = useRef<HTMLDivElement | null>(null);\n const editor = useRef<EditorView | null>(null);\n const languageConfig = useRef(new Compartment());\n const executeRef = useRef<() => void>(() => undefined);\n const onQueryChangeRef = useRef(onQueryChange);\n const [options, setOptions] = useState<Record<string, unknown>>(\n initialOptions ?? {},\n );\n const [result, setResult] = useState<QueryBrowserResult | null>(null);\n const [error, setError] = useState<{\n message: string;\n query: string;\n diagnostics?: QueryBrowserDiagnostics;\n errorDetails?: ErrorDiagnostics;\n } | null>(null);\n const [pending, setPending] = useState(false);\n const [entries, setEntries] = useState<QueryBrowserHistoryEntry[]>(() =>\n readQueryBrowserHistory(id),\n );\n const [filters, setFilters] = useState<DataTableFilterSelection>({});\n // What the displayed result came from. A filter re-runs *this*, never the\n // editor's current text — otherwise changing a pill would execute a\n // half-typed edit nobody asked to run.\n const lastRun = useRef<{\n query: string;\n options: Record<string, unknown>;\n filters?: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n } | null>(null);\n const executedFilters = useRef<DataTableFilterSelection>({});\n\n // Every run goes through here so the record a filter re-runs from is refreshed\n // in one place: the query, its options, and the columns the source described,\n // which are what a subsequent selection binds to.\n const runRequest = useCallback(\n async (request: QueryBrowserRequest) => {\n setPending(true);\n setError(null);\n const started = performance.now();\n try {\n const next = await execute(request);\n setResult({\n ...next,\n durationMs: next.durationMs ?? performance.now() - started,\n });\n lastRun.current = {\n query: request.query,\n options: request.options,\n ...(request.filters ? { filters: request.filters } : {}),\n ...(next.columns ? { columns: next.columns } : {}),\n };\n } catch (err) {\n setError({\n message: err instanceof Error ? err.message : String(err),\n query: request.query,\n ...(err instanceof QueryBrowserExecutionError && err.diagnostics\n ? { diagnostics: err.diagnostics }\n : {}),\n ...(err instanceof QueryBrowserExecutionError && err.errorDetails\n ? { errorDetails: err.errorDetails }\n : {}),\n });\n } finally {\n setPending(false);\n }\n },\n [execute],\n );\n\n const currentQuery = useCallback(() => {\n const view = editor.current;\n if (!view) return initialQuery;\n const selection = view.state.selection.main;\n if (!selection.empty)\n return view.state.sliceDoc(selection.from, selection.to);\n return view.state.doc.toString();\n }, [initialQuery]);\n\n const run = useCallback(async () => {\n const query = currentQuery().trim();\n if ((!query && !allowEmptyQuery) || pending) return;\n if (query) setEntries(rememberQueryBrowserQuery(id, query));\n // A different statement is a different result set, so neither its filters\n // nor the columns they bind to survive: both name columns the new query may\n // not return.\n const repeat = lastRun.current?.query === query ? lastRun.current : null;\n const carried = repeat ? filters : {};\n if (carried !== filters) setFilters(carried);\n lastRun.current = { query, options };\n executedFilters.current = carried;\n await runRequest({\n query,\n options,\n ...(Object.keys(carried).length > 0 ? { filters: carried } : {}),\n ...(repeat?.columns ? { columns: repeat.columns } : {}),\n });\n }, [allowEmptyQuery, currentQuery, filters, id, options, pending, runRequest]);\n\n // A filter pill is not a draft the way query text is: it commits a discrete\n // value on selection, and the bar already debounces its free-text fields. So\n // a change re-runs the last executed query immediately rather than waiting\n // for Run, which is also how the profile catalog behaves.\n const rerunWithFilters = useCallback(\n async (selection: DataTableFilterSelection) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: a filter changed before any query had run\",\n );\n }\n await runRequest({\n ...previous,\n filters: selection,\n ...(result?.pagination\n ? { pagination: { limit: result.pagination.limit } }\n : {}),\n });\n },\n [result?.pagination, runRequest],\n );\n\n const rerunAt = useCallback(\n async (pagination: NonNullable<QueryBrowserRequest[\"pagination\"]>) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: pagination changed before any query had run\",\n );\n }\n await runRequest({ ...previous, pagination });\n },\n [runRequest],\n );\n\n // \"Debug\" reveals the console, which already holds the record for the run\n // that produced the rows on screen. It used to re-execute the query with a\n // `debug` flag — so the diagnostics described a *different* execution from\n // the one being looked at, and cost the backend a second full run to say so.\n const debugAction = useDebugAction();\n\n useEffect(() => {\n if (!lastRun.current) return;\n if (filters === executedFilters.current) return;\n executedFilters.current = filters;\n void rerunWithFilters(filters);\n }, [filters, rerunWithFilters]);\n\n executeRef.current = () => void run();\n onQueryChangeRef.current = onQueryChange;\n\n useEffect(() => {\n if (!editorHost.current) return;\n const view = new EditorView({\n parent: editorHost.current,\n state: EditorState.create({\n doc: initialQuery,\n extensions: queryBrowserEditorExtensions(\n () => executeRef.current(),\n (query) => onQueryChangeRef.current?.(query),\n languageConfig.current.of(\n queryBrowserLanguageExtension(language, completion),\n ),\n ),\n }),\n });\n editor.current = view;\n return () => {\n editor.current = null;\n view.destroy();\n };\n }, [id, language]);\n\n useEffect(() => {\n const view = editor.current;\n if (!view) return;\n view.dispatch({\n effects: languageConfig.current.reconfigure(\n queryBrowserLanguageExtension(language, completion),\n ),\n });\n }, [completion, language]);\n\n useEffect(() => {\n const view = editor.current;\n if (!view || view.state.doc.toString() === initialQuery) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: initialQuery },\n });\n }, [initialQuery]);\n\n useEffect(() => {\n setOptions(initialOptions ?? {});\n }, [initialOptions]);\n\n const updateOptions = useCallback(\n (next: Record<string, unknown>) => {\n setOptions(next);\n onOptionsChange?.(next);\n },\n [onOptionsChange],\n );\n\n useEffect(() => {\n setEntries(readQueryBrowserHistory(id));\n setResult(null);\n setError(null);\n setFilters({});\n lastRun.current = null;\n executedFilters.current = {};\n }, [id]);\n\n const rows = result?.rows ?? [];\n const described = result?.columns ?? [];\n const columns = useMemo(\n () =>\n described.length > 0\n ? serverColumnsToDataTableColumns<Record<string, unknown>>(described)\n : inferColumns(rows, { literalKeys: true }),\n [described, rows],\n );\n const lookupValues = useMemo<DataTableFilterLookup | undefined>(() => {\n if (!lookupFilterValues) return undefined;\n return (request) => {\n const previous = lastRun.current;\n if (!previous) {\n throw new Error(\n \"QueryBrowser: a filter lookup ran before any query had\",\n );\n }\n return lookupFilterValues({ ...request, ...previous, filters });\n };\n }, [filters, lookupFilterValues]);\n const filterConfig = useMemo(\n () =>\n serverFiltersToFilterBar(\n described,\n filters,\n setFilters,\n lookupValues ? { lookupValues } : {},\n ),\n [described, filters, lookupValues],\n );\n const serverFiltered =\n filterConfig.filters.length > 0 || filterConfig.timeRange !== undefined;\n const tablePagination = useMemo<DataTablePagination | undefined>(() => {\n const pagination = result?.pagination;\n if (!pagination) return undefined;\n const shared = {\n pageSize: pagination.limit,\n ...(pagination.total !== undefined ? { total: pagination.total } : {}),\n ...(pagination.totalRelation === \"eq\" ||\n pagination.totalRelation === \"gte\"\n ? { totalRelation: pagination.totalRelation }\n : {}),\n hasMore: pagination.hasMore,\n onPageSizeChange: (limit: number) => void rerunAt({ limit }),\n };\n if (pagination.mode === \"cursor\") {\n return {\n ...shared,\n page: 0,\n cursor: {\n ...(pagination.cursor ? { current: pagination.cursor } : {}),\n ...(pagination.nextCursor ? { next: pagination.nextCursor } : {}),\n onCursorChange: (cursor: string | undefined) =>\n void rerunAt({\n limit: pagination.limit,\n ...(cursor ? { cursor } : {}),\n }),\n },\n };\n }\n const page = Math.floor((pagination.offset ?? 0) / pagination.limit);\n return {\n ...shared,\n page,\n onPageChange: (nextPage: number) =>\n void rerunAt({\n limit: pagination.limit,\n offset: nextPage * pagination.limit,\n }),\n };\n }, [rerunAt, result?.pagination]);\n const defaultResults = (\n <QueryBrowserResults\n result={result}\n pending={pending}\n {...(title ? { title } : {})}\n queryLabel={queryLabel}\n columns={columns}\n filterConfig={filterConfig}\n serverFiltered={serverFiltered}\n {...(tablePagination ? { pagination: tablePagination } : {})}\n {...(debugAction ? { menuActions: [debugAction] } : {})}\n />\n );\n\n const workspace = (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden rounded-xl border bg-card\">\n <div className=\"flex flex-wrap items-center gap-2 border-b px-3 py-2\">\n <div className=\"min-w-0 flex-1\">\n {title && <h2 className=\"truncate text-sm font-semibold\">{title}</h2>}\n <p className=\"text-xs text-muted-foreground\">{queryLabel}</p>\n </div>\n {entries.length > 0 && (\n <select\n aria-label=\"Query history\"\n defaultValue=\"\"\n onChange={(event) => {\n const query = event.target.value;\n const view = editor.current;\n if (!view || !query) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: query },\n });\n event.target.value = \"\";\n }}\n className=\"h-8 max-w-52 rounded-md border bg-background px-2 text-xs\"\n >\n <option value=\"\">History</option>\n {entries.map((entry) => (\n <option key={`${entry.at}:${entry.query}`} value={entry.query}>\n {entry.query.replace(/\\s+/g, \" \").slice(0, 80)}\n </option>\n ))}\n </select>\n )}\n <Button\n size=\"sm\"\n onClick={() => void run()}\n loading={pending}\n loadingLabel={pending ? \"Running\" : undefined}\n >\n <Icon icon={UiPlay} className=\"size-4\" />\n Run\n </Button>\n </div>\n {optionsSchema &&\n Object.keys(optionsSchema.properties ?? {}).length > 0 && (\n <div className=\"border-b px-3 py-2\">\n <JsonSchemaForm\n schema={optionsSchema}\n value={options}\n onChange={updateOptions}\n size=\"sm\"\n inline\n showPreferencesMenu={false}\n persistPreferences={false}\n />\n </div>\n )}\n <div ref={editorHost} className=\"h-[34%] min-h-44 border-b\" />\n <div className=\"flex min-h-0 flex-1 flex-col overflow-auto p-3\">\n {error ? (\n <div className=\"space-y-3\">\n <ErrorDetails\n diagnostics={{\n ...(error.errorDetails ?? {\n message: error.message,\n context: [],\n }),\n context: [\n ...(error.errorDetails?.context ?? []),\n [\"Query\", error.query],\n [\"Language\", language],\n ],\n }}\n />\n {error.diagnostics && (\n <QueryBrowserDiagnosticsPanel diagnostics={error.diagnostics} />\n )}\n </div>\n ) : result && renderResults ? (\n renderResults({ result, defaultView: defaultResults })\n ) : (\n defaultResults\n )}\n </div>\n </div>\n );\n\n return (\n <div className={cn(\"h-[calc(100vh-15rem)] min-h-[32rem]\", className)}>\n {navigator ? (\n <SplitPane defaultSplit={28} left={navigator} right={workspace} />\n ) : (\n workspace\n )}\n </div>\n );\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBrowser.types.cjs","sources":["../../../src/data/query-browser/QueryBrowser.types.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { JsonSchemaObject } from \"../../components/json-schema-form-types\";\nimport type { ErrorDiagnostics } from \"../diagnostics/error-diagnostics\";\nimport type { DataTableFilterSelection } from \"../data-table-filter-values\";\nimport type {\n DataTableFilterLookupRequest,\n DataTableFilterLookupResult,\n DataTableServerColumn,\n} from \"../data-table-server-filters\";\nimport type { QueryBrowserCompletion } from \"./QueryBrowser.completion\";\nimport type { QueryBrowserLanguage } from \"./QueryBrowser.editor\";\n\nexport type QueryBrowserPagination = {\n mode: \"offset\" | \"cursor\";\n limit: number;\n offset?: number;\n cursor?: string;\n nextCursor?: string;\n hasMore: boolean;\n total?: number;\n totalRelation: \"eq\" | \"gte\" | \"unknown\";\n consistency: \"live\" | \"snapshot\";\n};\n\nexport type QueryBrowserDiagnostics = {\n provider: string;\n request: {\n /** The statement the provider issued, with every runtime filter folded in. */\n query?: string;\n /** The same query before the provider composed the run onto it. */\n rendered?: string;\n connection?: string;\n arguments?: unknown[];\n options?: Record<string, unknown>;\n details?: Record<string, unknown>;\n /** The HTTP exchange the request rode on, for a provider that speaks HTTP. */\n method?: string;\n url?: string;\n headers?: Record<string, string>;\n };\n response?: {\n durationMs?: number;\n returnedRows?: number;\n pages?: number;\n details?: Record<string, unknown>;\n preview?: string;\n contentType?: string;\n truncated?: boolean;\n status?: number;\n headers?: Record<string, string>;\n };\n error?: string;\n};\n\nexport class QueryBrowserExecutionError extends Error {\n constructor(\n message: string,\n readonly diagnostics?: QueryBrowserDiagnostics,\n readonly errorDetails?: ErrorDiagnostics,\n ) {\n super(message);\n this.name = \"QueryBrowserExecutionError\";\n }\n}\n\nexport type QueryBrowserResult = {\n rows?: Record<string, unknown>[];\n columns?: DataTableServerColumn[];\n affectedRows?: number;\n durationMs?: number;\n message?: string;\n truncated?: boolean;\n limit?: number;\n metadata?: Record<string, unknown>;\n pagination?: QueryBrowserPagination;\n diagnostics?: QueryBrowserDiagnostics;\n};\n\nexport type QueryBrowserRequest = {\n query: string;\n options: Record<string, unknown>;\n filters?: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n pagination?: { limit: number; offset?: number; cursor?: string };\n
|
|
1
|
+
{"version":3,"file":"QueryBrowser.types.cjs","sources":["../../../src/data/query-browser/QueryBrowser.types.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { JsonSchemaObject } from \"../../components/json-schema-form-types\";\nimport type { ErrorDiagnostics } from \"../diagnostics/error-diagnostics\";\nimport type { DataTableFilterSelection } from \"../data-table-filter-values\";\nimport type {\n DataTableFilterLookupRequest,\n DataTableFilterLookupResult,\n DataTableServerColumn,\n} from \"../data-table-server-filters\";\nimport type { QueryBrowserCompletion } from \"./QueryBrowser.completion\";\nimport type { QueryBrowserLanguage } from \"./QueryBrowser.editor\";\n\nexport type QueryBrowserPagination = {\n mode: \"offset\" | \"cursor\";\n limit: number;\n offset?: number;\n cursor?: string;\n nextCursor?: string;\n hasMore: boolean;\n total?: number;\n totalRelation: \"eq\" | \"gte\" | \"unknown\";\n consistency: \"live\" | \"snapshot\";\n};\n\nexport type QueryBrowserDiagnostics = {\n provider: string;\n request: {\n /** The statement the provider issued, with every runtime filter folded in. */\n query?: string;\n /** The same query before the provider composed the run onto it. */\n rendered?: string;\n connection?: string;\n arguments?: unknown[];\n options?: Record<string, unknown>;\n details?: Record<string, unknown>;\n /** The HTTP exchange the request rode on, for a provider that speaks HTTP. */\n method?: string;\n url?: string;\n headers?: Record<string, string>;\n };\n response?: {\n durationMs?: number;\n returnedRows?: number;\n pages?: number;\n details?: Record<string, unknown>;\n preview?: string;\n contentType?: string;\n truncated?: boolean;\n status?: number;\n headers?: Record<string, string>;\n };\n error?: string;\n};\n\nexport class QueryBrowserExecutionError extends Error {\n constructor(\n message: string,\n readonly diagnostics?: QueryBrowserDiagnostics,\n readonly errorDetails?: ErrorDiagnostics,\n ) {\n super(message);\n this.name = \"QueryBrowserExecutionError\";\n }\n}\n\nexport type QueryBrowserResult = {\n rows?: Record<string, unknown>[];\n columns?: DataTableServerColumn[];\n affectedRows?: number;\n durationMs?: number;\n message?: string;\n truncated?: boolean;\n limit?: number;\n metadata?: Record<string, unknown>;\n pagination?: QueryBrowserPagination;\n diagnostics?: QueryBrowserDiagnostics;\n};\n\nexport type QueryBrowserRequest = {\n query: string;\n options: Record<string, unknown>;\n filters?: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n pagination?: { limit: number; offset?: number; cursor?: string };\n};\n\nexport type QueryBrowserFilterLookupRequest = DataTableFilterLookupRequest & {\n query: string;\n options: Record<string, unknown>;\n filters: DataTableFilterSelection;\n columns?: DataTableServerColumn[];\n};\n\nexport type QueryBrowserFilterLookup = (\n request: QueryBrowserFilterLookupRequest,\n) => Promise<DataTableFilterLookupResult>;\n\nexport type QueryBrowserResultContext = {\n result: QueryBrowserResult;\n defaultView: ReactNode;\n};\n\n// The optional props admit an explicit `undefined` — the same convention the\n// rest of the package follows (see data/CodeBlock.tsx). Passing a\n// possibly-absent value straight through, `className={maybe}`, is ordinary\n// React, and under exactOptionalPropertyTypes a bare `?:` rejects it.\nexport type QueryBrowserProps = {\n id: string;\n title?: string | undefined;\n language?: QueryBrowserLanguage | undefined;\n initialQuery?: string | undefined;\n queryLabel?: string | undefined;\n allowEmptyQuery?: boolean | undefined;\n optionsSchema?: JsonSchemaObject | undefined;\n initialOptions?: Record<string, unknown> | undefined;\n completion?: QueryBrowserCompletion | undefined;\n onQueryChange?: ((query: string) => void) | undefined;\n onOptionsChange?: ((options: Record<string, unknown>) => void) | undefined;\n navigator?: ReactNode | undefined;\n execute: (request: QueryBrowserRequest) => Promise<QueryBrowserResult>;\n lookupFilterValues?: QueryBrowserFilterLookup | undefined;\n renderResults?: ((context: QueryBrowserResultContext) => ReactNode) | undefined;\n className?: string | undefined;\n};\n"],"names":[],"mappings":";;AAsDO,MAAM,mCAAmC,MAAM;AAAA,EACpD,YACE,SACS,aACA,cACT;AACA,UAAM,OAAO;AAHJ,SAAA,cAAA;AACA,SAAA,eAAA;AAGT,SAAK,OAAO;AAAA,EACd;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBrowser.types.d.ts","sourceRoot":"","sources":["../../../src/data/query-browser/QueryBrowser.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"QueryBrowser.types.d.ts","sourceRoot":"","sources":["../../../src/data/query-browser/QueryBrowser.types.ts"],"names":[],"mappings":"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"}
|