import { loader } from 'fumadocs-core/source'; import { lucideIconsPlugin } from 'fumadocs-core/source/lucide-icons'; import { docsContentRoute, docsImageRoute, docsRoute } from './shared'; import { defineDocs } from 'fumadocs-mdx/macro'; import { metaSchema, pageSchema } from 'fumadocs-core/source/schema'; import { i18n } from './i18n'; const docs = defineDocs({ dir: 'content/docs', docs: { schema: pageSchema, postprocess: { includeProcessedMarkdown: true, }, }, meta: { schema: metaSchema, }, }); // See https://fumadocs.dev/docs/headless/source-api for more info export const source = loader({ baseUrl: docsRoute, source: docs.toFumadocsSource(), plugins: [lucideIconsPlugin()], i18n, }); /** Locale URL prefix segment; all locales are explicit (hideLocale: 'never'). */ function localeSegment(page: (typeof source)['$inferPage']): string | undefined { return page.locale; } export function getPageImageUrl(page: (typeof source)['$inferPage']) { const segments = [...page.slugs, 'image.png']; return { segments, url: '/' + [localeSegment(page), ...docsImageRoute.split('/'), ...segments].filter(Boolean).join('/'), }; } export function getPageMarkdownUrl(page: (typeof source)['$inferPage']) { const segments = [...page.slugs, 'content.md']; return { segments, url: '/' + [localeSegment(page), ...docsContentRoute.split('/'), ...segments].filter(Boolean).join('/'), }; } export async function getLLMText(page: (typeof source)['$inferPage']) { const processed = await page.data.getText('processed'); return `# ${page.data.title} (${page.url}) ${processed}`; }