@flanksource/clicky-ui 0.3.24 → 0.3.26
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/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/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 +8 -4
- 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 +8 -4
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.cjs +11 -7
- package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.js +11 -7
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
- package/dist/data/chat/ContextMeter.cjs +64 -27
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +11 -4
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +64 -27
- package/dist/data/chat/ContextMeter.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 +41 -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/chat/usage-snapshot.cjs +10 -1
- package/dist/data/chat/usage-snapshot.cjs.map +1 -1
- package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
- package/dist/data/chat/usage-snapshot.js +10 -1
- package/dist/data/chat/usage-snapshot.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/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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debugStore.cjs","sources":["../../src/devtools/debugStore.ts"],"sourcesContent":["import type { DebugLevel, DebugLogLine, DebugStats, ExecutionSummary } from \"./types\";\nimport { DEFAULT_DEBUG_LEVEL } from \"./types\";\n\n/**\n * The console's memory of what the server has told it.\n *\n * It is a plain external emitter rather than a context or a query cache because\n * the fetch wrapper writes to it, and that is not a hook — it runs inside the\n * API client, below React. `useSyncExternalStore` reads it, which is the same\n * idiom `useBrowserRouter` already uses and costs no new dependency.\n *\n * Everything here is bounded and lost on reload. Records hold request and\n * response bodies; a store that survived a refresh would be a place secrets\n * accumulate silently.\n */\n\n/** Client-side ring caps, matching the server's own retention in spirit. */\nexport const MAX_RECORDS = 500;\nexport const MAX_LOG_LINES = 5000;\n\nexport type DebugStoreState = {\n /** Records oldest-first, the order they ran. */\n records: ExecutionSummary[];\n logs: DebugLogLine[];\n /** The level subsequent requests arm themselves at. */\n level: DebugLevel;\n /**\n * Whether subsequent requests also rebuild every metadata lookup they make.\n *\n * Off by default and never implied by the level: a page that re-derives every\n * field mapping and cardinality count can take seconds instead of\n * milliseconds, so it is something asked for rather than something arrived at.\n */\n refreshInspection: boolean;\n /** Live when the stream is connected; the console says so rather than looking empty. */\n connected: boolean;\n /** The last stream error, kept so a silent console can explain itself. */\n streamError?: string | undefined;\n /** What the server reports it holds, refreshed with each stats-bearing response. */\n stats?: DebugStats | undefined;\n /** How many records the client itself dropped to stay under its cap. */\n dropped: number;\n};\n\nconst EMPTY: DebugStoreState = {\n records: [],\n logs: [],\n level: DEFAULT_DEBUG_LEVEL,\n refreshInspection: false,\n connected: false,\n dropped: 0,\n};\n\nexport class DebugStore {\n private state: DebugStoreState = EMPTY;\n private listeners = new Set<() => void>();\n /** Sequence → index, so an SSE replay after a reconnect cannot double-file. */\n private seen = new Map<number, number>();\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n };\n\n getSnapshot = (): DebugStoreState => this.state;\n\n /**\n * The highest record sequence this store holds, which is what a reconnecting\n * stream resumes from. Zero means \"replay everything you still have\".\n */\n lastSequence(): number {\n const records = this.state.records;\n return records.length === 0 ? 0 : (records[records.length - 1]?.sequence ?? 0);\n }\n\n /**\n * Files a record. A record already held is replaced rather than appended:\n * the stream replays on reconnect, and the same execution arriving twice must\n * stay one row.\n */\n addRecord(record: ExecutionSummary): void {\n const existing = this.seen.get(record.sequence);\n if (existing !== undefined) {\n const records = this.state.records.slice();\n records[existing] = record;\n this.commit({ records });\n return;\n }\n const records = this.state.records.concat(record);\n let dropped = this.state.dropped;\n if (records.length > MAX_RECORDS) {\n dropped += records.length - MAX_RECORDS;\n records.splice(0, records.length - MAX_RECORDS);\n }\n this.reindex(records);\n this.commit({ records, dropped });\n }\n\n addRecords(records: ExecutionSummary[]): void {\n for (const record of records) this.addRecord(record);\n }\n\n /**\n * Appends a log line. Lines are keyed by source and sequence rather than\n * sequence alone: the request tail and the process tail are two independent\n * sequence spaces, and treating them as one would silently drop half.\n */\n addLog(line: DebugLogLine): void {\n const logs = this.state.logs.concat(line);\n if (logs.length > MAX_LOG_LINES) logs.splice(0, logs.length - MAX_LOG_LINES);\n this.commit({ logs });\n }\n\n addLogs(lines: DebugLogLine[]): void {\n if (lines.length === 0) return;\n const logs = this.state.logs.concat(lines);\n if (logs.length > MAX_LOG_LINES) logs.splice(0, logs.length - MAX_LOG_LINES);\n this.commit({ logs });\n }\n\n setLevel(level: DebugLevel): void {\n if (this.state.level === level) return;\n this.commit({ level });\n }\n\n setRefreshInspection(refreshInspection: boolean): void {\n if (this.state.refreshInspection === refreshInspection) return;\n this.commit({ refreshInspection });\n }\n\n setConnected(connected: boolean, streamError?: string): void {\n if (this.state.connected === connected && this.state.streamError === streamError) return;\n this.commit({ connected, streamError });\n }\n\n setStats(stats: DebugStats): void {\n this.commit({ stats });\n }\n\n /** Empties the client's view. The server's buffer is cleared separately. */\n clear(): void {\n this.seen.clear();\n this.commit({ records: [], logs: [], dropped: 0 });\n }\n\n private reindex(records: ExecutionSummary[]): void {\n this.seen.clear();\n records.forEach((record, index) => this.seen.set(record.sequence, index));\n }\n\n private commit(patch: Partial<DebugStoreState>): void {\n this.state = { ...this.state, ...patch };\n for (const listener of this.listeners) listener();\n }\n}\n\n/**\n * The store the dock and the fetch wrapper share.\n *\n * A module-level instance, deliberately: the wrapper is handed to the API\n * client at construction, long before any component mounts, so there is no\n * provider it could read a per-tree store from.\n */\nexport const debugStore = new DebugStore();\n"],"names":["DEFAULT_DEBUG_LEVEL","records"],"mappings":";;;;;;AAiBO,MAAM,cAAc;AACpB,MAAM,gBAAgB;AA0B7B,MAAM,QAAyB;AAAA,EAC7B,SAAS,CAAA;AAAA,EACT,MAAM,CAAA;AAAA,EACN,OAAOA,MAAAA;AAAAA,EACP,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,SAAS;AACX;AAEO,MAAM,WAAW;AAAA,EAAjB;AACG,iCAAyB;AACzB,yDAAgB,IAAA;AAEhB;AAAA,oDAAW,IAAA;AAEnB,qCAAY,CAAC,aAAuC;AAClD,WAAK,UAAU,IAAI,QAAQ;AAC3B,aAAO,MAAM;AACX,aAAK,UAAU,OAAO,QAAQ;AAAA,MAChC;AAAA,IACF;AAEA,uCAAc,MAAuB,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1C,eAAuB;;AACrB,UAAM,UAAU,KAAK,MAAM;AAC3B,WAAO,QAAQ,WAAW,IAAI,MAAK,aAAQ,QAAQ,SAAS,CAAC,MAA1B,mBAA6B,aAAY;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,QAAgC;AACxC,UAAM,WAAW,KAAK,KAAK,IAAI,OAAO,QAAQ;AAC9C,QAAI,aAAa,QAAW;AAC1B,YAAMC,WAAU,KAAK,MAAM,QAAQ,MAAA;AACnCA,eAAQ,QAAQ,IAAI;AACpB,WAAK,OAAO,EAAE,SAAAA,SAAAA,CAAS;AACvB;AAAA,IACF;AACA,UAAM,UAAU,KAAK,MAAM,QAAQ,OAAO,MAAM;AAChD,QAAI,UAAU,KAAK,MAAM;AACzB,QAAI,QAAQ,SAAS,aAAa;AAChC,iBAAW,QAAQ,SAAS;AAC5B,cAAQ,OAAO,GAAG,QAAQ,SAAS,WAAW;AAAA,IAChD;AACA,SAAK,QAAQ,OAAO;AACpB,SAAK,OAAO,EAAE,SAAS,QAAA,CAAS;AAAA,EAClC;AAAA,EAEA,WAAW,SAAmC;AAC5C,eAAW,UAAU,QAAS,MAAK,UAAU,MAAM;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,MAA0B;AAC/B,UAAM,OAAO,KAAK,MAAM,KAAK,OAAO,IAAI;AACxC,QAAI,KAAK,SAAS,cAAe,MAAK,OAAO,GAAG,KAAK,SAAS,aAAa;AAC3E,SAAK,OAAO,EAAE,MAAM;AAAA,EACtB;AAAA,EAEA,QAAQ,OAA6B;AACnC,QAAI,MAAM,WAAW,EAAG;AACxB,UAAM,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK;AACzC,QAAI,KAAK,SAAS,cAAe,MAAK,OAAO,GAAG,KAAK,SAAS,aAAa;AAC3E,SAAK,OAAO,EAAE,MAAM;AAAA,EACtB;AAAA,EAEA,SAAS,OAAyB;AAChC,QAAI,KAAK,MAAM,UAAU,MAAO;AAChC,SAAK,OAAO,EAAE,OAAO;AAAA,EACvB;AAAA,EAEA,qBAAqB,mBAAkC;AACrD,QAAI,KAAK,MAAM,sBAAsB,kBAAmB;AACxD,SAAK,OAAO,EAAE,mBAAmB;AAAA,EACnC;AAAA,EAEA,aAAa,WAAoB,aAA4B;AAC3D,QAAI,KAAK,MAAM,cAAc,aAAa,KAAK,MAAM,gBAAgB,YAAa;AAClF,SAAK,OAAO,EAAE,WAAW,YAAA,CAAa;AAAA,EACxC;AAAA,EAEA,SAAS,OAAyB;AAChC,SAAK,OAAO,EAAE,OAAO;AAAA,EACvB;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,KAAK,MAAA;AACV,SAAK,OAAO,EAAE,SAAS,CAAA,GAAI,MAAM,CAAA,GAAI,SAAS,GAAG;AAAA,EACnD;AAAA,EAEQ,QAAQ,SAAmC;AACjD,SAAK,KAAK,MAAA;AACV,YAAQ,QAAQ,CAAC,QAAQ,UAAU,KAAK,KAAK,IAAI,OAAO,UAAU,KAAK,CAAC;AAAA,EAC1E;AAAA,EAEQ,OAAO,OAAuC;AACpD,SAAK,QAAQ,EAAE,GAAG,KAAK,OAAO,GAAG,MAAA;AACjC,eAAW,YAAY,KAAK,UAAW,UAAA;AAAA,EACzC;AACF;AASO,MAAM,aAAa,IAAI,WAAA;;;;;"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { DebugLevel, DebugLogLine, DebugStats, ExecutionSummary } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* The console's memory of what the server has told it.
|
|
4
|
+
*
|
|
5
|
+
* It is a plain external emitter rather than a context or a query cache because
|
|
6
|
+
* the fetch wrapper writes to it, and that is not a hook — it runs inside the
|
|
7
|
+
* API client, below React. `useSyncExternalStore` reads it, which is the same
|
|
8
|
+
* idiom `useBrowserRouter` already uses and costs no new dependency.
|
|
9
|
+
*
|
|
10
|
+
* Everything here is bounded and lost on reload. Records hold request and
|
|
11
|
+
* response bodies; a store that survived a refresh would be a place secrets
|
|
12
|
+
* accumulate silently.
|
|
13
|
+
*/
|
|
14
|
+
/** Client-side ring caps, matching the server's own retention in spirit. */
|
|
15
|
+
export declare const MAX_RECORDS = 500;
|
|
16
|
+
export declare const MAX_LOG_LINES = 5000;
|
|
17
|
+
export type DebugStoreState = {
|
|
18
|
+
/** Records oldest-first, the order they ran. */
|
|
19
|
+
records: ExecutionSummary[];
|
|
20
|
+
logs: DebugLogLine[];
|
|
21
|
+
/** The level subsequent requests arm themselves at. */
|
|
22
|
+
level: DebugLevel;
|
|
23
|
+
/**
|
|
24
|
+
* Whether subsequent requests also rebuild every metadata lookup they make.
|
|
25
|
+
*
|
|
26
|
+
* Off by default and never implied by the level: a page that re-derives every
|
|
27
|
+
* field mapping and cardinality count can take seconds instead of
|
|
28
|
+
* milliseconds, so it is something asked for rather than something arrived at.
|
|
29
|
+
*/
|
|
30
|
+
refreshInspection: boolean;
|
|
31
|
+
/** Live when the stream is connected; the console says so rather than looking empty. */
|
|
32
|
+
connected: boolean;
|
|
33
|
+
/** The last stream error, kept so a silent console can explain itself. */
|
|
34
|
+
streamError?: string | undefined;
|
|
35
|
+
/** What the server reports it holds, refreshed with each stats-bearing response. */
|
|
36
|
+
stats?: DebugStats | undefined;
|
|
37
|
+
/** How many records the client itself dropped to stay under its cap. */
|
|
38
|
+
dropped: number;
|
|
39
|
+
};
|
|
40
|
+
export declare class DebugStore {
|
|
41
|
+
private state;
|
|
42
|
+
private listeners;
|
|
43
|
+
/** Sequence → index, so an SSE replay after a reconnect cannot double-file. */
|
|
44
|
+
private seen;
|
|
45
|
+
subscribe: (listener: () => void) => (() => void);
|
|
46
|
+
getSnapshot: () => DebugStoreState;
|
|
47
|
+
/**
|
|
48
|
+
* The highest record sequence this store holds, which is what a reconnecting
|
|
49
|
+
* stream resumes from. Zero means "replay everything you still have".
|
|
50
|
+
*/
|
|
51
|
+
lastSequence(): number;
|
|
52
|
+
/**
|
|
53
|
+
* Files a record. A record already held is replaced rather than appended:
|
|
54
|
+
* the stream replays on reconnect, and the same execution arriving twice must
|
|
55
|
+
* stay one row.
|
|
56
|
+
*/
|
|
57
|
+
addRecord(record: ExecutionSummary): void;
|
|
58
|
+
addRecords(records: ExecutionSummary[]): void;
|
|
59
|
+
/**
|
|
60
|
+
* Appends a log line. Lines are keyed by source and sequence rather than
|
|
61
|
+
* sequence alone: the request tail and the process tail are two independent
|
|
62
|
+
* sequence spaces, and treating them as one would silently drop half.
|
|
63
|
+
*/
|
|
64
|
+
addLog(line: DebugLogLine): void;
|
|
65
|
+
addLogs(lines: DebugLogLine[]): void;
|
|
66
|
+
setLevel(level: DebugLevel): void;
|
|
67
|
+
setRefreshInspection(refreshInspection: boolean): void;
|
|
68
|
+
setConnected(connected: boolean, streamError?: string): void;
|
|
69
|
+
setStats(stats: DebugStats): void;
|
|
70
|
+
/** Empties the client's view. The server's buffer is cleared separately. */
|
|
71
|
+
clear(): void;
|
|
72
|
+
private reindex;
|
|
73
|
+
private commit;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The store the dock and the fetch wrapper share.
|
|
77
|
+
*
|
|
78
|
+
* A module-level instance, deliberately: the wrapper is handed to the API
|
|
79
|
+
* client at construction, long before any component mounts, so there is no
|
|
80
|
+
* provider it could read a per-tree store from.
|
|
81
|
+
*/
|
|
82
|
+
export declare const debugStore: DebugStore;
|
|
83
|
+
//# sourceMappingURL=debugStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debugStore.d.ts","sourceRoot":"","sources":["../../src/devtools/debugStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGtF;;;;;;;;;;;GAWG;AAEH,4EAA4E;AAC5E,eAAO,MAAM,WAAW,MAAM,CAAC;AAC/B,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC,MAAM,MAAM,eAAe,GAAG;IAC5B,gDAAgD;IAChD,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,uDAAuD;IACvD,KAAK,EAAE,UAAU,CAAC;IAClB;;;;;;OAMG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAC3B,wFAAwF;IACxF,SAAS,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,oFAAoF;IACpF,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAWF,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,SAAS,CAAyB;IAC1C,+EAA+E;IAC/E,OAAO,CAAC,IAAI,CAA6B;IAEzC,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAK9C;IAEF,WAAW,QAAO,eAAe,CAAe;IAEhD;;;OAGG;IACH,YAAY,IAAI,MAAM;IAKtB;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAkBzC,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAI7C;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAMhC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI;IAOpC,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAKjC,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,GAAG,IAAI;IAKtD,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAK5D,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAIjC,4EAA4E;IAC5E,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,MAAM;CAIf;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,YAAmB,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
import { DEFAULT_DEBUG_LEVEL } from "./types.js";
|
|
5
|
+
const MAX_RECORDS = 500;
|
|
6
|
+
const MAX_LOG_LINES = 5e3;
|
|
7
|
+
const EMPTY = {
|
|
8
|
+
records: [],
|
|
9
|
+
logs: [],
|
|
10
|
+
level: DEFAULT_DEBUG_LEVEL,
|
|
11
|
+
refreshInspection: false,
|
|
12
|
+
connected: false,
|
|
13
|
+
dropped: 0
|
|
14
|
+
};
|
|
15
|
+
class DebugStore {
|
|
16
|
+
constructor() {
|
|
17
|
+
__publicField(this, "state", EMPTY);
|
|
18
|
+
__publicField(this, "listeners", /* @__PURE__ */ new Set());
|
|
19
|
+
/** Sequence → index, so an SSE replay after a reconnect cannot double-file. */
|
|
20
|
+
__publicField(this, "seen", /* @__PURE__ */ new Map());
|
|
21
|
+
__publicField(this, "subscribe", (listener) => {
|
|
22
|
+
this.listeners.add(listener);
|
|
23
|
+
return () => {
|
|
24
|
+
this.listeners.delete(listener);
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
__publicField(this, "getSnapshot", () => this.state);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The highest record sequence this store holds, which is what a reconnecting
|
|
31
|
+
* stream resumes from. Zero means "replay everything you still have".
|
|
32
|
+
*/
|
|
33
|
+
lastSequence() {
|
|
34
|
+
var _a;
|
|
35
|
+
const records = this.state.records;
|
|
36
|
+
return records.length === 0 ? 0 : ((_a = records[records.length - 1]) == null ? void 0 : _a.sequence) ?? 0;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Files a record. A record already held is replaced rather than appended:
|
|
40
|
+
* the stream replays on reconnect, and the same execution arriving twice must
|
|
41
|
+
* stay one row.
|
|
42
|
+
*/
|
|
43
|
+
addRecord(record) {
|
|
44
|
+
const existing = this.seen.get(record.sequence);
|
|
45
|
+
if (existing !== void 0) {
|
|
46
|
+
const records2 = this.state.records.slice();
|
|
47
|
+
records2[existing] = record;
|
|
48
|
+
this.commit({ records: records2 });
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const records = this.state.records.concat(record);
|
|
52
|
+
let dropped = this.state.dropped;
|
|
53
|
+
if (records.length > MAX_RECORDS) {
|
|
54
|
+
dropped += records.length - MAX_RECORDS;
|
|
55
|
+
records.splice(0, records.length - MAX_RECORDS);
|
|
56
|
+
}
|
|
57
|
+
this.reindex(records);
|
|
58
|
+
this.commit({ records, dropped });
|
|
59
|
+
}
|
|
60
|
+
addRecords(records) {
|
|
61
|
+
for (const record of records) this.addRecord(record);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Appends a log line. Lines are keyed by source and sequence rather than
|
|
65
|
+
* sequence alone: the request tail and the process tail are two independent
|
|
66
|
+
* sequence spaces, and treating them as one would silently drop half.
|
|
67
|
+
*/
|
|
68
|
+
addLog(line) {
|
|
69
|
+
const logs = this.state.logs.concat(line);
|
|
70
|
+
if (logs.length > MAX_LOG_LINES) logs.splice(0, logs.length - MAX_LOG_LINES);
|
|
71
|
+
this.commit({ logs });
|
|
72
|
+
}
|
|
73
|
+
addLogs(lines) {
|
|
74
|
+
if (lines.length === 0) return;
|
|
75
|
+
const logs = this.state.logs.concat(lines);
|
|
76
|
+
if (logs.length > MAX_LOG_LINES) logs.splice(0, logs.length - MAX_LOG_LINES);
|
|
77
|
+
this.commit({ logs });
|
|
78
|
+
}
|
|
79
|
+
setLevel(level) {
|
|
80
|
+
if (this.state.level === level) return;
|
|
81
|
+
this.commit({ level });
|
|
82
|
+
}
|
|
83
|
+
setRefreshInspection(refreshInspection) {
|
|
84
|
+
if (this.state.refreshInspection === refreshInspection) return;
|
|
85
|
+
this.commit({ refreshInspection });
|
|
86
|
+
}
|
|
87
|
+
setConnected(connected, streamError) {
|
|
88
|
+
if (this.state.connected === connected && this.state.streamError === streamError) return;
|
|
89
|
+
this.commit({ connected, streamError });
|
|
90
|
+
}
|
|
91
|
+
setStats(stats) {
|
|
92
|
+
this.commit({ stats });
|
|
93
|
+
}
|
|
94
|
+
/** Empties the client's view. The server's buffer is cleared separately. */
|
|
95
|
+
clear() {
|
|
96
|
+
this.seen.clear();
|
|
97
|
+
this.commit({ records: [], logs: [], dropped: 0 });
|
|
98
|
+
}
|
|
99
|
+
reindex(records) {
|
|
100
|
+
this.seen.clear();
|
|
101
|
+
records.forEach((record, index) => this.seen.set(record.sequence, index));
|
|
102
|
+
}
|
|
103
|
+
commit(patch) {
|
|
104
|
+
this.state = { ...this.state, ...patch };
|
|
105
|
+
for (const listener of this.listeners) listener();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const debugStore = new DebugStore();
|
|
109
|
+
export {
|
|
110
|
+
DebugStore,
|
|
111
|
+
MAX_LOG_LINES,
|
|
112
|
+
MAX_RECORDS,
|
|
113
|
+
debugStore
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=debugStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debugStore.js","sources":["../../src/devtools/debugStore.ts"],"sourcesContent":["import type { DebugLevel, DebugLogLine, DebugStats, ExecutionSummary } from \"./types\";\nimport { DEFAULT_DEBUG_LEVEL } from \"./types\";\n\n/**\n * The console's memory of what the server has told it.\n *\n * It is a plain external emitter rather than a context or a query cache because\n * the fetch wrapper writes to it, and that is not a hook — it runs inside the\n * API client, below React. `useSyncExternalStore` reads it, which is the same\n * idiom `useBrowserRouter` already uses and costs no new dependency.\n *\n * Everything here is bounded and lost on reload. Records hold request and\n * response bodies; a store that survived a refresh would be a place secrets\n * accumulate silently.\n */\n\n/** Client-side ring caps, matching the server's own retention in spirit. */\nexport const MAX_RECORDS = 500;\nexport const MAX_LOG_LINES = 5000;\n\nexport type DebugStoreState = {\n /** Records oldest-first, the order they ran. */\n records: ExecutionSummary[];\n logs: DebugLogLine[];\n /** The level subsequent requests arm themselves at. */\n level: DebugLevel;\n /**\n * Whether subsequent requests also rebuild every metadata lookup they make.\n *\n * Off by default and never implied by the level: a page that re-derives every\n * field mapping and cardinality count can take seconds instead of\n * milliseconds, so it is something asked for rather than something arrived at.\n */\n refreshInspection: boolean;\n /** Live when the stream is connected; the console says so rather than looking empty. */\n connected: boolean;\n /** The last stream error, kept so a silent console can explain itself. */\n streamError?: string | undefined;\n /** What the server reports it holds, refreshed with each stats-bearing response. */\n stats?: DebugStats | undefined;\n /** How many records the client itself dropped to stay under its cap. */\n dropped: number;\n};\n\nconst EMPTY: DebugStoreState = {\n records: [],\n logs: [],\n level: DEFAULT_DEBUG_LEVEL,\n refreshInspection: false,\n connected: false,\n dropped: 0,\n};\n\nexport class DebugStore {\n private state: DebugStoreState = EMPTY;\n private listeners = new Set<() => void>();\n /** Sequence → index, so an SSE replay after a reconnect cannot double-file. */\n private seen = new Map<number, number>();\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n };\n\n getSnapshot = (): DebugStoreState => this.state;\n\n /**\n * The highest record sequence this store holds, which is what a reconnecting\n * stream resumes from. Zero means \"replay everything you still have\".\n */\n lastSequence(): number {\n const records = this.state.records;\n return records.length === 0 ? 0 : (records[records.length - 1]?.sequence ?? 0);\n }\n\n /**\n * Files a record. A record already held is replaced rather than appended:\n * the stream replays on reconnect, and the same execution arriving twice must\n * stay one row.\n */\n addRecord(record: ExecutionSummary): void {\n const existing = this.seen.get(record.sequence);\n if (existing !== undefined) {\n const records = this.state.records.slice();\n records[existing] = record;\n this.commit({ records });\n return;\n }\n const records = this.state.records.concat(record);\n let dropped = this.state.dropped;\n if (records.length > MAX_RECORDS) {\n dropped += records.length - MAX_RECORDS;\n records.splice(0, records.length - MAX_RECORDS);\n }\n this.reindex(records);\n this.commit({ records, dropped });\n }\n\n addRecords(records: ExecutionSummary[]): void {\n for (const record of records) this.addRecord(record);\n }\n\n /**\n * Appends a log line. Lines are keyed by source and sequence rather than\n * sequence alone: the request tail and the process tail are two independent\n * sequence spaces, and treating them as one would silently drop half.\n */\n addLog(line: DebugLogLine): void {\n const logs = this.state.logs.concat(line);\n if (logs.length > MAX_LOG_LINES) logs.splice(0, logs.length - MAX_LOG_LINES);\n this.commit({ logs });\n }\n\n addLogs(lines: DebugLogLine[]): void {\n if (lines.length === 0) return;\n const logs = this.state.logs.concat(lines);\n if (logs.length > MAX_LOG_LINES) logs.splice(0, logs.length - MAX_LOG_LINES);\n this.commit({ logs });\n }\n\n setLevel(level: DebugLevel): void {\n if (this.state.level === level) return;\n this.commit({ level });\n }\n\n setRefreshInspection(refreshInspection: boolean): void {\n if (this.state.refreshInspection === refreshInspection) return;\n this.commit({ refreshInspection });\n }\n\n setConnected(connected: boolean, streamError?: string): void {\n if (this.state.connected === connected && this.state.streamError === streamError) return;\n this.commit({ connected, streamError });\n }\n\n setStats(stats: DebugStats): void {\n this.commit({ stats });\n }\n\n /** Empties the client's view. The server's buffer is cleared separately. */\n clear(): void {\n this.seen.clear();\n this.commit({ records: [], logs: [], dropped: 0 });\n }\n\n private reindex(records: ExecutionSummary[]): void {\n this.seen.clear();\n records.forEach((record, index) => this.seen.set(record.sequence, index));\n }\n\n private commit(patch: Partial<DebugStoreState>): void {\n this.state = { ...this.state, ...patch };\n for (const listener of this.listeners) listener();\n }\n}\n\n/**\n * The store the dock and the fetch wrapper share.\n *\n * A module-level instance, deliberately: the wrapper is handed to the API\n * client at construction, long before any component mounts, so there is no\n * provider it could read a per-tree store from.\n */\nexport const debugStore = new DebugStore();\n"],"names":["records"],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const types = require("./types.cjs");
|
|
4
|
+
const DOCK_PARAM = "__debug_open";
|
|
5
|
+
const TAB_PARAM = "__debug_tab";
|
|
6
|
+
const LEVEL_PARAM = "__debug_level";
|
|
7
|
+
const DEFAULT_DOCK_STATE = {
|
|
8
|
+
open: false,
|
|
9
|
+
tab: "queries",
|
|
10
|
+
level: types.DEFAULT_DEBUG_LEVEL
|
|
11
|
+
};
|
|
12
|
+
function readDockState(search = currentSearch()) {
|
|
13
|
+
const params = new URLSearchParams(search);
|
|
14
|
+
const tab = params.get(TAB_PARAM);
|
|
15
|
+
const level = params.get(LEVEL_PARAM);
|
|
16
|
+
return {
|
|
17
|
+
open: params.get(DOCK_PARAM) === "1",
|
|
18
|
+
tab: isTab(tab) ? tab : DEFAULT_DOCK_STATE.tab,
|
|
19
|
+
level: level ?? DEFAULT_DOCK_STATE.level
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function writeDockState(state) {
|
|
23
|
+
var _a;
|
|
24
|
+
if (typeof window === "undefined" || !((_a = window.history) == null ? void 0 : _a.replaceState)) return;
|
|
25
|
+
const url = new URL(window.location.href);
|
|
26
|
+
setOrDelete(url.searchParams, DOCK_PARAM, state.open ? "1" : null);
|
|
27
|
+
setOrDelete(url.searchParams, TAB_PARAM, state.open && state.tab !== "queries" ? state.tab : null);
|
|
28
|
+
setOrDelete(
|
|
29
|
+
url.searchParams,
|
|
30
|
+
LEVEL_PARAM,
|
|
31
|
+
state.open && state.level !== types.DEFAULT_DEBUG_LEVEL ? state.level : null
|
|
32
|
+
);
|
|
33
|
+
window.history.replaceState(window.history.state, "", url.toString());
|
|
34
|
+
}
|
|
35
|
+
function setOrDelete(params, key, value) {
|
|
36
|
+
if (value === null) params.delete(key);
|
|
37
|
+
else params.set(key, value);
|
|
38
|
+
}
|
|
39
|
+
function isTab(value) {
|
|
40
|
+
return value !== null && types.DEBUG_TABS.includes(value);
|
|
41
|
+
}
|
|
42
|
+
function currentSearch() {
|
|
43
|
+
return typeof window === "undefined" ? "" : window.location.search;
|
|
44
|
+
}
|
|
45
|
+
exports.DEFAULT_DOCK_STATE = DEFAULT_DOCK_STATE;
|
|
46
|
+
exports.DOCK_PARAM = DOCK_PARAM;
|
|
47
|
+
exports.LEVEL_PARAM = LEVEL_PARAM;
|
|
48
|
+
exports.TAB_PARAM = TAB_PARAM;
|
|
49
|
+
exports.readDockState = readDockState;
|
|
50
|
+
exports.writeDockState = writeDockState;
|
|
51
|
+
//# sourceMappingURL=dockState.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dockState.cjs","sources":["../../src/devtools/dockState.ts"],"sourcesContent":["import { DEBUG_TABS, DEFAULT_DEBUG_LEVEL, type DebugLevel, type DebugTab } from \"./types\";\n\n/**\n * Open/closed, the active tab and the capture level live in the URL.\n *\n * A broken state is worth sharing: \"open this profile with the console on\n * Network at trace2\" is the whole message, and a link is how it gets sent.\n * Height stays in localStorage — it is a preference about this screen, not a\n * fact about what is being debugged.\n *\n * The `__` prefix follows the app's own reserved-parameter convention, so these\n * are never mistaken for filter params, and they are written with\n * `history.replaceState` so opening a tab does not fill the back button.\n */\n\nexport const DOCK_PARAM = \"__debug_open\";\nexport const TAB_PARAM = \"__debug_tab\";\nexport const LEVEL_PARAM = \"__debug_level\";\n\nexport type DockState = {\n open: boolean;\n tab: DebugTab;\n level: DebugLevel;\n};\n\nexport const DEFAULT_DOCK_STATE: DockState = {\n open: false,\n tab: \"queries\",\n level: DEFAULT_DEBUG_LEVEL,\n};\n\nexport function readDockState(search = currentSearch()): DockState {\n const params = new URLSearchParams(search);\n const tab = params.get(TAB_PARAM);\n const level = params.get(LEVEL_PARAM);\n return {\n open: params.get(DOCK_PARAM) === \"1\",\n tab: isTab(tab) ? tab : DEFAULT_DOCK_STATE.tab,\n level: (level as DebugLevel | null) ?? DEFAULT_DOCK_STATE.level,\n };\n}\n\n/**\n * Writes the dock's state back to the URL, dropping the defaults.\n *\n * A closed console leaves no trace in the address bar — the ordinary case must\n * not make every link the user copies carry debug parameters.\n */\nexport function writeDockState(state: DockState): void {\n if (typeof window === \"undefined\" || !window.history?.replaceState) return;\n const url = new URL(window.location.href);\n setOrDelete(url.searchParams, DOCK_PARAM, state.open ? \"1\" : null);\n setOrDelete(url.searchParams, TAB_PARAM, state.open && state.tab !== \"queries\" ? state.tab : null);\n setOrDelete(\n url.searchParams,\n LEVEL_PARAM,\n state.open && state.level !== DEFAULT_DEBUG_LEVEL ? state.level : null,\n );\n window.history.replaceState(window.history.state, \"\", url.toString());\n}\n\nfunction setOrDelete(params: URLSearchParams, key: string, value: string | null): void {\n if (value === null) params.delete(key);\n else params.set(key, value);\n}\n\nfunction isTab(value: string | null): value is DebugTab {\n return value !== null && (DEBUG_TABS as readonly string[]).includes(value);\n}\n\nfunction currentSearch(): string {\n return typeof window === \"undefined\" ? \"\" : window.location.search;\n}\n"],"names":["DEFAULT_DEBUG_LEVEL","DEBUG_TABS"],"mappings":";;;AAeO,MAAM,aAAa;AACnB,MAAM,YAAY;AAClB,MAAM,cAAc;AAQpB,MAAM,qBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAOA,MAAAA;AACT;AAEO,SAAS,cAAc,SAAS,iBAA4B;AACjE,QAAM,SAAS,IAAI,gBAAgB,MAAM;AACzC,QAAM,MAAM,OAAO,IAAI,SAAS;AAChC,QAAM,QAAQ,OAAO,IAAI,WAAW;AACpC,SAAO;AAAA,IACL,MAAM,OAAO,IAAI,UAAU,MAAM;AAAA,IACjC,KAAK,MAAM,GAAG,IAAI,MAAM,mBAAmB;AAAA,IAC3C,OAAQ,SAA+B,mBAAmB;AAAA,EAAA;AAE9D;AAQO,SAAS,eAAe,OAAwB;;AACrD,MAAI,OAAO,WAAW,eAAe,GAAC,YAAO,YAAP,mBAAgB,cAAc;AACpE,QAAM,MAAM,IAAI,IAAI,OAAO,SAAS,IAAI;AACxC,cAAY,IAAI,cAAc,YAAY,MAAM,OAAO,MAAM,IAAI;AACjE,cAAY,IAAI,cAAc,WAAW,MAAM,QAAQ,MAAM,QAAQ,YAAY,MAAM,MAAM,IAAI;AACjG;AAAA,IACE,IAAI;AAAA,IACJ;AAAA,IACA,MAAM,QAAQ,MAAM,UAAUA,MAAAA,sBAAsB,MAAM,QAAQ;AAAA,EAAA;AAEpE,SAAO,QAAQ,aAAa,OAAO,QAAQ,OAAO,IAAI,IAAI,UAAU;AACtE;AAEA,SAAS,YAAY,QAAyB,KAAa,OAA4B;AACrF,MAAI,UAAU,KAAM,QAAO,OAAO,GAAG;AAAA,MAChC,QAAO,IAAI,KAAK,KAAK;AAC5B;AAEA,SAAS,MAAM,OAAyC;AACtD,SAAO,UAAU,QAASC,iBAAiC,SAAS,KAAK;AAC3E;AAEA,SAAS,gBAAwB;AAC/B,SAAO,OAAO,WAAW,cAAc,KAAK,OAAO,SAAS;AAC9D;;;;;;;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { DebugLevel, DebugTab } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Open/closed, the active tab and the capture level live in the URL.
|
|
4
|
+
*
|
|
5
|
+
* A broken state is worth sharing: "open this profile with the console on
|
|
6
|
+
* Network at trace2" is the whole message, and a link is how it gets sent.
|
|
7
|
+
* Height stays in localStorage — it is a preference about this screen, not a
|
|
8
|
+
* fact about what is being debugged.
|
|
9
|
+
*
|
|
10
|
+
* The `__` prefix follows the app's own reserved-parameter convention, so these
|
|
11
|
+
* are never mistaken for filter params, and they are written with
|
|
12
|
+
* `history.replaceState` so opening a tab does not fill the back button.
|
|
13
|
+
*/
|
|
14
|
+
export declare const DOCK_PARAM = "__debug_open";
|
|
15
|
+
export declare const TAB_PARAM = "__debug_tab";
|
|
16
|
+
export declare const LEVEL_PARAM = "__debug_level";
|
|
17
|
+
export type DockState = {
|
|
18
|
+
open: boolean;
|
|
19
|
+
tab: DebugTab;
|
|
20
|
+
level: DebugLevel;
|
|
21
|
+
};
|
|
22
|
+
export declare const DEFAULT_DOCK_STATE: DockState;
|
|
23
|
+
export declare function readDockState(search?: string): DockState;
|
|
24
|
+
/**
|
|
25
|
+
* Writes the dock's state back to the URL, dropping the defaults.
|
|
26
|
+
*
|
|
27
|
+
* A closed console leaves no trace in the address bar — the ordinary case must
|
|
28
|
+
* not make every link the user copies carry debug parameters.
|
|
29
|
+
*/
|
|
30
|
+
export declare function writeDockState(state: DockState): void;
|
|
31
|
+
//# sourceMappingURL=dockState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dockState.d.ts","sourceRoot":"","sources":["../../src/devtools/dockState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1F;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,UAAU,iBAAiB,CAAC;AACzC,eAAO,MAAM,SAAS,gBAAgB,CAAC;AACvC,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAE3C,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAIhC,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,SAAkB,GAAG,SAAS,CASjE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAWrD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { DEFAULT_DEBUG_LEVEL, DEBUG_TABS } from "./types.js";
|
|
2
|
+
const DOCK_PARAM = "__debug_open";
|
|
3
|
+
const TAB_PARAM = "__debug_tab";
|
|
4
|
+
const LEVEL_PARAM = "__debug_level";
|
|
5
|
+
const DEFAULT_DOCK_STATE = {
|
|
6
|
+
open: false,
|
|
7
|
+
tab: "queries",
|
|
8
|
+
level: DEFAULT_DEBUG_LEVEL
|
|
9
|
+
};
|
|
10
|
+
function readDockState(search = currentSearch()) {
|
|
11
|
+
const params = new URLSearchParams(search);
|
|
12
|
+
const tab = params.get(TAB_PARAM);
|
|
13
|
+
const level = params.get(LEVEL_PARAM);
|
|
14
|
+
return {
|
|
15
|
+
open: params.get(DOCK_PARAM) === "1",
|
|
16
|
+
tab: isTab(tab) ? tab : DEFAULT_DOCK_STATE.tab,
|
|
17
|
+
level: level ?? DEFAULT_DOCK_STATE.level
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function writeDockState(state) {
|
|
21
|
+
var _a;
|
|
22
|
+
if (typeof window === "undefined" || !((_a = window.history) == null ? void 0 : _a.replaceState)) return;
|
|
23
|
+
const url = new URL(window.location.href);
|
|
24
|
+
setOrDelete(url.searchParams, DOCK_PARAM, state.open ? "1" : null);
|
|
25
|
+
setOrDelete(url.searchParams, TAB_PARAM, state.open && state.tab !== "queries" ? state.tab : null);
|
|
26
|
+
setOrDelete(
|
|
27
|
+
url.searchParams,
|
|
28
|
+
LEVEL_PARAM,
|
|
29
|
+
state.open && state.level !== DEFAULT_DEBUG_LEVEL ? state.level : null
|
|
30
|
+
);
|
|
31
|
+
window.history.replaceState(window.history.state, "", url.toString());
|
|
32
|
+
}
|
|
33
|
+
function setOrDelete(params, key, value) {
|
|
34
|
+
if (value === null) params.delete(key);
|
|
35
|
+
else params.set(key, value);
|
|
36
|
+
}
|
|
37
|
+
function isTab(value) {
|
|
38
|
+
return value !== null && DEBUG_TABS.includes(value);
|
|
39
|
+
}
|
|
40
|
+
function currentSearch() {
|
|
41
|
+
return typeof window === "undefined" ? "" : window.location.search;
|
|
42
|
+
}
|
|
43
|
+
export {
|
|
44
|
+
DEFAULT_DOCK_STATE,
|
|
45
|
+
DOCK_PARAM,
|
|
46
|
+
LEVEL_PARAM,
|
|
47
|
+
TAB_PARAM,
|
|
48
|
+
readDockState,
|
|
49
|
+
writeDockState
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=dockState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dockState.js","sources":["../../src/devtools/dockState.ts"],"sourcesContent":["import { DEBUG_TABS, DEFAULT_DEBUG_LEVEL, type DebugLevel, type DebugTab } from \"./types\";\n\n/**\n * Open/closed, the active tab and the capture level live in the URL.\n *\n * A broken state is worth sharing: \"open this profile with the console on\n * Network at trace2\" is the whole message, and a link is how it gets sent.\n * Height stays in localStorage — it is a preference about this screen, not a\n * fact about what is being debugged.\n *\n * The `__` prefix follows the app's own reserved-parameter convention, so these\n * are never mistaken for filter params, and they are written with\n * `history.replaceState` so opening a tab does not fill the back button.\n */\n\nexport const DOCK_PARAM = \"__debug_open\";\nexport const TAB_PARAM = \"__debug_tab\";\nexport const LEVEL_PARAM = \"__debug_level\";\n\nexport type DockState = {\n open: boolean;\n tab: DebugTab;\n level: DebugLevel;\n};\n\nexport const DEFAULT_DOCK_STATE: DockState = {\n open: false,\n tab: \"queries\",\n level: DEFAULT_DEBUG_LEVEL,\n};\n\nexport function readDockState(search = currentSearch()): DockState {\n const params = new URLSearchParams(search);\n const tab = params.get(TAB_PARAM);\n const level = params.get(LEVEL_PARAM);\n return {\n open: params.get(DOCK_PARAM) === \"1\",\n tab: isTab(tab) ? tab : DEFAULT_DOCK_STATE.tab,\n level: (level as DebugLevel | null) ?? DEFAULT_DOCK_STATE.level,\n };\n}\n\n/**\n * Writes the dock's state back to the URL, dropping the defaults.\n *\n * A closed console leaves no trace in the address bar — the ordinary case must\n * not make every link the user copies carry debug parameters.\n */\nexport function writeDockState(state: DockState): void {\n if (typeof window === \"undefined\" || !window.history?.replaceState) return;\n const url = new URL(window.location.href);\n setOrDelete(url.searchParams, DOCK_PARAM, state.open ? \"1\" : null);\n setOrDelete(url.searchParams, TAB_PARAM, state.open && state.tab !== \"queries\" ? state.tab : null);\n setOrDelete(\n url.searchParams,\n LEVEL_PARAM,\n state.open && state.level !== DEFAULT_DEBUG_LEVEL ? state.level : null,\n );\n window.history.replaceState(window.history.state, \"\", url.toString());\n}\n\nfunction setOrDelete(params: URLSearchParams, key: string, value: string | null): void {\n if (value === null) params.delete(key);\n else params.set(key, value);\n}\n\nfunction isTab(value: string | null): value is DebugTab {\n return value !== null && (DEBUG_TABS as readonly string[]).includes(value);\n}\n\nfunction currentSearch(): string {\n return typeof window === \"undefined\" ? \"\" : window.location.search;\n}\n"],"names":[],"mappings":";AAeO,MAAM,aAAa;AACnB,MAAM,YAAY;AAClB,MAAM,cAAc;AAQpB,MAAM,qBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AACT;AAEO,SAAS,cAAc,SAAS,iBAA4B;AACjE,QAAM,SAAS,IAAI,gBAAgB,MAAM;AACzC,QAAM,MAAM,OAAO,IAAI,SAAS;AAChC,QAAM,QAAQ,OAAO,IAAI,WAAW;AACpC,SAAO;AAAA,IACL,MAAM,OAAO,IAAI,UAAU,MAAM;AAAA,IACjC,KAAK,MAAM,GAAG,IAAI,MAAM,mBAAmB;AAAA,IAC3C,OAAQ,SAA+B,mBAAmB;AAAA,EAAA;AAE9D;AAQO,SAAS,eAAe,OAAwB;;AACrD,MAAI,OAAO,WAAW,eAAe,GAAC,YAAO,YAAP,mBAAgB,cAAc;AACpE,QAAM,MAAM,IAAI,IAAI,OAAO,SAAS,IAAI;AACxC,cAAY,IAAI,cAAc,YAAY,MAAM,OAAO,MAAM,IAAI;AACjE,cAAY,IAAI,cAAc,WAAW,MAAM,QAAQ,MAAM,QAAQ,YAAY,MAAM,MAAM,IAAI;AACjG;AAAA,IACE,IAAI;AAAA,IACJ;AAAA,IACA,MAAM,QAAQ,MAAM,UAAU,sBAAsB,MAAM,QAAQ;AAAA,EAAA;AAEpE,SAAO,QAAQ,aAAa,OAAO,QAAQ,OAAO,IAAI,IAAI,UAAU;AACtE;AAEA,SAAS,YAAY,QAAyB,KAAa,OAA4B;AACrF,MAAI,UAAU,KAAM,QAAO,OAAO,GAAG;AAAA,MAChC,QAAO,IAAI,KAAK,KAAK;AAC5B;AAEA,SAAS,MAAM,OAAyC;AACtD,SAAO,UAAU,QAAS,WAAiC,SAAS,KAAK;AAC3E;AAEA,SAAS,gBAAwB;AAC/B,SAAO,OAAO,WAAW,cAAc,KAAK,OAAO,SAAS;AAC9D;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const LogsTable = require("../../data/LogsTable.cjs");
|
|
6
|
+
function ConsoleTab({ lines, recordId, search }) {
|
|
7
|
+
const rows = react.useMemo(() => {
|
|
8
|
+
const scoped = recordId ? lines.filter((line) => line.recordId === recordId) : lines;
|
|
9
|
+
return scoped.map(toLogRecord);
|
|
10
|
+
}, [lines, recordId]);
|
|
11
|
+
if (rows.length === 0) {
|
|
12
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-density-6 text-center text-muted-foreground text-sm", children: recordId ? "This capture logged nothing." : "No server log lines yet. The tail starts when the console connects." });
|
|
13
|
+
}
|
|
14
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
15
|
+
LogsTable.LogsTable,
|
|
16
|
+
{
|
|
17
|
+
logs: rows,
|
|
18
|
+
...search === void 0 ? { showGlobalFilter: true } : { globalFilter: search },
|
|
19
|
+
showRawDetails: true
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
function toLogRecord(line) {
|
|
24
|
+
return {
|
|
25
|
+
timestamp: line.time,
|
|
26
|
+
level: line.level,
|
|
27
|
+
logger: line.logger ?? "",
|
|
28
|
+
message: line.message,
|
|
29
|
+
tags: [line.source, line.event, line.recordId ? `record:${line.recordId.slice(0, 8)}` : ""].filter(
|
|
30
|
+
Boolean
|
|
31
|
+
),
|
|
32
|
+
...line.values
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
exports.ConsoleTab = ConsoleTab;
|
|
36
|
+
//# sourceMappingURL=ConsoleTab.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleTab.cjs","sources":["../../../src/devtools/tabs/ConsoleTab.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { LogsTable } from \"../../data/LogsTable\";\nimport type { DebugLogLine } from \"../types\";\n\n/**\n * The server's own log, live in the browser.\n *\n * Two sources are merged here, and the seam is labelled rather than hidden.\n * A `request` line was captured structurally, with its values intact, at the\n * level the console armed; a `process` line was scraped from the writer the\n * logger was already using and has been rendered to text by the time it\n * arrives. Presenting them as one undifferentiated stream would imply the\n * second is as trustworthy as the first.\n */\n\nexport type ConsoleTabProps = {\n lines: DebugLogLine[];\n /** Show only lines belonging to this record. */\n recordId?: string | undefined;\n search?: string | undefined;\n};\n\nexport function ConsoleTab({ lines, recordId, search }: ConsoleTabProps) {\n const rows = useMemo(() => {\n const scoped = recordId ? lines.filter((line) => line.recordId === recordId) : lines;\n return scoped.map(toLogRecord);\n }, [lines, recordId]);\n\n if (rows.length === 0) {\n return (\n <div className=\"p-density-6 text-center text-muted-foreground text-sm\">\n {recordId\n ? \"This capture logged nothing.\"\n : \"No server log lines yet. The tail starts when the console connects.\"}\n </div>\n );\n }\n\n return (\n <LogsTable\n logs={rows}\n {...(search === undefined ? { showGlobalFilter: true } : { globalFilter: search })}\n showRawDetails\n />\n );\n}\n\n/**\n * Maps a line onto the canonical log row LogsTable normalizes.\n *\n * `seam` rather than an extra column: the tag list is where a row's provenance\n * already lives, and a column that reads \"request\" on most rows and \"process\"\n * on the rest would cost width to say very little.\n */\nfunction toLogRecord(line: DebugLogLine): Record<string, unknown> {\n return {\n timestamp: line.time,\n level: line.level,\n logger: line.logger ?? \"\",\n message: line.message,\n tags: [line.source, line.event, line.recordId ? `record:${line.recordId.slice(0, 8)}` : \"\"].filter(\n Boolean,\n ),\n ...line.values,\n };\n}\n"],"names":["useMemo","jsx","LogsTable"],"mappings":";;;;;AAsBO,SAAS,WAAW,EAAE,OAAO,UAAU,UAA2B;AACvE,QAAM,OAAOA,MAAAA,QAAQ,MAAM;AACzB,UAAM,SAAS,WAAW,MAAM,OAAO,CAAC,SAAS,KAAK,aAAa,QAAQ,IAAI;AAC/E,WAAO,OAAO,IAAI,WAAW;AAAA,EAC/B,GAAG,CAAC,OAAO,QAAQ,CAAC;AAEpB,MAAI,KAAK,WAAW,GAAG;AACrB,0CACG,OAAA,EAAI,WAAU,yDACZ,UAAA,WACG,iCACA,uEACN;AAAA,EAEJ;AAEA,SACEC,2BAAAA;AAAAA,IAACC,UAAAA;AAAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACL,GAAI,WAAW,SAAY,EAAE,kBAAkB,SAAS,EAAE,cAAc,OAAA;AAAA,MACzE,gBAAc;AAAA,IAAA;AAAA,EAAA;AAGpB;AASA,SAAS,YAAY,MAA6C;AAChE,SAAO;AAAA,IACL,WAAW,KAAK;AAAA,IAChB,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK,UAAU;AAAA,IACvB,SAAS,KAAK;AAAA,IACd,MAAM,CAAC,KAAK,QAAQ,KAAK,OAAO,KAAK,WAAW,UAAU,KAAK,SAAS,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;AAAA,MAC1F;AAAA,IAAA;AAAA,IAEF,GAAG,KAAK;AAAA,EAAA;AAEZ;;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DebugLogLine } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* The server's own log, live in the browser.
|
|
4
|
+
*
|
|
5
|
+
* Two sources are merged here, and the seam is labelled rather than hidden.
|
|
6
|
+
* A `request` line was captured structurally, with its values intact, at the
|
|
7
|
+
* level the console armed; a `process` line was scraped from the writer the
|
|
8
|
+
* logger was already using and has been rendered to text by the time it
|
|
9
|
+
* arrives. Presenting them as one undifferentiated stream would imply the
|
|
10
|
+
* second is as trustworthy as the first.
|
|
11
|
+
*/
|
|
12
|
+
export type ConsoleTabProps = {
|
|
13
|
+
lines: DebugLogLine[];
|
|
14
|
+
/** Show only lines belonging to this record. */
|
|
15
|
+
recordId?: string | undefined;
|
|
16
|
+
search?: string | undefined;
|
|
17
|
+
};
|
|
18
|
+
export declare function ConsoleTab({ lines, recordId, search }: ConsoleTabProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=ConsoleTab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleTab.d.ts","sourceRoot":"","sources":["../../../src/devtools/tabs/ConsoleTab.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;;;;;GASG;AAEH,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,eAAe,2CAuBtE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { LogsTable } from "../../data/LogsTable.js";
|
|
4
|
+
function ConsoleTab({ lines, recordId, search }) {
|
|
5
|
+
const rows = useMemo(() => {
|
|
6
|
+
const scoped = recordId ? lines.filter((line) => line.recordId === recordId) : lines;
|
|
7
|
+
return scoped.map(toLogRecord);
|
|
8
|
+
}, [lines, recordId]);
|
|
9
|
+
if (rows.length === 0) {
|
|
10
|
+
return /* @__PURE__ */ jsx("div", { className: "p-density-6 text-center text-muted-foreground text-sm", children: recordId ? "This capture logged nothing." : "No server log lines yet. The tail starts when the console connects." });
|
|
11
|
+
}
|
|
12
|
+
return /* @__PURE__ */ jsx(
|
|
13
|
+
LogsTable,
|
|
14
|
+
{
|
|
15
|
+
logs: rows,
|
|
16
|
+
...search === void 0 ? { showGlobalFilter: true } : { globalFilter: search },
|
|
17
|
+
showRawDetails: true
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
function toLogRecord(line) {
|
|
22
|
+
return {
|
|
23
|
+
timestamp: line.time,
|
|
24
|
+
level: line.level,
|
|
25
|
+
logger: line.logger ?? "",
|
|
26
|
+
message: line.message,
|
|
27
|
+
tags: [line.source, line.event, line.recordId ? `record:${line.recordId.slice(0, 8)}` : ""].filter(
|
|
28
|
+
Boolean
|
|
29
|
+
),
|
|
30
|
+
...line.values
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
ConsoleTab
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=ConsoleTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleTab.js","sources":["../../../src/devtools/tabs/ConsoleTab.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { LogsTable } from \"../../data/LogsTable\";\nimport type { DebugLogLine } from \"../types\";\n\n/**\n * The server's own log, live in the browser.\n *\n * Two sources are merged here, and the seam is labelled rather than hidden.\n * A `request` line was captured structurally, with its values intact, at the\n * level the console armed; a `process` line was scraped from the writer the\n * logger was already using and has been rendered to text by the time it\n * arrives. Presenting them as one undifferentiated stream would imply the\n * second is as trustworthy as the first.\n */\n\nexport type ConsoleTabProps = {\n lines: DebugLogLine[];\n /** Show only lines belonging to this record. */\n recordId?: string | undefined;\n search?: string | undefined;\n};\n\nexport function ConsoleTab({ lines, recordId, search }: ConsoleTabProps) {\n const rows = useMemo(() => {\n const scoped = recordId ? lines.filter((line) => line.recordId === recordId) : lines;\n return scoped.map(toLogRecord);\n }, [lines, recordId]);\n\n if (rows.length === 0) {\n return (\n <div className=\"p-density-6 text-center text-muted-foreground text-sm\">\n {recordId\n ? \"This capture logged nothing.\"\n : \"No server log lines yet. The tail starts when the console connects.\"}\n </div>\n );\n }\n\n return (\n <LogsTable\n logs={rows}\n {...(search === undefined ? { showGlobalFilter: true } : { globalFilter: search })}\n showRawDetails\n />\n );\n}\n\n/**\n * Maps a line onto the canonical log row LogsTable normalizes.\n *\n * `seam` rather than an extra column: the tag list is where a row's provenance\n * already lives, and a column that reads \"request\" on most rows and \"process\"\n * on the rest would cost width to say very little.\n */\nfunction toLogRecord(line: DebugLogLine): Record<string, unknown> {\n return {\n timestamp: line.time,\n level: line.level,\n logger: line.logger ?? \"\",\n message: line.message,\n tags: [line.source, line.event, line.recordId ? `record:${line.recordId.slice(0, 8)}` : \"\"].filter(\n Boolean,\n ),\n ...line.values,\n };\n}\n"],"names":[],"mappings":";;;AAsBO,SAAS,WAAW,EAAE,OAAO,UAAU,UAA2B;AACvE,QAAM,OAAO,QAAQ,MAAM;AACzB,UAAM,SAAS,WAAW,MAAM,OAAO,CAAC,SAAS,KAAK,aAAa,QAAQ,IAAI;AAC/E,WAAO,OAAO,IAAI,WAAW;AAAA,EAC/B,GAAG,CAAC,OAAO,QAAQ,CAAC;AAEpB,MAAI,KAAK,WAAW,GAAG;AACrB,+BACG,OAAA,EAAI,WAAU,yDACZ,UAAA,WACG,iCACA,uEACN;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACL,GAAI,WAAW,SAAY,EAAE,kBAAkB,SAAS,EAAE,cAAc,OAAA;AAAA,MACzE,gBAAc;AAAA,IAAA;AAAA,EAAA;AAGpB;AASA,SAAS,YAAY,MAA6C;AAChE,SAAO;AAAA,IACL,WAAW,KAAK;AAAA,IAChB,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK,UAAU;AAAA,IACvB,SAAS,KAAK;AAAA,IACd,MAAM,CAAC,KAAK,QAAQ,KAAK,OAAO,KAAK,WAAW,UAAU,KAAK,SAAS,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;AAAA,MAC1F;AAAA,IAAA;AAAA,IAEF,GAAG,KAAK;AAAA,EAAA;AAEZ;"}
|