source.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { docs } from 'collections/server';
  2. import { loader } from 'fumadocs-core/source';
  3. import { lucideIconsPlugin } from 'fumadocs-core/source/lucide-icons';
  4. import { openapiPlugin } from 'fumadocs-openapi/server';
  5. import { i18n } from '@/lib/i18n';
  6. import { docsContentRoute, docsImageRoute, docsRoute } from './shared';
  7. // See https://fumadocs.dev/docs/headless/source-api for more info.
  8. // `i18n` builds one page tree per language; untranslated pages fall back to en.
  9. // `openapiPlugin` adds HTTP-method badges to generated API reference pages.
  10. export const source = loader({
  11. i18n,
  12. baseUrl: docsRoute,
  13. source: docs.toFumadocsSource(),
  14. plugins: [lucideIconsPlugin(), openapiPlugin()],
  15. });
  16. export function getPageImage(page: (typeof source)['$inferPage']) {
  17. const segments = [...page.slugs, 'image.png'];
  18. return {
  19. segments,
  20. url: `${docsImageRoute}/${segments.join('/')}`,
  21. };
  22. }
  23. export function getPageMarkdownUrl(page: (typeof source)['$inferPage']) {
  24. const segments = [...page.slugs, 'content.md'];
  25. return {
  26. segments,
  27. url: `${docsContentRoute}/${segments.join('/')}`,
  28. };
  29. }
  30. export async function getLLMText(page: (typeof source)['$inferPage']) {
  31. const processed = await page.data.getText('processed');
  32. return `# ${page.data.title} (${page.url})
  33. ${processed}`;
  34. }