UNPKG

@signalwire/docusaurus-plugin-llms-txt

Version:

Generate Markdown versions of Docusaurus HTML pages and an llms.txt index file

46 lines (45 loc) 1.97 kB
/** * llms.txt content generation * Build complete llms.txt content from processed documents */ import { getContentConfig } from '../config'; import { ROOT_ROUTE_PATH, INDEX_ROUTE_PATH, DEFAULT_SITE_TITLE, } from '../constants'; import { buildDocumentTree } from '../organization/tree-builder'; import { renderTreeAsMarkdown } from '../organization/tree-renderer'; /** * Build complete llms.txt content from processed documents * @internal */ export function buildLlmsTxtContent(docs, config, siteConfig) { const tree = buildDocumentTree(docs, config); const rootDoc = docs.find((doc) => doc.routePath === ROOT_ROUTE_PATH || doc.routePath === INDEX_ROUTE_PATH); // Generate configuration values const documentTitle = config.siteTitle ?? siteConfig.title ?? rootDoc?.title ?? DEFAULT_SITE_TITLE; const enableDescriptions = config.enableDescriptions !== false; const contentConfig = getContentConfig(config); const useRelativePaths = contentConfig.relativePaths; const siteUrl = siteConfig.url + (siteConfig.baseUrl !== '/' ? siteConfig.baseUrl : ''); // Build content sections let content = `# ${documentTitle}\n\n`; // Add description if enabled and available if (enableDescriptions) { const description = config.siteDescription ?? rootDoc?.description; if (description) { content += `> ${description}\n\n`; } } // Add main content content += renderTreeAsMarkdown(tree, 2, true, siteUrl, useRelativePaths, contentConfig.enableMarkdownFiles, enableDescriptions); // Add optional links if configured if (config.optionalLinks?.length) { content += `\n## Optional\n`; for (const link of config.optionalLinks) { const descPart = enableDescriptions && link.description ? `: ${link.description}` : ''; content += `- [${link.title}](${link.url})${descPart}\n`; } } return content; }