{"version":3,"sources":["../src/docs/handler.ts","../src/docs/last-modified.ts","../src/docs/social-image.ts","../src/docs/adapter.ts","../src/docs/api.ts"],"sourcesContent":["import { existsSync, readdirSync, readFileSync, realpathSync, statSync } from \"node:fs\";\nimport path from \"node:path\";\nimport {\n  buildDocsAgentDiscoverySpec,\n  buildDocsSitemapManifest,\n  isDocsAgentDiscoveryRequest,\n  isDocsAgentsRequest,\n  isDocsSkillRequest,\n  renderDocsAgentsDocument,\n  renderDocsLlmsTxt,\n  renderDocsMarkdownDocument,\n  renderDocsRobotsTxt,\n  renderDocsSitemapMarkdown,\n  renderDocsSitemapXml,\n  renderDocsSkillDocument,\n  resolveDocsLlmsTxtFormat,\n  resolveDocsRobotsRequest,\n  resolveDocsSitemapRequest,\n  type DocsLlmsTxtPageInput,\n  type DocsMarkdownPage,\n  type DocsSitemapPageInput,\n} from \"@farming-labs/docs\";\nimport { marked, Renderer } from \"marked\";\nimport { highlight } from \"sugar-high\";\nimport { FARM_NAVIGATION_HEAD_SELECTOR } from \"../client/document-head\";\nimport { farmAcceptQuality } from \"../markdown\";\nimport type { FarmLayoutFonts } from \"../font\";\nimport { matchesFarmIfNoneMatch } from \"../server-http\";\nimport {\n  resolveFarmDocsFontAssets,\n  toFarmDocsPublicFontAssets,\n  type FarmDocsPublicFontAsset,\n} from \"./fonts\";\nimport { resolveFarmDocsPageLastModified } from \"./last-modified\";\nimport { generateFarmDocsSearchBootstrapRuntime, isFarmDocsSearchEnabled } from \"./search-client\";\nimport {\n  createFarmDocsSocialImageDescriptor,\n  getFarmDocsCustomSocialImage,\n  getFarmDocsSocialImageSlug,\n  isFarmDocsSocialImageEnabled,\n  renderFarmDocsSocialImageSvg,\n  renderFarmDocsSocialMetadata,\n} from \"./social-image\";\nimport type { FarmDocsResolvedConfig } from \"./types\";\n\nexport interface FarmDocsHandlerOptions {\n  root: string;\n  srcDir?: string;\n  clientEntry?: string;\n  fontAssets?: readonly FarmDocsPublicFontAsset[];\n  /** Resolve semantic fonts from the layouts that apply to the requested docs route. */\n  resolveLayoutFonts?: (\n    pathname: string,\n  ) => FarmLayoutFonts | undefined | Promise<FarmLayoutFonts | undefined>;\n  /** Stylesheet containing the `@font-face` rules generated by Farm's font compiler. */\n  fontStylesheetHref?: string;\n  /** Application-owned global stylesheet, including the selected docs theme CSS import. */\n  globalStylesheetHref?: string;\n}\n\nexport interface FarmDocsPage {\n  slug: string;\n  title: string;\n  description?: string;\n  section?: string;\n  href: string;\n  sourcePath: string;\n  lastModified?: string;\n}\n\nexport interface LoadedFarmDocsPage extends FarmDocsPage {\n  body: string;\n  frontmatter: Record<string, string>;\n}\n\nconst DOCS_FILE_NAMES = [\"page.mdx\", \"page.md\", \"index.mdx\", \"index.md\"];\nconst DOCS_FILE_EXTENSIONS = [\".mdx\", \".md\"];\nconst FARM_DOCS_FALLBACK_FAVICON =\n  \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' fill='black'/%3E%3Cpath d='M7 8h18v3H10v5h12v3H10v5H7z' fill='white'/%3E%3C/svg%3E\";\nconst FARM_DOCS_FAVICON_FILES = [\"favicon.svg\", \"favicon.ico\", \"favicon.png\"];\n\nfunction trimSlashes(value: string): string {\n  return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction normalizeEntry(entry: string | undefined): string {\n  if (!entry || entry === \"/\") return \"/\";\n  return `/${trimSlashes(entry)}`;\n}\n\nfunction decodeDocsPath(value: string): string {\n  try {\n    return decodeURIComponent(value);\n  } catch {\n    // Malformed percent-encoding in a request path must resolve to a\n    // non-matching slug (a 404), not throw out of the handler.\n    return value;\n  }\n}\n\nfunction normalizeSlug(value: string): string {\n  return trimSlashes(decodeDocsPath(value)).replace(/\\.(mdx?|markdown)$/i, \"\");\n}\n\nfunction resolveFarmDocsFavicon(\n  docs: FarmDocsResolvedConfig | undefined,\n  options: FarmDocsHandlerOptions,\n): string {\n  const configuredFavicon = docs?.config.favicon;\n  if (typeof configuredFavicon === \"string\" && configuredFavicon.trim()) {\n    return configuredFavicon.trim();\n  }\n\n  const publicDir = path.join(path.resolve(options.root), \"public\");\n\n  for (const fileName of FARM_DOCS_FAVICON_FILES) {\n    const faviconPath = path.join(publicDir, fileName);\n    if (existsSync(faviconPath) && statSync(faviconPath).isFile()) {\n      return `/${fileName}`;\n    }\n  }\n\n  return FARM_DOCS_FALLBACK_FAVICON;\n}\n\nfunction renderFarmDocsFaviconLink(faviconHref: string): string {\n  const normalizedHref = faviconHref.split(/[?#]/, 1)[0]?.toLowerCase() || \"\";\n  const type =\n    normalizedHref.endsWith(\".svg\") || faviconHref.startsWith(\"data:image/svg+xml\")\n      ? \"image/svg+xml\"\n      : normalizedHref.endsWith(\".png\")\n        ? \"image/png\"\n        : normalizedHref.endsWith(\".ico\")\n          ? \"image/x-icon\"\n          : undefined;\n  const metadata =\n    type === \"image/svg+xml\" ? ' sizes=\"any\" type=\"image/svg+xml\"' : type ? ` type=\"${type}\"` : \"\";\n\n  return `<link rel=\"icon\" href=\"${escapeAttribute(faviconHref)}\"${metadata}>`;\n}\n\nfunction renderFarmDocsBrandMark(): string {\n  return `<svg class=\"sidebar-brand-logo\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n    <rect x=\"2\" y=\"2\" width=\"5\" height=\"5\" rx=\"0.75\" fill=\"currentColor\"></rect>\n    <path d=\"M9.75 2h11.5c.41 0 .75.34.75.75v3.5c0 .41-.34.75-.75.75H9.75A.75.75 0 0 1 9 6.25v-3.5c0-.41.34-.75.75-.75Zm9.75 1.62a.38.38 0 0 0-.38.38v1c0 .21.17.38.38.38h.75c.21 0 .38-.17.38-.38V4a.38.38 0 0 0-.38-.38h-.75Z\" fill=\"currentColor\"></path>\n    <rect x=\"2\" y=\"9.5\" width=\"5\" height=\"5\" rx=\"0.75\" fill=\"currentColor\" opacity=\"0.64\"></rect>\n    <rect x=\"9\" y=\"9.5\" width=\"13\" height=\"5\" rx=\"0.75\" fill=\"currentColor\" opacity=\"0.64\"></rect>\n    <rect x=\"2\" y=\"17\" width=\"5\" height=\"5\" rx=\"0.75\" fill=\"currentColor\" opacity=\"0.34\"></rect>\n    <rect x=\"9\" y=\"17\" width=\"7.5\" height=\"5\" rx=\"0.75\" fill=\"currentColor\" opacity=\"0.34\"></rect>\n  </svg>`;\n}\n\nfunction renderFarmDocsBrandTitle(navTitle: string): string {\n  const suffix = navTitle.match(/\\.js$/i)?.[0];\n\n  if (!suffix) {\n    return `<span class=\"sidebar-brand-title\">${escapeHtml(navTitle)}</span>`;\n  }\n\n  const productName = navTitle.slice(0, -suffix.length);\n  return `<span class=\"sidebar-brand-title\">${escapeHtml(productName)}<span class=\"sidebar-brand-suffix\">${escapeHtml(suffix)}</span></span>`;\n}\n\nfunction isSafeSegment(segment: string): boolean {\n  return segment !== \"..\" && !segment.includes(\"/\") && !segment.includes(\"\\\\\");\n}\n\nfunction resolveInside(root: string, target: string): string | null {\n  const resolvedRoot = path.resolve(root);\n  const resolvedTarget = path.resolve(target);\n  const relative = path.relative(resolvedRoot, resolvedTarget);\n  if (relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative))) {\n    return resolvedTarget;\n  }\n  return null;\n}\n\nfunction resolveExistingFileInside(root: string, target: string): string | null {\n  const safePath = resolveInside(root, target);\n  if (!safePath) return null;\n\n  try {\n    const realRoot = realpathSync(root);\n    const realTarget = realpathSync(safePath);\n    const containedTarget = resolveInside(realRoot, realTarget);\n    return containedTarget && statSync(containedTarget).isFile() ? containedTarget : null;\n  } catch {\n    return null;\n  }\n}\n\nexport function isFarmDocsRequest(docs: FarmDocsResolvedConfig | undefined, request: Request) {\n  if (!docs?.enabled) return false;\n  if (request.method !== \"GET\" && request.method !== \"HEAD\") return false;\n\n  const pathname = new URL(request.url).pathname;\n  const entry = normalizeEntry(docs.entry);\n  if (entry === \"/\") return true;\n\n  return pathname === entry || pathname === `${entry}.md` || pathname.startsWith(`${entry}/`);\n}\n\nexport function resolveFarmDocsContentDir(\n  docs: FarmDocsResolvedConfig,\n  options: FarmDocsHandlerOptions,\n): string {\n  const root = path.resolve(options.root);\n  const srcDir = options.srcDir || \"src\";\n  const configuredContentDir = docs.contentDir || docs.config.contentDir;\n\n  if (configuredContentDir) {\n    return path.isAbsolute(configuredContentDir)\n      ? configuredContentDir\n      : path.join(root, configuredContentDir);\n  }\n\n  const entryDir = docs.config.entry || trimSlashes(docs.entry) || \"docs\";\n  const appDocsDir = path.join(root, srcDir, \"app\", entryDir);\n  if (existsSync(appDocsDir)) return appDocsDir;\n\n  return path.join(root, entryDir);\n}\n\nexport function getFarmDocsRouteTypeEntries(docs: FarmDocsResolvedConfig | undefined): string[] {\n  if (!docs?.enabled) return [];\n  const entry = normalizeEntry(docs.entry);\n  if (entry === \"/\") return [\"/\", \"/[...docs]\"];\n  return [entry, `${entry}/[...docs]`];\n}\n\nexport function getFarmDocsDocumentNavigationMatchers(\n  docs: FarmDocsResolvedConfig | undefined,\n): string[] {\n  if (!docs?.enabled) return [];\n  const entry = normalizeEntry(docs.entry);\n  return [entry === \"/\" ? \"/(.*)\" : `${entry}(.*)`];\n}\n\nfunction getRequestSlug(docs: FarmDocsResolvedConfig, request: Request): string {\n  const pathname = new URL(request.url).pathname;\n  const entry = normalizeEntry(docs.entry);\n\n  if (entry === \"/\") return normalizeSlug(pathname);\n  if (pathname === entry || pathname === `${entry}.md`) return \"\";\n\n  return normalizeSlug(pathname.slice(entry.length));\n}\n\nfunction findDocsPageFile(contentDir: string, slug: string): string | null {\n  const segments = slug ? slug.split(\"/\").filter(Boolean) : [];\n  if (!segments.every(isSafeSegment)) return null;\n\n  const slugDir = path.join(contentDir, ...segments);\n  const candidates =\n    segments.length === 0\n      ? DOCS_FILE_NAMES.map((filename) => path.join(contentDir, filename))\n      : [\n          ...DOCS_FILE_NAMES.map((filename) => path.join(slugDir, filename)),\n          ...DOCS_FILE_EXTENSIONS.map((extension) => path.join(contentDir, `${slug}${extension}`)),\n        ];\n\n  for (const candidate of candidates) {\n    const safePath = resolveExistingFileInside(contentDir, candidate);\n    if (safePath) {\n      return safePath;\n    }\n  }\n\n  return null;\n}\n\nfunction parseFrontmatter(source: string): {\n  frontmatter: Record<string, string>;\n  body: string;\n} {\n  if (!source.startsWith(\"---\")) {\n    return { frontmatter: {}, body: source };\n  }\n\n  const endIndex = source.indexOf(\"\\n---\", 3);\n  if (endIndex === -1) return { frontmatter: {}, body: source };\n\n  const frontmatterSource = source.slice(3, endIndex).trim();\n  const body = source.slice(source.indexOf(\"\\n\", endIndex + 1) + 1);\n  const frontmatter: Record<string, string> = {};\n\n  for (const line of frontmatterSource.split(/\\r?\\n/)) {\n    const separator = line.indexOf(\":\");\n    if (separator === -1) continue;\n    const key = line.slice(0, separator).trim();\n    const value = line\n      .slice(separator + 1)\n      .trim()\n      .replace(/^[\"']|[\"']$/g, \"\");\n    if (key && value) frontmatter[key] = value;\n  }\n\n  return { frontmatter, body };\n}\n\nfunction titleFromSlug(slug: string): string {\n  const lastSegment = slug.split(\"/\").filter(Boolean).pop() || \"Docs\";\n  return lastSegment\n    .split(/[-_]/)\n    .filter(Boolean)\n    .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n    .join(\" \");\n}\n\nfunction titleFromMarkdown(body: string, fallback: string): string {\n  const heading = body.match(/^#\\s+(.+)$/m)?.[1]?.trim();\n  return heading || fallback;\n}\n\nexport function loadFarmDocsPage(\n  contentDir: string,\n  docs: FarmDocsResolvedConfig,\n  slug: string,\n): LoadedFarmDocsPage | null {\n  const sourcePath = findDocsPageFile(contentDir, slug);\n  if (!sourcePath) return null;\n\n  const source = readFileSync(sourcePath, \"utf8\");\n  const { frontmatter, body } = parseFrontmatter(source);\n  const title = frontmatter.title || titleFromMarkdown(body, titleFromSlug(slug));\n  const href = createDocsHref(docs.entry, slug);\n\n  return {\n    slug,\n    title,\n    description: frontmatter.description,\n    section: frontmatter.section,\n    href,\n    sourcePath,\n    lastModified: resolveFarmDocsPageLastModified(contentDir, sourcePath, frontmatter),\n    frontmatter,\n    body,\n  };\n}\n\nfunction createDocsHref(entry: string, slug: string): string {\n  const normalizedEntry = normalizeEntry(entry);\n  const normalizedSlug = trimSlashes(slug);\n  if (normalizedEntry === \"/\") return normalizedSlug ? `/${normalizedSlug}` : \"/\";\n  return normalizedSlug ? `${normalizedEntry}/${normalizedSlug}` : normalizedEntry;\n}\n\nfunction pathToSlug(contentDir: string, filePath: string): string | null {\n  const relative = path.relative(contentDir, filePath).replace(/\\\\/g, \"/\");\n  if (relative.startsWith(\"..\")) return null;\n\n  const extension = path.extname(relative);\n  if (!DOCS_FILE_EXTENSIONS.includes(extension)) return null;\n\n  const withoutExtension = relative.slice(0, -extension.length);\n  if (withoutExtension === \"page\" || withoutExtension === \"index\") return \"\";\n  if (withoutExtension.endsWith(\"/page\") || withoutExtension.endsWith(\"/index\")) {\n    return withoutExtension.replace(/\\/(page|index)$/, \"\");\n  }\n  return withoutExtension;\n}\n\nfunction loadPage(\n  contentDir: string,\n  docs: FarmDocsResolvedConfig,\n  request: Request,\n): LoadedFarmDocsPage | null {\n  return loadFarmDocsPage(contentDir, docs, getRequestSlug(docs, request));\n}\n\nexport function discoverFarmDocsPages(\n  contentDir: string,\n  docs: FarmDocsResolvedConfig,\n): FarmDocsPage[] {\n  if (!existsSync(contentDir)) return [];\n\n  const pages: FarmDocsPage[] = [];\n  const visit = (dir: string) => {\n    for (const entry of readdirSync(dir, { withFileTypes: true })) {\n      if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n      const absolutePath = path.join(dir, entry.name);\n      if (entry.isDirectory()) {\n        visit(absolutePath);\n        continue;\n      }\n      if (!entry.isFile()) continue;\n\n      const slug = pathToSlug(contentDir, absolutePath);\n      if (slug === null) continue;\n\n      const source = readFileSync(absolutePath, \"utf8\");\n      const { frontmatter, body } = parseFrontmatter(source);\n      pages.push({\n        slug,\n        title: frontmatter.title || titleFromMarkdown(body, titleFromSlug(slug)),\n        description: frontmatter.description,\n        section: frontmatter.section,\n        href: createDocsHref(docs.entry, slug),\n        sourcePath: absolutePath,\n        lastModified: resolveFarmDocsPageLastModified(contentDir, absolutePath, frontmatter),\n      });\n    }\n  };\n\n  visit(contentDir);\n  return pages.sort((a, b) => a.href.localeCompare(b.href));\n}\n\nexport function toFarmDocsMarkdownPage(page: LoadedFarmDocsPage): DocsMarkdownPage {\n  const lastModified =\n    page.lastModified || page.frontmatter.lastModified || page.frontmatter.lastmod;\n\n  return {\n    slug: page.slug,\n    url: page.href,\n    title: page.title,\n    description: page.description,\n    lastModified,\n    lastmod: lastModified,\n    content: page.body,\n    rawContent: page.body,\n  };\n}\n\nfunction getDocsTitle(docs: FarmDocsResolvedConfig): string {\n  return typeof docs.config.nav === \"object\" && docs.config.nav && \"title\" in docs.config.nav\n    ? String((docs.config.nav as { title?: unknown }).title || \"Documentation\")\n    : \"Documentation\";\n}\n\nfunction getDocsDescription(docs: FarmDocsResolvedConfig): string | undefined {\n  return docs.config.metadata?.description;\n}\n\nfunction getLoadedDocsPages(\n  contentDir: string,\n  docs: FarmDocsResolvedConfig,\n): LoadedFarmDocsPage[] {\n  return discoverFarmDocsPages(contentDir, docs)\n    .map((page) => loadFarmDocsPage(contentDir, docs, page.slug))\n    .filter((page): page is LoadedFarmDocsPage => Boolean(page));\n}\n\nfunction toDocsLlmsPage(page: LoadedFarmDocsPage): DocsLlmsTxtPageInput {\n  return toFarmDocsMarkdownPage(page);\n}\n\nfunction toDocsSitemapPage(page: LoadedFarmDocsPage): DocsSitemapPageInput {\n  return {\n    ...toFarmDocsMarkdownPage(page),\n    sourcePath: page.sourcePath,\n  };\n}\n\ntype CopyMarkdownActionConfig = {\n  format: \"markdown\" | \"text\";\n  includeTitle: boolean;\n  label: string;\n  copiedLabel: string;\n};\n\ntype LastUpdatedDisplayConfig = {\n  enabled: boolean;\n  label: string;\n  position: \"footer\" | \"below-title\";\n};\n\ntype ReadingTimeDisplayConfig = {\n  wordsPerMinute: number;\n  format: \"long\" | \"short\";\n  includeCode: boolean;\n};\n\nfunction resolvePageActionsConfig(docs: FarmDocsResolvedConfig): Record<string, unknown> {\n  return isObjectRecord(docs.config.pageActions) ? docs.config.pageActions : {};\n}\n\nfunction resolvePageActionsAlignment(docs: FarmDocsResolvedConfig): \"left\" | \"right\" {\n  return resolvePageActionsConfig(docs).alignment === \"right\" ? \"right\" : \"left\";\n}\n\nfunction resolveCopyMarkdownActionConfig(\n  docs: FarmDocsResolvedConfig,\n): CopyMarkdownActionConfig | null {\n  const raw = resolvePageActionsConfig(docs).copyMarkdown;\n  if (raw === undefined || raw === false) return null;\n\n  const options = isObjectRecord(raw) ? raw : {};\n  if (isObjectRecord(raw) && raw.enabled === false) return null;\n\n  return {\n    format: options.format === \"text\" ? \"text\" : \"markdown\",\n    includeTitle: options.includeTitle === true,\n    label: readString(options.label) ?? \"Copy page\",\n    copiedLabel: readString(options.copiedLabel) ?? \"Copied!\",\n  };\n}\n\nfunction resolveLastUpdatedDisplayConfig(docs: FarmDocsResolvedConfig): LastUpdatedDisplayConfig {\n  const raw = docs.config.lastUpdated;\n  const options = isObjectRecord(raw) ? raw : {};\n\n  return {\n    enabled: raw !== false && (!isObjectRecord(raw) || raw.enabled !== false),\n    label: typeof options.label === \"string\" ? options.label : \"Last updated\",\n    position: options.position === \"below-title\" ? \"below-title\" : \"footer\",\n  };\n}\n\nfunction formatLastModifiedDate(value: string | undefined): string | undefined {\n  if (!value) return undefined;\n\n  const date = new Date(value);\n  if (Number.isNaN(date.getTime())) return value;\n\n  return new Intl.DateTimeFormat(\"en\", {\n    day: \"numeric\",\n    month: \"long\",\n    year: \"numeric\",\n  }).format(date);\n}\n\nfunction renderLastUpdatedText(\n  page: LoadedFarmDocsPage,\n  docs: FarmDocsResolvedConfig,\n  position: \"footer\" | \"below-title\",\n): string {\n  const config = resolveLastUpdatedDisplayConfig(docs);\n  const formatted = formatLastModifiedDate(page.lastModified);\n  if (!config.enabled || config.position !== position || !formatted) return \"\";\n\n  const time = `<time datetime=\"${escapeAttribute(page.lastModified || \"\")}\">${escapeHtml(formatted)}</time>`;\n  const label = config.label.trim();\n  return label ? `${escapeHtml(label)} ${time}` : time;\n}\n\nfunction resolveReadingTimeDisplayConfig(\n  docs: FarmDocsResolvedConfig,\n): ReadingTimeDisplayConfig | null {\n  const raw = docs.config.readingTime;\n  if (raw === undefined || raw === false) return null;\n\n  const options = isObjectRecord(raw) ? raw : {};\n  if (isObjectRecord(raw) && options.enabled === false) return null;\n\n  const wordsPerMinute =\n    typeof options.wordsPerMinute === \"number\" && options.wordsPerMinute > 0\n      ? options.wordsPerMinute\n      : 220;\n\n  return {\n    wordsPerMinute,\n    format: options.format === \"short\" ? \"short\" : \"long\",\n    includeCode: options.includeCode === true,\n  };\n}\n\nfunction countMarkdownWords(body: string, includeCode: boolean): number {\n  const readable = (\n    includeCode ? body : body.replace(/```[\\s\\S]*?```/g, \" \").replace(/`[^`]*`/g, \" \")\n  )\n    .replace(/!\\[[^\\]]*]\\([^)]*\\)/g, \" \")\n    .replace(/\\[([^\\]]+)]\\([^)]*\\)/g, \"$1\")\n    .replace(/<[^>]+>/g, \" \")\n    .replace(/[#>*_~`|:-]/g, \" \");\n\n  return readable.match(/[A-Za-z0-9]+(?:[-'][A-Za-z0-9]+)*/g)?.length ?? 0;\n}\n\nfunction renderReadingTimeMeta(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n  const config = resolveReadingTimeDisplayConfig(docs);\n  if (!config) return \"\";\n\n  const words = countMarkdownWords(page.body, config.includeCode);\n  const minutes = Math.max(1, Math.ceil(words / config.wordsPerMinute));\n  const label = config.format === \"short\" ? `${minutes} min` : `${minutes} min read`;\n\n  return `<div class=\"fd-page-meta not-prose\" data-page-reading-time>\n  <span class=\"fd-page-meta-dot\" aria-hidden=\"true\">·</span>\n  <span class=\"fd-page-meta-item\">${escapeHtml(label)}</span>\n</div>`;\n}\n\nfunction renderPixelPageActions(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n  const copyMarkdown = resolveCopyMarkdownActionConfig(docs);\n  if (!copyMarkdown) return \"\";\n\n  const markdownUrl = `${page.href}.md`;\n  const includeTitle = copyMarkdown.includeTitle ? \"true\" : \"false\";\n\n  return `<div class=\"fd-page-actions\" data-page-actions data-actions-alignment=\"${resolvePageActionsAlignment(docs)}\">\n  <button\n    type=\"button\"\n    class=\"fd-page-action-btn\"\n    data-page-action=\"copy-markdown\"\n    data-copied=\"false\"\n    data-markdown-url=\"${escapeAttribute(markdownUrl)}\"\n    data-copy-markdown-format=\"${copyMarkdown.format}\"\n    data-copy-markdown-include-title=\"${includeTitle}\"\n    data-copy-label=\"${escapeAttribute(copyMarkdown.label)}\"\n    data-copied-label=\"${escapeAttribute(copyMarkdown.copiedLabel)}\"\n    aria-label=\"${escapeAttribute(copyMarkdown.label)}\"\n    title=\"${escapeAttribute(copyMarkdown.label)}\"\n  >\n    <svg class=\"fd-page-action-copy-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg>\n    <svg class=\"fd-page-action-check-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20 6 9 17l-5-5\"></path></svg>\n    <span data-page-action-label>${escapeHtml(copyMarkdown.label)}</span>\n  </button>\n</div>`;\n}\n\nfunction renderBelowTitleMeta(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n  const lastUpdated = renderLastUpdatedText(page, docs, \"below-title\");\n  const actions = renderPixelPageActions(page, docs);\n  const readingTime = renderReadingTimeMeta(page, docs);\n  if (!lastUpdated && !actions && !readingTime) return \"\";\n\n  return `<div class=\"fd-below-title-block not-prose\">\n  ${lastUpdated ? `<p class=\"fd-last-updated-inline\">${lastUpdated}</p>` : \"\"}\n  ${actions}\n  ${readingTime}\n</div>`;\n}\n\nfunction renderMarkdownHtmlWithTitleMeta(\n  page: LoadedFarmDocsPage,\n  docs: FarmDocsResolvedConfig,\n  html: string,\n): string {\n  const meta = renderBelowTitleMeta(page, docs);\n  if (!meta) return html;\n\n  const withTitleMeta = html.replace(/(<h1\\b[\\s\\S]*?<\\/h1>)/, `$1\\n${meta}`);\n  return withTitleMeta === html ? `${meta}\\n${html}` : withTitleMeta;\n}\n\nfunction renderPixelPageFooter(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n  const lastUpdated = renderLastUpdatedText(page, docs, \"footer\");\n  if (!lastUpdated) return \"\";\n\n  return `<div class=\"not-prose fd-page-footer\">\n  <span class=\"fd-last-updated-footer\">${lastUpdated}</span>\n</div>`;\n}\n\nfunction getDocsLlmsOptions(docs: FarmDocsResolvedConfig, request: Request) {\n  const configured =\n    typeof docs.config.llmsTxt === \"object\" && docs.config.llmsTxt !== null\n      ? docs.config.llmsTxt\n      : {};\n  return {\n    enabled: true,\n    baseUrl: new URL(request.url).origin,\n    siteTitle: getDocsTitle(docs),\n    siteDescription: getDocsDescription(docs),\n    ...configured,\n  };\n}\n\nfunction getDocsDiscoveryOptions(docs: FarmDocsResolvedConfig, request: Request) {\n  return {\n    origin: new URL(request.url).origin,\n    entry: docs.entry,\n    i18n: null,\n    search: docs.config.search ?? true,\n    mcp: {\n      enabled: false,\n      route: \"/api/docs/mcp\",\n      name: `${getDocsTitle(docs)} MCP`,\n      version: \"1\",\n      tools: {\n        listDocs: false,\n        listPages: false,\n        readPage: false,\n        searchDocs: false,\n        getNavigation: false,\n        getCodeExamples: false,\n        getConfigSchema: false,\n      },\n    },\n    feedback: undefined,\n    llms: getDocsLlmsOptions(docs, request),\n    sitemap: docs.config.sitemap ?? true,\n    robots: docs.config.robots ?? true,\n    openapi: undefined,\n    markdown: {\n      acceptHeader: true,\n      signatureAgentHeader: true,\n    },\n  };\n}\n\nfunction createFarmDocsPublicResponse(\n  contentDir: string,\n  docs: FarmDocsResolvedConfig,\n  request: Request,\n): Response | null {\n  const url = new URL(request.url);\n  let loadedPages: LoadedFarmDocsPage[] | undefined;\n  const getPages = () => (loadedPages ??= getLoadedDocsPages(contentDir, docs));\n  const sitemapManifest = () =>\n    buildDocsSitemapManifest({\n      pages: getPages().map(toDocsSitemapPage),\n      entry: docs.entry,\n      siteTitle: getDocsTitle(docs),\n      baseUrl: url.origin,\n    });\n  const textHeaders = (contentType: string) => ({\n    \"Content-Type\": contentType,\n    \"Cache-Control\": \"public, max-age=60\",\n  });\n\n  const llmsFormat = resolveDocsLlmsTxtFormat(url);\n  if (llmsFormat) {\n    const generated = renderDocsLlmsTxt(\n      getPages().map(toDocsLlmsPage),\n      getDocsLlmsOptions(docs, request),\n    );\n    return new Response(llmsFormat === \"llms-full\" ? generated.llmsFullTxt : generated.llmsTxt, {\n      status: 200,\n      headers: textHeaders(\"text/plain; charset=utf-8\"),\n    });\n  }\n\n  const sitemapFormat = resolveDocsSitemapRequest(url, docs.config.sitemap ?? true);\n  if (sitemapFormat === \"xml\") {\n    return new Response(\n      renderDocsSitemapXml(sitemapManifest(), {\n        baseUrl: url.origin,\n        includeLastmod: true,\n      }),\n      {\n        status: 200,\n        headers: textHeaders(\"application/xml; charset=utf-8\"),\n      },\n    );\n  }\n  if (sitemapFormat === \"markdown\") {\n    return new Response(\n      renderDocsSitemapMarkdown(sitemapManifest(), {\n        includeDescriptions: true,\n      }),\n      {\n        status: 200,\n        headers: textHeaders(\"text/markdown; charset=utf-8\"),\n      },\n    );\n  }\n\n  if (resolveDocsRobotsRequest(url, docs.config.robots ?? true)) {\n    return new Response(\n      renderDocsRobotsTxt({\n        entry: docs.entry,\n        sitemap: docs.config.sitemap ?? true,\n        robots: docs.config.robots ?? true,\n        baseUrl: url.origin,\n      }),\n      {\n        status: 200,\n        headers: textHeaders(\"text/plain; charset=utf-8\"),\n      },\n    );\n  }\n\n  if (isDocsAgentDiscoveryRequest(url)) {\n    const spec = buildDocsAgentDiscoverySpec(getDocsDiscoveryOptions(docs, request));\n    const title = getDocsTitle(docs);\n    return new Response(\n      JSON.stringify({\n        ...spec,\n        name: title,\n        site: {\n          ...spec.site,\n          title,\n          description: getDocsDescription(docs),\n          entry: docs.entry,\n        },\n      }),\n      {\n        status: 200,\n        headers: textHeaders(\"application/json; charset=utf-8\"),\n      },\n    );\n  }\n\n  if (isDocsAgentsRequest(url)) {\n    return new Response(\n      `${renderDocsAgentsDocument(getDocsDiscoveryOptions(docs, request)).trim()}\\n`,\n      {\n        status: 200,\n        headers: textHeaders(\"text/markdown; charset=utf-8\"),\n      },\n    );\n  }\n\n  if (isDocsSkillRequest(url)) {\n    return new Response(\n      `${renderDocsSkillDocument(getDocsDiscoveryOptions(docs, request)).trim()}\\n`,\n      {\n        status: 200,\n        headers: textHeaders(\"text/markdown; charset=utf-8\"),\n      },\n    );\n  }\n\n  return null;\n}\n\nfunction omitFarmDocsHeadBody(request: Request, response: Response): Response {\n  if (request.method !== \"HEAD\") return response;\n  return new Response(null, {\n    status: response.status,\n    statusText: response.statusText,\n    headers: response.headers,\n  });\n}\n\nfunction escapeHtml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\");\n}\n\nfunction shouldReturnMarkdown(request: Request): boolean {\n  const url = new URL(request.url);\n  if (url.pathname.endsWith(\".md\")) return true;\n\n  const accept = request.headers.get(\"accept\");\n  // Substring matching cannot see `q=0`, so `text/markdown;q=0` (an explicit\n  // refusal) used to be served Markdown anyway. Only an exact entry counts:\n  // `*/*` means \"anything\", not \"Markdown over HTML\".\n  const markdown = Math.max(\n    farmAcceptQuality(accept, \"text/markdown\"),\n    farmAcceptQuality(accept, \"text/plain\"),\n  );\n  if (markdown <= 0) return false;\n\n  // A client listing text/plain as a low-quality fallback behind text/html\n  // wants the HTML page; serve Markdown only when it is at least as welcome.\n  return markdown >= farmAcceptQuality(accept, \"text/html\", { wildcards: true });\n}\n\nfunction escapeAttribute(value: string): string {\n  return escapeHtml(value).replace(/'/g, \"&#39;\");\n}\n\nfunction slugify(value: string): string {\n  return value\n    .toLowerCase()\n    .replace(/<[^>]+>/g, \"\")\n    .replace(/`([^`]+)`/g, \"$1\")\n    .replace(/[^a-z0-9]+/g, \"-\")\n    .replace(/^-|-$/g, \"\");\n}\n\nfunction createSlugger() {\n  const seen = new Map<string, number>();\n\n  return (value: string) => {\n    const base = slugify(value) || \"section\";\n    const count = seen.get(base) || 0;\n    seen.set(base, count + 1);\n    return count === 0 ? base : `${base}-${count + 1}`;\n  };\n}\n\nfunction stripHtml(value: string): string {\n  return value.replace(/<[^>]+>/g, \"\");\n}\n\nfunction getCodeFence(line: string): { marker: \"`\" | \"~\"; length: number } | null {\n  const match = /^(?: {0,3})(`{3,}|~{3,})/.exec(line);\n  const value = match?.[1];\n  if (!value) return null;\n  return { marker: value[0] as \"`\" | \"~\", length: value.length };\n}\n\nfunction isClosingCodeFence(line: string, fence: { marker: \"`\" | \"~\"; length: number }): boolean {\n  const trimmed = line.trim();\n  return (\n    trimmed.length >= fence.length && Array.from(trimmed).every((char) => char === fence.marker)\n  );\n}\n\nfunction stripMdxRuntimeSyntax(body: string): string {\n  const output: string[] = [];\n  let fence: { marker: \"`\" | \"~\"; length: number } | null = null;\n\n  for (const line of body.split(\"\\n\")) {\n    const nextFence = getCodeFence(line);\n    if (fence) {\n      output.push(line);\n      if (nextFence && nextFence.marker === fence.marker && isClosingCodeFence(line, fence)) {\n        fence = null;\n      }\n      continue;\n    }\n\n    if (nextFence) {\n      fence = nextFence;\n      output.push(line);\n      continue;\n    }\n\n    if (/^\\s*import\\s.+$/.test(line) || /^\\s*export\\s+(const|default)\\s.+$/.test(line)) {\n      continue;\n    }\n\n    output.push(line);\n  }\n\n  return output.join(\"\\n\");\n}\n\nfunction unescapeHtml(value: string): string {\n  return value\n    .replace(/&quot;/g, '\"')\n    .replace(/&#39;/g, \"'\")\n    .replace(/&lt;/g, \"<\")\n    .replace(/&gt;/g, \">\")\n    .replace(/&amp;/g, \"&\");\n}\n\nconst CODE_LANGUAGE_LABELS = new Set([\n  \"bash\",\n  \"cjs\",\n  \"cmd\",\n  \"console\",\n  \"css\",\n  \"html\",\n  \"javascript\",\n  \"js\",\n  \"json\",\n  \"jsx\",\n  \"md\",\n  \"mdx\",\n  \"shell\",\n  \"sh\",\n  \"terminal\",\n  \"text\",\n  \"ts\",\n  \"tsx\",\n  \"txt\",\n  \"typescript\",\n  \"yaml\",\n  \"yml\",\n  \"zsh\",\n]);\n\nconst EXTENSIONLESS_CODE_FILENAMES = new Set([\n  \"dockerfile\",\n  \"makefile\",\n  \"procfile\",\n  \"readme\",\n  \"license\",\n]);\n\nfunction isCodePathLabel(label: string): boolean {\n  const trimmed = label.trim();\n  if (!trimmed || /\\s/.test(trimmed)) return false;\n\n  const lower = trimmed.toLowerCase();\n  if (CODE_LANGUAGE_LABELS.has(lower)) return false;\n\n  const fileName = trimmed.split(/[\\\\/]/).filter(Boolean).pop() || trimmed;\n  const lowerFileName = fileName.toLowerCase();\n  if (EXTENSIONLESS_CODE_FILENAMES.has(lowerFileName)) return true;\n  if (fileName.startsWith(\".\") && fileName.length > 1) return true;\n\n  return /\\.[a-z0-9][a-z0-9-]*$/i.test(fileName);\n}\n\nfunction parseCodeInfo(info: string | undefined): {\n  language: string;\n  label: string;\n  hasExplicitLabel: boolean;\n} {\n  const source = (info || \"\").trim();\n  const language = source.match(/^\\S+/)?.[0] || \"text\";\n  const explicitLabel = source\n    .match(/\\b(?:title|filename|file|label|name)=[\"']([^\"']+)[\"']/)?.[1]\n    ?.trim();\n  return { language, label: explicitLabel || language, hasExplicitLabel: Boolean(explicitLabel) };\n}\n\nfunction getStandaloneCodeLabel(line: string): string | null {\n  const trimmed = line.trim();\n  const match = /^(?:\\*\\*([^*]+)\\*\\*|__([^_]+)__|`([^`]+)`)$/u.exec(trimmed);\n  const label = match?.[1] || match?.[2] || match?.[3];\n  return label?.trim() || null;\n}\n\nfunction hasCodeFenceTitle(info: string): boolean {\n  return /\\b(?:title|filename|file|label|name)=[\"'][^\"']+[\"']/.test(info);\n}\n\nfunction escapeCodeFenceTitle(value: string): string {\n  return value.replace(/\"/g, \"&quot;\");\n}\n\nfunction addTitleToCodeFence(line: string, title: string): string {\n  const match = /^(\\s{0,3})(`{3,}|~{3,})(.*)$/u.exec(line);\n  if (!match) return line;\n  const [, indent, marker, infoSource] = match;\n  const info = infoSource.trim();\n  if (hasCodeFenceTitle(info)) return line;\n  const suffix = `title=\"${escapeCodeFenceTitle(title)}\"`;\n  return `${indent}${marker}${info ? `${info} ${suffix}` : `text ${suffix}`}`;\n}\n\nfunction attachCodeBlockLabels(body: string): string {\n  const lines = body.split(\"\\n\");\n  const output: string[] = [];\n  let fence: { marker: \"`\" | \"~\"; length: number } | null = null;\n\n  for (let index = 0; index < lines.length; index += 1) {\n    const line = lines[index] || \"\";\n    const nextFence = getCodeFence(line);\n\n    if (fence) {\n      output.push(line);\n      if (nextFence && nextFence.marker === fence.marker && isClosingCodeFence(line, fence)) {\n        fence = null;\n      }\n      continue;\n    }\n\n    if (nextFence) {\n      fence = nextFence;\n      output.push(line);\n      continue;\n    }\n\n    const label = getStandaloneCodeLabel(line);\n    if (!label) {\n      output.push(line);\n      continue;\n    }\n\n    let fenceIndex = index + 1;\n    while (fenceIndex < lines.length && (lines[fenceIndex] || \"\").trim() === \"\") {\n      fenceIndex += 1;\n    }\n\n    const labeledFence = getCodeFence(lines[fenceIndex] || \"\");\n    if (!labeledFence) {\n      output.push(line);\n      continue;\n    }\n\n    output.push(addTitleToCodeFence(lines[fenceIndex] || \"\", label));\n    fence = labeledFence;\n    index = fenceIndex;\n  }\n\n  return output.join(\"\\n\");\n}\n\nfunction highlightCodeBlock(code: string): string {\n  return highlight(code.replace(/\\n$/, \"\")).replace(/<\\/span>\\n<span/g, \"</span><span\");\n}\n\nfunction renderCodeCopyButton(className = \"code-copy\"): string {\n  return `<button class=\"${className}\" type=\"button\" data-copied=\"false\" aria-label=\"Copy code\" title=\"Copy code\" onclick=\"navigator.clipboard?.writeText(this.closest('figure').querySelector('code').innerText); this.dataset.copied='true'; this.setAttribute('aria-label','Copied'); this.title='Copied'; clearTimeout(this._copyTimer); this._copyTimer=setTimeout(() => { this.dataset.copied='false'; this.setAttribute('aria-label','Copy code'); this.title='Copy code'; }, 4500);\"><svg class=\"code-copy-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg><svg class=\"code-copy-check\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20 6 9 17l-5-5\"></path></svg></button>`;\n}\n\nfunction renderMarkdownDocument(\n  body: string,\n  depth: number,\n): { html: string; tocItems: TocItem[] } {\n  const slug = createSlugger();\n  const renderer = new Renderer();\n  const maxLevel = Math.max(2, Math.min(depth, 6));\n  const tocItems: TocItem[] = [];\n\n  renderer.heading = (text, level, raw) => {\n    const title = raw || stripHtml(text);\n    const id = slug(title);\n    if (level >= 2 && level <= maxLevel) {\n      tocItems.push({ id, title, level });\n    }\n    return `<h${level} id=\"${escapeAttribute(id)}\"><a class=\"heading-anchor\" href=\"#${escapeAttribute(id)}\">${text}</a></h${level}>\\n`;\n  };\n\n  renderer.code = (code, infostring, escaped) => {\n    const { language, label, hasExplicitLabel } = parseCodeInfo(infostring);\n    const rawCode = escaped ? unescapeHtml(code) : code;\n    const highlighted = highlightCodeBlock(rawCode);\n    const shouldRenderHeader = hasExplicitLabel && isCodePathLabel(label);\n    const header = shouldRenderHeader\n      ? `<div class=\"code-block-header\">\n    <span class=\"code-block-title\">${escapeHtml(label)}</span>\n    ${renderCodeCopyButton()}\n  </div>`\n      : renderCodeCopyButton(\"code-copy code-copy-floating\");\n\n    return `<figure class=\"shiki code-block ${shouldRenderHeader ? \"code-block-framed\" : \"code-block-plain\"}\" data-language=\"${escapeAttribute(language)}\">\n  ${header}\n  <pre><code class=\"sh-code language-${escapeAttribute(language)}\">${highlighted}</code></pre>\n</figure>\\n`;\n  };\n\n  renderer.table = (header, body) =>\n    `<div class=\"fd-table-wrapper table-wrap relative overflow-auto prose-no-margin my-6\"><table><thead>${header}</thead><tbody>${body}</tbody></table></div>\\n`;\n\n  renderer.blockquote = (quote) => `<blockquote>${quote}</blockquote>\\n`;\n  renderer.codespan = (code) => `<code>${escapeHtml(code)}</code>`;\n\n  renderer.link = (href, title, text) => {\n    const safeHref = href || \"\";\n    const titleAttribute = title ? ` title=\"${escapeAttribute(title)}\"` : \"\";\n    return `<a href=\"${escapeAttribute(safeHref)}\"${titleAttribute}>${text}</a>`;\n  };\n\n  renderer.image = (href, title, text) => {\n    const titleAttribute = title ? ` title=\"${escapeAttribute(title)}\"` : \"\";\n    return `<img src=\"${escapeAttribute(href)}\" alt=\"${escapeAttribute(text)}\"${titleAttribute}>`;\n  };\n\n  const html = marked(attachCodeBlockLabels(stripMdxRuntimeSyntax(body)), {\n    async: false,\n    breaks: false,\n    gfm: true,\n    renderer,\n  }) as string;\n\n  return { html: html.trim(), tocItems };\n}\n\ninterface TocItem {\n  id: string;\n  title: string;\n  level: number;\n}\n\nfunction getThemeUI(docs: FarmDocsResolvedConfig): Record<string, any> {\n  const theme = docs.config.theme;\n  return theme && typeof theme === \"object\" && \"ui\" in theme && typeof theme.ui === \"object\"\n    ? (theme.ui as Record<string, any>)\n    : {};\n}\n\nfunction getThemeName(docs: FarmDocsResolvedConfig): string {\n  const theme = docs.config.theme;\n  return theme && typeof theme === \"object\" && \"name\" in theme\n    ? String((theme as { name?: unknown }).name || \"farm-docs\")\n    : \"farm-docs\";\n}\n\nfunction getThemeTocDepth(docs: FarmDocsResolvedConfig): number {\n  const toc = getThemeUI(docs).layout?.toc;\n  return toc && typeof toc === \"object\" && typeof toc.depth === \"number\" ? toc.depth : 3;\n}\n\nconst SIDEBAR_SECTION_ORDER = [\n  \"Start\",\n  \"Core\",\n  \"Data and APIs\",\n  \"Integrations\",\n  \"Runtime\",\n  \"Content\",\n  \"Extending\",\n  \"Reference\",\n];\n\nconst SIDEBAR_PAGE_ORDER = new Map(\n  [\n    \"\",\n    \"getting-started\",\n    \"project-structure\",\n    \"configuration\",\n    \"routing\",\n    \"layouts\",\n    \"server-rendering\",\n    \"middleware\",\n    \"query\",\n    \"api-routes\",\n    \"api-client\",\n    \"storage\",\n    \"integrations\",\n    \"integrations/stripe\",\n    \"integrations/autumn\",\n    \"integrations/polar\",\n    \"integrations/auth\",\n    \"integrations/email\",\n    \"integrations/jobs\",\n    \"integrations/unkey\",\n    \"integrations/ui-registry\",\n    \"integrations/orm-storage\",\n    \"cache-ppr\",\n    \"observability\",\n    \"deployment\",\n    \"docs-engine\",\n    \"markdown\",\n    \"openapi\",\n    \"plugins\",\n    \"plugins/create-plugin\",\n    \"cli\",\n    \"examples\",\n    \"reference\",\n  ].map((slug, index) => [slug, index]),\n);\n\ntype SidebarNavigationItem = {\n  label?: string;\n  icon?: string;\n  slug?: string;\n  href?: string;\n  children: SidebarNavigationItem[];\n};\n\nfunction isSidebarNavigationItem(\n  value: SidebarNavigationItem | null,\n): value is SidebarNavigationItem {\n  return value !== null;\n}\n\nfunction compareSidebarPages(a: FarmDocsPage, b: FarmDocsPage): number {\n  const aOrder = SIDEBAR_PAGE_ORDER.get(a.slug) ?? 1000;\n  const bOrder = SIDEBAR_PAGE_ORDER.get(b.slug) ?? 1000;\n  return aOrder - bOrder || a.title.localeCompare(b.title);\n}\n\nfunction getSidebarSection(page: FarmDocsPage): string {\n  if (page.section) return page.section;\n  if (page.slug.startsWith(\"integrations/\")) return \"Integrations\";\n  if (page.slug.startsWith(\"plugins/\")) return \"Extending\";\n  return \"Reference\";\n}\n\nfunction sidebarIdFor(section: string): string {\n  return `sidebar-${slugify(section)}`;\n}\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n  return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n  return typeof value === \"string\" ? value.trim() : undefined;\n}\n\nfunction normalizeSidebarSlug(value: string): string {\n  if (value === \"/\" || value === \".\") return \"\";\n  return trimSlashes(value);\n}\n\nfunction getSidebarNavigation(docs: FarmDocsResolvedConfig): SidebarNavigationItem[] {\n  const navigation = docs.config.navigation;\n  if (!isObjectRecord(navigation) || !Array.isArray(navigation.sidebar)) return [];\n  return navigation.sidebar.map(normalizeSidebarNavigationItem).filter(isSidebarNavigationItem);\n}\n\nfunction normalizeSidebarNavigationItem(value: unknown): SidebarNavigationItem | null {\n  if (!isObjectRecord(value)) return null;\n\n  const label = readString(value.label) ?? readString(value.title);\n  const icon = readString(value.icon);\n  const slug = readOptionalString(value.slug) ?? readOptionalString(value.path);\n  const href = readString(value.href) ?? readString(value.url);\n  const rawChildren = Array.isArray(value.children)\n    ? value.children\n    : Array.isArray(value.items)\n      ? value.items\n      : [];\n  const children = rawChildren.map(normalizeSidebarNavigationItem).filter(isSidebarNavigationItem);\n\n  if (!label && !slug && !href && children.length === 0) return null;\n  return {\n    ...(label ? { label } : {}),\n    ...(icon ? { icon } : {}),\n    ...(slug !== undefined ? { slug: normalizeSidebarSlug(slug) } : {}),\n    ...(href ? { href } : {}),\n    children,\n  };\n}\n\nfunction createSidebarPageMaps(pages: FarmDocsPage[]) {\n  return {\n    bySlug: new Map(pages.map((page) => [page.slug, page])),\n    byHref: new Map(pages.map((page) => [page.href, page])),\n  };\n}\n\nfunction resolveConfiguredSidebarPage(\n  item: SidebarNavigationItem,\n  maps: ReturnType<typeof createSidebarPageMaps>,\n): FarmDocsPage | undefined {\n  if (item.slug !== undefined) return maps.bySlug.get(item.slug);\n  if (item.href) return maps.byHref.get(item.href);\n  return undefined;\n}\n\nfunction getSidebarIconRegistry(docs: FarmDocsResolvedConfig): Record<string, unknown> {\n  return isObjectRecord(docs.config.icons) ? docs.config.icons : {};\n}\n\nfunction renderConfiguredIconSvg(value: unknown): string {\n  if (typeof value !== \"string\") return \"\";\n  const icon = value.trim();\n  if (!icon) return \"\";\n  if (/^<svg[\\s>]/i.test(icon)) return icon;\n  if (/^<(path|circle|rect|line|polyline|polygon|ellipse|g)\\b/i.test(icon)) {\n    return `<svg viewBox=\"0 0 24 24\" focusable=\"false\">${icon}</svg>`;\n  }\n  return \"\";\n}\n\nfunction renderSidebarIcon(\n  docs: FarmDocsResolvedConfig,\n  icon: string | undefined,\n  className = \"sidebar-icon fd-sidebar-icon\",\n): string {\n  if (!icon) return \"\";\n  const iconRegistry = getSidebarIconRegistry(docs);\n  const configuredIcon = iconRegistry[icon] ?? icon;\n  const svg = renderConfiguredIconSvg(configuredIcon);\n  if (!svg) return \"\";\n  return `<span class=\"${className}\" data-sidebar-icon=\"${escapeAttribute(icon)}\" aria-hidden=\"true\">${svg}</span>`;\n}\n\nfunction renderSidebarLabel(\n  docs: FarmDocsResolvedConfig,\n  icon: string | undefined,\n  label: string,\n  className: string,\n): string {\n  return `<span class=\"${className}\">${renderSidebarIcon(docs, icon)}<span class=\"sidebar-label-text\">${escapeHtml(label)}</span></span>`;\n}\n\nfunction getSidebarPageLabel(item: FarmDocsPage, configured?: SidebarNavigationItem): string {\n  if (configured?.label) return configured.label;\n  if (item.slug === \"\") return \"Why?\";\n  if (item.slug === \"integrations\") return \"Overview\";\n  if (item.slug === \"integrations/ui-registry\") return \"UI Registry\";\n  if (item.slug === \"integrations/orm-storage\") return \"ORM Storage\";\n  if (item.slug.startsWith(\"integrations/\")) {\n    return item.title.replace(/\\s+Integrations?$/i, \"\");\n  }\n  return item.title;\n}\n\nfunction renderSidebarLink(\n  item: FarmDocsPage,\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n  configured?: SidebarNavigationItem,\n): string {\n  const active = item.href === activeHref;\n  return `<a class=\"fd-sidebar-link${active ? \" fd-sidebar-link-active\" : \"\"}\" data-active=\"${active ? \"true\" : \"false\"}\" href=\"${escapeAttribute(item.href)}\">${renderSidebarLabel(docs, configured?.icon, getSidebarPageLabel(item, configured), \"sidebar-link-label fd-sidebar-link-label\")}</a>`;\n}\n\nfunction collectConfiguredSidebarPages(\n  items: SidebarNavigationItem[],\n  maps: ReturnType<typeof createSidebarPageMaps>,\n  seen = new Set<string>(),\n): FarmDocsPage[] {\n  const ordered: FarmDocsPage[] = [];\n  for (const item of items) {\n    const page = resolveConfiguredSidebarPage(item, maps);\n    if (page && !seen.has(page.slug)) {\n      seen.add(page.slug);\n      ordered.push(page);\n    }\n    ordered.push(...collectConfiguredSidebarPages(item.children, maps, seen));\n  }\n  return ordered;\n}\n\nfunction getOrderedSidebarPages(\n  pages: FarmDocsPage[],\n  docs?: FarmDocsResolvedConfig,\n): FarmDocsPage[] {\n  if (!docs) return [...pages].sort(compareSidebarPages);\n\n  const maps = createSidebarPageMaps(pages);\n  const configuredPages = collectConfiguredSidebarPages(getSidebarNavigation(docs), maps);\n  if (configuredPages.length === 0) return [...pages].sort(compareSidebarPages);\n\n  const configuredSlugs = new Set(configuredPages.map((page) => page.slug));\n  const remainingPages = pages\n    .filter((page) => !configuredSlugs.has(page.slug))\n    .sort(compareSidebarPages);\n  return [...configuredPages, ...remainingPages];\n}\n\nfunction renderExternalSidebarLink(\n  item: SidebarNavigationItem,\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  if (!item.href || !item.label) return \"\";\n  const active = item.href === activeHref;\n  return `<a class=\"fd-sidebar-link${active ? \" fd-sidebar-link-active\" : \"\"}\" data-active=\"${active ? \"true\" : \"false\"}\" href=\"${escapeAttribute(item.href)}\">${renderSidebarLabel(docs, item.icon, item.label, \"sidebar-link-label fd-sidebar-link-label\")}</a>`;\n}\n\nfunction renderConfiguredSidebarSubgroup(\n  item: SidebarNavigationItem,\n  childHtml: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  const label = item.label;\n  if (!label) return childHtml;\n  return `<div class=\"sidebar-subgroup fd-sidebar-folder\" data-sidebar-subgroup=\"${escapeAttribute(slugify(label))}\">\n  <div class=\"sidebar-subgroup-title fd-sidebar-folder-trigger\">${renderSidebarLabel(docs, item.icon, label, \"sidebar-subgroup-label\")}</div>\n  <div class=\"sidebar-subgroup-content fd-sidebar-folder-content\">\n${childHtml}\n  </div>\n</div>`;\n}\n\nfunction renderConfiguredSidebarItems(\n  items: SidebarNavigationItem[],\n  maps: ReturnType<typeof createSidebarPageMaps>,\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  const renderedItems: string[] = [];\n  for (const item of items) {\n    const page = resolveConfiguredSidebarPage(item, maps);\n    const childHtml = renderConfiguredSidebarItems(item.children, maps, activeHref, docs);\n\n    if (item.children.length > 0) {\n      renderedItems.push(renderConfiguredSidebarSubgroup(item, childHtml, docs));\n      continue;\n    }\n\n    const linkHtml = page\n      ? renderSidebarLink(page, activeHref, docs, item)\n      : renderExternalSidebarLink(item, activeHref, docs);\n    if (linkHtml) renderedItems.push(linkHtml);\n  }\n  return renderedItems.join(\"\\n\");\n}\n\nfunction renderConfiguredSidebarSection(\n  section: SidebarNavigationItem,\n  maps: ReturnType<typeof createSidebarPageMaps>,\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  const label = section.label || \"Docs\";\n  const id = sidebarIdFor(label);\n  const links = renderConfiguredSidebarItems(section.children, maps, activeHref, docs);\n  return `<div class=\"sidebar-folder fd-sidebar-folder\" data-state=\"open\">\n  <button class=\"text-fd-muted-foreground sidebar-folder-trigger fd-sidebar-folder-trigger\" type=\"button\" aria-controls=\"${escapeAttribute(id)}\" aria-expanded=\"true\">${renderSidebarLabel(docs, section.icon, label, \"sidebar-folder-label\")}</button>\n  <div id=\"${escapeAttribute(id)}\" class=\"overflow-hidden sidebar-folder-content fd-sidebar-folder-content\" data-state=\"open\">\n${links}\n  </div>\n</div>`;\n}\n\nfunction renderAutoSidebarSectionItems(\n  items: FarmDocsPage[],\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  return [...items]\n    .sort(compareSidebarPages)\n    .map((item) => renderSidebarLink(item, activeHref, docs))\n    .join(\"\\n\");\n}\n\nfunction renderPixelNavItems(\n  pages: FarmDocsPage[],\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  const configuredSidebar = getSidebarNavigation(docs);\n  if (configuredSidebar.length > 0) {\n    const maps = createSidebarPageMaps(pages);\n    const renderedSections = configuredSidebar\n      .map((section) => {\n        if (section.children.length > 0) {\n          return renderConfiguredSidebarSection(section, maps, activeHref, docs);\n        }\n        const page = resolveConfiguredSidebarPage(section, maps);\n        return page\n          ? renderSidebarLink(page, activeHref, docs, section)\n          : renderExternalSidebarLink(section, activeHref, docs);\n      })\n      .filter(Boolean)\n      .join(\"\\n\");\n\n    return `<div class=\"sidebar-scroll overscroll-contain fd-sidebar-nav\">\n  <div class=\"sidebar-tree\">\n${renderedSections}\n  </div>\n</div>`;\n  }\n\n  const groups = new Map<string, FarmDocsPage[]>();\n  for (const item of pages) {\n    const group = item.slug === \"\" ? \"Start\" : getSidebarSection(item);\n    const entries = groups.get(group) ?? [];\n    entries.push(item);\n    groups.set(group, entries);\n  }\n\n  const renderedSections = Array.from(groups.entries())\n    .sort(([a], [b]) => {\n      const aOrder = SIDEBAR_SECTION_ORDER.indexOf(a);\n      const bOrder = SIDEBAR_SECTION_ORDER.indexOf(b);\n      return (aOrder === -1 ? 100 : aOrder) - (bOrder === -1 ? 100 : bOrder) || a.localeCompare(b);\n    })\n    .map(([section, items]) => {\n      const id = sidebarIdFor(section);\n      const links = renderAutoSidebarSectionItems(items, activeHref, docs);\n      return `<div class=\"sidebar-folder fd-sidebar-folder\" data-state=\"open\">\n  <button class=\"text-fd-muted-foreground sidebar-folder-trigger fd-sidebar-folder-trigger\" type=\"button\" aria-controls=\"${escapeAttribute(id)}\" aria-expanded=\"true\">${renderSidebarLabel(docs, undefined, section, \"sidebar-folder-label\")}</button>\n  <div id=\"${escapeAttribute(id)}\" class=\"overflow-hidden sidebar-folder-content fd-sidebar-folder-content\" data-state=\"open\">\n${links}\n  </div>\n</div>`;\n    })\n    .join(\"\\n\");\n\n  return `<div class=\"sidebar-scroll overscroll-contain fd-sidebar-nav\">\n  <div class=\"sidebar-tree\">\n${renderedSections}\n  </div>\n</div>`;\n}\n\nfunction renderPixelPageNav(\n  pages: FarmDocsPage[],\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  const orderedPages = getOrderedSidebarPages(pages, docs);\n  const activeIndex = orderedPages.findIndex((item) => item.href === activeHref);\n  if (activeIndex === -1) return \"\";\n\n  const previous = orderedPages[activeIndex - 1];\n  const next = orderedPages[activeIndex + 1];\n  if (!previous && !next) return \"\";\n\n  const renderChevron = (direction: \"prev\" | \"next\") =>\n    `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"${direction === \"prev\" ? \"15 18 9 12 15 6\" : \"9 18 15 12 9 6\"}\" /></svg>`;\n  const renderCard = (item: FarmDocsPage, direction: \"prev\" | \"next\") =>\n    `<a class=\"fd-page-nav-card fd-page-nav-${direction}\" href=\"${escapeAttribute(item.href)}\">\n  <span class=\"fd-page-nav-title fd-page-nav-title-${direction}\">${direction === \"prev\" ? `${renderChevron(direction)}${escapeHtml(item.title)}` : `${escapeHtml(item.title)}${renderChevron(direction)}`}</span>\n  <span class=\"fd-page-nav-description\">${direction === \"prev\" ? \"Previous Page\" : \"Next Page\"}</span>\n</a>`;\n\n  return `<nav class=\"not-prose fd-page-nav\" aria-label=\"Page navigation\">\n  ${previous ? renderCard(previous, \"prev\") : \"\"}\n  ${next ? renderCard(next, \"next\") : \"\"}\n</nav>`;\n}\n\nfunction titleizePathSegment(value: string): string {\n  return value.replace(/[-_]+/g, \" \").replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction isBreadcrumbEnabled(docs: FarmDocsResolvedConfig): boolean {\n  const breadcrumb = docs.config.breadcrumb;\n  if (breadcrumb === false) return false;\n  if (breadcrumb && typeof breadcrumb === \"object\" && \"enabled\" in breadcrumb) {\n    return (breadcrumb as { enabled?: unknown }).enabled !== false;\n  }\n  return true;\n}\n\nfunction renderPixelBreadcrumb(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n  if (!isBreadcrumbEnabled(docs)) return \"\";\n\n  const segments = trimSlashes(page.slug).split(\"/\").filter(Boolean);\n  if (segments.length < 2) return \"\";\n\n  const parentSegments = segments.slice(0, -1);\n  const parentSegment = parentSegments[parentSegments.length - 1];\n  const currentSegment = segments[segments.length - 1];\n  const entry = normalizeEntry(docs.entry);\n  const parentPath = parentSegments.join(\"/\");\n  const parentHref = entry === \"/\" ? `/${parentPath}` : `${entry}/${parentPath}`;\n\n  return `<nav class=\"fd-breadcrumb\" aria-label=\"Breadcrumb\">\n  <span class=\"fd-breadcrumb-item\">\n    <a class=\"fd-breadcrumb-parent fd-breadcrumb-link\" href=\"${escapeAttribute(parentHref)}\">${escapeHtml(titleizePathSegment(parentSegment))}</a>\n  </span>\n  <span class=\"fd-breadcrumb-item\">\n    <span class=\"fd-breadcrumb-sep\">/</span>\n    <span class=\"fd-breadcrumb-current\">${escapeHtml(titleizePathSegment(currentSegment))}</span>\n  </span>\n</nav>`;\n}\n\nfunction renderDocsSearchTrigger(showIcon = true, className = \"\"): string {\n  return `<button class=\"fd-docs-search-trigger ${className}\" type=\"button\" data-search-full=\"\" aria-label=\"Search documentation\" aria-haspopup=\"dialog\" aria-keyshortcuts=\"Meta+K Control+K\">\n  ${showIcon ? '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"11\" cy=\"11\" r=\"7\"></circle><path d=\"m20 20-4-4\"></path></svg>' : \"\"}\n  <kbd><span>⌘</span><span>K</span></kbd>\n</button>`;\n}\n\nfunction renderDocsSearchMount(clientEntry: string): string {\n  return `<div id=\"farm-docs-search-root\" data-farm-docs-search-root data-api=\"/api/docs\"></div>\n  <script type=\"module\" src=\"${escapeAttribute(clientEntry)}\"></script>`;\n}\n\nfunction renderDocsSearchBootstrapScript(): string {\n  return `<script>${generateFarmDocsSearchBootstrapRuntime()}</script>`;\n}\n\nfunction renderPixelToc(items: TocItem[]): string {\n  if (items.length === 0) return '<p class=\"toc-empty\">No sections</p>';\n  return `<div class=\"toc-track fd-toc-list\">\n  <div class=\"toc-thumb\" data-toc-thumb style=\"clip-path: polygon(0 0px, 100% 0px, 100% 32px, 0 32px);\"></div>\n  <div class=\"toc-links\">\n${items\n  .map(\n    (item) =>\n      `<a class=\"toc-link fd-toc-link${items[0] === item ? \" fd-toc-link-active\" : \"\"}\" data-active=\"${items[0] === item ? \"true\" : \"false\"}\" data-toc-item data-depth=\"${item.level}\" href=\"#${escapeAttribute(item.id)}\">${escapeHtml(item.title)}</a>`,\n  )\n  .join(\"\\n\")}\n  </div>\n</div>`;\n}\n\nfunction renderDocsRuntimeScript(docs: FarmDocsResolvedConfig): string {\n  const docsEntry = JSON.stringify(normalizeEntry(docs.entry));\n  const reconcileHeadRuntime = `const farmNavigationHeadSelector=${JSON.stringify(FARM_NAVIGATION_HEAD_SELECTOR)};const reconcileDocsHead=(nextDoc)=>{const nextTitle=nextDoc.querySelector(\"title\");document.title=nextTitle?.textContent||\"\";document.head.querySelectorAll(farmNavigationHeadSelector).forEach((node)=>node.remove());nextDoc.head.querySelectorAll(farmNavigationHeadSelector).forEach((node)=>document.head.appendChild(document.importNode(node,true)))}`;\n  return `<script>(()=>{if(window.__farmDocsRuntime)return;window.__farmDocsRuntime=true;document.documentElement.dataset.farmDocsRuntime=\"true\";document.documentElement.dataset.farmDocsRuntimeId=Math.random().toString(36).slice(2);${reconcileHeadRuntime};const docsEntry=${docsEntry};let cleanupToc=()=>{};let closeMobileSidebar=()=>{};const normalizePath=(path)=>path.length>1?path.replace(/\\\\/+$/,\"\"):path;const isDocsPath=(path)=>{const next=normalizePath(path);const entry=normalizePath(docsEntry);if(next.endsWith(\".md\"))return false;if(entry===\"/\")return true;return next===entry||next.startsWith(entry+\"/\")};const initToc=()=>{cleanupToc();const toc=document.getElementById(\"nd-toc\");if(!toc){cleanupToc=()=>{};return}const links=Array.from(toc.querySelectorAll(\"[data-toc-item]\"));const thumb=toc.querySelector(\"[data-toc-thumb]\");const pairs=links.map((link)=>{let id=link.hash.slice(1);try{id=decodeURIComponent(id)}catch{}return{link,heading:document.getElementById(id)}}).filter((item)=>item.heading);const setActive=(active)=>{for(const {link} of pairs){const selected=link===active.link;link.dataset.active=selected?\"true\":\"false\";link.classList.toggle(\"fd-toc-link-active\",selected)}if(!thumb)return;const styles=getComputedStyle(active.link);const top=active.link.offsetTop+parseFloat(styles.paddingTop||\"0\");const bottom=active.link.offsetTop+active.link.clientHeight-parseFloat(styles.paddingBottom||\"0\");thumb.style.clipPath=\"polygon(0 \"+top+\"px,100% \"+top+\"px,100% \"+bottom+\"px,0 \"+bottom+\"px)\"};const update=()=>{if(pairs.length===0)return;const offset=Math.min(window.innerHeight*0.3,160);let active=pairs[0];for(const pair of pairs){if(pair.heading.getBoundingClientRect().top<=offset)active=pair;else break}setActive(active)};let frame=0;const schedule=()=>{if(frame)return;frame=requestAnimationFrame(()=>{frame=0;update()})};const onHashChange=()=>setTimeout(schedule,0);window.addEventListener(\"scroll\",schedule,{passive:true});window.addEventListener(\"resize\",schedule);window.addEventListener(\"hashchange\",onHashChange);cleanupToc=()=>{window.removeEventListener(\"scroll\",schedule);window.removeEventListener(\"resize\",schedule);window.removeEventListener(\"hashchange\",onHashChange);if(frame)cancelAnimationFrame(frame);frame=0};update()};const getSidebar=()=>document.getElementById(\"nd-sidebar\");const ensureActiveVisible=()=>{const sidebar=getSidebar();if(!sidebar)return;const active=sidebar.querySelector('a[data-active=\"true\"]');if(!(active instanceof HTMLElement))return;const activeRect=active.getBoundingClientRect();const sidebarRect=sidebar.getBoundingClientRect();if(activeRect.top<sidebarRect.top||activeRect.bottom>sidebarRect.bottom)sidebar.scrollTop+=activeRect.top-sidebarRect.top-(sidebar.clientHeight-activeRect.height)/2};const setSidebarActive=(path)=>{const sidebar=getSidebar();if(!sidebar)return;const current=normalizePath(path);for(const link of Array.from(sidebar.querySelectorAll(\"a[href]\"))){try{link.dataset.active=normalizePath(new URL(link.href,location.href).pathname)===current?\"true\":\"false\"}catch{}}ensureActiveVisible()};const initMobileSidebar=()=>{const layout=document.getElementById(\"nd-docs-layout\");const sidebar=getSidebar();const toggle=document.querySelector(\"[data-sidebar-toggle]\");const backdrop=document.querySelector(\"[data-sidebar-backdrop]\");if(!layout||!sidebar||!(toggle instanceof HTMLButtonElement))return;const setOpen=(open)=>{layout.dataset.sidebarOpen=open?\"true\":\"false\";sidebar.classList.toggle(\"fd-sidebar-open\",open);document.documentElement.dataset.farmDocsSidebar=open?\"open\":\"closed\";toggle.setAttribute(\"aria-expanded\",open?\"true\":\"false\");toggle.setAttribute(\"aria-label\",open?\"Close menu\":\"Open menu\")};const toggleOpen=()=>setOpen(layout.dataset.sidebarOpen!==\"true\");closeMobileSidebar=()=>setOpen(false);toggle.addEventListener(\"click\",(event)=>{event.preventDefault();toggleOpen()});backdrop?.addEventListener(\"click\",()=>closeMobileSidebar());document.addEventListener(\"keydown\",(event)=>{if(event.key===\"Escape\")closeMobileSidebar()});sidebar.addEventListener(\"click\",(event)=>{const target=event.target instanceof Element?event.target.closest(\"a[href]\"):null;if(target)closeMobileSidebar()});closeMobileSidebar()};const initSidebarScroll=()=>{const sidebar=getSidebar();if(!sidebar)return;const key=\"farmdocs:sidebar-scroll:\"+location.origin;const getStorage=()=>{try{return window.sessionStorage}catch{return null}};const readSaved=()=>{try{const raw=getStorage()?.getItem(key);if(!raw)return null;const parsed=JSON.parse(raw);return parsed&&typeof parsed===\"object\"?parsed:null}catch{return null}};const save=(path=location.pathname)=>{try{getStorage()?.setItem(key,JSON.stringify({path,scrollTop:sidebar.scrollTop}))}catch{}};const saved=readSaved();if(saved?.path===location.pathname&&Number.isFinite(Number(saved.scrollTop)))sidebar.scrollTop=Number(saved.scrollTop);ensureActiveVisible();save();sidebar.addEventListener(\"scroll\",()=>save(),{passive:true});sidebar.addEventListener(\"click\",(event)=>{const target=event.target instanceof Element?event.target.closest(\"a[href]\"):null;if(!target)return;try{save(new URL(target.href,location.href).pathname)}catch{save()}});window.addEventListener(\"beforeunload\",()=>save())};let navigateController=null;const getPageKey=(root)=>{const article=root.getElementById(\"nd-page\");if(!article)return\"\";return article.querySelector(\"h1\")?.textContent?.trim()||article.textContent?.replace(/\\\\s+/g,\" \").trim().slice(0,160)||\"\"};const swapDocsPage=(html,url)=>{const nextDoc=new DOMParser().parseFromString(html,\"text/html\");const nextArticle=nextDoc.getElementById(\"nd-page\");const currentArticle=document.getElementById(\"nd-page\");if(!nextArticle||!currentArticle)return false;const nextKey=getPageKey(nextDoc);const importedArticle=document.importNode(nextArticle,true);currentArticle.replaceWith(importedArticle);const renderedArticle=document.getElementById(\"nd-page\");if(!renderedArticle||renderedArticle===currentArticle||(nextKey&&getPageKey(document)!==nextKey))return false;const nextToc=nextDoc.getElementById(\"nd-toc\");const currentToc=document.getElementById(\"nd-toc\");if(nextToc&&currentToc)currentToc.replaceWith(document.importNode(nextToc,true));reconcileDocsHead(nextDoc);setSidebarActive(url.pathname);initToc();closeMobileSidebar();return true};const navigateDocs=async(url,{replace=false,scroll=true}={})=>{if(!isDocsPath(url.pathname))return false;if(navigateController)navigateController.abort();const controller=new AbortController();navigateController=controller;document.documentElement.dataset.farmDocsNavigating=\"true\";try{const response=await fetch(url.href,{cache:\"no-store\",headers:{accept:\"text/html\",\"x-farm-docs-navigate\":\"1\"},signal:controller.signal});if(!response.ok||!((response.headers.get(\"content-type\")||\"\").includes(\"text/html\")))return false;const html=await response.text();if(!swapDocsPage(html,url))return false;if(replace)history.replaceState({farmDocs:true},\"\",url.href);else history.pushState({farmDocs:true},\"\",url.href);if(scroll){if(url.hash){let id=url.hash.slice(1);try{id=decodeURIComponent(id)}catch{}document.getElementById(id)?.scrollIntoView({block:\"start\"})}else window.scrollTo({top:0,left:0})}return true}catch(error){if(error?.name===\"AbortError\")return true;return false}finally{if(navigateController===controller){delete document.documentElement.dataset.farmDocsNavigating;navigateController=null}}};const initClientNavigation=()=>{document.addEventListener(\"click\",(event)=>{if(event.defaultPrevented||event.button!==0||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey)return;const target=event.target instanceof Element?event.target.closest(\"a[href]\"):null;if(!target||target.target||target.hasAttribute(\"download\"))return;let url;try{url=new URL(target.href,location.href)}catch{return}if(url.origin!==location.origin||!isDocsPath(url.pathname))return;if(normalizePath(url.pathname)===normalizePath(location.pathname)&&url.hash)return;event.preventDefault();navigateDocs(url).then((handled)=>{if(!handled)location.href=url.href})});window.addEventListener(\"popstate\",()=>{navigateDocs(new URL(location.href),{replace:true,scroll:false}).then((handled)=>{if(!handled)location.reload()})})};const init=()=>{initToc();initMobileSidebar();initSidebarScroll();initClientNavigation()};if(document.readyState===\"loading\")document.addEventListener(\"DOMContentLoaded\",init,{once:true});else init()})();</script>`;\n}\n\nfunction renderDocsPageActionsRuntimeScript(): string {\n  return `<script>(()=>{if(window.__farmDocsPageActionsRuntime)return;window.__farmDocsPageActionsRuntime=true;const readArticleText=()=>{const article=document.getElementById(\"nd-page\");if(!article)return\"\";const clone=article.cloneNode(true);if(!(clone instanceof HTMLElement))return article.innerText||\"\";clone.querySelectorAll(\"[data-page-actions],.fd-page-footer,.fd-page-nav\").forEach((node)=>node.remove());return clone.innerText||\"\"};const withTitle=(content,format,includeTitle)=>{if(!includeTitle)return content;const title=document.querySelector(\"#nd-page h1\")?.textContent?.trim()||document.title.trim();if(!title)return content;const trimmed=content.trimStart();if(trimmed.startsWith(title)||trimmed.startsWith(\"# \"+title))return content;return format===\"markdown\"?\"# \"+title+\"\\\\n\\\\n\"+content:title+\"\\\\n\\\\n\"+content};const writeClipboard=async(text)=>{if(navigator.clipboard?.writeText){try{await navigator.clipboard.writeText(text);return}catch{}}const textarea=document.createElement(\"textarea\");textarea.value=text;textarea.setAttribute(\"readonly\",\"\");textarea.style.position=\"fixed\";textarea.style.opacity=\"0\";textarea.style.pointerEvents=\"none\";document.body.appendChild(textarea);textarea.select();document.execCommand(\"copy\");textarea.remove()};const markCopied=(button)=>{const label=button.querySelector(\"[data-page-action-label]\");button.dataset.copied=\"true\";button.setAttribute(\"aria-label\",button.dataset.copiedLabel||\"Copied!\");button.title=button.dataset.copiedLabel||\"Copied!\";if(label)label.textContent=button.dataset.copiedLabel||\"Copied!\";const previous=Number(button.dataset.copyTimeout||0);if(previous)clearTimeout(previous);button.dataset.copyTimeout=String(setTimeout(()=>{button.dataset.copied=\"false\";button.setAttribute(\"aria-label\",button.dataset.copyLabel||\"Copy page\");button.title=button.dataset.copyLabel||\"Copy page\";if(label)label.textContent=button.dataset.copyLabel||\"Copy page\";button.dataset.copyTimeout=\"0\"},4500))};document.addEventListener(\"click\",async(event)=>{const target=event.target instanceof Element?event.target.closest('[data-page-action=\"copy-markdown\"]'):null;if(!(target instanceof HTMLButtonElement))return;event.preventDefault();const format=target.dataset.copyMarkdownFormat===\"text\"?\"text\":\"markdown\";const includeTitle=target.dataset.copyMarkdownIncludeTitle===\"true\";let content=\"\";target.disabled=true;try{if(format===\"markdown\"&&target.dataset.markdownUrl){try{const response=await fetch(target.dataset.markdownUrl,{headers:{Accept:\"text/markdown\"}});if(response.ok)content=await response.text()}catch{}}if(!content)content=readArticleText();content=withTitle(content,format,includeTitle);if(content.trim()){await writeClipboard(content);markCopied(target)}}finally{target.disabled=false}})})();</script>`;\n}\n\nfunction renderDocsHashRuntimeScript(): string {\n  return `<script>(()=>{if(window.__farmDocsHashRuntime)return;window.__farmDocsHashRuntime=true;const scrollToHash=()=>{if(!location.hash)return;let id=location.hash.slice(1);try{id=decodeURIComponent(id)}catch{}document.getElementById(id)?.scrollIntoView({block:\"start\"})};const schedule=()=>requestAnimationFrame(()=>requestAnimationFrame(scrollToHash));if(document.readyState===\"loading\")document.addEventListener(\"DOMContentLoaded\",schedule,{once:true});else schedule();window.addEventListener(\"load\",schedule,{once:true});window.addEventListener(\"hashchange\",schedule)})();</script>`;\n}\n\nfunction renderDocsRuntimeScripts(docs: FarmDocsResolvedConfig): string {\n  return `${renderDocsRuntimeScript(docs)}\n${renderDocsHashRuntimeScript()}\n${renderDocsPageActionsRuntimeScript()}`;\n}\n\nfunction renderFarmDocsFontPreloads(fontAssets: readonly FarmDocsPublicFontAsset[]): string {\n  return fontAssets\n    .map(\n      ({ url }) =>\n        `<link rel=\"preload\" href=\"${escapeAttribute(url)}\" as=\"font\" type=\"font/woff2\" crossorigin>`,\n    )\n    .join(\"\\n  \");\n}\n\nfunction renderFarmDocsFontPreloadHeader(fontAssets: readonly FarmDocsPublicFontAsset[]): string {\n  return fontAssets\n    .map(({ url }) => `<${url}>; rel=preload; as=font; type=font/woff2; crossorigin`)\n    .join(\", \");\n}\n\nfunction getFarmLayoutFontPreloads(layoutFonts?: FarmLayoutFonts) {\n  const seen = new Set<string>();\n  return [layoutFonts?.body, layoutFonts?.code].flatMap((font) =>\n    (font?.preloads || []).filter(({ href }) => {\n      if (seen.has(href)) return false;\n      seen.add(href);\n      return true;\n    }),\n  );\n}\n\nfunction renderFarmLayoutFontPreloadHeader(layoutFonts?: FarmLayoutFonts): string {\n  return getFarmLayoutFontPreloads(layoutFonts)\n    .map(({ href, type }) => `<${href}>; rel=preload; as=font; type=${type}; crossorigin`)\n    .join(\", \");\n}\n\nfunction renderPixelDocsHtml(\n  page: LoadedFarmDocsPage,\n  pages: FarmDocsPage[],\n  docs: FarmDocsResolvedConfig,\n  clientEntry: string,\n  faviconHref: string,\n  requestUrl: URL,\n  fontAssets: readonly FarmDocsPublicFontAsset[],\n  fontStylesheetHref?: string,\n  globalStylesheetHref?: string,\n): string {\n  const navTitle =\n    typeof docs.config.nav === \"object\" && docs.config.nav && \"title\" in docs.config.nav\n      ? String((docs.config.nav as { title?: unknown }).title || \"Docs\")\n      : \"Docs\";\n  const description = page.description || docs.config.metadata?.description || \"\";\n  // Rendering and TOC extraction share the same preprocessed Marked pass. This\n  // guarantees MDX lines removed before rendering, Setext/CommonMark edge\n  // cases, and duplicate-slug counters cannot diverge between the article and\n  // its navigation.\n  const renderedMarkdown = renderMarkdownDocument(page.body, getThemeTocDepth(docs));\n  const tocItems = renderedMarkdown.tocItems;\n  const themeName = getThemeName(docs);\n  const searchEnabled = isFarmDocsSearchEnabled(docs);\n  const socialMetadata = isFarmDocsSocialImageEnabled(page, docs)\n    ? renderFarmDocsSocialMetadata(\n        createFarmDocsSocialImageDescriptor(page, docs, requestUrl),\n        getFarmDocsCustomSocialImage(page),\n      )\n    : \"\";\n\n  return `<!DOCTYPE html>\n<html class=\"dark\" lang=\"en\" data-docs-theme=\"${escapeAttribute(themeName)}\">\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <meta name=\"generator\" content=\"@farming-labs/docs via Farm.js\">\n  <title>${escapeHtml(page.title)}</title>\n  ${renderFarmDocsFaviconLink(faviconHref)}\n  ${renderFarmDocsFontPreloads(fontAssets)}\n  ${fontStylesheetHref ? `<link rel=\"stylesheet\" href=\"${escapeAttribute(fontStylesheetHref)}\">` : \"\"}\n  ${globalStylesheetHref ? `<link rel=\"stylesheet\" href=\"${escapeAttribute(globalStylesheetHref)}\">` : \"\"}\n  ${description ? `<meta name=\"description\" content=\"${escapeHtml(description)}\">` : \"\"}\n  ${socialMetadata}\n  ${searchEnabled ? renderDocsSearchBootstrapScript() : \"\"}\n</head>\n<body>\n  <div id=\"nd-docs-layout\" class=\"fd-layout\" data-fd-framework=\"farmjs\">\n    <header class=\"mobile-topbar fd-header\" aria-label=\"Mobile docs navigation\">\n      <button class=\"fd-mobile-nav-btn fd-menu-btn\" type=\"button\" data-sidebar-toggle aria-controls=\"nd-sidebar\" aria-expanded=\"false\" aria-label=\"Open menu\">\n        <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line><line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"></line></svg>\n      </button>\n      <a class=\"fd-header-title\" href=\"/\">${escapeHtml(navTitle)}</a>\n      <div class=\"mobile-topbar-actions\">\n        ${searchEnabled ? renderDocsSearchTrigger(true, \"fd-search-trigger-mobile\") : \"\"}\n        <a class=\"mobile-topbar-link\" href=\"/llms.txt\">llms.txt</a>\n      </div>\n    </header>\n    <aside id=\"nd-sidebar\" class=\"fd-sidebar\">\n      <div class=\"sidebar-brand fd-sidebar-header\">\n        <a class=\"fd-sidebar-title\" href=\"/\">${renderFarmDocsBrandMark()}${renderFarmDocsBrandTitle(navTitle)}</a>\n        <span>/ docs</span>\n      </div>\n      ${searchEnabled ? `<div class=\"fd-sidebar-search\">${renderDocsSearchTrigger(true, \"fd-sidebar-search-btn\")}</div>` : \"\"}\n      ${renderPixelNavItems(pages, page.href, docs)}\n    </aside>\n    <div class=\"sidebar-backdrop fd-sidebar-overlay\" data-sidebar-backdrop></div>\n    <main class=\"fd-main\">\n      <div class=\"fd-page\">\n      <article id=\"nd-page\" class=\"prose fd-page-article fd-page-body fd-docs-content\">\n        ${renderPixelBreadcrumb(page, docs)}\n${renderMarkdownHtmlWithTitleMeta(page, docs, renderedMarkdown.html)}\n        ${renderPixelPageFooter(page, docs)}\n        ${renderPixelPageNav(pages, page.href, docs)}\n      </article>\n      <nav id=\"nd-toc\" class=\"fd-toc sticky top-(--fd-docs-row-1) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))] flex flex-col [grid-area:toc] w-(--fd-toc-width) pt-12 pe-4 pb-2 max-xl:hidden\" data-toc aria-labelledby=\"toc-title\">\n      <div class=\"fd-toc-inner\">\n        <h3 id=\"toc-title\" class=\"fd-toc-title inline-flex items-center gap-1.5 text-sm text-fd-muted-foreground\"><svg class=\"size-4\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 7h16\"></path><path d=\"M4 12h16\"></path><path d=\"M4 17h16\"></path></svg>On this page</h3>\n        <div class=\"toc-scroll\">\n          ${renderPixelToc(tocItems)}\n        </div>\n      </div>\n    </nav>\n      </div>\n    </main>\n  </div>\n  ${searchEnabled ? renderDocsSearchMount(clientEntry) : \"\"}\n  ${renderDocsRuntimeScripts(docs)}\n</body>\n</html>`;\n}\n\nexport function createFarmDocsHandler(\n  docs: FarmDocsResolvedConfig | undefined,\n  options: FarmDocsHandlerOptions,\n) {\n  const faviconHref = resolveFarmDocsFavicon(docs, options);\n  const fontAssets =\n    options.fontAssets ?? toFarmDocsPublicFontAssets(resolveFarmDocsFontAssets(options.root));\n  const fallbackFontPreloadHeader = renderFarmDocsFontPreloadHeader(fontAssets);\n\n  return async function handleFarmDocsRequest(request: Request): Promise<Response | null> {\n    if (!docs?.enabled || (request.method !== \"GET\" && request.method !== \"HEAD\")) return null;\n\n    const contentDir = resolveFarmDocsContentDir(docs, options);\n    const requestUrl = new URL(request.url);\n    const socialImageSlug = getFarmDocsSocialImageSlug(docs, requestUrl);\n    if (socialImageSlug !== null) {\n      const socialImagePage = loadFarmDocsPage(contentDir, docs, socialImageSlug);\n      if (\n        !socialImagePage ||\n        !isFarmDocsSocialImageEnabled(socialImagePage, docs) ||\n        getFarmDocsCustomSocialImage(socialImagePage)\n      ) {\n        return null;\n      }\n\n      const descriptor = createFarmDocsSocialImageDescriptor(socialImagePage, docs, requestUrl);\n      if (requestUrl.pathname !== descriptor.imagePath) return null;\n\n      const etag = `\"${descriptor.hash}\"`;\n      const immutable = requestUrl.searchParams.get(\"v\") === descriptor.hash;\n      const headers = new Headers({\n        \"Content-Type\": \"image/svg+xml; charset=utf-8\",\n        \"Cache-Control\": immutable\n          ? \"public, max-age=31536000, immutable\"\n          : \"public, max-age=0, must-revalidate\",\n        ETag: etag,\n        \"X-Content-Type-Options\": \"nosniff\",\n      });\n      if (matchesFarmIfNoneMatch(request.headers.get(\"if-none-match\"), etag)) {\n        return new Response(null, { status: 304, headers });\n      }\n      if (request.method === \"HEAD\") return new Response(null, { status: 200, headers });\n\n      return new Response(renderFarmDocsSocialImageSvg(descriptor), { status: 200, headers });\n    }\n\n    const publicResponse = createFarmDocsPublicResponse(contentDir, docs, request);\n    if (publicResponse) return omitFarmDocsHeadBody(request, publicResponse);\n\n    if (!isFarmDocsRequest(docs, request)) return null;\n\n    const page = loadPage(contentDir, docs, request);\n    if (!page) return null;\n\n    if (shouldReturnMarkdown(request)) {\n      const origin = new URL(request.url).origin;\n      return omitFarmDocsHeadBody(\n        request,\n        new Response(\n          renderDocsMarkdownDocument(toFarmDocsMarkdownPage(page), {\n            origin,\n            llms: docs.config.llmsTxt ?? true,\n            sitemap: docs.config.sitemap,\n          }),\n          {\n            status: 200,\n            headers: {\n              \"Content-Type\": \"text/markdown; charset=utf-8\",\n              \"Cache-Control\": \"public, max-age=60\",\n            },\n          },\n        ),\n      );\n    }\n\n    const pathname = new URL(request.url).pathname;\n    const layoutFonts = await options.resolveLayoutFonts?.(pathname);\n    const usesLayoutFonts = Boolean(layoutFonts?.body || layoutFonts?.code);\n    const activeFontAssets = usesLayoutFonts ? [] : fontAssets;\n    const fontPreloadHeader = usesLayoutFonts\n      ? renderFarmLayoutFontPreloadHeader(layoutFonts)\n      : fallbackFontPreloadHeader;\n\n    return omitFarmDocsHeadBody(\n      request,\n      new Response(\n        renderPixelDocsHtml(\n          page,\n          discoverFarmDocsPages(contentDir, docs),\n          docs,\n          options.clientEntry || \"/farm-client.js\",\n          faviconHref,\n          requestUrl,\n          activeFontAssets,\n          usesLayoutFonts ? options.fontStylesheetHref : undefined,\n          options.globalStylesheetHref,\n        ),\n        {\n          status: 200,\n          headers: {\n            \"Content-Type\": \"text/html; charset=utf-8\",\n            \"Cache-Control\": \"public, s-maxage=60, stale-while-revalidate=300\",\n            ...(fontPreloadHeader ? { Link: fontPreloadHeader } : {}),\n          },\n        },\n      ),\n    );\n  };\n}\n","import { execFileSync } from \"node:child_process\";\nimport { existsSync, readFileSync, readdirSync, realpathSync, statSync } from \"node:fs\";\nimport path from \"node:path\";\n\nexport const FARM_DOCS_LAST_MODIFIED_MANIFEST = \".farm-docs-last-modified.json\";\n\nexport interface FarmDocsLastModifiedManifest {\n  version: 1;\n  pages: Record<string, string>;\n}\n\nexport interface CreateFarmDocsLastModifiedManifestOptions {\n  fallback?: \"mtime\" | \"now\";\n  now?: Date;\n}\n\nconst COMMIT_MARKER = \"__FARM_DOCS_COMMIT__\";\nconst DOCS_FILE_EXTENSIONS = new Set([\".md\", \".mdx\"]);\nconst manifestCache = new Map<\n  string,\n  {\n    signature: string;\n    manifest: FarmDocsLastModifiedManifest;\n  }\n>();\n\nfunction normalizeRelativePath(value: string): string {\n  return value.replace(/\\\\/g, \"/\").replace(/^\\.\\/+/, \"\");\n}\n\nfunction resolveExistingPath(filePath: string): string {\n  try {\n    return realpathSync(filePath);\n  } catch {\n    return path.resolve(filePath);\n  }\n}\n\nfunction isDocsSourceFile(filePath: string): boolean {\n  return DOCS_FILE_EXTENSIONS.has(path.extname(filePath).toLowerCase());\n}\n\nfunction discoverDocsSourceFiles(contentDir: string): string[] {\n  const files: string[] = [];\n\n  const visit = (dir: string) => {\n    for (const entry of readdirSync(dir, { withFileTypes: true }).sort((a, b) =>\n      a.name.localeCompare(b.name),\n    )) {\n      if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n\n      const absolutePath = path.join(dir, entry.name);\n      if (entry.isDirectory()) {\n        visit(absolutePath);\n      } else if (entry.isFile() && isDocsSourceFile(absolutePath)) {\n        files.push(absolutePath);\n      }\n    }\n  };\n\n  if (existsSync(contentDir)) visit(contentDir);\n  return files;\n}\n\nfunction getGitLastModifiedDates(contentDir: string): Record<string, string> {\n  try {\n    const gitRoot = execFileSync(\"git\", [\"-C\", contentDir, \"rev-parse\", \"--show-toplevel\"], {\n      encoding: \"utf8\",\n      stdio: [\"ignore\", \"pipe\", \"ignore\"],\n    }).trim();\n    if (!gitRoot) return {};\n\n    const contentPathspec = normalizeRelativePath(path.relative(gitRoot, contentDir)) || \".\";\n    const contentPrefix = contentPathspec === \".\" ? \"\" : `${contentPathspec}/`;\n    const history = execFileSync(\n      \"git\",\n      [\n        \"-C\",\n        gitRoot,\n        \"-c\",\n        \"core.quotePath=false\",\n        \"log\",\n        `--format=${COMMIT_MARKER}%cI`,\n        \"--name-only\",\n        \"--\",\n        contentPathspec,\n      ],\n      {\n        encoding: \"utf8\",\n        stdio: [\"ignore\", \"pipe\", \"ignore\"],\n        maxBuffer: 32 * 1024 * 1024,\n      },\n    );\n\n    const pages: Record<string, string> = {};\n    let commitDate: string | undefined;\n\n    for (const rawLine of history.split(/\\r?\\n/)) {\n      const line = normalizeRelativePath(rawLine.trim());\n      if (!line) continue;\n\n      if (line.startsWith(COMMIT_MARKER)) {\n        commitDate = line.slice(COMMIT_MARKER.length);\n        continue;\n      }\n      if (!commitDate || (contentPrefix && !line.startsWith(contentPrefix))) continue;\n\n      const relativePath = contentPrefix ? line.slice(contentPrefix.length) : line;\n      if (isDocsSourceFile(relativePath) && !pages[relativePath]) {\n        pages[relativePath] = commitDate;\n      }\n    }\n\n    return pages;\n  } catch {\n    return {};\n  }\n}\n\nfunction readManifest(contentDir: string): FarmDocsLastModifiedManifest | null {\n  const manifestPath = path.join(contentDir, FARM_DOCS_LAST_MODIFIED_MANIFEST);\n  if (!existsSync(manifestPath)) return null;\n\n  try {\n    const parsed = JSON.parse(\n      readFileSync(manifestPath, \"utf8\"),\n    ) as Partial<FarmDocsLastModifiedManifest>;\n    if (parsed.version !== 1 || !parsed.pages || typeof parsed.pages !== \"object\") return null;\n\n    const pages = Object.fromEntries(\n      Object.entries(parsed.pages).filter(\n        (entry): entry is [string, string] => typeof entry[1] === \"string\" && entry[1].length > 0,\n      ),\n    );\n    return { version: 1, pages };\n  } catch {\n    return null;\n  }\n}\n\nexport function createFarmDocsLastModifiedManifest(\n  contentDir: string,\n  options: CreateFarmDocsLastModifiedManifestOptions = {},\n): FarmDocsLastModifiedManifest {\n  const resolvedContentDir = resolveExistingPath(contentDir);\n  const gitDates = getGitLastModifiedDates(resolvedContentDir);\n  const fallbackDate = (options.now ?? new Date()).toISOString();\n  const pages: Record<string, string> = {};\n\n  for (const sourcePath of discoverDocsSourceFiles(resolvedContentDir)) {\n    const relativePath = normalizeRelativePath(path.relative(resolvedContentDir, sourcePath));\n    pages[relativePath] =\n      gitDates[relativePath] ||\n      (options.fallback === \"now\" ? fallbackDate : statSync(sourcePath).mtime.toISOString());\n  }\n\n  return { version: 1, pages };\n}\n\nfunction getLastModifiedManifest(contentDir: string): FarmDocsLastModifiedManifest {\n  const resolvedContentDir = resolveExistingPath(contentDir);\n  const manifestPath = path.join(resolvedContentDir, FARM_DOCS_LAST_MODIFIED_MANIFEST);\n  const manifestStat = existsSync(manifestPath) ? statSync(manifestPath) : null;\n  const signature = manifestStat\n    ? `file:${manifestStat.mtimeMs}:${manifestStat.size}`\n    : \"generated\";\n  const cached = manifestCache.get(resolvedContentDir);\n  if (cached?.signature === signature) return cached.manifest;\n\n  const manifest =\n    readManifest(resolvedContentDir) ?? createFarmDocsLastModifiedManifest(resolvedContentDir);\n  manifestCache.set(resolvedContentDir, { signature, manifest });\n  return manifest;\n}\n\nexport function resolveFarmDocsPageLastModified(\n  contentDir: string,\n  sourcePath: string,\n  frontmatter: Record<string, string>,\n): string {\n  const configured =\n    frontmatter.lastModified ||\n    frontmatter.lastmod ||\n    frontmatter.lastUpdated ||\n    frontmatter.updatedAt;\n  if (configured) return configured;\n\n  const resolvedContentDir = resolveExistingPath(contentDir);\n  const resolvedSourcePath = resolveExistingPath(sourcePath);\n  const relativePath = normalizeRelativePath(path.relative(resolvedContentDir, resolvedSourcePath));\n  const isInsideContentDir =\n    relativePath !== \"..\" && !relativePath.startsWith(\"../\") && !path.isAbsolute(relativePath);\n\n  if (isInsideContentDir) {\n    const generated = getLastModifiedManifest(resolvedContentDir).pages[relativePath];\n    if (generated) return generated;\n  }\n\n  return statSync(resolvedSourcePath).mtime.toISOString();\n}\n","import { createHash } from \"node:crypto\";\nimport type { LoadedFarmDocsPage } from \"./handler\";\nimport type {\n  FarmDocsResolvedConfig,\n  FarmDocsSocialImageConfig,\n  FarmDocsSocialImageFonts,\n} from \"./types\";\n\nexport const FARM_DOCS_SOCIAL_IMAGE_WIDTH = 1200;\nexport const FARM_DOCS_SOCIAL_IMAGE_HEIGHT = 630;\n\nexport interface FarmDocsSocialImageDescriptor {\n  title: string;\n  description: string;\n  section: string;\n  siteName: string;\n  brand: string;\n  pageHref: string;\n  pageUrl: string;\n  imagePath: string;\n  imageUrl: string;\n  imageAlt: string;\n  illustration: FarmDocsSocialImageIllustration;\n  fonts?: FarmDocsSocialImageFonts;\n  hash: string;\n}\n\nexport type FarmDocsSocialImageIllustration =\n  | \"auth\"\n  | \"cache\"\n  | \"cli\"\n  | \"integrations\"\n  | \"project\"\n  | \"routing\"\n  | \"runtime\";\n\nconst FARM_DOCS_SOCIAL_IMAGE_VERSION = 3;\n\nfunction normalizeEntry(entry: string): string {\n  if (!entry || entry === \"/\") return \"\";\n  return `/${entry.replace(/^\\/+|\\/+$/g, \"\")}`;\n}\n\nfunction encodeSlugPath(slug: string): string {\n  return slug\n    .split(\"/\")\n    .filter(Boolean)\n    .map((segment) => encodeURIComponent(segment))\n    .join(\"/\");\n}\n\nfunction getSocialImageConfig(docs: FarmDocsResolvedConfig): FarmDocsSocialImageConfig | undefined {\n  return typeof docs.config.socialImage === \"object\" && docs.config.socialImage\n    ? docs.config.socialImage\n    : undefined;\n}\n\nfunction getNavTitle(docs: FarmDocsResolvedConfig): string {\n  if (typeof docs.config.nav !== \"object\" || !docs.config.nav || !(\"title\" in docs.config.nav)) {\n    return \"Farm.js\";\n  }\n  return String((docs.config.nav as { title?: unknown }).title || \"Farm.js\");\n}\n\nfunction isFalse(value: string | undefined): boolean {\n  return value ? /^(false|no|none|off|disabled)$/i.test(value.trim()) : false;\n}\n\nfunction isExternalOrRootPath(value: string): boolean {\n  return /^(https?:)?\\/\\//i.test(value) || value.startsWith(\"/\");\n}\n\nexport function isFarmDocsSocialImageEnabled(\n  page: LoadedFarmDocsPage,\n  docs: FarmDocsResolvedConfig,\n): boolean {\n  if (docs.config.socialImage === false || getSocialImageConfig(docs)?.enabled === false) {\n    return false;\n  }\n  return !isFalse(page.frontmatter.socialImage);\n}\n\nexport function getFarmDocsCustomSocialImage(page: LoadedFarmDocsPage): string | undefined {\n  const value =\n    page.frontmatter.socialImage || page.frontmatter.openGraphImage || page.frontmatter.ogImage;\n  return value && !isFalse(value) && isExternalOrRootPath(value) ? value : undefined;\n}\n\nfunction resolveIllustration(page: LoadedFarmDocsPage): FarmDocsSocialImageIllustration {\n  const explicit = page.frontmatter.socialIllustration?.toLowerCase();\n  if (\n    explicit === \"auth\" ||\n    explicit === \"cache\" ||\n    explicit === \"cli\" ||\n    explicit === \"integrations\" ||\n    explicit === \"project\" ||\n    explicit === \"routing\" ||\n    explicit === \"runtime\"\n  ) {\n    return explicit;\n  }\n\n  const source = `${page.slug} ${page.title} ${page.section || \"\"}`.toLowerCase();\n  if (/auth|session|security|csrf/.test(source)) return \"auth\";\n  if (/cache|ppr|render|static|revalid|stream/.test(source)) return \"cache\";\n  if (/integration|stripe|prisma|better.auth|email|job|workflow/.test(source)) {\n    return \"integrations\";\n  }\n  if (/cli|test|deploy|preview|upgrade|migration|install/.test(source)) return \"cli\";\n  if (/project|structure|config|environment|markdown|docs.engine/.test(source)) {\n    return \"project\";\n  }\n  if (/rout|endpoint|middleware|navigation|server.function|server.action|api/.test(source)) {\n    return \"routing\";\n  }\n  return \"runtime\";\n}\n\nfunction createHashValue(value: unknown): string {\n  return createHash(\"sha256\").update(JSON.stringify(value)).digest(\"hex\").slice(0, 16);\n}\n\nfunction resolveBaseUrl(requestUrl: URL, config: FarmDocsSocialImageConfig | undefined): URL {\n  return config?.baseUrl ? new URL(config.baseUrl) : new URL(requestUrl.origin);\n}\n\nexport function createFarmDocsSocialImageDescriptor(\n  page: LoadedFarmDocsPage,\n  docs: FarmDocsResolvedConfig,\n  requestUrl: URL,\n): FarmDocsSocialImageDescriptor {\n  const config = getSocialImageConfig(docs);\n  const siteName = config?.siteName || getNavTitle(docs);\n  const brand = config?.brand || siteName;\n  const title = page.frontmatter.socialTitle || page.title;\n  const description =\n    page.frontmatter.socialDescription ||\n    page.description ||\n    docs.config.metadata?.description ||\n    `Documentation for ${siteName}`;\n  const section = page.frontmatter.section || page.section || \"Documentation\";\n  const illustration = resolveIllustration(page);\n  const entry = normalizeEntry(docs.entry);\n  const slugPath = encodeSlugPath(page.slug) || \"index\";\n  const imagePath = `${entry}/_social/${slugPath}/opengraph-image.svg`;\n  const baseUrl = resolveBaseUrl(requestUrl, config);\n  const pageUrl = new URL(page.href, baseUrl).href;\n  const imageAlt = `${title} — ${siteName} documentation`;\n  const hash = createHashValue({\n    version: FARM_DOCS_SOCIAL_IMAGE_VERSION,\n    title,\n    description,\n    section,\n    siteName,\n    brand,\n    pageHref: page.href,\n    illustration,\n    fonts: config?.fonts,\n  });\n\n  return {\n    title,\n    description,\n    section,\n    siteName,\n    brand,\n    pageHref: page.href,\n    pageUrl,\n    imagePath,\n    imageUrl: new URL(`${imagePath}?v=${hash}`, baseUrl).href,\n    imageAlt,\n    illustration,\n    fonts: config?.fonts,\n    hash,\n  };\n}\n\nexport function getFarmDocsSocialImageSlug(\n  docs: FarmDocsResolvedConfig,\n  requestUrl: URL,\n): string | null {\n  const entry = normalizeEntry(docs.entry);\n  const prefix = `${entry}/_social/`;\n  const suffix = \"/opengraph-image.svg\";\n  if (!requestUrl.pathname.startsWith(prefix) || !requestUrl.pathname.endsWith(suffix)) {\n    return null;\n  }\n\n  const rawSlug = requestUrl.pathname.slice(prefix.length, -suffix.length);\n  if (!rawSlug) return null;\n  try {\n    const slug = rawSlug\n      .split(\"/\")\n      .map((segment) => decodeURIComponent(segment))\n      .join(\"/\");\n    if (slug.split(\"/\").some((segment) => !segment || segment === \"..\" || segment === \".\")) {\n      return null;\n    }\n    return slug === \"index\" ? \"\" : slug;\n  } catch {\n    return null;\n  }\n}\n\nfunction escapeXml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&apos;\");\n}\n\nfunction truncate(value: string, length: number): string {\n  if (value.length <= length) return value;\n  return `${value.slice(0, Math.max(0, length - 1)).trimEnd()}…`;\n}\n\nfunction wrapText(value: string, maxCharacters: number, maxLines: number): string[] {\n  const words = value.trim().split(/\\s+/).filter(Boolean);\n  const lines: string[] = [];\n  let current = \"\";\n  let consumedWords = 0;\n\n  for (const word of words) {\n    const candidate = current ? `${current} ${word}` : word;\n    if (candidate.length <= maxCharacters || !current) {\n      current = candidate;\n      consumedWords += 1;\n      continue;\n    }\n    lines.push(current);\n    if (lines.length === maxLines) break;\n    current = word;\n    consumedWords += 1;\n  }\n\n  if (current && lines.length < maxLines) lines.push(current);\n  if (consumedWords < words.length && lines.length) {\n    lines[lines.length - 1] = truncate(`${lines[lines.length - 1]}…`, maxCharacters);\n  }\n  return lines;\n}\n\nfunction renderTextLines(\n  lines: string[],\n  x: number,\n  y: number,\n  lineHeight: number,\n  attributes: string,\n): string {\n  return lines\n    .map(\n      (line, index) =>\n        `<text x=\"${x}\" y=\"${y + index * lineHeight}\" ${attributes}>${escapeXml(line)}</text>`,\n    )\n    .join(\"\");\n}\n\nfunction renderEmbeddedFont(name: string, source: string | undefined, weight: string): string {\n  if (!source) return \"\";\n  return `@font-face{font-family:\"${name}\";src:url(\"${escapeXml(source)}\") format(\"woff2\");font-style:normal;font-weight:${weight};font-display:block;}`;\n}\n\nfunction renderArrow(x1: number, y: number, x2: number, color = \"#8b8b8b\"): string {\n  return `<path d=\"M${x1} ${y}H${x2 - 9}\" fill=\"none\" stroke=\"${color}\"/><path d=\"m${x2 - 9} ${y - 5} 9 5-9 5\" fill=\"none\" stroke=\"${color}\"/>`;\n}\n\nfunction renderPanelHeader(label: string, status: string): string {\n  return `<text x=\"819\" y=\"171\" class=\"label\">${escapeXml(label)}</text><text x=\"1134\" y=\"171\" class=\"label bright\" text-anchor=\"end\">${escapeXml(status)}</text>`;\n}\n\nfunction renderRoutingIllustration(): string {\n  return `${renderPanelHeader(\"ROUTE BLUEPRINT\", \"TYPED\")}\n    <rect x=\"819\" y=\"296\" width=\"92\" height=\"54\" fill=\"#a3a3a3\"/>\n    <text x=\"832\" y=\"327\" class=\"diagram-title ink\">src/app</text>\n    <path d=\"M911 323h41M952 232v181M952 232h44M952 323h44M952 413h44\" fill=\"none\" stroke=\"#696969\"/>\n    <rect x=\"996\" y=\"205\" width=\"138\" height=\"54\" fill=\"#0a0a0a\" stroke=\"#414141\"/>\n    <text x=\"1010\" y=\"228\" class=\"diagram-title\">/</text><text x=\"1010\" y=\"246\" class=\"micro\">STATIC</text>\n    <rect x=\"996\" y=\"296\" width=\"138\" height=\"54\" fill=\"#0a0a0a\" stroke=\"#414141\"/>\n    <text x=\"1010\" y=\"319\" class=\"diagram-title\">/blog/:slug</text><text x=\"1010\" y=\"337\" class=\"micro\">DYNAMIC</text>\n    <rect x=\"996\" y=\"386\" width=\"138\" height=\"55\" fill=\"#f0f0f0\"/>\n    <text x=\"1010\" y=\"410\" class=\"diagram-title ink\">/docs/:path*</text><text x=\"1010\" y=\"428\" class=\"micro ink-muted\">CATCH-ALL</text>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">FILE ROUTES</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">TYPES INCLUDED</text>`;\n}\n\nfunction renderAuthIllustration(): string {\n  return `${renderPanelHeader(\"REQUEST GUARD\", \"SERVER VERIFIED\")}\n    <rect x=\"819\" y=\"269\" width=\"86\" height=\"54\" fill=\"#0a0a0a\" stroke=\"#454545\"/>\n    <text x=\"837\" y=\"292\" class=\"micro bright\">REQUEST</text><text x=\"837\" y=\"310\" class=\"diagram-title\">GET /app</text>\n    ${renderArrow(905, 296, 943)}\n    <rect x=\"943\" y=\"224\" width=\"104\" height=\"118\" fill=\"#f0f0f0\"/>\n    <path d=\"M974 271v-12a21 21 0 0 1 42 0v12M968 271h54v45h-54z\" fill=\"#050505\"/>\n    <circle cx=\"995\" cy=\"292\" r=\"4\" fill=\"#f0f0f0\"/><path d=\"M995 296v8\" stroke=\"#f0f0f0\" stroke-width=\"3\"/>\n    <text x=\"995\" y=\"332\" class=\"micro ink\" text-anchor=\"middle\">auth()</text>\n    ${renderArrow(1047, 296, 1071)}\n    <rect x=\"1071\" y=\"269\" width=\"63\" height=\"54\" fill=\"#0a0a0a\" stroke=\"#454545\"/>\n    <text x=\"1082\" y=\"292\" class=\"micro bright\">ALLOW</text><text x=\"1082\" y=\"310\" class=\"micro\">/app</text>\n    <rect x=\"819\" y=\"372\" width=\"315\" height=\"38\" fill=\"#090909\" stroke=\"#3d3d3d\"/>\n    <rect x=\"832\" y=\"385\" width=\"11\" height=\"11\" fill=\"#a3a3a3\"/>\n    <text x=\"856\" y=\"395\" class=\"code\">session.user / verified</text>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">SESSION TYPED</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">CSRF PROTECTED</text>`;\n}\n\nfunction renderCacheIllustration(): string {\n  return `${renderPanelHeader(\"PAGE / PRODUCT\", \"CACHE + PPR\")}\n    <rect x=\"819\" y=\"204\" width=\"315\" height=\"54\" fill=\"#f0f0f0\"/>\n    <text x=\"836\" y=\"235\" class=\"diagram-title ink\">STATIC SHELL</text><text x=\"1116\" y=\"235\" class=\"micro ink-muted\" text-anchor=\"end\">BUILD</text>\n    <rect x=\"819\" y=\"271\" width=\"198\" height=\"76\" fill=\"#a3a3a3\"/>\n    <text x=\"836\" y=\"301\" class=\"diagram-title ink\">CACHED DATA</text><text x=\"836\" y=\"326\" class=\"micro ink-muted\">tag: products</text>\n    <rect x=\"1029\" y=\"271\" width=\"105\" height=\"76\" fill=\"#0a0a0a\" stroke=\"#555\"/>\n    <text x=\"1045\" y=\"301\" class=\"diagram-title\">LIVE</text><text x=\"1045\" y=\"326\" class=\"micro\">stream</text>\n    <path d=\"M1081 347v43m-8-9 8 9 8-9\" fill=\"none\" stroke=\"#d4d4d4\"/>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">STATIC FIRST</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">DYNAMIC WHERE NEEDED</text>`;\n}\n\nfunction renderIntegrationsIllustration(): string {\n  return `${renderPanelHeader(\"INTEGRATION GRAPH\", \"ONE PRODUCT\")}\n    <path d=\"M976 309H879V247M976 309H879v87M1030 309h93V247M1030 309h93v87\" fill=\"none\" stroke=\"#4a4a4a\"/>\n    <rect x=\"819\" y=\"214\" width=\"120\" height=\"57\" fill=\"#0a0a0a\" stroke=\"#4b4b4b\"/><text x=\"839\" y=\"247\" class=\"diagram-title\">BETTER AUTH</text>\n    <rect x=\"819\" y=\"368\" width=\"120\" height=\"57\" fill=\"#0a0a0a\" stroke=\"#4b4b4b\"/><text x=\"851\" y=\"401\" class=\"diagram-title\">PRISMA</text>\n    <rect x=\"1061\" y=\"214\" width=\"73\" height=\"57\" fill=\"#0a0a0a\" stroke=\"#4b4b4b\"/><text x=\"1077\" y=\"247\" class=\"diagram-title\">STRIPE</text>\n    <rect x=\"1061\" y=\"368\" width=\"73\" height=\"57\" fill=\"#a3a3a3\"/><text x=\"1075\" y=\"401\" class=\"diagram-title ink\">VERCEL</text>\n    <rect x=\"976\" y=\"277\" width=\"94\" height=\"64\" fill=\"#f0f0f0\"/>\n    <text x=\"994\" y=\"304\" class=\"diagram-title ink\">FARM.JS</text><text x=\"994\" y=\"324\" class=\"micro ink-muted\">CORE</text>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">BRING YOUR STACK</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">CONNECTED ONCE</text>`;\n}\n\nfunction renderCliIllustration(): string {\n  return `${renderPanelHeader(\"TERMINAL\", \"PRODUCTION OUTPUT\")}\n    <rect x=\"819\" y=\"203\" width=\"315\" height=\"213\" fill=\"#050505\" stroke=\"#555\"/>\n    <line x1=\"819\" y1=\"236\" x2=\"1134\" y2=\"236\" stroke=\"#555\"/>\n    <circle cx=\"837\" cy=\"220\" r=\"4\" fill=\"#5d5d5d\"/><circle cx=\"850\" cy=\"220\" r=\"4\" fill=\"#7a7a7a\"/><circle cx=\"863\" cy=\"220\" r=\"4\" fill=\"#a3a3a3\"/>\n    <text x=\"837\" y=\"273\" class=\"code bright\"><tspan fill=\"#7a7a7a\">$</tspan> farm build</text>\n    <rect x=\"837\" y=\"293\" width=\"11\" height=\"11\" fill=\"#a3a3a3\"/><path d=\"m839 298 3 3 6-7\" fill=\"none\" stroke=\"#050505\" stroke-width=\"1.5\"/>\n    <text x=\"861\" y=\"303\" class=\"code\">64 routes discovered</text>\n    <rect x=\"837\" y=\"320\" width=\"11\" height=\"11\" fill=\"#a3a3a3\"/><path d=\"m839 325 3 3 6-7\" fill=\"none\" stroke=\"#050505\" stroke-width=\"1.5\"/>\n    <text x=\"861\" y=\"330\" class=\"code\">client + server bundles</text>\n    <rect x=\"837\" y=\"355\" width=\"126\" height=\"30\" fill=\"#f0f0f0\"/><text x=\"853\" y=\"374\" class=\"micro ink\">BUILD COMPLETE</text>\n    <text x=\"1115\" y=\"374\" class=\"micro\" text-anchor=\"end\">/dist</text>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">REAL COMMANDS</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">842MS</text>`;\n}\n\nfunction renderProjectIllustration(): string {\n  return `${renderPanelHeader(\"PROJECT MAP\", \"CONVENTION TYPED\")}\n    <rect x=\"819\" y=\"202\" width=\"315\" height=\"216\" fill=\"#050505\" stroke=\"#555\"/>\n    <text x=\"837\" y=\"227\" class=\"diagram-title bright\">my-app/</text>\n    <path d=\"M847 243v143M847 259h23M847 293h23M847 327h23M847 361h23\" fill=\"none\" stroke=\"#666\"/>\n    <rect x=\"870\" y=\"243\" width=\"246\" height=\"33\" fill=\"#0a0a0a\" stroke=\"#444\"/><text x=\"886\" y=\"264\" class=\"code\">src/app</text><text x=\"1098\" y=\"264\" class=\"micro\" text-anchor=\"end\">ROUTES</text>\n    <rect x=\"870\" y=\"277\" width=\"246\" height=\"33\" fill=\"#f0f0f0\"/><text x=\"886\" y=\"298\" class=\"code ink\">src/app/page.tsx</text>\n    <rect x=\"870\" y=\"311\" width=\"246\" height=\"33\" fill=\"#0a0a0a\" stroke=\"#444\"/><text x=\"886\" y=\"332\" class=\"code\">src/app/api/users/route.ts</text><text x=\"1098\" y=\"332\" class=\"micro\" text-anchor=\"end\">API</text>\n    <rect x=\"870\" y=\"345\" width=\"246\" height=\"33\" fill=\"#0a0a0a\" stroke=\"#444\"/><text x=\"886\" y=\"366\" class=\"code\">farm.config.ts</text><text x=\"1098\" y=\"366\" class=\"micro\" text-anchor=\"end\">CONFIG</text>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">FILES BECOME FEATURES</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">ONE CONFIG</text>`;\n}\n\nfunction renderRuntimeIllustration(): string {\n  return `${renderPanelHeader(\"PRODUCT ARCHITECTURE\", \"FULL STACK\")}\n    <rect x=\"819\" y=\"211\" width=\"315\" height=\"55\" fill=\"#f0f0f0\"/>\n    <text x=\"836\" y=\"244\" class=\"diagram-title ink\">PRODUCT SURFACE</text><text x=\"1116\" y=\"244\" class=\"micro ink-muted\" text-anchor=\"end\">UI + ROUTES</text>\n    <path d=\"M976 266v20m0 61v20\" stroke=\"#727272\"/>\n    <rect x=\"855\" y=\"286\" width=\"242\" height=\"61\" fill=\"#a3a3a3\"/>\n    <text x=\"874\" y=\"314\" class=\"diagram-title ink\">APPLICATION CORE</text><text x=\"874\" y=\"334\" class=\"micro ink-muted\">APIS · MIDDLEWARE</text>\n    <rect x=\"819\" y=\"367\" width=\"315\" height=\"55\" fill=\"#4c4c4c\"/>\n    <text x=\"836\" y=\"400\" class=\"diagram-title bright\">CONNECTED STACK</text><text x=\"1116\" y=\"400\" class=\"micro\" text-anchor=\"end\">DATA · AUTH · DEPLOY</text>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">ONE FRAMEWORK</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">ONE DEPLOYMENT MODEL</text>`;\n}\n\nfunction renderIllustration(type: FarmDocsSocialImageIllustration): string {\n  switch (type) {\n    case \"auth\":\n      return renderAuthIllustration();\n    case \"cache\":\n      return renderCacheIllustration();\n    case \"cli\":\n      return renderCliIllustration();\n    case \"integrations\":\n      return renderIntegrationsIllustration();\n    case \"project\":\n      return renderProjectIllustration();\n    case \"routing\":\n      return renderRoutingIllustration();\n    default:\n      return renderRuntimeIllustration();\n  }\n}\n\nexport function renderFarmDocsSocialImageSvg(descriptor: FarmDocsSocialImageDescriptor): string {\n  const titleLines = wrapText(descriptor.title, 22, 2);\n  const longestTitleLine = Math.max(...titleLines.map((line) => line.length));\n  const titleSize = titleLines.length === 1 ? (longestTitleLine > 17 ? 62 : 74) : 56;\n  const titleLineHeight = Math.round(titleSize * 0.98);\n  const titleY = titleLines.length === 1 ? 294 : 266;\n  const descriptionY = titleY + (titleLines.length - 1) * titleLineHeight + 59;\n  const descriptionLines = wrapText(descriptor.description, 68, 2);\n  const routeY = Math.max(418, descriptionY + descriptionLines.length * 29 + 24);\n  const section = truncate(descriptor.section.toUpperCase(), 27);\n  const route = truncate(descriptor.pageHref, 42);\n  const footerUrl = truncate(descriptor.pageUrl.replace(/^https?:\\/\\//, \"\"), 70);\n  const brand = truncate(descriptor.brand.toUpperCase(), 25);\n  const titleId = `farm-docs-og-${descriptor.hash}`;\n\n  return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"${FARM_DOCS_SOCIAL_IMAGE_WIDTH}\" height=\"${FARM_DOCS_SOCIAL_IMAGE_HEIGHT}\" viewBox=\"0 0 ${FARM_DOCS_SOCIAL_IMAGE_WIDTH} ${FARM_DOCS_SOCIAL_IMAGE_HEIGHT}\" role=\"img\" aria-labelledby=\"${titleId}-title ${titleId}-description\">\n  <title id=\"${titleId}-title\">${escapeXml(descriptor.imageAlt)}</title>\n  <desc id=\"${titleId}-description\">${escapeXml(descriptor.description)}</desc>\n  <metadata>${escapeXml(JSON.stringify({ generator: \"Farm.js docs\", page: descriptor.pageUrl, illustration: descriptor.illustration }))}</metadata>\n  <style type=\"text/css\">\n    ${renderEmbeddedFont(\"Farm Sans\", descriptor.fonts?.sans, \"100 900\")}\n    ${renderEmbeddedFont(\"Farm Mono\", descriptor.fonts?.mono, \"100 900\")}\n    ${renderEmbeddedFont(\"Farm Pixel\", descriptor.fonts?.display, \"400 700\")}\n    .sans{font-family:\"Farm Sans\",\"Arial\",sans-serif}.mono,.label,.code,.diagram-title,.micro{font-family:\"Farm Mono\",\"Menlo\",\"DejaVu Sans Mono\",monospace}.pixel{font-family:\"Farm Pixel\",\"Farm Mono\",monospace}.label{fill:#8b8b8b;font-size:10px;font-weight:600;letter-spacing:1.2px}.code{fill:#8b8b8b;font-size:11px}.diagram-title{fill:#e7e7e7;font-size:11px;font-weight:650}.micro{fill:#777;font-size:8px;letter-spacing:.45px}.bright{fill:#f5f5f4}.ink{fill:#050505}.ink-muted{fill:#4c4c4c}\n  </style>\n  <defs>\n    <pattern id=\"canvas-grid\" width=\"40\" height=\"40\" patternUnits=\"userSpaceOnUse\"><path d=\"M40 0H0V40\" fill=\"none\" stroke=\"#151515\"/></pattern>\n    <pattern id=\"diagonal\" width=\"12\" height=\"12\" patternUnits=\"userSpaceOnUse\" patternTransform=\"rotate(45)\"><line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"12\" stroke=\"#171717\" stroke-width=\"2\"/></pattern>\n    <clipPath id=\"frame-clip\"><rect x=\"28\" y=\"28\" width=\"1144\" height=\"574\"/></clipPath>\n  </defs>\n  <rect width=\"1200\" height=\"630\" fill=\"#050505\"/>\n  <rect width=\"1200\" height=\"630\" fill=\"url(#canvas-grid)\"/>\n  <g clip-path=\"url(#frame-clip)\">\n    <rect x=\"28\" y=\"28\" width=\"1144\" height=\"574\" fill=\"#020202\"/>\n    <rect x=\"782\" y=\"114\" width=\"390\" height=\"411\" fill=\"url(#diagonal)\"/>\n  </g>\n  <rect x=\"28.5\" y=\"28.5\" width=\"1143\" height=\"573\" fill=\"none\" stroke=\"#323232\"/>\n  <path d=\"M28 114.5h1144M28 525.5h1144M781.5 114v411\" fill=\"none\" stroke=\"#303030\"/>\n\n  <g transform=\"translate(71 51)\">\n    <rect width=\"11\" height=\"11\" rx=\"1\" fill=\"#f5f5f4\"/><rect x=\"15\" width=\"28\" height=\"11\" rx=\"1\" fill=\"#f5f5f4\"/>\n    <rect y=\"15\" width=\"11\" height=\"11\" rx=\"1\" fill=\"#9b9b9b\"/><rect x=\"15\" y=\"15\" width=\"28\" height=\"11\" rx=\"1\" fill=\"#9b9b9b\"/>\n    <rect y=\"30\" width=\"11\" height=\"11\" rx=\"1\" fill=\"#5f5f5f\"/><rect x=\"15\" y=\"30\" width=\"20\" height=\"11\" rx=\"1\" fill=\"#5f5f5f\"/>\n    <text x=\"61\" y=\"24\" class=\"mono bright\" font-size=\"24\" font-weight=\"550\">FARM<tspan fill=\"#777\">.JS</tspan></text>\n    <text x=\"61\" y=\"43\" class=\"label\">BY FARMING LABS</text>\n  </g>\n  <text x=\"1134\" y=\"72\" class=\"label\" text-anchor=\"end\">${escapeXml(brand)} · DOCUMENTATION</text>\n\n  <text x=\"71\" y=\"198\" class=\"mono bright\" font-size=\"13\" font-weight=\"650\">DOCS</text>\n  <line x1=\"117\" y1=\"193\" x2=\"155\" y2=\"193\" stroke=\"#696969\"/>\n  <text x=\"166\" y=\"198\" class=\"mono\" fill=\"#9b9b9b\" font-size=\"13\">${escapeXml(section)}</text>\n  ${renderTextLines(titleLines, 71, titleY, titleLineHeight, `class=\"pixel bright\" font-size=\"${titleSize}\" font-weight=\"500\" letter-spacing=\"-2.4\"`)}\n  ${renderTextLines(descriptionLines, 71, descriptionY, 29, 'class=\"sans\" fill=\"#a3a3a3\" font-size=\"20\" font-weight=\"430\" letter-spacing=\"-.3\"')}\n  <rect x=\"71\" y=\"${routeY}\" width=\"${Math.min(390, 56 + route.length * 8)}\" height=\"36\" fill=\"#050505\" stroke=\"#3c3c3c\"/>\n  <text x=\"85\" y=\"${routeY + 23}\" class=\"mono bright\" font-size=\"11\" font-weight=\"600\">GET</text>\n  <text x=\"119\" y=\"${routeY + 23}\" class=\"mono\" fill=\"#898989\" font-size=\"11\">${escapeXml(route)}</text>\n\n  ${renderIllustration(descriptor.illustration)}\n\n  <text x=\"71\" y=\"570\" class=\"mono bright\" font-size=\"13\" font-weight=\"550\">${escapeXml(footerUrl)}</text>\n  <text x=\"1134\" y=\"570\" class=\"mono\" fill=\"#9b9b9b\" font-size=\"12\" text-anchor=\"end\">FARM.JS DOCUMENTATION</text>\n  <path d=\"M20 20h10M20 20v10M1180 20h-10M1180 20v10M20 610h10M20 610v-10M1180 610h-10M1180 610v-10\" fill=\"none\" stroke=\"#9b9b9b\"/>\n</svg>`;\n}\n\nexport function renderFarmDocsSocialMetadata(\n  descriptor: FarmDocsSocialImageDescriptor,\n  customImage?: string,\n): string {\n  const imageUrl = customImage\n    ? new URL(customImage, descriptor.pageUrl).href\n    : descriptor.imageUrl;\n  const customExtension = customImage?.toLowerCase().split(/[?#]/, 1)[0];\n  const imageType = customExtension?.endsWith(\".webp\")\n    ? \"image/webp\"\n    : customExtension?.endsWith(\".png\")\n      ? \"image/png\"\n      : customExtension?.match(/\\.jpe?g$/)\n        ? \"image/jpeg\"\n        : \"image/svg+xml\";\n  const tag = (property: string, content: string, name = false) =>\n    `<meta ${name ? \"name\" : \"property\"}=\"${property}\" content=\"${escapeXml(content)}\">`;\n\n  return [\n    tag(\"og:type\", \"article\"),\n    tag(\"og:site_name\", descriptor.siteName),\n    tag(\"og:title\", descriptor.title),\n    tag(\"og:description\", descriptor.description),\n    tag(\"og:url\", descriptor.pageUrl),\n    tag(\"og:image\", imageUrl),\n    tag(\"og:image:type\", imageType),\n    ...(customImage\n      ? []\n      : [\n          tag(\"og:image:width\", String(FARM_DOCS_SOCIAL_IMAGE_WIDTH)),\n          tag(\"og:image:height\", String(FARM_DOCS_SOCIAL_IMAGE_HEIGHT)),\n        ]),\n    tag(\"og:image:alt\", descriptor.imageAlt),\n    tag(\"twitter:card\", \"summary_large_image\", true),\n    tag(\"twitter:title\", descriptor.title, true),\n    tag(\"twitter:description\", descriptor.description, true),\n    tag(\"twitter:image\", imageUrl, true),\n    tag(\"twitter:image:alt\", descriptor.imageAlt, true),\n  ].join(\"\\n  \");\n}\n","import type { FarmLayoutFonts } from \"../font\";\nimport { resolveFarmDocsContentDir } from \"./handler\";\nimport type { FarmDocsResolvedConfig } from \"./types\";\n\ninterface FarmDocsAdapterServerModule {\n  createFarmDocsRuntimeHandler?: (\n    config: Record<string, unknown>,\n    options: {\n      rootDir: string;\n      clientEntry: string;\n      stylesheets: string[];\n      resolveLayoutFonts?: (\n        pathname: string,\n      ) => FarmLayoutFonts | undefined | Promise<FarmLayoutFonts | undefined>;\n      loadReactModule?: () => Promise<any>;\n    },\n  ) => (request: Request) => Promise<Response | null>;\n}\n\nexport interface FarmDocsAdapterHandlerOptions {\n  root: string;\n  srcDir?: string;\n  clientEntry: string;\n  fontStylesheetHref?: string;\n  globalStylesheetHref?: string;\n  resolveLayoutFonts?: (\n    pathname: string,\n  ) => FarmLayoutFonts | undefined | Promise<FarmLayoutFonts | undefined>;\n  loadModule: (specifier: string) => Promise<any>;\n}\n\nexport function hasFarmDocsRuntimeAdapter(\n  docs: FarmDocsResolvedConfig | undefined,\n): docs is FarmDocsResolvedConfig & { adapter: NonNullable<FarmDocsResolvedConfig[\"adapter\"]> } {\n  return Boolean(docs?.enabled && docs.adapter?.server && docs.adapter.react);\n}\n\n/**\n * Load a documentation runtime through the versioned adapter descriptor.\n *\n * Core deliberately knows nothing about the adapter's DOM or theme. It only\n * supplies host assets and Vite's module loader; the adapter returns the final\n * Web Request handler.\n */\nexport async function createFarmDocsAdapterHandler(\n  docs: FarmDocsResolvedConfig,\n  options: FarmDocsAdapterHandlerOptions,\n): Promise<(request: Request) => Promise<Response | null>> {\n  if (!hasFarmDocsRuntimeAdapter(docs)) {\n    throw new Error(\"Farm docs adapter requires server and react runtime entrypoints.\");\n  }\n\n  const serverModule = (await options.loadModule(\n    docs.adapter.server,\n  )) as FarmDocsAdapterServerModule;\n  if (typeof serverModule.createFarmDocsRuntimeHandler !== \"function\") {\n    const adapterId = JSON.stringify(docs.adapter.id);\n    const serverEntry = JSON.stringify(docs.adapter.server);\n    throw new Error(\n      `Farm docs adapter ${adapterId} does not export createFarmDocsRuntimeHandler from ${serverEntry}. ` +\n        \"Upgrade the adapter to a runtime-enabled release.\",\n    );\n  }\n\n  const runtimeConfig = {\n    ...docs.config,\n    entry: docs.config.entry || docs.entry.replace(/^\\/+|\\/+$/g, \"\") || \"docs\",\n    docsPath: docs.entry,\n    contentDir: resolveFarmDocsContentDir(docs, {\n      root: options.root,\n      srcDir: options.srcDir,\n    }),\n  };\n\n  return serverModule.createFarmDocsRuntimeHandler(runtimeConfig as Record<string, unknown>, {\n    rootDir: options.root,\n    clientEntry: options.clientEntry,\n    stylesheets: [options.fontStylesheetHref, options.globalStylesheetHref].filter(\n      (value): value is string => typeof value === \"string\" && value.length > 0,\n    ),\n    resolveLayoutFonts: options.resolveLayoutFonts,\n    loadReactModule: () => options.loadModule(docs.adapter.react!),\n  });\n}\n","import {\n  buildDocsAgentDiscoverySpec,\n  buildDocsConfigMap,\n  buildDocsDiagnostics as buildFarmingDocsDiagnostics,\n  buildDocsSitemapManifest,\n  performDocsSearch,\n  renderDocsAgentsDocument,\n  renderDocsLlmsTxt,\n  renderDocsMarkdownDocument,\n  renderDocsRobotsTxt,\n  renderDocsSitemapMarkdown,\n  renderDocsSitemapXml,\n  renderDocsSkillDocument,\n  type DocsConfig,\n  type DocsLlmsTxtPageInput,\n  type DocsSearchSourcePage,\n  type DocsSitemapPageInput,\n} from \"@farming-labs/docs\";\nimport { resolveDocsConfig } from \"../config\";\nimport type { FarmDocsResolvedConfig, FarmDocsUserConfig } from \"./types\";\nimport {\n  discoverFarmDocsPages,\n  type LoadedFarmDocsPage,\n  loadFarmDocsPage,\n  resolveFarmDocsContentDir,\n  toFarmDocsMarkdownPage,\n} from \"./handler\";\n\nexport interface FarmDocsAPIOptions {\n  rootDir?: string;\n  root?: string;\n  srcDir?: string;\n  docs?: FarmDocsUserConfig | FarmDocsResolvedConfig;\n  config?: Partial<DocsConfig>;\n  configPath?: string;\n  entry?: string;\n  docsPath?: string;\n  contentDir?: string;\n}\n\nexport interface FarmDocsCloudRouteOptions {\n  locale?: string;\n  publicBaseUrl?: string;\n}\n\nexport interface FarmDocsCloudServer {\n  handleRequest(request: Request, options?: FarmDocsCloudRouteOptions): Promise<Response>;\n}\n\nexport type FarmDocsCloudIntegration =\n  | FarmDocsCloudServer\n  | (FarmDocsCloudRouteOptions & { docsCloud?: FarmDocsCloudServer });\n\nexport interface FarmDocsAPIRouteHandlers {\n  GET(request: Request): Promise<Response>;\n  POST(request: Request): Promise<Response>;\n}\n\nexport type FarmDocsAPIHandler = (request: Request) => Promise<Response | null>;\n\ninterface FarmDocsAPIContext {\n  root: string;\n  srcDir: string;\n  docs: FarmDocsResolvedConfig;\n  contentDir: string;\n}\n\ntype JsonRecord = Record<string, unknown>;\ntype DocsAPIPathTarget = {\n  format?: string;\n  slug?: string;\n};\ntype FarmDocsRuntimeConfig = {\n  root?: string;\n  srcDir?: string;\n  docs?: FarmDocsResolvedConfig;\n};\n\ndeclare global {\n  // Injected by Farm's generated server entry so route wrappers can stay zero-config.\n  // eslint-disable-next-line no-var\n  var __FARM_DOCS_RUNTIME_CONFIG__: FarmDocsRuntimeConfig | undefined;\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isResolvedDocsConfig(value: unknown): value is FarmDocsResolvedConfig {\n  return (\n    isRecord(value) &&\n    typeof value.enabled === \"boolean\" &&\n    typeof value.entry === \"string\" &&\n    isRecord(value.config)\n  );\n}\n\nexport function isFarmDocsAPIRequest(requestOrPathname: Request | string): boolean {\n  const pathname =\n    typeof requestOrPathname === \"string\"\n      ? requestOrPathname\n      : new URL(requestOrPathname.url).pathname;\n\n  return pathname === \"/api/docs\" || pathname.startsWith(\"/api/docs/\");\n}\n\nfunction json(data: unknown, init: ResponseInit = {}): Response {\n  const headers = new Headers(init.headers);\n  if (!headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", \"application/json\");\n  }\n  return new Response(JSON.stringify(data), { ...init, headers });\n}\n\nfunction text(content: string, contentType: string, init: ResponseInit = {}): Response {\n  const headers = new Headers(init.headers);\n  headers.set(\"Content-Type\", contentType);\n  return new Response(content, { ...init, headers });\n}\n\nfunction omitHeadBody(response: Response): Response {\n  return new Response(null, {\n    status: response.status,\n    statusText: response.statusText,\n    headers: response.headers,\n  });\n}\n\nfunction normalizeAction(value: string | null | undefined): string | undefined {\n  return value?.trim().toLowerCase().replace(/_/g, \"-\") || undefined;\n}\n\nfunction getDocsTitle(docs: FarmDocsResolvedConfig): string {\n  return typeof docs.config.nav === \"object\" && docs.config.nav && \"title\" in docs.config.nav\n    ? String((docs.config.nav as { title?: unknown }).title || \"Documentation\")\n    : \"Documentation\";\n}\n\nfunction isDocsCloudServer(value: unknown): value is FarmDocsCloudServer {\n  return isRecord(value) && typeof value.handleRequest === \"function\";\n}\n\nfunction resolveDocsCloudIntegration(\n  integration?: FarmDocsCloudIntegration,\n): { docsCloud: FarmDocsCloudServer; routeOptions: FarmDocsCloudRouteOptions } | undefined {\n  if (!integration) return undefined;\n\n  if (isDocsCloudServer(integration)) {\n    return { docsCloud: integration, routeOptions: {} };\n  }\n\n  if (!integration.docsCloud) return undefined;\n\n  return {\n    docsCloud: integration.docsCloud,\n    routeOptions: {\n      locale: integration.locale,\n      publicBaseUrl: integration.publicBaseUrl,\n    },\n  };\n}\n\nfunction isDocsCloudGetRequest(request: Request): boolean {\n  const url = new URL(request.url);\n  const cloud = normalizeAction(url.searchParams.get(\"cloud\"));\n  const action = normalizeAction(url.searchParams.get(\"action\"));\n  const format = normalizeAction(url.searchParams.get(\"format\"));\n\n  return (\n    cloud === \"config\" ||\n    cloud === \"public-config\" ||\n    action === \"cloud-config\" ||\n    action === \"docs-cloud-config\" ||\n    format === \"cloud-config\" ||\n    format === \"docs-cloud-config\"\n  );\n}\n\nfunction isDocsCloudAction(action: string | undefined): boolean {\n  return Boolean(\n    action &&\n    [\"analytics\", \"track\", \"track-event\", \"event\", \"ask-ai\", \"ai\", \"chat\", \"docs-cloud\"].includes(\n      action,\n    ),\n  );\n}\n\nasync function readJson(request: Request): Promise<unknown> {\n  try {\n    return await request.clone().json();\n  } catch {\n    return undefined;\n  }\n}\n\nasync function isDocsCloudPostRequest(request: Request): Promise<boolean> {\n  const url = new URL(request.url);\n  const cloud = normalizeAction(url.searchParams.get(\"cloud\"));\n  const action = normalizeAction(url.searchParams.get(\"action\"));\n\n  if (isDocsCloudAction(cloud) || isDocsCloudAction(action)) return true;\n\n  const body = await readJson(request);\n  if (!isRecord(body)) return false;\n\n  const bodyAction = normalizeAction(typeof body.action === \"string\" ? body.action : undefined);\n  if (isDocsCloudAction(bodyAction)) return true;\n\n  if (typeof body.type === \"string\") return true;\n  if (isRecord(body.event) && typeof body.event.type === \"string\") return true;\n  if (isRecord(body.payload) && typeof body.payload.type === \"string\") return true;\n\n  return false;\n}\n\nfunction normalizeDocsApiSlug(\n  value: string | null | undefined,\n  docs: FarmDocsResolvedConfig,\n): string {\n  const entry = docs.entry.replace(/^\\/+|\\/+$/g, \"\");\n  let slug = (value || \"\").trim().replace(/^\\/+|\\/+$/g, \"\");\n\n  if (entry && slug === entry) return \"\";\n  if (entry && slug.startsWith(`${entry}/`)) {\n    slug = slug.slice(entry.length + 1);\n  }\n\n  let decoded = slug;\n  try {\n    decoded = decodeURIComponent(slug);\n  } catch {\n    // Malformed percent-encoding resolves to a non-matching slug (404),\n    // not an exception out of the handler.\n  }\n  return decoded.replace(/\\.(mdx?|markdown)$/i, \"\");\n}\n\nfunction getDocsAPIPathTarget(request: Request): DocsAPIPathTarget {\n  const pathname = new URL(request.url).pathname.replace(/\\/+$/, \"\") || \"/\";\n  const prefix = \"/api/docs\";\n\n  if (pathname !== prefix && !pathname.startsWith(`${prefix}/`)) return {};\n\n  const rawValue = pathname === prefix ? \"\" : pathname.slice(prefix.length + 1);\n  const value = rawValue.replace(/^\\/+|\\/+$/g, \"\");\n  const normalizedValue = normalizeAction(value);\n\n  if (!value) return {};\n  if (\n    normalizedValue === \"agent\" ||\n    normalizedValue === \"agent.json\" ||\n    normalizedValue === \"agent/spec\"\n  ) {\n    return { format: \"agent-spec\" };\n  }\n  if (\n    normalizedValue === \"agents\" ||\n    normalizedValue === \"agents.md\" ||\n    normalizedValue === \"agent.md\"\n  ) {\n    return { format: \"agents\" };\n  }\n  if (normalizedValue === \"skill\" || normalizedValue === \"skill.md\") return { format: \"skill\" };\n  if (normalizedValue === \"llms.txt\") return { format: \"llms\" };\n  if (normalizedValue === \"llms-full.txt\") return { format: \"llms-full\" };\n  if (normalizedValue === \"sitemap.md\") return { format: \"sitemap-md\" };\n  if (normalizedValue === \"sitemap.xml\") return { format: \"sitemap-xml\" };\n  if (normalizedValue === \"robots.txt\") return { format: \"robots\" };\n  if (/\\.(mdx?|markdown)$/i.test(value)) return { format: \"markdown\", slug: value };\n\n  return { slug: value };\n}\n\nfunction getDocsAPIFormat(request: Request): string | undefined {\n  const url = new URL(request.url);\n  return (\n    normalizeAction(url.searchParams.get(\"format\") || url.searchParams.get(\"type\")) ||\n    getDocsAPIPathTarget(request).format\n  );\n}\n\nfunction getDocsDescription(docs: FarmDocsResolvedConfig): string | undefined {\n  return docs.config.metadata?.description;\n}\n\nfunction getLoadedDocsPages(context: FarmDocsAPIContext): LoadedFarmDocsPage[] {\n  return discoverFarmDocsPages(context.contentDir, context.docs)\n    .map((page) => loadFarmDocsPage(context.contentDir, context.docs, page.slug))\n    .filter((page): page is LoadedFarmDocsPage => Boolean(page));\n}\n\nfunction toDocsSourcePage(page: LoadedFarmDocsPage): DocsSearchSourcePage {\n  return {\n    ...toFarmDocsMarkdownPage(page),\n    sourcePath: page.sourcePath,\n  };\n}\n\nfunction toDocsSitemapPage(page: LoadedFarmDocsPage): DocsSitemapPageInput {\n  return {\n    ...toFarmDocsMarkdownPage(page),\n    sourcePath: page.sourcePath,\n  };\n}\n\nfunction toDocsLlmsPage(page: LoadedFarmDocsPage): DocsLlmsTxtPageInput {\n  return toFarmDocsMarkdownPage(page);\n}\n\nfunction getDocsLlmsOptions(context: FarmDocsAPIContext, request: Request) {\n  const configured = isRecord(context.docs.config.llmsTxt) ? context.docs.config.llmsTxt : {};\n  return {\n    enabled: true,\n    baseUrl: new URL(request.url).origin,\n    siteTitle: getDocsTitle(context.docs),\n    siteDescription: getDocsDescription(context.docs),\n    ...configured,\n  };\n}\n\nfunction getDocsDiscoveryOptions(context: FarmDocsAPIContext, request: Request) {\n  const origin = new URL(request.url).origin;\n\n  return {\n    origin,\n    entry: context.docs.entry,\n    i18n: null,\n    search: context.docs.config.search ?? true,\n    mcp: {\n      enabled: false,\n      route: \"/api/docs/mcp\",\n      name: `${getDocsTitle(context.docs)} MCP`,\n      version: \"1\",\n      tools: {\n        listDocs: false,\n        listPages: false,\n        readPage: false,\n        searchDocs: false,\n        getNavigation: false,\n        getCodeExamples: false,\n        getConfigSchema: false,\n      },\n    },\n    feedback: undefined,\n    llms: getDocsLlmsOptions(context, request),\n    sitemap: context.docs.config.sitemap ?? true,\n    robots: context.docs.config.robots ?? true,\n    openapi: context.docs.config.apiReference,\n    markdown: {\n      acceptHeader: true,\n      signatureAgentHeader: true,\n    },\n  };\n}\n\nfunction buildSitemapManifest(context: FarmDocsAPIContext, request: Request) {\n  const origin = new URL(request.url).origin;\n  return buildDocsSitemapManifest({\n    pages: getLoadedDocsPages(context).map(toDocsSitemapPage),\n    entry: context.docs.entry,\n    siteTitle: getDocsTitle(context.docs),\n    baseUrl: origin,\n  });\n}\n\nfunction renderLlmsTxt(context: FarmDocsAPIContext, request: Request, full: boolean): string {\n  const generated = renderDocsLlmsTxt(\n    getLoadedDocsPages(context).map(toDocsLlmsPage),\n    getDocsLlmsOptions(context, request),\n  );\n\n  return full ? generated.llmsFullTxt : generated.llmsTxt;\n}\n\nfunction renderSkillDocument(context: FarmDocsAPIContext, request: Request): string {\n  const farmAliases = [\n    \"## Farm API Route Aliases\",\n    \"\",\n    \"- Search JSON: /api/docs?query=<term>\",\n    \"- Config JSON: /api/docs?format=config\",\n    \"- Markdown by query: /api/docs?format=markdown&path=<slug>\",\n    \"- Markdown by path: /api/docs/<slug>.md\",\n    \"- LLM summary: /api/docs?format=llms\",\n    \"- Full LLM document: /api/docs?format=llms-full\",\n    \"- Sitemap XML: /api/docs?format=sitemap-xml\",\n    \"- Agent spec JSON: /api/docs/agent/spec\",\n  ].join(\"\\n\");\n\n  return `${renderDocsSkillDocument(getDocsDiscoveryOptions(context, request)).trim()}\\n\\n${farmAliases}\\n`;\n}\n\nfunction renderAgentsDocument(context: FarmDocsAPIContext, request: Request): string {\n  return `${renderDocsAgentsDocument(getDocsDiscoveryOptions(context, request)).trim()}\\n`;\n}\n\nfunction buildAgentSpec(context: FarmDocsAPIContext, request: Request) {\n  const url = new URL(request.url);\n  const origin = url.origin;\n  const pages = discoverFarmDocsPages(context.contentDir, context.docs);\n  const spec = buildDocsAgentDiscoverySpec(getDocsDiscoveryOptions(context, request));\n  const title = getDocsTitle(context.docs);\n\n  return {\n    ...spec,\n    name: title,\n    site: {\n      ...spec.site,\n      title,\n      description: getDocsDescription(context.docs),\n      entry: context.docs.entry,\n    },\n    entry: context.docs.entry,\n    routes: {\n      docs: `${origin}${context.docs.entry}`,\n      config: `${origin}/api/docs?format=config`,\n      search: `${origin}/api/docs?query=<term>`,\n      markdown: `${origin}/api/docs/<slug>.md`,\n      markdownQuery: `${origin}/api/docs?format=markdown&path=<slug>`,\n      llms: `${origin}/api/docs?format=llms`,\n      llmsFull: `${origin}/api/docs?format=llms-full`,\n      sitemapXml: `${origin}/api/docs?format=sitemap-xml`,\n      sitemapMarkdown: `${origin}/api/docs?format=sitemap-md`,\n      robots: `${origin}/api/docs?format=robots`,\n      skill: `${origin}/api/docs?format=skill`,\n      agents: `${origin}/api/docs?format=agents`,\n      agentSpec: `${origin}/api/docs/agent/spec`,\n    },\n    capabilities: {\n      ...spec.capabilities,\n      search: spec.capabilities.search,\n      markdown: spec.capabilities.markdownRoutes,\n      llms: spec.capabilities.llms,\n      sitemap: spec.capabilities.sitemap,\n      robots: spec.capabilities.robots,\n      post: false,\n    },\n    pages,\n  };\n}\n\nfunction buildDiagnostics(context: FarmDocsAPIContext) {\n  const pages = discoverFarmDocsPages(context.contentDir, context.docs);\n  const diagnostics = buildFarmingDocsDiagnostics(context.docs.config, {\n    entry: context.docs.entry,\n    mcp: {\n      enabled: false,\n      route: \"/api/docs/mcp\",\n      name: `${getDocsTitle(context.docs)} MCP`,\n      version: \"1\",\n      tools: {\n        listDocs: false,\n        listPages: false,\n        readPage: false,\n        searchDocs: false,\n        getNavigation: false,\n        getCodeExamples: false,\n        getConfigSchema: false,\n      },\n    },\n  });\n\n  return {\n    ...diagnostics,\n    enabled: context.docs.enabled,\n    entry: context.docs.entry,\n    root: context.root,\n    srcDir: context.srcDir,\n    contentDir: context.contentDir,\n    configPath: context.docs.configPath || null,\n    pageCount: pages.length,\n    pages,\n  };\n}\n\nasync function searchDocs(context: FarmDocsAPIContext, request: Request, query: string) {\n  const loadedPages = getLoadedDocsPages(context);\n  const sourcePages = loadedPages.map(toDocsSourcePage);\n  const sourcePageByUrl = new Map(sourcePages.map((page) => [page.url, page]));\n  const resultLimit =\n    isRecord(context.docs.config.search) &&\n    typeof context.docs.config.search.maxResults === \"number\"\n      ? context.docs.config.search.maxResults\n      : undefined;\n\n  const results = await performDocsSearch({\n    pages: sourcePages,\n    query,\n    search: context.docs.config.search ?? true,\n    pathname: new URL(request.url).pathname,\n    siteTitle: getDocsTitle(context.docs),\n    limit: resultLimit,\n  });\n\n  return results.map((result) => {\n    const pageUrl = result.url.split(\"#\")[0];\n    const page = sourcePageByUrl.get(pageUrl);\n    return {\n      ...result,\n      title: page?.title || result.content,\n      href: page?.url || pageUrl,\n      description: result.description || page?.description,\n    };\n  });\n}\n\nasync function resolveAPIContext(options: FarmDocsAPIOptions): Promise<FarmDocsAPIContext> {\n  const runtimeConfig = globalThis.__FARM_DOCS_RUNTIME_CONFIG__;\n  const root = options.rootDir || options.root || runtimeConfig?.root || process.cwd();\n  const srcDir = options.srcDir || runtimeConfig?.srcDir || \"src\";\n  const canUseRuntimeDocs =\n    options.docs === undefined &&\n    options.config === undefined &&\n    options.configPath === undefined &&\n    options.entry === undefined &&\n    options.docsPath === undefined &&\n    options.contentDir === undefined &&\n    options.root === undefined &&\n    options.rootDir === undefined &&\n    options.srcDir === undefined;\n  const docsInput =\n    options.docs ??\n    (canUseRuntimeDocs ? runtimeConfig?.docs : undefined) ??\n    ({\n      enabled: true,\n      entry: options.entry,\n      docsPath: options.docsPath,\n      contentDir: options.contentDir,\n      config: options.config,\n      configPath: options.configPath,\n    } satisfies Exclude<FarmDocsUserConfig, boolean>);\n  const docs = isResolvedDocsConfig(docsInput)\n    ? docsInput\n    : await resolveDocsConfig(docsInput, { root, srcDir });\n\n  return {\n    root,\n    srcDir,\n    docs,\n    contentDir: resolveFarmDocsContentDir(docs, { root, srcDir }),\n  };\n}\n\nasync function handleDocsAPIGet(request: Request, context: FarmDocsAPIContext): Promise<Response> {\n  if (!context.docs.enabled) {\n    return json({ error: \"Docs are disabled\" }, { status: 404 });\n  }\n\n  const url = new URL(request.url);\n  const format = getDocsAPIFormat(request);\n  const pathTarget = getDocsAPIPathTarget(request);\n\n  if (format === \"config\" || format === \"docs-config\") {\n    return json({\n      entry: context.docs.entry,\n      contentDir: context.docs.contentDir || context.docs.config.contentDir || null,\n      config: context.docs.config,\n      map: buildDocsConfigMap(context.docs.config, {\n        file: context.docs.configPath || \"farm.config.ts\",\n      }),\n    });\n  }\n\n  if (format === \"skill\")\n    return text(renderSkillDocument(context, request), \"text/markdown; charset=utf-8\");\n  if (format === \"agents\")\n    return text(renderAgentsDocument(context, request), \"text/markdown; charset=utf-8\");\n  if (format === \"agent\" || format === \"agent-spec\") return json(buildAgentSpec(context, request));\n  if (format === \"diagnostics\") return json(buildDiagnostics(context));\n  if (format === \"llms\")\n    return text(renderLlmsTxt(context, request, false), \"text/plain; charset=utf-8\");\n  if (format === \"llms-full\")\n    return text(renderLlmsTxt(context, request, true), \"text/plain; charset=utf-8\");\n  if (format === \"sitemap-md\") {\n    return text(\n      renderDocsSitemapMarkdown(buildSitemapManifest(context, request), {\n        includeDescriptions: true,\n      }),\n      \"text/markdown; charset=utf-8\",\n    );\n  }\n  if (format === \"sitemap-xml\" || format === \"sitemap\") {\n    const origin = new URL(request.url).origin;\n    return text(\n      renderDocsSitemapXml(buildSitemapManifest(context, request), {\n        baseUrl: origin,\n        includeLastmod: true,\n      }),\n      \"application/xml; charset=utf-8\",\n    );\n  }\n  if (format === \"robots\") {\n    return text(\n      renderDocsRobotsTxt({\n        entry: context.docs.entry,\n        sitemap: context.docs.config.sitemap ?? true,\n        robots: context.docs.config.robots ?? true,\n        baseUrl: new URL(request.url).origin,\n      }),\n      \"text/plain; charset=utf-8\",\n    );\n  }\n\n  if (format === \"markdown\" || url.pathname.endsWith(\".md\")) {\n    const pathParam = url.searchParams.get(\"path\") || url.searchParams.get(\"slug\");\n    const slug = normalizeDocsApiSlug(pathParam ?? pathTarget.slug ?? \"\", context.docs);\n    const page = loadFarmDocsPage(context.contentDir, context.docs, slug);\n    if (!page) return text(\"Docs page not found\\n\", \"text/plain; charset=utf-8\", { status: 404 });\n    return text(\n      renderDocsMarkdownDocument(toFarmDocsMarkdownPage(page), {\n        origin: new URL(request.url).origin,\n        llms: getDocsLlmsOptions(context, request),\n        sitemap: context.docs.config.sitemap,\n      }),\n      \"text/markdown; charset=utf-8\",\n    );\n  }\n\n  const query = url.searchParams.get(\"query\") || url.searchParams.get(\"q\") || \"\";\n  if (!query.trim()) return json([]);\n  return json(await searchDocs(context, request, query));\n}\n\nexport function createDocsAPI(\n  options: FarmDocsAPIOptions = {},\n  cloudIntegration?: FarmDocsCloudIntegration,\n): FarmDocsAPIRouteHandlers {\n  let contextPromise: Promise<FarmDocsAPIContext> | undefined;\n  const getContext = () => {\n    contextPromise ??= resolveAPIContext(options);\n    return contextPromise;\n  };\n  const integration = resolveDocsCloudIntegration(cloudIntegration);\n\n  return {\n    async GET(request: Request) {\n      if (integration && isDocsCloudGetRequest(request)) {\n        return integration.docsCloud.handleRequest(request, integration.routeOptions);\n      }\n\n      return handleDocsAPIGet(request, await getContext());\n    },\n    async POST(request: Request) {\n      if (integration && (await isDocsCloudPostRequest(request))) {\n        return integration.docsCloud.handleRequest(request, integration.routeOptions);\n      }\n\n      return json(\n        {\n          error: \"AI is not enabled for this Farm docs API route yet.\",\n        },\n        { status: 501 },\n      );\n    },\n  };\n}\n\nexport function createFarmDocsAPIHandler(\n  options: FarmDocsAPIOptions = {},\n  cloudIntegration?: FarmDocsCloudIntegration,\n): FarmDocsAPIHandler {\n  const handlers = createDocsAPI(options, cloudIntegration);\n\n  return async function handleFarmDocsAPIRequest(request: Request): Promise<Response | null> {\n    if (!isFarmDocsAPIRequest(request)) return null;\n\n    const method = request.method.toUpperCase();\n    if (method === \"GET\" || method === \"HEAD\") {\n      const response = await handlers.GET(request);\n      return method === \"HEAD\" ? omitHeadBody(response) : response;\n    }\n    if (method === \"POST\") {\n      return handlers.POST(request);\n    }\n\n    return json(\n      {\n        error: \"Method Not Allowed\",\n      },\n      {\n        status: 405,\n        headers: {\n          Allow: \"GET, HEAD, POST\",\n        },\n      },\n    );\n  };\n}\n"],"mappings":"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","names":["existsSync","readdirSync","readFileSync","realpathSync","statSync","path","DOCS_FILE_EXTENSIONS","normalizeEntry","path","existsSync","statSync","realpathSync","readFileSync","readdirSync","text","body","renderedSections","buildDocsAgentDiscoverySpec","buildDocsSitemapManifest","renderDocsAgentsDocument","renderDocsLlmsTxt","renderDocsMarkdownDocument","renderDocsRobotsTxt","renderDocsSitemapMarkdown","renderDocsSitemapXml","renderDocsSkillDocument","getDocsTitle","getDocsDescription","getLoadedDocsPages","toDocsSitemapPage","toDocsLlmsPage","getDocsLlmsOptions","getDocsDiscoveryOptions","buildDocsSitemapManifest","renderDocsLlmsTxt","renderDocsSkillDocument","renderDocsAgentsDocument","buildDocsAgentDiscoverySpec","renderDocsSitemapMarkdown","renderDocsSitemapXml","renderDocsRobotsTxt","renderDocsMarkdownDocument"]}