import { loader } from 'fumadocs-core/source'; import { icons } from 'lucide-react'; import { createElement } from 'react'; import { i18n } from '@/lib/i18n'; import { docs } from '@/.source/server'; const pageIcons: Record = { 'what-is-dbx': 'BookOpen', changelog: 'History', 'getting-started': 'Rocket', databases: 'Database', 'query-editor': 'SquareTerminal', 'data-grid': 'Table2', 'schema-browser': 'Network', redis: 'KeyRound', mongodb: 'Braces', 'object-browser': 'Package', 'schema-diff': 'GitCompareArrows', 'data-transfer': 'ArrowRightLeft', 'table-structure': 'TableProperties', 'field-lineage': 'GitBranch', 'table-import': 'Upload', 'sql-file': 'FileCode2', 'database-export': 'Download', 'sql-snippets': 'ScrollText', 'ai-assistant': 'Bot', cli: 'Terminal', mcp: 'Cable', plugins: 'Plug', 'driver-management': 'Package', 'keyboard-shortcuts': 'Keyboard', 'connection-import': 'Import', 'config-export': 'FileUp', 'ssh-tunnel': 'ShieldCheck', }; export const source = loader({ baseUrl: '/docs', source: docs.toFumadocsSource(), i18n, plugins: [ { name: 'dbx-sidebar-icons', transformPageTree: { file(node) { const slug = node.url.split('/').filter(Boolean).at(-1); const iconName = slug ? pageIcons[slug] : undefined; const Icon = iconName ? icons[iconName] : undefined; if (!Icon) return node; return { ...node, icon: createElement(Icon, { 'aria-hidden': true, className: 'size-4', strokeWidth: 2, }), }; }, }, }, ], });