import { docs, versions } from '../.source/server'; import { loader } from 'fumadocs-core/source'; import { lucideIconsPlugin } from 'fumadocs-core/source/lucide-icons'; const DOCS_BASE_PATH = '/docs'; // See https://fumadocs.dev/docs/headless/source-api for more info export const source = loader({ baseUrl: '/', source: docs.toFumadocsSource(), plugins: [lucideIconsPlugin()], }); export const versionSource = loader({ baseUrl: '/', source: versions.toFumadocsSource(), plugins: [lucideIconsPlugin()], }); type LatestPage = ReturnType[number]; export type DocPage = | LatestPage | ReturnType[number]; export function getPage(slugs: string[] | undefined) { const safeSlugs = slugs || []; // If the first slug matches a known version pattern (e.g., starts with 'v' and is in our list), use versionSource // For simplicity, we check if the page exists in versionSource first if it looks like a version if (safeSlugs.length > 0 && safeSlugs[0].startsWith('v')) { const page = versionSource.getPage(safeSlugs); if (page) return { page, source: versionSource }; } return { page: source.getPage(safeSlugs), source: source }; } export function getAllDocPages(): DocPage[] { return [...source.getPages(), ...versionSource.getPages()]; } export function generateAllDocParams() { return [...source.generateParams(), ...versionSource.generateParams()]; } export function getPageImage(page: DocPage) { const segments = [...page.slugs, 'image.png']; return { segments, url: `${DOCS_BASE_PATH}/og/docs/${segments.join('/')}`, }; } export async function getLLMText(page: LatestPage) { const processed = await page.data.getText('processed'); return `# ${page.data.title} ${processed}`; }